Completed
Push — master ( ed020e...bb6700 )
by Yannick
09:11
created

Spotter::searchSpotterData()   F

Complexity

Conditions 59
Paths > 20000

Size

Total Lines 343
Code Lines 218

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 59
eloc 218
nc 645409407
nop 25
dl 0
loc 343
rs 2
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, $globalDBdriver;
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 (isset($filter[0]['source'])) {
73
			$filters = array_merge($filters,$filter);
74
		}
75
		if (is_array($globalFilter)) $filter = array_merge($filter,$globalFilter);
76
		$filter_query_join = '';
77
		$filter_query_where = '';
78
		foreach($filters as $flt) {
79
			if (isset($flt['airlines']) && !empty($flt['airlines'])) {
80
				if ($flt['airlines'][0] != '') {
81
					if (isset($flt['source'])) {
82
						$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'])."')) saf ON saf.flightaware_id = spotter_output.flightaware_id";
83
					} else {
84
						$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_icao IN ('".implode("','",$flt['airlines'])."')) saf ON saf.flightaware_id = spotter_output.flightaware_id";
85
					}
86
				}
87
			}
88
			if (isset($flt['pilots_id']) && !empty($flt['pilots_id'])) {
89
				if (isset($flt['source'])) {
90
					$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'])."')) spf ON spf.flightaware_id = spotter_output.flightaware_id";
91
				} else {
92
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.pilot_id IN ('".implode("','",$flt['pilots_id'])."')) spf ON spf.flightaware_id = spotter_output.flightaware_id";
93
				}
94
			}
95
			if (isset($flt['idents']) && !empty($flt['idents'])) {
96
				if (isset($flt['source'])) {
97
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.ident IN ('".implode("','",$flt['idents'])."') AND spotter_output.format_source IN ('".implode("','",$flt['source'])."')) spfi ON spfi.flightaware_id = spotter_output.flightaware_id";
98
				} else {
99
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.ident IN ('".implode("','",$flt['idents'])."')) spfi ON spfi.flightaware_id = spotter_output.flightaware_id";
100
				}
101
			}
102
			if (isset($flt['registrations']) && !empty($flt['registrations'])) {
103
				if (isset($flt['source'])) {
104
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.registration IN ('".implode("','",$flt['registrations'])."') AND spotter_output.format_source IN ('".implode("','",$flt['source'])."')) sre ON sre.flightaware_id = spotter_output.flightaware_id";
105
				} else {
106
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.registration IN ('".implode("','",$flt['registrations'])."')) sre ON sre.flightaware_id = spotter_output.flightaware_id";
107
				}
108
			}
109
			if ((isset($flt['airlines']) && empty($flt['airlines']) && isset($flt['pilots_id']) && empty($flt['pilots_id']) && isset($flt['idents']) && empty($flt['idents']) && isset($flt['registrations']) && empty($flt['registrations'])) || (!isset($flt['airlines']) && !isset($flt['pilots_id']) && !isset($flt['idents']) && !isset($flt['registrations']))) {
110
				if (isset($flt['source'])) {
111
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.format_source IN ('".implode("','",$flt['source'])."')) sf ON sf.flightaware_id = spotter_output.flightaware_id";
112
				}
113
			}
114
		}
115
		if (isset($filter['airlines']) && !empty($filter['airlines'])) {
116
			if ($filter['airlines'][0] != '') {
117
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_icao IN ('".implode("','",$filter['airlines'])."')) sof ON sof.flightaware_id = spotter_output.flightaware_id";
118
			}
119
		}
120
		if (isset($filter['airlinestype']) && !empty($filter['airlinestype'])) {
121
			$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 ";
122
		}
123
		if (isset($filter['alliance']) && !empty($filter['alliance'])) {
124
			$filter_query_join .= " INNER JOIN (SELECT icao FROM airlines WHERE alliance = '".$filter['alliance']."') sal ON sal.icao = spotter_output.airline_icao ";
125
		}
126
		if (isset($filter['pilots_id']) && !empty($filter['pilots_id'])) {
127
				$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.pilot_id IN ('".implode("','",$filter['pilots_id'])."')) spid ON spid.flightaware_id = spotter_output.flightaware_id";
128
			}
129
		if (isset($filter['source']) && !empty($filter['source'])) {
130
			$filter_query_where .= " AND format_source IN ('".implode("','",$filter['source'])."')";
131
		}
132
		if (isset($filter['ident']) && !empty($filter['ident'])) {
133
			$filter_query_where .= " AND ident = '".$filter['ident']."'";
134
		}
135
		if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
136
			$filter_query_where .= " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
137
		}
138
		if (isset($filter['year']) && $filter['year'] != '') {
139
			if ($globalDBdriver == 'mysql') {
140
				$filter_query_where .= " AND YEAR(spotter_output.date) = '".$filter['year']."'";
141
			} else {
142
				$filter_query_where .= " AND EXTRACT(YEAR FROM spotter_output.date) = '".$filter['year']."'";
143
			}
144
		}
145
		if (isset($filter['month']) && $filter['month'] != '') {
146
			if ($globalDBdriver == 'mysql') {
147
				$filter_query_where .= " AND MONTH(spotter_output.date) = '".$filter['month']."'";
148
			} else {
149
				$filter_query_where .= " AND EXTRACT(MONTH FROM spotter_output.date) = '".$filter['month']."'";
150
			}
151
		}
152
		if (isset($filter['day']) && $filter['day'] != '') {
153
			if ($globalDBdriver == 'mysql') {
154
				$filter_query_where .= " AND DAY(spotter_output.date) = '".$filter['day']."'";
155
			} else {
156
				$filter_query_where .= " AND EXTRACT(DAY FROM spotter_output.date) = '".$filter['day']."'";
157
			}
158
		}
159
		if ($filter_query_where == '' && $where) $filter_query_where = ' WHERE';
160
		elseif ($filter_query_where != '' && $and) $filter_query_where .= ' AND';
161
		if ($filter_query_where != '') {
162
			$filter_query_where = preg_replace('/^ AND/',' WHERE',$filter_query_where);
163
		}
164
		$filter_query = $filter_query_join.$filter_query_where;
165
		return $filter_query;
166
	}
167
168
	/**
169
	* Executes the SQL statements to get the spotter information
170
	*
171
	* @param String $query the SQL query
172
	* @param Array $params parameter of the query
173
	* @param String $limitQuery the limit query
174
	* @return Array the spotter information
175
	*
176
	*/
177
	public function getDataFromDB($query, $params = array(), $limitQuery = '',$schedules = false)
178
	{
179
		global $globalSquawkCountry, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalAirlinesSource, $globalVAM;
180
		$Image = new Image($this->db);
181
		$Schedule = new Schedule($this->db);
182
		$ACARS = new ACARS($this->db);
183
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
184
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
185
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
186
		if (!isset($globalVAM)) $globalVAM = FALSE;
187
		date_default_timezone_set('UTC');
188
		
189
		if (!is_string($query))
190
		{
191
			return false;
192
		}
193
		
194
		if ($limitQuery != "")
195
		{
196
			if (!is_string($limitQuery))
197
			{
198
				return false;
199
			}
200
		}
201
202
		
203
		try {
204
			$sth = $this->db->prepare($query.$limitQuery);
205
			$sth->execute($params);
206
		} catch (PDOException $e) {
207
			printf("Invalid query : %s\nWhole query: %s\n",$e->getMessage(), $query.$limitQuery);
208
			exit();
209
		}
210
		
211
	//	$num_rows = count($sth->fetchAll());
212
		$num_rows = 0;
213
214
		$spotter_array = array();
215
		
216
217
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
218
		{
219
			$num_rows++;
220
			$temp_array = array();
221
			if (isset($row['spotter_live_id'])) {
222
				//$temp_array['spotter_id'] = $row['spotter_live_id'];
223
				$temp_array['spotter_id'] = $this->getSpotterIDBasedOnFlightAwareID($row['flightaware_id']);
224
			} elseif (isset($row['spotter_archive_id'])) {
225
				$temp_array['spotter_id'] = $row['spotter_archive_id'];
226
			} elseif (isset($row['spotter_archive_output_id'])) {
227
				$temp_array['spotter_id'] = $row['spotter_archive_output_id'];
228
			} elseif (isset($row['spotter_id'])) {
229
				$temp_array['spotter_id'] = $row['spotter_id'];
230
			} else {
231
				$temp_array['spotter_id'] = '';
232
			}
233
			if (isset($row['flightaware_id'])) $temp_array['flightaware_id'] = $row['flightaware_id'];
234
			if (isset($row['modes'])) $temp_array['modes'] = $row['modes'];
235
			$temp_array['ident'] = $row['ident'];
236
			if (isset($row['registration']) && $row['registration'] != '') {
237
				$temp_array['registration'] = $row['registration'];
238
			} elseif (isset($temp_array['modes'])) {
239
				$temp_array['registration'] = $this->getAircraftRegistrationBymodeS($temp_array['modes']);
240
			} else $temp_array['registration'] = '';
241
			if (isset($row['aircraft_icao'])) $temp_array['aircraft_type'] = $row['aircraft_icao'];
242
			
243
			$temp_array['departure_airport'] = $row['departure_airport_icao'];
244
			$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
245
			if (isset($row['real_arrival_airport_icao']) && $row['real_arrival_airport_icao'] != NULL) $temp_array['real_arrival_airport'] = $row['real_arrival_airport_icao'];
246
			if (isset($row['latitude'])) $temp_array['latitude'] = $row['latitude'];
247
			if (isset($row['longitude'])) $temp_array['longitude'] = $row['longitude'];
248
			/*
249
			if (Connection->tableExists('countries')) {
250
				$country_info = $this->getCountryFromLatitudeLongitude($temp_array['latitude'],$temp_array['longitude']);
251
				if (is_array($country_info) && isset($country_info['name']) && isset($country_info['iso2'])) {
252
				    $temp_array['country'] = $country_info['name'];
253
				    $temp_array['country_iso2'] = $country_info['iso2'];
254
				}
255
			}
256
			*/
257
			if (isset($row['waypoints'])) $temp_array['waypoints'] = $row['waypoints'];
258
			if (isset($row['format_source'])) $temp_array['format_source'] = $row['format_source'];
259
			if (isset($row['route_stop']) && $row['route_stop'] != '') {
260
				$temp_array['route_stop'] = $row['route_stop'];
261
				$allroute = explode(' ',$row['route_stop']);
262
				foreach ($allroute as $route) {
263
					$route_airport_array = $this->getAllAirportInfo($route);
264
					if (isset($route_airport_array[0]['name'])) {
265
						$route_stop_details = array();
266
						$route_stop_details['airport_name'] = $route_airport_array[0]['name'];
267
						$route_stop_details['airport_city'] = $route_airport_array[0]['city'];
268
						$route_stop_details['airport_country'] = $route_airport_array[0]['country'];
269
						$route_stop_details['airport_icao'] = $route_airport_array[0]['icao'];
270
						$temp_array['route_stop_details'][] = $route_stop_details;
271
					}
272
				}
273
			}
274
			if (isset($row['altitude'])) $temp_array['altitude'] = $row['altitude'];
275
			if (isset($row['heading'])) {
276
				$temp_array['heading'] = $row['heading'];
277
				$heading_direction = $this->parseDirection($row['heading']);
278
				if (isset($heading_direction[0]['direction_fullname'])) $temp_array['heading_name'] = $heading_direction[0]['direction_fullname'];
279
			}
280
			if (isset($row['ground_speed'])) $temp_array['ground_speed'] = $row['ground_speed'];
281
			$temp_array['image'] = "";
282
			$temp_array['image_thumbnail'] = "";
283
			$temp_array['image_source'] = "";
284
			$temp_array['image_copyright'] = "";
285
 
286
			if (isset($row['highlight'])) {
287
				$temp_array['highlight'] = $row['highlight'];
288
			} else $temp_array['highlight'] = '';
289
			
290
			if (isset($row['date'])) {
291
				$dateArray = $this->parseDateString($row['date']);
292
				if ($dateArray['seconds'] < 10)
293
				{
294
					$temp_array['date'] = "a few seconds ago";
295
				} elseif ($dateArray['seconds'] >= 5 && $dateArray['seconds'] < 30)
296
				{
297
					$temp_array['date'] = "half a minute ago";
298
				} elseif ($dateArray['seconds'] >= 30 && $dateArray['seconds'] < 60)
299
				{
300
					$temp_array['date'] = "about a minute ago";
301
				} elseif ($dateArray['minutes'] < 5)
302
				{
303
					$temp_array['date'] = "a few minutes ago";
304
				} elseif ($dateArray['minutes'] >= 5 && $dateArray['minutes'] < 60)
305
				{
306
					$temp_array['date'] = "about ".$dateArray['minutes']." minutes ago";
307
				} elseif ($dateArray['hours'] < 2)
308
				{
309
					$temp_array['date'] = "about an hour ago";
310
				} elseif ($dateArray['hours'] >= 2 && $dateArray['hours'] < 24)
311
				{
312
					$temp_array['date'] = "about ".$dateArray['hours']." hours ago";
313
				} else {
314
					$temp_array['date'] = date("M j Y, g:i a",strtotime($row['date']." UTC"));
315
				}
316
				$temp_array['date_minutes_past'] = $dateArray['minutes'];
317
				$temp_array['date_iso_8601'] = date("c",strtotime($row['date']." UTC"));
318
				$temp_array['date_rfc_2822'] = date("r",strtotime($row['date']." UTC"));
319
				$temp_array['date_unix'] = strtotime($row['date']." UTC");
320
				if (isset($row['last_seen']) && $row['last_seen'] != '') {
321
					if (strtotime($row['last_seen']) > strtotime($row['date'])) {
322
						$temp_array['duration'] = strtotime($row['last_seen']) - strtotime($row['date']);
323
						$temp_array['last_seen_date_iso_8601'] = date("c",strtotime($row['last_seen']." UTC"));
324
						$temp_array['last_seen_date_rfc_2822'] = date("r",strtotime($row['last_seen']." UTC"));
325
						$temp_array['last_seen_date_unix'] = strtotime($row['last_seen']." UTC");
326
					}
327
				}
328
			}
329
			
330
			if (isset($row['aircraft_name']) && $row['aircraft_name'] != '' && isset($row['aircraft_shadow']) && $row['aircraft_shadow'] != '') {
331
				$temp_array['aircraft_name'] = $row['aircraft_name'];
332
				$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
333
				if (isset($row['aircraft_shadow'])) {
334
					$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
335
				}
336
			} elseif (isset($row['aircraft_icao'])) {
337
				$aircraft_array = $this->getAllAircraftInfo($row['aircraft_icao']);
338
				if (count($aircraft_array) > 0) {
339
					$temp_array['aircraft_name'] = $aircraft_array[0]['type'];
340
					$temp_array['aircraft_manufacturer'] = $aircraft_array[0]['manufacturer'];
341
				
342
					if ($aircraft_array[0]['aircraft_shadow'] != NULL) {
343
						$temp_array['aircraft_shadow'] = $aircraft_array[0]['aircraft_shadow'];
344
					} else $temp_array['aircraft_shadow'] = 'default.png';
345
                                } else {
346
                            		$temp_array['aircraft_shadow'] = 'default.png';
347
					$temp_array['aircraft_name'] = 'N/A';
348
					$temp_array['aircraft_manufacturer'] = 'N/A';
349
                            	}
350
			}
351
			$fromsource = NULL;
352
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
353
			elseif (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
354
			elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
355
			elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
356
			elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
357
			if (!isset($row['airline_name']) || $row['airline_name'] == '') {
358
				if (!is_numeric(substr($row['ident'], 0, 3))) {
359
					if (is_numeric(substr($row['ident'], 2, 1))) {
360
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 2),$fromsource);
361
					} elseif (is_numeric(substr($row['ident'], 3, 1))) {
362
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
363
					} else {
364
						$airline_array = $this->getAllAirlineInfo('NA');
365
					}
366
				} else {
367
					$airline_array = $this->getAllAirlineInfo('NA');
368
				}
369
				if (count($airline_array) > 0) {
370
					$temp_array['airline_icao'] = $airline_array[0]['icao'];
371
					$temp_array['airline_iata'] = $airline_array[0]['iata'];
372
					$temp_array['airline_name'] = $airline_array[0]['name'];
373
					$temp_array['airline_country'] = $airline_array[0]['country'];
374
					$temp_array['airline_callsign'] = $airline_array[0]['callsign'];
375
					$temp_array['airline_type'] = $airline_array[0]['type'];
376
				}
377
			} else {
378
				$temp_array['airline_icao'] = $row['airline_icao'];
379
				if (isset($row['airline_iata'])) $temp_array['airline_iata'] = $row['airline_iata'];
380
				else $temp_array['airline_iata'] = 'N/A';
381
				$temp_array['airline_name'] = $row['airline_name'];
382
				$temp_array['airline_country'] = $row['airline_country'];
383
				if (isset($row['airline_callsign'])) $temp_array['airline_callsign'] = $row['airline_callsign'];
384
				else $temp_array['airline_callsign'] = 'N/A';
385
				$temp_array['airline_type'] = $row['airline_type'];
386
				if ($temp_array['airline_icao'] != '' && $temp_array['airline_iata'] == 'N/A') {
387
					$airline_array = $this->getAllAirlineInfo($temp_array['airline_icao']);
388
					if (count($airline_array) > 0) {
389
						$temp_array['airline_icao'] = $airline_array[0]['icao'];
390
						$temp_array['airline_iata'] = $airline_array[0]['iata'];
391
						$temp_array['airline_name'] = $airline_array[0]['name'];
392
						$temp_array['airline_country'] = $airline_array[0]['country'];
393
						$temp_array['airline_callsign'] = $airline_array[0]['callsign'];
394
						$temp_array['airline_type'] = $airline_array[0]['type'];
395
					}
396
				}
397
			}
398
			if (isset($temp_array['airline_iata']) && $temp_array['airline_iata'] != '') {
399
				$acars_array = $ACARS->getLiveAcarsData($temp_array['airline_iata'].substr($temp_array['ident'],3));
400
				//$acars_array = ACARS->getLiveAcarsData('BA40YL');
401
				if (count($acars_array) > 0) {
402
					$temp_array['acars'] = $acars_array;
403
					//print_r($acars_array);
404
				}
405
			}
406
			if (isset($row['owner_name']) && $row['owner_name'] != '' && $row['owner_name'] != NULL) {
407
				$temp_array['aircraft_owner'] = $row['owner_name'];
408
			}
409
			if ($temp_array['registration'] != "" && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM && !isset($temp_array['aircraft_owner'])) {
410
				$owner_info = $this->getAircraftOwnerByRegistration($temp_array['registration']);
411
				if ($owner_info['owner'] != '') $temp_array['aircraft_owner'] = ucwords(strtolower($owner_info['owner']));
412
				$temp_array['aircraft_base'] = $owner_info['base'];
413
				$temp_array['aircraft_date_first_reg'] = $owner_info['date_first_reg'];
414
			}
415
416
			if($temp_array['registration'] != "" || (($globalIVAO || $globalVATSIM || $globalphpVMS || $globalVAM) && isset($temp_array['aircraft_type']) && $temp_array['aircraft_type'] != ''))
417
			{
418
				if ($globalIVAO) {
419
					if (isset($temp_array['airline_icao']))	$image_array = $Image->getSpotterImage('',$temp_array['aircraft_type'],$temp_array['airline_icao']);
420
					else $image_array = $Image->getSpotterImage('',$temp_array['aircraft_type']);
421
				} elseif (isset($temp_array['aircraft_type'])) $image_array = $Image->getSpotterImage($temp_array['registration'],$temp_array['aircraft_type']);
422
				else $image_array = $Image->getSpotterImage($temp_array['registration']);
423
				if (count($image_array) > 0) {
424
					$temp_array['image'] = $image_array[0]['image'];
425
					$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
426
					$temp_array['image_source'] = $image_array[0]['image_source'];
427
					$temp_array['image_source_website'] = $image_array[0]['image_source_website'];
428
					if ($temp_array['image_source_website'] == '' && $temp_array['image_source'] == 'planespotters') {
429
						$planespotter_url_array = explode("_", $temp_array['image']);
430
						$planespotter_id = str_replace(".jpg", "", $planespotter_url_array[1]);
431
						$temp_array['image_source_website'] = 'http://www.planespotters.net/Aviation_Photos/photo.show?id='.$planespotter_id;
432
					 }
433
					$temp_array['image_copyright'] = $image_array[0]['image_copyright'];
434
				}
435
			}
436
437
438
			if (isset($row['departure_airport_time']) && $row['departure_airport_time'] != '') {
439
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
440
			}
441
			if (isset($row['arrival_airport_time']) && $row['arrival_airport_time'] != '') {
442
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
443
			}
444
			
445
			if ((!isset($globalIVAO) || ! $globalIVAO) && (!isset($globalVATSIM) || !$globalVATSIM) && (!isset($globalphpVMS) || !$globalphpVMS) && (!isset($globalVAM) || !$globalVAM)) {
446
				if ($schedules === true) {
447
					$schedule_array = $Schedule->getSchedule($temp_array['ident']);
448
					//print_r($schedule_array);
449
					if (count($schedule_array) > 0) {
450
						if ($schedule_array['departure_airport_icao'] != '') {
451
							$row['departure_airport_icao'] = $schedule_array['departure_airport_icao'];
452
							$temp_array['departure_airport'] = $row['departure_airport_icao'];
453
						}
454
						if ($schedule_array['arrival_airport_icao'] != '') {
455
							$row['arrival_airport_icao'] = $schedule_array['arrival_airport_icao'];
456
							$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
457
						}
458
						$temp_array['departure_airport_time'] = $schedule_array['departure_airport_time'];
459
						$temp_array['arrival_airport_time'] = $schedule_array['arrival_airport_time'];
460
					}
461
				}
462
			} else {
463
				if (isset($row['real_departure_airport_time']) && $row['real_departure_airport_time'] != '') {
464
					$temp_array['departure_airport_time'] = $row['real_departure_airport_time'];
465
				}
466
				if (isset($row['real_arrival_airport_time']) && $row['real_arrival_airport_time'] != '') {
467
					$temp_array['real_arrival_airport_time'] = $row['real_arrival_airport_time'];
468
				}
469
			}
470
			
471
			//if ($row['departure_airport_icao'] != '' && $row['departure_airport_name'] == '') {
472
			if ($row['departure_airport_icao'] != '') {
473
				$departure_airport_array = $this->getAllAirportInfo($row['departure_airport_icao']);
474
				if (!isset($departure_airport_array[0]['name'])) $departure_airport_array = $this->getAllAirportInfo('NA');
475
			/*
476
			} elseif ($row['departure_airport_name'] != '') {
477
				$temp_array['departure_airport_name'] = $row['departure_airport_name'];
478
				$temp_array['departure_airport_city'] = $row['departure_airport_city'];
479
				$temp_array['departure_airport_country'] = $row['departure_airport_country'];
480
				$temp_array['departure_airport_icao'] = $row['departure_airport_icao'];
481
			*/
482
			} else $departure_airport_array = $this->getAllAirportInfo('NA');
483
			if (isset($departure_airport_array[0]['name'])) {
484
				$temp_array['departure_airport_name'] = $departure_airport_array[0]['name'];
485
				$temp_array['departure_airport_city'] = $departure_airport_array[0]['city'];
486
				$temp_array['departure_airport_country'] = $departure_airport_array[0]['country'];
487
				$temp_array['departure_airport_iata'] = $departure_airport_array[0]['iata'];
488
				$temp_array['departure_airport_icao'] = $departure_airport_array[0]['icao'];
489
				$temp_array['departure_airport_latitude'] = $departure_airport_array[0]['latitude'];
490
				$temp_array['departure_airport_longitude'] = $departure_airport_array[0]['longitude'];
491
				$temp_array['departure_airport_altitude'] = $departure_airport_array[0]['altitude'];
492
			}
493
494
			/*
495
			if (isset($row['departure_airport_time'])) {
496
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
497
			}
498
			*/
499
			
500
			if ($row['arrival_airport_icao'] != '') {
501
				$arrival_airport_array = $this->getAllAirportInfo($row['arrival_airport_icao']);
502
				if (count($arrival_airport_array) == 0) $arrival_airport_array = $this->getAllAirportInfo('NA');
503
			} else $arrival_airport_array = $this->getAllAirportInfo('NA');
504
			if (isset($arrival_airport_array[0]['name'])) {
505
				$temp_array['arrival_airport_name'] = $arrival_airport_array[0]['name'];
506
				$temp_array['arrival_airport_city'] = $arrival_airport_array[0]['city'];
507
				$temp_array['arrival_airport_country'] = $arrival_airport_array[0]['country'];
508
				$temp_array['arrival_airport_iata'] = $arrival_airport_array[0]['iata'];
509
				$temp_array['arrival_airport_icao'] = $arrival_airport_array[0]['icao'];
510
				$temp_array['arrival_airport_latitude'] = $arrival_airport_array[0]['latitude'];
511
				$temp_array['arrival_airport_longitude'] = $arrival_airport_array[0]['longitude'];
512
				$temp_array['arrival_airport_altitude'] = $arrival_airport_array[0]['altitude'];
513
			}
514
			/*
515
			if (isset($row['arrival_airport_time'])) {
516
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
517
			}
518
			*/
519
			if (isset($row['pilot_id']) && $row['pilot_id'] != '') $temp_array['pilot_id'] = $row['pilot_id'];
520
			if (isset($row['pilot_name']) && $row['pilot_name'] != '') $temp_array['pilot_name'] = $row['pilot_name'];
521
			if (isset($row['source_name']) && $row['source_name'] != '') $temp_array['source_name'] = $row['source_name'];
522
			if (isset($row['over_country']) && $row['over_country'] != '') $temp_array['over_country'] = $row['over_country'];
523
			if (isset($row['distance']) && $row['distance'] != '') $temp_array['distance'] = $row['distance'];
524
			if (isset($row['squawk'])) {
525
				$temp_array['squawk'] = $row['squawk'];
526
				if ($row['squawk'] != '' && isset($temp_array['country_iso2'])) {
527
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['country_iso2']);
528
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
529
				} elseif ($row['squawk'] != '' && isset($temp_array['over_country'])) {
530
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['over_country']);
531
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
532
				} elseif ($row['squawk'] != '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
533
			}
534
    			
535
			$temp_array['query_number_rows'] = $num_rows;
536
			
537
			$spotter_array[] = $temp_array;
538
		}
539
		if ($num_rows == 0) return array();
540
		$spotter_array[0]['query_number_rows'] = $num_rows;
541
		return $spotter_array;
542
	}	
543
	
544
	
545
	/**
546
	* Gets all the spotter information
547
	*
548
	* @return Array the spotter information
549
	*
550
	*/
551
	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())
552
	{
553
		global $globalTimezone, $globalDBdriver;
554
		require_once(dirname(__FILE__).'/class.Translation.php');
555
		$Translation = new Translation();
556
557
		date_default_timezone_set('UTC');
558
559
		$query_values = array();
560
		$additional_query = '';
561
		$filter_query = $this->getFilter($filters,true,true);
562
		if ($q != "")
563
		{
564
			if (!is_string($q))
565
			{
566
				return false;
567
			} else {
568
				$q_array = explode(" ", $q);
569
				foreach ($q_array as $q_item){
570
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
571
					$additional_query .= " AND (";
572
					if (is_int($q_item)) $additional_query .= "(spotter_output.spotter_id like '%".$q_item."%') OR ";
573
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
574
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
575
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
576
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
577
					$additional_query .= "(spotter_output.airline_name like '%".$q_item."%') OR ";
578
					$additional_query .= "(spotter_output.airline_country like '%".$q_item."%') OR ";
579
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
580
					$additional_query .= "(spotter_output.departure_airport_name like '%".$q_item."%') OR ";
581
					$additional_query .= "(spotter_output.departure_airport_city like '%".$q_item."%') OR ";
582
					$additional_query .= "(spotter_output.departure_airport_country like '%".$q_item."%') OR ";
583
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
584
					$additional_query .= "(spotter_output.arrival_airport_name like '%".$q_item."%') OR ";
585
					$additional_query .= "(spotter_output.arrival_airport_city like '%".$q_item."%') OR ";
586
					$additional_query .= "(spotter_output.arrival_airport_country like '%".$q_item."%') OR ";
587
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
588
					$additional_query .= "(spotter_output.owner_name like '%".$q_item."%') OR ";
589
					$additional_query .= "(spotter_output.pilot_id like '%".$q_item."%') OR ";
590
					$additional_query .= "(spotter_output.pilot_name like '%".$q_item."%') OR ";
591
					$additional_query .= "(spotter_output.ident like '%".$q_item."%') OR ";
592
					$translate = $Translation->ident2icao($q_item);
593
					if ($translate != $q_item) $additional_query .= "(spotter_output.ident like '%".$translate."%') OR ";
594
					$additional_query .= "(spotter_output.highlight like '%".$q_item."%')";
595
					$additional_query .= ")";
596
				}
597
			}
598
		}
599
600
		if ($registration != "")
601
		{
602
			$registration = filter_var($registration,FILTER_SANITIZE_STRING);
603
			if (!is_string($registration))
604
			{
605
				return false;
606
			} else {
607
				$additional_query .= " AND spotter_output.registration = :registration";
608
				$query_values = array_merge($query_values,array(':registration' => $registration));
609
			}
610
		}
611
612
		if ($aircraft_icao != "")
613
		{
614
			$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
615
			if (!is_string($aircraft_icao))
616
			{
617
				return false;
618
			} else {
619
				$additional_query .= " AND spotter_output.aircraft_icao = :aircraft_icao";
620
				$query_values = array_merge($query_values,array(':aircraft_icao' => $aircraft_icao));
621
			}
622
		}
623
624
		if ($aircraft_manufacturer != "")
625
		{
626
			$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
627
			if (!is_string($aircraft_manufacturer))
628
			{
629
				return false;
630
			} else {
631
				$additional_query .= " AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer";
632
				$query_values = array_merge($query_values,array(':aircraft_manufacturer' => $aircraft_manufacturer));
633
			}
634
		}
635
636
		if ($highlights == "true")
637
		{
638
			if (!is_string($highlights))
639
			{
640
				return false;
641
			} else {
642
				$additional_query .= " AND (spotter_output.highlight <> '')";
643
			}
644
		}
645
646
		if ($airline_icao != "")
647
		{
648
			$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
649
			if (!is_string($airline_icao))
650
			{
651
				return false;
652
			} else {
653
				$additional_query .= " AND spotter_output.airline_icao = :airline_icao";
654
				$query_values = array_merge($query_values,array(':airline_icao' => $airline_icao));
655
			}
656
		}
657
658
		if ($airline_country != "")
659
		{
660
			$airline_country = filter_var($airline_country,FILTER_SANITIZE_STRING);
661
			if (!is_string($airline_country))
662
			{
663
				return false;
664
			} else {
665
				$additional_query .= " AND spotter_output.airline_country = :airline_country";
666
				$query_values = array_merge($query_values,array(':airline_country' => $airline_country));
667
			}
668
		}
669
670
		if ($airline_type != "")
671
		{
672
			if (!is_string($airline_type))
673
			{
674
				return false;
675
			} else {
676
				if ($airline_type == "passenger")
677
				{
678
					$additional_query .= " AND (spotter_output.airline_type = 'passenger')";
679
				}
680
				if ($airline_type == "cargo")
681
				{
682
					$additional_query .= " AND (spotter_output.airline_type = 'cargo')";
683
				}
684
				if ($airline_type == "military")
685
				{
686
					$additional_query .= " AND (spotter_output.airline_type = 'military')";
687
				}
688
			}
689
		}
690
691
		if ($airport != "")
692
		{
693
			$airport = filter_var($airport,FILTER_SANITIZE_STRING);
694
			if (!is_string($airport))
695
			{
696
				return false;
697
			} else {
698
				$additional_query .= " AND (spotter_output.departure_airport_icao = :airport OR spotter_output.arrival_airport_icao = :airport)";
699
				$query_values = array_merge($query_values,array(':airport' => $airport));
700
			}
701
		}
702
703
		if ($airport_country != "")
704
		{
705
			$airport_country = filter_var($airport_country,FILTER_SANITIZE_STRING);
706
			if (!is_string($airport_country))
707
			{
708
				return false;
709
			} else {
710
				$additional_query .= " AND (spotter_output.departure_airport_country = :airport_country OR spotter_output.arrival_airport_country = :airport_country)";
711
				$query_values = array_merge($query_values,array(':airport_country' => $airport_country));
712
			}
713
		}
714
    
715
		if ($callsign != "")
716
		{
717
			$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
718
			if (!is_string($callsign))
719
			{
720
				return false;
721
			} else {
722
				$translate = $Translation->ident2icao($callsign);
723
				if ($translate != $callsign) {
724
					$additional_query .= " AND (spotter_output.ident = :callsign OR spotter_output.ident = :translate)";
725
					$query_values = array_merge($query_values,array(':callsign' => $callsign,':translate' => $translate));
726
				} else {
727
					$additional_query .= " AND spotter_output.ident = :callsign";
728
					$query_values = array_merge($query_values,array(':callsign' => $callsign));
729
				}
730
			}
731
		}
732
733
		if ($owner != "")
734
		{
735
			$owner = filter_var($owner,FILTER_SANITIZE_STRING);
736
			if (!is_string($owner))
737
			{
738
				return false;
739
			} else {
740
				$additional_query .= " AND spotter_output.owner_name = :owner";
741
				$query_values = array_merge($query_values,array(':owner' => $owner));
742
			}
743
		}
744
745
		if ($pilot_name != "")
746
		{
747
			$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
748
			if (!is_string($pilot_name))
749
			{
750
				return false;
751
			} else {
752
				$additional_query .= " AND spotter_output.pilot_name = :pilot_name";
753
				$query_values = array_merge($query_values,array(':pilot_name' => $pilot_name));
754
			}
755
		}
756
757
		if ($pilot_id != "")
758
		{
759
			$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_STRING);
760
			if (!is_string($pilot_id))
761
			{
762
				return false;
763
			} else {
764
				$additional_query .= " AND spotter_output.pilot_id = :pilot_id";
765
				$query_values = array_merge($query_values,array(':pilot_id' => $pilot_id));
766
			}
767
		}
768
769
		if ($departure_airport_route != "")
770
		{
771
			$departure_airport_route = filter_var($departure_airport_route,FILTER_SANITIZE_STRING);
772
			if (!is_string($departure_airport_route))
773
			{
774
				return false;
775
			} else {
776
				$additional_query .= " AND spotter_output.departure_airport_icao = :departure_airport_route";
777
				$query_values = array_merge($query_values,array(':departure_airport_route' => $departure_airport_route));
778
			}
779
		}
780
781
		if ($arrival_airport_route != "")
782
		{
783
			$arrival_airport_route = filter_var($arrival_airport_route,FILTER_SANITIZE_STRING);
784
			if (!is_string($arrival_airport_route))
785
			{
786
				return false;
787
			} else {
788
				$additional_query .= " AND spotter_output.arrival_airport_icao = :arrival_airport_route";
789
				$query_values = array_merge($query_values,array(':arrival_airport_route' => $arrival_airport_route));
790
			}
791
		}
792
793
		if ($altitude != "")
794
		{
795
			$altitude_array = explode(",", $altitude);
796
			$altitude_array[0] = filter_var($altitude_array[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
797
			$altitude_array[1] = filter_var($altitude_array[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
798
799
			if ($altitude_array[1] != "")
800
			{                
801
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
802
				$altitude_array[1] = substr($altitude_array[1], 0, -2);
803
				$additional_query .= " AND altitude BETWEEN '".$altitude_array[0]."' AND '".$altitude_array[1]."' ";
804
			} else {
805
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
806
				$additional_query .= " AND altitude <= '".$altitude_array[0]."' ";
807
			}
808
		}
809
810
		if ($date_posted != "")
811
		{
812
			$date_array = explode(",", $date_posted);
813
			$date_array[0] = filter_var($date_array[0],FILTER_SANITIZE_STRING);
814
			$date_array[1] = filter_var($date_array[1],FILTER_SANITIZE_STRING);
815
816
			if ($globalTimezone != '') {
817
				date_default_timezone_set($globalTimezone);
818
				$datetime = new DateTime();
819
				$offset = $datetime->format('P');
820
			} else $offset = '+00:00';
821
822
			if ($date_array[1] != "")
823
			{
824
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
825
				$date_array[1] = date("Y-m-d H:i:s", strtotime($date_array[1]));
826
				if ($globalDBdriver == 'mysql') {
827
					$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]."' ";
828
				} else {
829
					$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]."' ";
830
				}
831
			} else {
832
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
833
				if ($globalDBdriver == 'mysql') {
834
					$additional_query .= " AND TIMESTAMP(CONVERT_TZ(spotter_output.date,'+00:00', '".$offset."')) >= '".$date_array[0]."' ";
835
				} else {
836
					$additional_query .= " AND CAST(spotter_output.date AT TIME ZONE INTERVAL ".$offset." AS TIMESTAMP) >= '".$date_array[0]."' ";
837
				}
838
			}
839
		}
840
841
		if ($limit != "")
842
		{
843
			$limit_array = explode(",", $limit);
844
			
845
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
846
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
847
			
848
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
849
			{
850
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
851
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
852
			} else $limit_query = "";
853
		} else $limit_query = "";
854
855
856
		if ($sort != "")
857
		{
858
			$search_orderby_array = $this->getOrderBy();
859
			$orderby_query = $search_orderby_array[$sort]['sql'];
860
		} else {
861
			if ($origLat != "" && $origLon != "" && $dist != "") {
862
				$orderby_query = " ORDER BY distance ASC";
863
			} else {
864
				$orderby_query = " ORDER BY spotter_output.date DESC";
865
			}
866
		}
867
868
		if ($includegeodata == "true")
869
		{
870
			$additional_query .= " AND spotter_output.waypoints <> ''";
871
		}
872
873
874
		if ($origLat != "" && $origLon != "" && $dist != "") {
875
			$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
876
877
			if ($globalDBdriver == 'mysql') {
878
				$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 
879
						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)) 
880
						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;
881
			} else {
882
				$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 
883
						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)) 
884
						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;
885
			}
886
		} else {		
887
			$query  = "SELECT spotter_output.* FROM spotter_output".$filter_query." spotter_output.ident <> '' 
888
					".$additional_query."
889
					".$orderby_query;
890
		}
891
		$spotter_array = $this->getDataFromDB($query, $query_values,$limit_query);
892
		return $spotter_array;
893
	}
894
	
895
	
896
	/**
897
	* Gets all the spotter information based on the latest data entry
898
	*
899
	* @return Array the spotter information
900
	*
901
	*/
902
	public function getLatestSpotterData($limit = '', $sort = '', $filter = array())
903
	{
904
		global $global_query;
905
		
906
		date_default_timezone_set('UTC');
907
908
		$filter_query = $this->getFilter($filter);
909
		
910
		if ($limit != "")
911
		{
912
			$limit_array = explode(",", $limit);
913
			
914
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
915
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
916
			
917
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
918
			{
919
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
920
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
921
			} else $limit_query = "";
922
		} else $limit_query = "";
923
		
924
		if ($sort != "")
925
		{
926
			$search_orderby_array = $this->getOrderBy();
927
			$orderby_query = $search_orderby_array[$sort]['sql'];
928
		} else {
929
			$orderby_query = " ORDER BY spotter_output.date DESC";
930
		}
931
932
		$query  = $global_query.$filter_query." ".$orderby_query;
933
934
		$spotter_array = $this->getDataFromDB($query, array(),$limit_query,true);
935
936
		return $spotter_array;
937
	}
938
    
939
    
940
    /**
941
	* Gets all the spotter information based on a user's latitude and longitude
942
	*
943
	* @return Array the spotter information
944
	*
945
	*/
946
	public function getLatestSpotterForLayar($lat, $lng, $radius, $interval)
947
	{
948
		date_default_timezone_set('UTC');
949
		$limit_query = '';
950
		if ($lat != "")
951
		{
952
			if (!is_numeric($lat))
953
			{
954
				return false;
955
			}
956
		}
957
        
958
		if ($lng != "")
959
		{
960
			if (!is_numeric($lng))
961
			{
962
				return false;
963
			}
964
		}
965
		
966
		if ($radius != "")
967
		{
968
			if (!is_numeric($radius))
969
			{
970
				return false;
971
			}
972
		}
973
    		$additional_query = '';
974
		if ($interval != "")
975
		{
976
			if (!is_string($interval))
977
			{
978
				return false;
979
			} else {
980
				if ($interval == "30m"){
981
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 MINUTE) <= $this_output.date ';
982
				} else if ($interval == "1h"){
983
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) <= $this_output.date ';
984
				} else if ($interval == "3h"){
985
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 3 HOUR) <= $this_output.date ';
986
				} else if ($interval == "6h"){
987
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 6 HOUR) <= $this_output.date ';
988
				} else if ($interval == "12h"){
989
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 12 HOUR) <= $this_output.date ';
990
				} else if ($interval == "24h"){
991
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 24 HOUR) <= $this_output.date ';
992
				} else if ($interval == "7d"){
993
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY) <= $this_output.date ';
994
				} else if ($interval == "30d"){
995
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 DAY) <= $this_output.date ';
996
				} 
997
			}
998
		}
999
1000
		$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 
1001
                   WHERE spotter_output.latitude <> '' 
1002
				   AND spotter_output.longitude <> '' 
1003
                   ".$additional_query."
1004
                   HAVING distance < :radius  
1005
				   ORDER BY distance";
1006
1007
		$spotter_array = $this->getDataFromDB($query, array(':radius' => $radius),$limit_query);
1008
1009
		return $spotter_array;
1010
	}
1011
    
1012
    
1013
    /**
1014
	* Gets all the spotter information sorted by the newest aircraft type
1015
	*
1016
	* @return Array the spotter information
1017
	*
1018
	*/
1019
	public function getNewestSpotterDataSortedByAircraftType($limit = '', $sort = '',$filter = array())
1020
	{
1021
		global $global_query;
1022
		
1023
		date_default_timezone_set('UTC');
1024
1025
		$filter_query = $this->getFilter($filter,true,true);
1026
1027
		$limit_query = '';
1028
		if ($limit != "")
1029
		{
1030
			$limit_array = explode(",", $limit);
1031
			
1032
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1033
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1034
			
1035
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1036
			{
1037
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1038
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1039
			}
1040
		}
1041
		
1042
		if ($sort != "")
1043
		{
1044
			$search_orderby_array = $this->getOrderBy();
1045
			$orderby_query = $search_orderby_array[$sort]['sql'];
1046
		} else {
1047
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1048
		}
1049
1050
		$query  = $global_query." ".$filter_query." spotter_output.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;
1051
1052
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1053
1054
		return $spotter_array;
1055
	}
1056
    
1057
    
1058
	/**
1059
	* Gets all the spotter information sorted by the newest aircraft registration
1060
	*
1061
	* @return Array the spotter information
1062
	*
1063
	*/
1064
	public function getNewestSpotterDataSortedByAircraftRegistration($limit = '', $sort = '', $filter = array())
1065
	{
1066
		global $global_query;
1067
		
1068
		date_default_timezone_set('UTC');
1069
		$filter_query = $this->getFilter($filter,true,true);
1070
1071
		$limit_query = '';
1072
		if ($limit != "")
1073
		{
1074
			$limit_array = explode(",", $limit);
1075
			
1076
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1077
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1078
			
1079
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1080
			{
1081
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1082
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1083
			}
1084
		}
1085
		
1086
		if ($sort != "")
1087
		{
1088
			$search_orderby_array = $this->getOrderBy();
1089
			$orderby_query = $search_orderby_array[$sort]['sql'];
1090
		} else {
1091
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1092
		}
1093
1094
		$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;
1095
1096
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1097
1098
		return $spotter_array;
1099
	}
1100
1101
1102
	/**
1103
	* Gets all the spotter information sorted by the newest airline
1104
	*
1105
	* @return Array the spotter information
1106
	*
1107
	*/
1108
	public function getNewestSpotterDataSortedByAirline($limit = '', $sort = '',$filter = array())
1109
	{
1110
		global $global_query;
1111
		
1112
		date_default_timezone_set('UTC');
1113
		$filter_query = $this->getFilter($filter,true,true);
1114
		
1115
		$limit_query = '';
1116
		if ($limit != "")
1117
		{
1118
			$limit_array = explode(",", $limit);
1119
			
1120
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1121
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1122
			
1123
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1124
			{
1125
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1126
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1127
			}
1128
		}
1129
		
1130
		if ($sort != "")
1131
		{
1132
			$search_orderby_array = $this->getOrderBy();
1133
			$orderby_query = $search_orderby_array[$sort]['sql'];
1134
		} else {
1135
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1136
		}
1137
1138
		$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;
1139
1140
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1141
1142
		return $spotter_array;
1143
	}
1144
    
1145
    
1146
    /**
1147
	* Gets all the spotter information sorted by the newest departure airport
1148
	*
1149
	* @return Array the spotter information
1150
	*
1151
	*/
1152
	public function getNewestSpotterDataSortedByDepartureAirport($limit = '', $sort = '', $filter = array())
1153
	{
1154
		global $global_query;
1155
		
1156
		date_default_timezone_set('UTC');
1157
		
1158
		$filter_query = $this->getFilter($filter,true,true);
1159
		
1160
		$limit_query = '';
1161
		
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.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;
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 sorted by the newest arrival airport
1194
	*
1195
	* @return Array the spotter information
1196
	*
1197
	*/
1198
	public function getNewestSpotterDataSortedByArrivalAirport($limit = '', $sort = '', $filter = array())
1199
	{
1200
		global $global_query;
1201
		
1202
		date_default_timezone_set('UTC');
1203
		$filter_query = $this->getFilter($filter,true,true);
1204
		$limit_query = '';
1205
		if ($limit != "")
1206
		{
1207
			$limit_array = explode(",", $limit);
1208
			
1209
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1210
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1211
			
1212
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1213
			{
1214
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1215
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1216
			}
1217
		}
1218
		
1219
		if ($sort != "")
1220
		{
1221
			$search_orderby_array = $this->getOrderBy();
1222
			$orderby_query = $search_orderby_array[$sort]['sql'];
1223
		} else {
1224
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1225
		}
1226
1227
		$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;
1228
1229
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1230
1231
		return $spotter_array;
1232
	}
1233
	
1234
1235
	/**
1236
	* Gets all the spotter information based on the spotter id
1237
	*
1238
	* @return Array the spotter information
1239
	*
1240
	*/
1241
	public function getSpotterDataByID($id = '')
1242
	{
1243
		global $global_query;
1244
		
1245
		date_default_timezone_set('UTC');
1246
		if ($id == '') return array();
1247
		$additional_query = "spotter_output.spotter_id = :id";
1248
		$query_values = array(':id' => $id);
1249
1250
		//$query  = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ";
1251
		$query  = $global_query." WHERE ".$additional_query." ";
1252
1253
		$spotter_array = $this->getDataFromDB($query,$query_values);
1254
1255
		return $spotter_array;
1256
	}
1257
1258
	
1259
	
1260
	
1261
	/**
1262
	* Gets all the spotter information based on the callsign
1263
	*
1264
	* @return Array the spotter information
1265
	*
1266
	*/
1267
	public function getSpotterDataByIdent($ident = '', $limit = '', $sort = '', $filter = array())
1268
	{
1269
		global $global_query;
1270
		
1271
		date_default_timezone_set('UTC');
1272
		
1273
		$query_values = array();
1274
		$limit_query = '';
1275
		$additional_query = '';
1276
		$filter_query = $this->getFilter($filter,true,true);
1277
		if ($ident != "")
1278
		{
1279
			if (!is_string($ident))
1280
			{
1281
				return false;
1282
			} else {
1283
				$additional_query = " AND (spotter_output.ident = :ident)";
1284
				$query_values = array(':ident' => $ident);
1285
			}
1286
		}
1287
		
1288
		if ($limit != "")
1289
		{
1290
			$limit_array = explode(",", $limit);
1291
			
1292
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1293
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1294
			
1295
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1296
			{
1297
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1298
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1299
			}
1300
		}
1301
1302
		if ($sort != "")
1303
		{
1304
			$search_orderby_array = $this->getOrderBy();
1305
			$orderby_query = $search_orderby_array[$sort]['sql'];
1306
		} else {
1307
			$orderby_query = " ORDER BY spotter_output.date DESC";
1308
		}
1309
1310
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1311
1312
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1313
1314
		return $spotter_array;
1315
	}
1316
	
1317
	/**
1318
	* Gets all the spotter information based on the owner
1319
	*
1320
	* @return Array the spotter information
1321
	*
1322
	*/
1323
	public function getSpotterDataByOwner($owner = '', $limit = '', $sort = '', $filter = array())
1324
	{
1325
		global $global_query;
1326
		
1327
		date_default_timezone_set('UTC');
1328
		
1329
		$query_values = array();
1330
		$limit_query = '';
1331
		$additional_query = '';
1332
		$filter_query = $this->getFilter($filter,true,true);
1333
		if ($owner != "")
1334
		{
1335
			if (!is_string($owner))
1336
			{
1337
				return false;
1338
			} else {
1339
				$additional_query = " AND (spotter_output.owner_name = :owner)";
1340
				$query_values = array(':owner' => $owner);
1341
			}
1342
		}
1343
		
1344
		if ($limit != "")
1345
		{
1346
			$limit_array = explode(",", $limit);
1347
			
1348
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1349
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1350
			
1351
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1352
			{
1353
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1354
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1355
			}
1356
		}
1357
1358
		if ($sort != "")
1359
		{
1360
			$search_orderby_array = $this->getOrderBy();
1361
			if (isset($search_orderby_array[$sort]['sql'])) $orderby_query = $search_orderby_array[$sort]['sql'];
1362
			else $orderby_query = " ORDER BY spotter_output.date DESC";
1363
		} else {
1364
			$orderby_query = " ORDER BY spotter_output.date DESC";
1365
		}
1366
1367
		$query = $global_query.$filter_query." spotter_output.owner_name <> '' ".$additional_query." ".$orderby_query;
1368
1369
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1370
1371
		return $spotter_array;
1372
	}
1373
	
1374
	/**
1375
	* Gets all the spotter information based on the pilot
1376
	*
1377
	* @return Array the spotter information
1378
	*
1379
	*/
1380
	public function getSpotterDataByPilot($pilot = '', $limit = '', $sort = '', $filter = array())
1381
	{
1382
		global $global_query;
1383
		
1384
		date_default_timezone_set('UTC');
1385
		
1386
		$query_values = array();
1387
		$limit_query = '';
1388
		$additional_query = '';
1389
		$filter_query = $this->getFilter($filter,true,true);
1390
		if ($pilot != "")
1391
		{
1392
			$additional_query = " AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot)";
1393
			$query_values = array(':pilot' => $pilot);
1394
		}
1395
		
1396
		if ($limit != "")
1397
		{
1398
			$limit_array = explode(",", $limit);
1399
			
1400
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1401
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1402
			
1403
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1404
			{
1405
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1406
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1407
			}
1408
		}
1409
1410
		if ($sort != "")
1411
		{
1412
			$search_orderby_array = $this->getOrderBy();
1413
			$orderby_query = $search_orderby_array[$sort]['sql'];
1414
		} else {
1415
			$orderby_query = " ORDER BY spotter_output.date DESC";
1416
		}
1417
1418
		$query = $global_query.$filter_query." spotter_output.pilot_name <> '' ".$additional_query." ".$orderby_query;
1419
1420
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1421
1422
		return $spotter_array;
1423
	}
1424
	
1425
	
1426
	
1427
	/**
1428
	* Gets all the spotter information based on the aircraft type
1429
	*
1430
	* @return Array the spotter information
1431
	*
1432
	*/
1433
	public function getSpotterDataByAircraft($aircraft_type = '', $limit = '', $sort = '', $filter = array())
1434
	{
1435
		global $global_query;
1436
		
1437
		date_default_timezone_set('UTC');
1438
		
1439
		$query_values = array();
1440
		$limit_query = '';
1441
		$additional_query = '';
1442
		$filter_query = $this->getFilter($filter,true,true);
1443
		
1444
		if ($aircraft_type != "")
1445
		{
1446
			if (!is_string($aircraft_type))
1447
			{
1448
				return false;
1449
			} else {
1450
				$additional_query = " AND (spotter_output.aircraft_icao = :aircraft_type)";
1451
				$query_values = array(':aircraft_type' => $aircraft_type);
1452
			}
1453
		}
1454
		
1455
		if ($limit != "")
1456
		{
1457
			$limit_array = explode(",", $limit);
1458
			
1459
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1460
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1461
			
1462
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1463
			{
1464
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1465
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1466
			}
1467
		}
1468
1469
		if ($sort != "")
1470
		{
1471
			$search_orderby_array = $this->getOrderBy();
1472
			$orderby_query = $search_orderby_array[$sort]['sql'];
1473
		} else {
1474
			$orderby_query = " ORDER BY spotter_output.date DESC";
1475
		}
1476
1477
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1478
1479
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1480
1481
		return $spotter_array;
1482
	}
1483
	
1484
	
1485
	/**
1486
	* Gets all the spotter information based on the aircraft registration
1487
	*
1488
	* @return Array the spotter information
1489
	*
1490
	*/
1491
	public function getSpotterDataByRegistration($registration = '', $limit = '', $sort = '', $filter = array())
1492
	{
1493
		global $global_query;
1494
		
1495
		date_default_timezone_set('UTC');
1496
		
1497
		$query_values = array();
1498
		$limit_query = '';
1499
		$additional_query = '';
1500
		
1501
		if ($registration != "")
1502
		{
1503
			if (!is_string($registration))
1504
			{
1505
				return false;
1506
			} else {
1507
				$additional_query = " (spotter_output.registration = :registration)";
1508
				$query_values = array(':registration' => $registration);
1509
			}
1510
		}
1511
		
1512
		if ($limit != "")
1513
		{
1514
			$limit_array = explode(",", $limit);
1515
			
1516
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1517
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1518
			
1519
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1520
			{
1521
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1522
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1523
			}
1524
		}
1525
1526
		if ($sort != "")
1527
		{
1528
			$search_orderby_array = $this->getOrderBy();
1529
			$orderby_query = $search_orderby_array[$sort]['sql'];
1530
		} else {
1531
			$orderby_query = " ORDER BY spotter_output.date DESC";
1532
		}
1533
		$filter_query = $this->getFilter($filter,true,true);
1534
1535
		//$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1536
		$query = $global_query.$filter_query." ".$additional_query." ".$orderby_query;
1537
1538
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1539
1540
		return $spotter_array;
1541
	}
1542
1543
	
1544
	
1545
	
1546
	/**
1547
	* Gets all the spotter information based on the airline
1548
	*
1549
	* @return Array the spotter information
1550
	*
1551
	*/
1552
	public function getSpotterDataByAirline($airline = '', $limit = '', $sort = '',$filters = array())
1553
	{
1554
		global $global_query;
1555
		
1556
		date_default_timezone_set('UTC');
1557
1558
		$query_values = array();
1559
		$limit_query = '';
1560
		$additional_query = '';
1561
		$filter_query = $this->getFilter($filters,true,true);
1562
		
1563
		if ($airline != "")
1564
		{
1565
			if (!is_string($airline))
1566
			{
1567
				return false;
1568
			} else {
1569
				$additional_query = " AND (spotter_output.airline_icao = :airline)";
1570
				$query_values = array(':airline' => $airline);
1571
			}
1572
		}
1573
		
1574
		if ($limit != "")
1575
		{
1576
			$limit_array = explode(",", $limit);
1577
			
1578
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1579
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1580
			
1581
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1582
			{
1583
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1584
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1585
			}
1586
		}
1587
		
1588
		if ($sort != "")
1589
		{
1590
			$search_orderby_array = $this->getOrderBy();
1591
			$orderby_query = $search_orderby_array[$sort]['sql'];
1592
		} else {
1593
			$orderby_query = " ORDER BY spotter_output.date DESC";
1594
		}
1595
1596
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1597
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1598
1599
		return $spotter_array;
1600
	}
1601
	
1602
	
1603
	/**
1604
	* Gets all the spotter information based on the airport
1605
	*
1606
	* @return Array the spotter information
1607
	*
1608
	*/
1609
	public function getSpotterDataByAirport($airport = '', $limit = '', $sort = '',$filters = array())
1610
	{
1611
		global $global_query;
1612
		
1613
		date_default_timezone_set('UTC');
1614
		$query_values = array();
1615
		$limit_query = '';
1616
		$additional_query = '';
1617
		$filter_query = $this->getFilter($filters,true,true);
1618
		
1619
		if ($airport != "")
1620
		{
1621
			if (!is_string($airport))
1622
			{
1623
				return false;
1624
			} else {
1625
				$additional_query .= " AND ((spotter_output.departure_airport_icao = :airport) OR (spotter_output.arrival_airport_icao = :airport))";
1626
				$query_values = array(':airport' => $airport);
1627
			}
1628
		}
1629
		
1630
		if ($limit != "")
1631
		{
1632
			$limit_array = explode(",", $limit);
1633
			
1634
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1635
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1636
			
1637
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1638
			{
1639
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1640
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1641
			}
1642
		}
1643
		
1644
		if ($sort != "")
1645
		{
1646
			$search_orderby_array = $this->getOrderBy();
1647
			$orderby_query = $search_orderby_array[$sort]['sql'];
1648
		} else {
1649
			$orderby_query = " ORDER BY spotter_output.date DESC";
1650
		}
1651
1652
		$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;
1653
1654
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1655
1656
		return $spotter_array;
1657
	}
1658
1659
1660
1661
	/**
1662
	* Gets all the spotter information based on the date
1663
	*
1664
	* @return Array the spotter information
1665
	*
1666
	*/
1667
	public function getSpotterDataByDate($date = '', $limit = '', $sort = '',$filter = array())
1668
	{
1669
		global $global_query, $globalTimezone, $globalDBdriver;
1670
		
1671
		$query_values = array();
1672
		$limit_query = '';
1673
		$additional_query = '';
1674
1675
		$filter_query = $this->getFilter($filter,true,true);
1676
		
1677
		if ($date != "")
1678
		{
1679
			if ($globalTimezone != '') {
1680
				date_default_timezone_set($globalTimezone);
1681
				$datetime = new DateTime($date);
1682
				$offset = $datetime->format('P');
1683
			} else {
1684
				date_default_timezone_set('UTC');
1685
				$datetime = new DateTime($date);
1686
				$offset = '+00:00';
1687
			}
1688
			if ($globalDBdriver == 'mysql') {
1689
				$additional_query = " AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date ";
1690
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':offset' => $offset);
1691
			} elseif ($globalDBdriver == 'pgsql') {
1692
				//$globalTimezone = 'UTC';
1693
				$additional_query = " AND to_char(spotter_output.date AT TIME ZONE :timezone,'YYYY-mm-dd') = :date ";
1694
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':timezone' => $globalTimezone);
1695
				//$additional_query = " AND to_char(spotter_output.date,'YYYY-mm-dd') = :date ";
1696
				//$query_values = array(':date' => $datetime->format('Y-m-d'));
1697
			}
1698
		}
1699
		
1700
		if ($limit != "")
1701
		{
1702
			$limit_array = explode(",", $limit);
1703
			
1704
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1705
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1706
			
1707
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1708
			{
1709
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1710
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1711
			}
1712
		}
1713
1714
		if ($sort != "")
1715
		{
1716
			$search_orderby_array = $this->getOrderBy();
1717
			$orderby_query = $search_orderby_array[$sort]['sql'];
1718
		} else {
1719
			$orderby_query = " ORDER BY spotter_output.date DESC";
1720
		}
1721
1722
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query.$orderby_query;
1723
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1724
		return $spotter_array;
1725
	}
1726
1727
1728
1729
	/**
1730
	* Gets all the spotter information based on the country name
1731
	*
1732
	* @return Array the spotter information
1733
	*
1734
	*/
1735
	public function getSpotterDataByCountry($country = '', $limit = '', $sort = '',$filters = array())
1736
	{
1737
		global $global_query;
1738
		
1739
		date_default_timezone_set('UTC');
1740
		
1741
		$query_values = array();
1742
		$limit_query = '';
1743
		$additional_query = '';
1744
		$filter_query = $this->getFilter($filters,true,true);
1745
		if ($country != "")
1746
		{
1747
			if (!is_string($country))
1748
			{
1749
				return false;
1750
			} else {
1751
				$additional_query .= " AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country))";
1752
				$additional_query .= " OR spotter_output.airline_country = :country";
1753
				$query_values = array(':country' => $country);
1754
			}
1755
		}
1756
		
1757
		if ($limit != "")
1758
		{
1759
			$limit_array = explode(",", $limit);
1760
			
1761
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1762
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1763
			
1764
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1765
			{
1766
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1767
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1768
			}
1769
		}
1770
					
1771
		if ($sort != "")
1772
		{
1773
			$search_orderby_array = $this->getOrderBy();
1774
			$orderby_query = $search_orderby_array[$sort]['sql'];
1775
		} else {
1776
			$orderby_query = " ORDER BY spotter_output.date DESC";
1777
		}
1778
1779
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1780
1781
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1782
1783
		return $spotter_array;
1784
	}	
1785
	
1786
	
1787
	/**
1788
	* Gets all the spotter information based on the manufacturer name
1789
	*
1790
	* @return Array the spotter information
1791
	*
1792
	*/
1793
	public function getSpotterDataByManufacturer($aircraft_manufacturer = '', $limit = '', $sort = '', $filters = array())
1794
	{
1795
		global $global_query;
1796
		
1797
		date_default_timezone_set('UTC');
1798
		
1799
		$query_values = array();
1800
		$additional_query = '';
1801
		$limit_query = '';
1802
		$filter_query = $this->getFilter($filters,true,true);
1803
		
1804
		if ($aircraft_manufacturer != "")
1805
		{
1806
			if (!is_string($aircraft_manufacturer))
1807
			{
1808
				return false;
1809
			} else {
1810
				$additional_query .= " AND (spotter_output.aircraft_manufacturer = :aircraft_manufacturer)";
1811
				$query_values = array(':aircraft_manufacturer' => $aircraft_manufacturer);
1812
			}
1813
		}
1814
		
1815
		if ($limit != "")
1816
		{
1817
			$limit_array = explode(",", $limit);
1818
			
1819
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1820
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1821
			
1822
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1823
			{
1824
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1825
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1826
			}
1827
		}
1828
1829
		if ($sort != "")
1830
		{
1831
			$search_orderby_array = $this->getOrderBy();
1832
			$orderby_query = $search_orderby_array[$sort]['sql'];
1833
		} else {
1834
			$orderby_query = " ORDER BY spotter_output.date DESC";
1835
		}
1836
1837
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1838
1839
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1840
1841
		return $spotter_array;
1842
	}
1843
1844
1845
  
1846
  
1847
	/**
1848
	* Gets a list of all aircraft that take a route
1849
	*
1850
	* @param String $departure_airport_icao ICAO code of departure airport
1851
	* @param String $arrival_airport_icao ICAO code of arrival airport
1852
	* @return Array the spotter information
1853
	*
1854
	*/
1855
	public function getSpotterDataByRoute($departure_airport_icao = '', $arrival_airport_icao = '', $limit = '', $sort = '', $filters = array())
1856
	{
1857
		global $global_query;
1858
		
1859
		$query_values = array();
1860
		$additional_query = '';
1861
		$limit_query = '';
1862
		$filter_query = $this->getFilter($filters,true,true);
1863
		if ($departure_airport_icao != "")
1864
		{
1865
			if (!is_string($departure_airport_icao))
1866
			{
1867
				return false;
1868
			} else {
1869
				$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
1870
				$additional_query .= " AND (spotter_output.departure_airport_icao = :departure_airport_icao)";
1871
				//$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";
1872
				$query_values = array(':departure_airport_icao' => $departure_airport_icao);
1873
			}
1874
		}
1875
		
1876
		if ($arrival_airport_icao != "")
1877
		{
1878
			if (!is_string($arrival_airport_icao))
1879
			{
1880
				return false;
1881
			} else {
1882
				$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
1883
				$additional_query .= " AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)";
1884
				//$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)";
1885
				$query_values = array_merge($query_values,array(':arrival_airport_icao' => $arrival_airport_icao));
1886
			}
1887
		}
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.ident <> '' ".$additional_query." ".$orderby_query;
1912
          
1913
		//$result = mysqli_query($GLOBALS["___mysqli_ston"], $query);
1914
1915
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1916
1917
		return $spotter_array;
1918
	}
1919
	
1920
	
1921
	
1922
	/**
1923
	* Gets all the spotter information based on the special column in the table
1924
	*
1925
	* @return Array the spotter information
1926
	*
1927
	*/
1928
	public function getSpotterDataByHighlight($limit = '', $sort = '', $filter = array())
1929
	{
1930
		global $global_query;
1931
		
1932
		date_default_timezone_set('UTC');
1933
		$filter_query = $this->getFilter($filter,true,true);
1934
		$limit_query = '';
1935
		
1936
		if ($limit != "")
1937
		{
1938
			$limit_array = explode(",", $limit);
1939
			
1940
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1941
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1942
			
1943
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1944
			{
1945
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1946
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1947
			}
1948
		}
1949
		
1950
		if ($sort != "")
1951
		{
1952
			$search_orderby_array = $this->getOrderBy();
1953
			$orderby_query = $search_orderby_array[$sort]['sql'];
1954
		} else {
1955
			$orderby_query = " ORDER BY spotter_output.date DESC";
1956
		}
1957
1958
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' ".$orderby_query;
1959
1960
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1961
1962
		return $spotter_array;
1963
	}
1964
1965
	/**
1966
	* Gets all the highlight based on a aircraft registration
1967
	*
1968
	* @return String the highlight text
1969
	*
1970
	*/
1971
	public function getHighlightByRegistration($registration,$filter = array())
1972
	{
1973
		global $global_query;
1974
		
1975
		date_default_timezone_set('UTC');
1976
		$filter_query = $this->getFilter($filter,true,true);
1977
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
1978
		
1979
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' AND spotter_output.registration = :registration";
1980
		$sth = $this->db->prepare($query);
1981
		$sth->execute(array(':registration' => $registration));
1982
1983
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1984
		{
1985
			$highlight = $row['highlight'];
1986
		}
1987
		if (isset($highlight)) return $highlight;
1988
	}
1989
1990
	
1991
	/**
1992
	* Gets the squawk usage from squawk code
1993
	*
1994
	* @param String $squawk squawk code
1995
	* @param String $country country
1996
	* @return String usage
1997
	*
1998
	*/
1999
	public function getSquawkUsage($squawk = '',$country = 'FR')
2000
	{
2001
		
2002
		$squawk = filter_var($squawk,FILTER_SANITIZE_STRING);
2003
		$country = filter_var($country,FILTER_SANITIZE_STRING);
2004
2005
		$query  = "SELECT squawk.* FROM squawk WHERE squawk.code = :squawk AND squawk.country = :country LIMIT 1";
2006
		$query_values = array(':squawk' => ltrim($squawk,'0'), ':country' => $country);
2007
		
2008
		$sth = $this->db->prepare($query);
2009
		$sth->execute($query_values);
2010
    
2011
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2012
		$sth->closeCursor();
2013
		if (count($row) > 0) {
2014
			return $row['usage'];
2015
		} else return '';
2016
	}
2017
2018
	/**
2019
	* Gets the airport icao from the iata
2020
	*
2021
	* @param String $airport_iata the iata code of the airport
2022
	* @return String airport iata
2023
	*
2024
	*/
2025
	public function getAirportIcao($airport_iata = '')
2026
	{
2027
		
2028
		$airport_iata = filter_var($airport_iata,FILTER_SANITIZE_STRING);
2029
2030
		$query  = "SELECT airport.* FROM airport WHERE airport.iata = :airport LIMIT 1";
2031
		$query_values = array(':airport' => $airport_iata);
2032
		
2033
		$sth = $this->db->prepare($query);
2034
		$sth->execute($query_values);
2035
		
2036
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2037
		$sth->closeCursor();
2038
		if (count($row) > 0) {
2039
			return $row['icao'];
2040
		} else return '';
2041
	}
2042
2043
	/**
2044
	* Gets the airport distance
2045
	*
2046
	* @param String $airport_icao the icao code of the airport
2047
	* @param Float $latitude the latitude
2048
	* @param Float $longitude the longitude
2049
	* @return Float distance to the airport
2050
	*
2051
	*/
2052
	public function getAirportDistance($airport_icao,$latitude,$longitude)
2053
	{
2054
		
2055
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
2056
2057
		$query  = "SELECT airport.latitude, airport.longitude FROM airport WHERE airport.icao = :airport LIMIT 1";
2058
		$query_values = array(':airport' => $airport_icao);
2059
		$sth = $this->db->prepare($query);
2060
		$sth->execute($query_values);
2061
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2062
		$sth->closeCursor();
2063
		if (count($row) > 0) {
2064
			$airport_latitude = $row['latitude'];
2065
			$airport_longitude = $row['longitude'];
2066
			$Common = new Common();
2067
			return $Common->distance($latitude,$longitude,$airport_latitude,$airport_longitude);
2068
		} else return '';
2069
	}
2070
	
2071
	/**
2072
	* Gets the airport info based on the icao
2073
	*
2074
	* @param String $airport the icao code of the airport
2075
	* @return Array airport information
2076
	*
2077
	*/
2078
	public function getAllAirportInfo($airport = '')
2079
	{
2080
		
2081
		$airport = filter_var($airport,FILTER_SANITIZE_STRING);
2082
2083
		$query_values = array();
2084
		if ($airport == 'NA') {
2085
			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' => ''));
2086
		} elseif ($airport == '') {
2087
			$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";
2088
		} else {
2089
			$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";
2090
			$query_values = array(':airport' => $airport);
2091
		}
2092
		
2093
		$sth = $this->db->prepare($query);
2094
		$sth->execute($query_values);
2095
		/*
2096
		$airport_array = array();
2097
		$temp_array = array();
2098
		
2099
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2100
		{
2101
			$temp_array['name'] = $row['name'];
2102
			$temp_array['city'] = $row['city'];
2103
			$temp_array['country'] = $row['country'];
2104
			$temp_array['iata'] = $row['iata'];
2105
			$temp_array['icao'] = $row['icao'];
2106
			$temp_array['latitude'] = $row['latitude'];
2107
			$temp_array['longitude'] = $row['longitude'];
2108
			$temp_array['altitude'] = $row['altitude'];
2109
			$temp_array['home_link'] = $row['home_link'];
2110
			$temp_array['wikipedia_link'] = $row['wikipedia_link'];
2111
			$temp_array['image'] = $row['image'];
2112
			$temp_array['image_thumb'] = $row['image_thumb'];
2113
2114
			$airport_array[] = $temp_array;
2115
		}
2116
2117
		return $airport_array;
2118
		*/
2119
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2120
	}
2121
	
2122
	/**
2123
	* Gets the airport info based on the country
2124
	*
2125
	* @param Array $countries Airports countries
2126
	* @return Array airport information
2127
	*
2128
	*/
2129
	public function getAllAirportInfobyCountry($countries)
2130
	{
2131
		$lst_countries = '';
2132
		foreach ($countries as $country) {
2133
			$country = filter_var($country,FILTER_SANITIZE_STRING);
2134
			if ($lst_countries == '') {
2135
				$lst_countries = "'".$country."'";
2136
			} else {
2137
				$lst_countries .= ",'".$country."'";
2138
			}
2139
		}
2140
		$query  = "SELECT airport.* FROM airport WHERE airport.country IN (".$lst_countries.")";
2141
		
2142
		$sth = $this->db->prepare($query);
2143
		$sth->execute();
2144
    
2145
		$airport_array = array();
2146
		$temp_array = array();
2147
		
2148
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2149
		{
2150
			$temp_array['name'] = $row['name'];
2151
			$temp_array['city'] = $row['city'];
2152
			$temp_array['country'] = $row['country'];
2153
			$temp_array['iata'] = $row['iata'];
2154
			$temp_array['icao'] = $row['icao'];
2155
			$temp_array['latitude'] = $row['latitude'];
2156
			$temp_array['longitude'] = $row['longitude'];
2157
			$temp_array['altitude'] = $row['altitude'];
2158
2159
			$airport_array[] = $temp_array;
2160
		}
2161
2162
		return $airport_array;
2163
	}
2164
	
2165
	/**
2166
	* Gets airports info based on the coord
2167
	*
2168
	* @param Array $coord Airports longitude min,latitude min, longitude max, latitude max
2169
	* @return Array airport information
2170
	*
2171
	*/
2172
	public function getAllAirportInfobyCoord($coord)
2173
	{
2174
		global $globalDBdriver;
2175
		if (is_array($coord)) {
2176
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2177
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2178
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2179
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2180
		} else return array();
2181
		if ($globalDBdriver == 'mysql') {
2182
			$query  = "SELECT airport.* FROM airport WHERE airport.latitude BETWEEN ".$minlat." AND ".$maxlat." AND airport.longitude BETWEEN ".$minlong." AND ".$maxlong." AND airport.type != 'closed'";
2183
		} else {
2184
			$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'";
2185
		}
2186
		$sth = $this->db->prepare($query);
2187
		$sth->execute();
2188
    
2189
		$airport_array = array();
2190
		
2191
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2192
		{
2193
			$temp_array = $row;
2194
2195
			$airport_array[] = $temp_array;
2196
		}
2197
2198
		return $airport_array;
2199
	}
2200
2201
	/**
2202
	* Gets waypoints info based on the coord
2203
	*
2204
	* @param Array $coord waypoints coord
2205
	* @return Array airport information
2206
	*
2207
	*/
2208
	public function getAllWaypointsInfobyCoord($coord)
2209
	{
2210
		if (is_array($coord)) {
2211
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2212
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2213
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2214
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2215
		} else return array();
2216
		//$query  = "SELECT waypoints.* FROM waypoints WHERE waypoints.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_begin BETWEEN ".$minlong." AND ".$maxlong;
2217
		$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.")";
2218
		//$query  = "SELECT waypoints.* FROM waypoints";
2219
		//$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";
2220
		//$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;
2221
		//$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;
2222
		//echo $query;
2223
		
2224
		$sth = $this->db->prepare($query);
2225
		$sth->execute();
2226
    
2227
		$waypoints_array = array();
2228
		
2229
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2230
		{
2231
			$temp_array = $row;
2232
2233
			$waypoints_array[] = $temp_array;
2234
		}
2235
2236
		return $waypoints_array;
2237
	}
2238
	
2239
	
2240
	/**
2241
	* Gets the airline info based on the icao code or iata code
2242
	*
2243
	* @param String $airline_icao the iata code of the airport
2244
	* @return Array airport information
2245
	*
2246
	*/
2247
	public function getAllAirlineInfo($airline_icao, $fromsource = NULL)
2248
	{
2249
		global $globalUseRealAirlines;
2250
		if (isset($globalUseRealAirlines) && $globalUseRealAirlines) $fromsource = NULL;
2251
		$airline_icao = strtoupper(filter_var($airline_icao,FILTER_SANITIZE_STRING));
2252
		if ($airline_icao == 'NA') {
2253
			$airline_array = array();
2254
			$airline_array[] = array('name' => 'Not Available','iata' => 'NA', 'icao' => 'NA', 'callsign' => '', 'country' => 'NA', 'type' =>'');
2255
			return $airline_array;
2256
		} else {
2257
			if (strlen($airline_icao) == 2) {
2258
				if ($fromsource === NULL) {
2259
					$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";
2260
				} else {
2261
					$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";
2262
				}
2263
			} else {
2264
				if ($fromsource === NULL) {
2265
					$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";
2266
				} else {
2267
					$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";
2268
				}
2269
			}
2270
			
2271
			$sth = $this->db->prepare($query);
2272
			if ($fromsource === NULL) {
2273
				$sth->execute(array(':airline_icao' => $airline_icao));
2274
			} else {
2275
				$sth->execute(array(':airline_icao' => $airline_icao,':fromsource' => $fromsource));
2276
			}
2277
                        /*
2278
			$airline_array = array();
2279
			$temp_array = array();
2280
		
2281
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2282
			{
2283
				$temp_array['name'] = $row['name'];
2284
				$temp_array['iata'] = $row['iata'];
2285
				$temp_array['icao'] = $row['icao'];
2286
				$temp_array['callsign'] = $row['callsign'];
2287
				$temp_array['country'] = $row['country'];
2288
				$temp_array['type'] = $row['type'];
2289
				$airline_array[] = $temp_array;
2290
			}
2291
			return $airline_array;
2292
			*/
2293
			$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2294
			if (empty($result) && $fromsource !== NULL) {
2295
				/*
2296
				$query = 'SELECT COUNT(*) AS nb FROM airlines WHERE forsource = :fromsource';
2297
				$sth = $this->db->prepare($query);
2298
				$sth->execute(array(':fromsource' => $fromsource));
2299
				$row = $sth->fetch(PDO::FETCH_ASSOC);
2300
				$sth->closeCursor();
2301
				if ($row['nb'] == 0) $result = $this->getAllAirlineInfo($airline_icao);
2302
				*/
2303
				$result = $this->getAllAirlineInfo($airline_icao);
2304
			}
2305
			return $result;
2306
		}
2307
	}
2308
	
2309
	/**
2310
	* Gets the airline info based on the airline name
2311
	*
2312
	* @param String $airline_name the name of the airline
2313
	* @return Array airline information
2314
	*
2315
	*/
2316
	public function getAllAirlineInfoByName($airline_name, $fromsource = NULL)
2317
	{
2318
		global $globalUseRealAirlines;
2319
		if (isset($globalUseRealAirlines) && $globalUseRealAirlines) $fromsource = NULL;
2320
		$airline_name = strtolower(filter_var($airline_name,FILTER_SANITIZE_STRING));
2321
		$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";
2322
		$sth = $this->db->prepare($query);
2323
		if ($fromsource === NULL) {
2324
			$sth->execute(array(':airline_name' => $airline_name));
2325
		} else {
2326
			$sth->execute(array(':airline_name' => $airline_name,':fromsource' => $fromsource));
2327
		}
2328
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2329
		if (empty($result) && $fromsource !== NULL) {
2330
			$query = 'SELECT COUNT(*) AS nb FROM airlines WHERE forsource = :fromsource';
2331
			$sth = $this->db->prepare($query);
2332
			$sth->execute(array(':fromsource' => $fromsource));
2333
			$row = $sth->fetch(PDO::FETCH_ASSOC);
2334
			$sth->closeCursor();
2335
			if ($row['nb'] == 0) $result = $this->getAllAirlineInfoByName($airline_name);
2336
		}
2337
		return $result;
2338
	}
2339
	
2340
	
2341
	
2342
	/**
2343
	* Gets the aircraft info based on the aircraft type
2344
	*
2345
	* @param String $aircraft_type the aircraft type
2346
	* @return Array aircraft information
2347
	*
2348
	*/
2349
	public function getAllAircraftInfo($aircraft_type)
2350
	{
2351
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2352
2353
		if ($aircraft_type == 'NA') {
2354
			return array(array('icao' => 'NA','type' => 'Not Available', 'manufacturer' => 'Not Available', 'aircraft_shadow' => NULL));
2355
		}
2356
		$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";
2357
		
2358
		$sth = $this->db->prepare($query);
2359
		$sth->execute(array(':aircraft_type' => $aircraft_type));
2360
		/*
2361
		$aircraft_array = array();
2362
		$temp_array = array();
2363
		
2364
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2365
		{
2366
			$temp_array = array();
2367
			$temp_array['icao'] = $row['icao'];
2368
			$temp_array['type'] = $row['type'];
2369
			$temp_array['manufacturer'] = $row['manufacturer'];
2370
			$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
2371
2372
			$aircraft_array[] = $temp_array;
2373
		}
2374
		return $aircraft_array;
2375
		*/
2376
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2377
	}
2378
2379
	/**
2380
	* Gets the aircraft icao based on the aircraft name/type
2381
	*
2382
	* @param String $aircraft_type the aircraft type
2383
	* @return String aircraft information
2384
	*
2385
	*/
2386
	public function getAircraftIcao($aircraft_type)
2387
	{
2388
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2389
		$all_aircraft = array('737-300' => 'B733',
2390
				'777-200' => 'B772',
2391
				'777-200ER' => 'B772',
2392
				'777-300ER' => 'B77W',
2393
				'c172p' => 'C172',
2394
				'aerostar' => 'AEST',
2395
				'A320-211' => 'A320',
2396
				'747-8i' => 'B748',
2397
				'A380' => 'A388');
2398
		if (isset($all_aircraft[$aircraft_type])) return $all_aircraft[$aircraft_type];
2399
2400
		$query  = "SELECT aircraft.icao FROM aircraft WHERE aircraft.type LIKE :saircraft_type OR aircraft.type = :aircraft_type OR aircraft.icao = :aircraft_type LIMIT 1";
2401
		$aircraft_type = strtoupper($aircraft_type);
2402
		$sth = $this->db->prepare($query);
2403
		$sth->execute(array(':saircraft_type' => '%'.$aircraft_type.'%',':aircraft_type' => $aircraft_type,));
2404
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2405
		if (isset($result[0]['icao'])) return $result[0]['icao'];
2406
		else return '';
2407
	}
2408
	
2409
	/**
2410
	* Gets the aircraft info based on the aircraft modes
2411
	*
2412
	* @param String $aircraft_modes the aircraft ident (hex)
2413
	* @return String aircraft type
2414
	*
2415
	*/
2416
	public function getAllAircraftType($aircraft_modes,$source_type = '')
2417
	{
2418
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
2419
		$source_type = filter_var($source_type,FILTER_SANITIZE_STRING);
2420
2421
		if ($source_type == '' || $source_type == 'modes') {
2422
			$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes AND aircraft_modes.source_type = 'modes' ORDER BY FirstCreated DESC LIMIT 1";
2423
		} else {
2424
			$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes AND aircraft_modes.source_type = 'flarm' ORDER BY FirstCreated DESC LIMIT 1";
2425
		}
2426
		
2427
		$sth = $this->db->prepare($query);
2428
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
2429
2430
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2431
		$sth->closeCursor();
2432
		if (isset($row['icaotypecode'])) {
2433
			$icao = $row['icaotypecode'];
2434
			if (isset($this->aircraft_correct_icaotype[$icao])) $icao = $this->aircraft_correct_icaotype[$icao];
2435
			return $icao;
2436
		} elseif ($source_type == 'flarm') {
2437
			return $this->getAllAircraftType($aircraft_modes);
2438
		} else  return '';
2439
	}
2440
2441
	/**
2442
	* Gets the aircraft info based on the aircraft registration
2443
	*
2444
	* @param String $registration the aircraft registration
2445
	* @return String aircraft type
2446
	*
2447
	*/
2448
	public function getAllAircraftTypeByRegistration($registration)
2449
	{
2450
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2451
2452
		$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.registration = :registration ORDER BY FirstCreated DESC LIMIT 1";
2453
		
2454
		$sth = $this->db->prepare($query);
2455
		$sth->execute(array(':registration' => $registration));
2456
2457
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2458
		$sth->closeCursor();
2459
		if (isset($row['icaotypecode'])) {
2460
			return $row['icaotypecode'];
2461
		} else return '';
2462
	}
2463
2464
	/**
2465
	* Gets the spotter_id and flightaware_id based on the aircraft registration
2466
	*
2467
	* @param String $registration the aircraft registration
2468
	* @return Array spotter_id and flightaware_id
2469
	*
2470
	*/
2471
	public function getAllIDByRegistration($registration)
2472
	{
2473
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2474
2475
		$query  = "SELECT spotter_id,flightaware_id, date FROM spotter_output WHERE spotter_output.registration = :registration";
2476
		
2477
		$sth = $this->db->prepare($query);
2478
		$sth->execute(array(':registration' => $registration));
2479
2480
		$idarray = array();
2481
		while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
2482
			$date = $row['date'];
2483
			$idarray[$date] = array('flightaware_id' => $row['flightaware_id'],'spotter_id' => $row['spotter_id']);
2484
		}
2485
		return $idarray;
2486
	}
2487
2488
	/**
2489
	* Gets correct aircraft operator code
2490
	*
2491
	* @param String $operator the aircraft operator code (callsign)
2492
	* @return String aircraft operator code
2493
	*
2494
	*/
2495
	public function getOperator($operator)
2496
	{
2497
		$operator = filter_var($operator,FILTER_SANITIZE_STRING);
2498
		$query  = "SELECT translation.operator_correct FROM translation WHERE translation.operator = :operator LIMIT 1";
2499
		
2500
		$sth = $this->db->prepare($query);
2501
		$sth->execute(array(':operator' => $operator));
2502
2503
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2504
		$sth->closeCursor();
2505
		if (isset($row['operator_correct'])) {
2506
			return $row['operator_correct'];
2507
		} else return $operator;
2508
	}
2509
2510
	/**
2511
	* Gets the aircraft route based on the aircraft callsign
2512
	*
2513
	* @param String $callsign the aircraft callsign
2514
	* @return Array aircraft type
2515
	*
2516
	*/
2517
	public function getRouteInfo($callsign)
2518
	{
2519
		$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
2520
                if ($callsign == '') return array();
2521
		$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";
2522
		
2523
		$sth = $this->db->prepare($query);
2524
		$sth->execute(array(':callsign' => $callsign));
2525
2526
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2527
		$sth->closeCursor();
2528
		if (count($row) > 0) {
2529
			return $row;
2530
		} else return array();
2531
	}
2532
	
2533
	/**
2534
	* Gets the aircraft info based on the aircraft registration
2535
	*
2536
	* @param String $registration the aircraft registration
2537
	* @return Array aircraft information
2538
	*
2539
	*/
2540
	public function getAircraftInfoByRegistration($registration)
2541
	{
2542
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2543
2544
		$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";
2545
		
2546
		$sth = $this->db->prepare($query);
2547
		$sth->execute(array(':registration' => $registration));
2548
2549
		$aircraft_array = array();
2550
		$temp_array = array();
2551
		
2552
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2553
		{
2554
			$temp_array['airline_icao'] = $row['airline_icao'];
2555
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2556
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2557
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2558
2559
			$aircraft_array[] = $temp_array;
2560
		}
2561
2562
		return $aircraft_array;
2563
	}
2564
	
2565
	/**
2566
	* Gets the aircraft owner & base based on the aircraft registration
2567
	*
2568
	* @param String $registration the aircraft registration
2569
	* @return Array aircraft information
2570
	*
2571
	*/
2572
	public function getAircraftOwnerByRegistration($registration)
2573
	{
2574
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2575
		$Connection = new Connection($this->db);
2576
		if ($Connection->tableExists('aircraft_owner')) {
2577
			$query  = "SELECT aircraft_owner.base, aircraft_owner.owner, aircraft_owner.date_first_reg FROM aircraft_owner WHERE registration = :registration LIMIT 1";
2578
			$sth = $this->db->prepare($query);
2579
			$sth->execute(array(':registration' => $registration));
2580
			$result = $sth->fetch(PDO::FETCH_ASSOC);
2581
			$sth->closeCursor();
2582
			return $result;
2583
		} else return array();
2584
	}
2585
	
2586
  
2587
  /**
2588
	* Gets all flights (but with only little info)
2589
	*
2590
	* @return Array basic flight information
2591
	*
2592
	*/
2593
	public function getAllFlightsforSitemap()
2594
	{
2595
		//$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 ";
2596
		$query  = "SELECT spotter_output.spotter_id FROM spotter_output ORDER BY spotter_id DESC LIMIT 200 OFFSET 0";
2597
		
2598
		$sth = $this->db->prepare($query);
2599
		$sth->execute();
2600
                  /*
2601
		$flight_array = array();
2602
		$temp_array = array();
2603
		
2604
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2605
		{
2606
			$temp_array['spotter_id'] = $row['spotter_id'];
2607
//			$temp_array['ident'] = $row['ident'];
2608
//			$temp_array['airline_name'] = $row['airline_name'];
2609
//			$temp_array['aircraft_type'] = $row['aircraft_icao'];
2610
//			$temp_array['aircraft_name'] = $row['aircraft_name'];
2611
			//$temp_array['image'] = $row['image'];
2612
2613
			$flight_array[] = $temp_array;
2614
		}
2615
2616
		return $flight_array;
2617
		*/
2618
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2619
	}
2620
  
2621
	/**
2622
	* Gets a list of all aircraft manufacturers
2623
	*
2624
	* @return Array list of aircraft types
2625
	*
2626
	*/
2627
	public function getAllManufacturers()
2628
	{
2629
		/*
2630
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer AS aircraft_manufacturer
2631
								FROM spotter_output
2632
								WHERE spotter_output.aircraft_manufacturer <> '' 
2633
								ORDER BY spotter_output.aircraft_manufacturer ASC";
2634
		  */
2635
		
2636
		$query = "SELECT DISTINCT manufacturer AS aircraft_manufacturer FROM aircraft WHERE manufacturer <> '' ORDER BY manufacturer ASC";
2637
		$sth = $this->db->prepare($query);
2638
		$sth->execute();
2639
2640
		$manufacturer_array = array();
2641
		$temp_array = array();
2642
		
2643
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2644
		{
2645
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2646
2647
			$manufacturer_array[] = $temp_array;
2648
		}
2649
2650
		return $manufacturer_array;
2651
	}
2652
  
2653
  
2654
  /**
2655
	* Gets a list of all aircraft types
2656
	*
2657
	* @return Array list of aircraft types
2658
	*
2659
	*/
2660
	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...
2661
	{
2662
		/*
2663
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao AS aircraft_icao, spotter_output.aircraft_name AS aircraft_name
2664
								FROM spotter_output  
2665
								WHERE spotter_output.aircraft_icao <> '' 
2666
								ORDER BY spotter_output.aircraft_name ASC";
2667
								
2668
		*/
2669
		//$filter_query = $this->getFilter($filters,true,true);
2670
		//$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";
2671
2672
		$query = "SELECT DISTINCT icao AS aircraft_icao, type AS aircraft_name, manufacturer AS aircraft_manufacturer FROM aircraft WHERE icao <> '' ORDER BY aircraft_manufacturer ASC";
2673
		
2674
		$sth = $this->db->prepare($query);
2675
		$sth->execute();
2676
2677
		$aircraft_array = array();
2678
		$temp_array = array();
2679
		
2680
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2681
		{
2682
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2683
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2684
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2685
2686
			$aircraft_array[] = $temp_array;
2687
		}
2688
2689
		return $aircraft_array;
2690
	}
2691
	
2692
	
2693
	/**
2694
	* Gets a list of all aircraft registrations
2695
	*
2696
	* @return Array list of aircraft registrations
2697
	*
2698
	*/
2699
	public function getAllAircraftRegistrations($filters = array())
2700
	{
2701
		$filter_query = $this->getFilter($filters,true,true);
2702
		$query  = "SELECT DISTINCT spotter_output.registration 
2703
				FROM spotter_output".$filter_query." spotter_output.registration <> '' 
2704
				ORDER BY spotter_output.registration ASC";
2705
2706
		$sth = $this->db->prepare($query);
2707
		$sth->execute();
2708
2709
		$aircraft_array = array();
2710
		$temp_array = array();
2711
		
2712
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2713
		{
2714
			$temp_array['registration'] = $row['registration'];
2715
2716
			$aircraft_array[] = $temp_array;
2717
		}
2718
2719
		return $aircraft_array;
2720
	}
2721
2722
	/**
2723
	* Gets all source name
2724
	*
2725
	* @param String type format of source
2726
	* @return Array list of source name
2727
	*
2728
	*/
2729
	public function getAllSourceName($type = '',$filters = array())
2730
	{
2731
		$filter_query = $this->getFilter($filters,true,true);
2732
		$query_values = array();
2733
		$query  = "SELECT DISTINCT spotter_output.source_name 
2734
				FROM spotter_output".$filter_query." spotter_output.source_name <> ''";
2735
		if ($type != '') {
2736
			$query_values = array(':type' => $type);
2737
			$query .= " AND format_source = :type";
2738
		}
2739
		$query .= " ORDER BY spotter_output.source_name ASC";
2740
2741
		$sth = $this->db->prepare($query);
2742
		if (!empty($query_values)) $sth->execute($query_values);
2743
		else $sth->execute();
2744
2745
		$source_array = array();
2746
		$temp_array = array();
2747
		
2748
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2749
		{
2750
			$temp_array['source_name'] = $row['source_name'];
2751
			$source_array[] = $temp_array;
2752
		}
2753
		return $source_array;
2754
	}
2755
2756
2757
2758
	/**
2759
	* Gets a list of all airline names
2760
	*
2761
	* @return Array list of airline names
2762
	*
2763
	*/
2764
	public function getAllAirlineNames($airline_type = '',$forsource = NULL,$filters = array())
2765
	{
2766
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2767
		$filter_query = $this->getFilter($filters,true,true);
2768
		$airline_type = filter_var($airline_type,FILTER_SANITIZE_STRING);
2769
		if ($airline_type == '' || $airline_type == 'all') {
2770
			/*
2771
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2772
								FROM spotter_output
2773
								WHERE spotter_output.airline_icao <> '' 
2774
								ORDER BY spotter_output.airline_name ASC";
2775
			*/
2776
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2777
			elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2778
			elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2779
			if ($forsource === NULL) {
2780
				$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";
2781
				$query_data = array();
2782
			} else {
2783
				$query = "SELECT DISTINCT icao AS airline_icao, name AS airline_name, type AS airline_type FROM airlines WHERE forsource = :forsource ORDER BY name ASC";
2784
				$query_data = array(':forsource' => $forsource);
2785
			}
2786
		} else {
2787
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2788
					FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
2789
					AND spotter_output.airline_type = :airline_type 
2790
					ORDER BY spotter_output.airline_icao ASC";
2791
			$query_data = array(':airline_type' => $airline_type);
2792
		}
2793
		
2794
		$sth = $this->db->prepare($query);
2795
		$sth->execute($query_data);
2796
    
2797
		$airline_array = array();
2798
		$temp_array = array();
2799
		
2800
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2801
		{
2802
			$temp_array['airline_icao'] = $row['airline_icao'];
2803
			$temp_array['airline_name'] = $row['airline_name'];
2804
			$temp_array['airline_type'] = $row['airline_type'];
2805
2806
			$airline_array[] = $temp_array;
2807
		}
2808
		return $airline_array;
2809
	}
2810
	
2811
	/**
2812
	* Gets a list of all alliance names
2813
	*
2814
	* @return Array list of alliance names
2815
	*
2816
	*/
2817
	public function getAllAllianceNames($forsource = NULL,$filters = array())
2818
	{
2819
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2820
		$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...
2821
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2822
		elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2823
		elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2824
		if ($forsource === NULL) {
2825
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND forsource IS NULL ORDER BY alliance ASC";
2826
			$query_data = array();
2827
		} else {
2828
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND  forsource = :forsource ORDER BY alliance ASC";
2829
			$query_data = array(':forsource' => $forsource);
2830
		}
2831
		
2832
		$sth = $this->db->prepare($query);
2833
		$sth->execute($query_data);
2834
    
2835
		$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...
2836
		$alliance_array = $sth->fetchAll(PDO::FETCH_ASSOC);
2837
		return $alliance_array;
2838
	}
2839
	
2840
	/**
2841
	* Gets a list of all airline countries
2842
	*
2843
	* @return Array list of airline countries
2844
	*
2845
	*/
2846
	public function getAllAirlineCountries($filters = array())
2847
	{
2848
		$filter_query = $this->getFilter($filters,true,true);
2849
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
2850
				FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
2851
				ORDER BY spotter_output.airline_country ASC";
2852
		
2853
		//$query = "SELECT DISTINCT country AS airline_country FROM airlines WHERE country <> '' AND active = 'Y' ORDER BY country ASC";
2854
		$sth = $this->db->prepare($query);
2855
		$sth->execute();
2856
2857
		$airline_array = array();
2858
		$temp_array = array();
2859
		
2860
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2861
		{
2862
			$temp_array['airline_country'] = $row['airline_country'];
2863
2864
			$airline_array[] = $temp_array;
2865
		}
2866
2867
		return $airline_array;
2868
	}
2869
2870
	
2871
	
2872
	/**
2873
	* Gets a list of all departure & arrival names
2874
	*
2875
	* @return Array list of airport names
2876
	*
2877
	*/
2878
	public function getAllAirportNames($filters = array())
2879
	{
2880
		$filter_query = $this->getFilter($filters,true,true);
2881
		$airport_array = array();
2882
		$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
2883
				FROM spotter_output".$filter_query." spotter_output.departure_airport_icao <> '' AND spotter_output.departure_airport_icao <> 'NA' 
2884
				ORDER BY spotter_output.departure_airport_city ASC";
2885
		
2886
		//$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";
2887
		$sth = $this->db->prepare($query);
2888
		$sth->execute();
2889
2890
		$temp_array = array();
2891
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2892
		{
2893
			$temp_array['airport_icao'] = $row['airport_icao'];
2894
			$temp_array['airport_name'] = $row['airport_name'];
2895
			$temp_array['airport_city'] = $row['airport_city'];
2896
			$temp_array['airport_country'] = $row['airport_country'];
2897
2898
			$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2899
		}
2900
2901
		$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
2902
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> '' AND spotter_output.arrival_airport_icao <> 'NA' 
2903
								ORDER BY spotter_output.arrival_airport_city ASC";
2904
					
2905
		$sth = $this->db->prepare($query);
2906
		$sth->execute();
2907
2908
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2909
			{
2910
		//	if ($airport_array[$row['airport_city'].",".$row['airport_name']]['airport_icao'] != $row['airport_icao'])
2911
		//	{
2912
				$temp_array['airport_icao'] = $row['airport_icao'];
2913
				$temp_array['airport_name'] = $row['airport_name'];
2914
				$temp_array['airport_city'] = $row['airport_city'];
2915
				$temp_array['airport_country'] = $row['airport_country'];
2916
				
2917
				$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2918
		//	}
2919
		}
2920
2921
		return $airport_array;
2922
	} 
2923
2924
	/**
2925
	* Gets a list of all owner names
2926
	*
2927
	* @return Array list of owner names
2928
	*
2929
	*/
2930
	public function getAllOwnerNames($filters = array())
2931
	{
2932
		$filter_query = $this->getFilter($filters,true,true);
2933
		$query  = "SELECT DISTINCT spotter_output.owner_name
2934
				FROM spotter_output".$filter_query." spotter_output.owner_name <> '' 
2935
				ORDER BY spotter_output.owner_name ASC";
2936
		
2937
		$sth = $this->db->prepare($query);
2938
		$sth->execute();
2939
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2940
	} 
2941
2942
	/**
2943
	* Gets a list of all pilot names and pilot ids
2944
	*
2945
	* @return Array list of pilot names and pilot ids
2946
	*
2947
	*/
2948
	public function getAllPilotNames($filters = array())
2949
	{
2950
		$filter_query = $this->getFilter($filters,true,true);
2951
		$query  = "SELECT DISTINCT spotter_output.pilot_name, spotter_output.pilot_id
2952
				FROM spotter_output".$filter_query." spotter_output.pilot_name <> '' 
2953
				ORDER BY spotter_output.pilot_name ASC";
2954
		
2955
		$sth = $this->db->prepare($query);
2956
		$sth->execute();
2957
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2958
	} 
2959
	
2960
	
2961
	/**
2962
	* Gets a list of all departure & arrival airport countries
2963
	*
2964
	* @return Array list of airport countries
2965
	*
2966
	*/
2967
	public function getAllAirportCountries($filters = array())
2968
	{
2969
		$airport_array = array();
2970
					
2971
		  /*
2972
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
2973
								FROM spotter_output
2974
								WHERE spotter_output.departure_airport_country <> '' 
2975
								ORDER BY spotter_output.departure_airport_country ASC";
2976
		*/
2977
		$query = "SELECT DISTINCT country AS airport_country FROM airport ORDER BY country ASC";
2978
		
2979
		$sth = $this->db->prepare($query);
2980
		$sth->execute();
2981
   
2982
		$temp_array = array();
2983
		
2984
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2985
		{
2986
			$temp_array['airport_country'] = $row['airport_country'];
2987
2988
			$airport_array[$row['airport_country']] = $temp_array;
2989
		}
2990
		$filter_query = $this->getFilter($filters,true,true);
2991
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
2992
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
2993
								ORDER BY spotter_output.arrival_airport_country ASC";
2994
					
2995
		$sth = $this->db->prepare($query);
2996
		$sth->execute();
2997
		
2998
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2999
		{
3000
			if (isset($airport_array[$row['airport_country']]['airport_country']) && $airport_array[$row['airport_country']]['airport_country'] != $row['airport_country'])
3001
			{
3002
				$temp_array['airport_country'] = $row['airport_country'];
3003
				$airport_array[$row['airport_country']] = $temp_array;
3004
			}
3005
		}
3006
3007
		return $airport_array;
3008
	} 
3009
	
3010
	
3011
	
3012
	
3013
	/**
3014
	* Gets a list of all countries (airline, departure airport & arrival airport)
3015
	*
3016
	* @return Array list of countries
3017
	*
3018
	*/
3019
	public function getAllCountries($filters = array())
3020
	{
3021
		$Connection= new Connection($this->db);
3022
		if ($Connection->tableExists('countries')) {
3023
			$query  = "SELECT countries.name AS airport_country
3024
				FROM countries
3025
				ORDER BY countries.name ASC";
3026
			$sth = $this->db->prepare($query);
3027
			$sth->execute();
3028
   
3029
			$temp_array = array();
3030
			$country_array = array();
3031
		
3032
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
3033
			{
3034
				$temp_array['country'] = $row['airport_country'];
3035
				$country_array[$row['airport_country']] = $temp_array;
3036
			}
3037
		} else {
3038
			$filter_query = $this->getFilter($filters,true,true);
3039
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
3040
								FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' 
3041
								ORDER BY spotter_output.departure_airport_country ASC";
3042
3043
			$sth = $this->db->prepare($query);
3044
			$sth->execute();
3045
   
3046
			$temp_array = array();
3047
			$country_array = array();
3048
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
3049
			{
3050
				$temp_array['country'] = $row['airport_country'];
3051
				$country_array[$row['airport_country']] = $temp_array;
3052
			}
3053
3054
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
3055
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
3056
								ORDER BY spotter_output.arrival_airport_country ASC";
3057
					
3058
		$sth = $this->db->prepare($query);
3059
		$sth->execute();
3060
		
3061
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3062
		{
3063
			if ($country_array[$row['airport_country']]['country'] != $row['airport_country'])
3064
			{
3065
				$temp_array['country'] = $row['airport_country'];
3066
				
3067
				$country_array[$row['country']] = $temp_array;
3068
			}
3069
		}
3070
		
3071
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
3072
								FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
3073
								ORDER BY spotter_output.airline_country ASC";
3074
					
3075
		$sth = $this->db->prepare($query);
3076
		$sth->execute();
3077
		
3078
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3079
		{
3080
			if (isset($country_array[$row['airline_country']]['country']) && $country_array[$row['airline_country']]['country'] != $row['airline_country'])
3081
			{
3082
				$temp_array['country'] = $row['airline_country'];
3083
				
3084
				$country_array[$row['country']] = $temp_array;
3085
			}
3086
		}
3087
		}  
3088
		return $country_array;
3089
	} 
3090
	
3091
	
3092
	
3093
	
3094
	/**
3095
	* Gets a list of all idents/callsigns
3096
	*
3097
	* @return Array list of ident/callsign names
3098
	*
3099
	*/
3100
	public function getAllIdents($filters = array())
3101
	{
3102
		$filter_query = $this->getFilter($filters,true,true);
3103
		$query  = "SELECT DISTINCT spotter_output.ident
3104
								FROM spotter_output".$filter_query." spotter_output.ident <> '' 
3105
								ORDER BY spotter_output.date ASC LIMIT 700 OFFSET 0";
3106
3107
		$sth = $this->db->prepare($query);
3108
		$sth->execute();
3109
    
3110
		$ident_array = array();
3111
		$temp_array = array();
3112
		
3113
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3114
		{
3115
			$temp_array['ident'] = $row['ident'];
3116
			$ident_array[] = $temp_array;
3117
		}
3118
3119
		return $ident_array;
3120
	}
3121
3122
	/**
3123
	* Get a list of flights from airport since 7 days
3124
	* @return Array number, icao, name and city of airports
3125
	*/
3126
3127
	public function getLast7DaysAirportsDeparture($airport_icao = '',$filters = array()) {
3128
		global $globalTimezone, $globalDBdriver;
3129
		$filter_query = $this->getFilter($filters,true,true);
3130
		if ($globalTimezone != '') {
3131
			date_default_timezone_set($globalTimezone);
3132
			$datetime = new DateTime();
3133
			$offset = $datetime->format('P');
3134
		} else $offset = '+00:00';
3135
		if ($airport_icao == '') {
3136
			if ($globalDBdriver == 'mysql') {
3137
				$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";
3138
			} else {
3139
				$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";
3140
			}
3141
			$sth = $this->db->prepare($query);
3142
			$sth->execute(array(':offset' => $offset));
3143
		} else {
3144
			if ($globalDBdriver == 'mysql') {
3145
				$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";
3146
			} else {
3147
				$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";
3148
			}
3149
			$sth = $this->db->prepare($query);
3150
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3151
		}
3152
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3153
	}
3154
3155
	/**
3156
	* Get a list of flights from airport since 7 days
3157
	* @return Array number, icao, name and city of airports
3158
	*/
3159
3160
	public function getLast7DaysAirportsDepartureByAirlines($airport_icao = '') {
3161
		global $globalTimezone, $globalDBdriver;
3162
		if ($globalTimezone != '') {
3163
			date_default_timezone_set($globalTimezone);
3164
			$datetime = new DateTime();
3165
			$offset = $datetime->format('P');
3166
		} else $offset = '+00:00';
3167
		if ($airport_icao == '') {
3168
			if ($globalDBdriver == 'mysql') {
3169
				$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";
3170
			} else {
3171
				$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";
3172
			}
3173
			$sth = $this->db->prepare($query);
3174
			$sth->execute(array(':offset' => $offset));
3175
		} else {
3176
			if ($globalDBdriver == 'mysql') {
3177
				$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";
3178
			} else {
3179
				$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";
3180
			}
3181
			$sth = $this->db->prepare($query);
3182
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3183
		}
3184
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3185
	}
3186
3187
	/**
3188
	* Get a list of flights from detected airport since 7 days
3189
	* @return Array number, icao, name and city of airports
3190
	*/
3191
3192
	public function getLast7DaysDetectedAirportsDeparture($airport_icao = '', $filters = array()) {
3193
		global $globalTimezone, $globalDBdriver;
3194
		$filter_query = $this->getFilter($filters,true,true);
3195
		if ($globalTimezone != '') {
3196
			date_default_timezone_set($globalTimezone);
3197
			$datetime = new DateTime();
3198
			$offset = $datetime->format('P');
3199
		} else $offset = '+00:00';
3200
		if ($airport_icao == '') {
3201
			if ($globalDBdriver == 'mysql') {
3202
				$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 
3203
				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 <> '' 
3204
				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";
3205
			} else {
3206
				$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 
3207
				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 <> '' 
3208
				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";
3209
			}
3210
			$sth = $this->db->prepare($query);
3211
			$sth->execute(array(':offset' => $offset));
3212
		} else {
3213
			if ($globalDBdriver == 'mysql') {
3214
				$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 
3215
				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 
3216
				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";
3217
			} else {
3218
				$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 
3219
				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";
3220
			}
3221
			$sth = $this->db->prepare($query);
3222
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3223
		}
3224
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3225
	}
3226
3227
	/**
3228
	* Get a list of flights from detected airport since 7 days
3229
	* @return Array number, icao, name and city of airports
3230
	*/
3231
3232
	public function getLast7DaysDetectedAirportsDepartureByAirlines($airport_icao = '') {
3233
		global $globalTimezone, $globalDBdriver;
3234
		if ($globalTimezone != '') {
3235
			date_default_timezone_set($globalTimezone);
3236
			$datetime = new DateTime();
3237
			$offset = $datetime->format('P');
3238
		} else $offset = '+00:00';
3239
		if ($airport_icao == '') {
3240
			if ($globalDBdriver == 'mysql') {
3241
				$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 
3242
				FROM `spotter_output`, airport 
3243
				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 <> '' 
3244
				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";
3245
			} else {
3246
				$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 
3247
				FROM spotter_output, airport 
3248
				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 <> '' 
3249
				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";
3250
			}
3251
			$sth = $this->db->prepare($query);
3252
			$sth->execute(array(':offset' => $offset));
3253
		} else {
3254
			if ($globalDBdriver == 'mysql') {
3255
				$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 
3256
				FROM `spotter_output`, airport 
3257
				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 
3258
				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";
3259
			} else {
3260
				$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 
3261
				FROM spotter_output, airport 
3262
				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";
3263
			}
3264
			$sth = $this->db->prepare($query);
3265
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3266
		}
3267
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3268
	}
3269
3270
3271
	/**
3272
	* Get a list of flights to airport since 7 days
3273
	* @return Array number, icao, name and city of airports
3274
	*/
3275
3276
	public function getLast7DaysAirportsArrival($airport_icao = '', $filters = array()) {
3277
		global $globalTimezone, $globalDBdriver;
3278
		$filter_query = $this->getFilter($filters,true,true);
3279
		if ($globalTimezone != '') {
3280
			date_default_timezone_set($globalTimezone);
3281
			$datetime = new DateTime();
3282
			$offset = $datetime->format('P');
3283
		} else $offset = '+00:00';
3284
		if ($airport_icao == '') {
3285
			if ($globalDBdriver == 'mysql') {
3286
				$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";
3287
			} else {
3288
				$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";
3289
			}
3290
			$sth = $this->db->prepare($query);
3291
			$sth->execute(array(':offset' => $offset));
3292
		} else {
3293
			if ($globalDBdriver == 'mysql') {
3294
				$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";
3295
			} else {
3296
				$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";
3297
			}
3298
			$sth = $this->db->prepare($query);
3299
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3300
		}
3301
		
3302
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3303
	}
3304
3305
3306
	/**
3307
	* Get a list of flights detected to airport since 7 days
3308
	* @return Array number, icao, name and city of airports
3309
	*/
3310
3311
	public function getLast7DaysDetectedAirportsArrival($airport_icao = '',$filters = array()) {
3312
		global $globalTimezone, $globalDBdriver;
3313
		$filter_query = $this->getFilter($filters,true,true);
3314
		if ($globalTimezone != '') {
3315
			date_default_timezone_set($globalTimezone);
3316
			$datetime = new DateTime();
3317
			$offset = $datetime->format('P');
3318
		} else $offset = '+00:00';
3319
		if ($airport_icao == '') {
3320
			if ($globalDBdriver == 'mysql') {
3321
				$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 
3322
				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 <> '' 
3323
				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";
3324
			} else {
3325
				$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 
3326
				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 <> '' 
3327
				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";
3328
			}
3329
			$sth = $this->db->prepare($query);
3330
			$sth->execute(array(':offset' => $offset));
3331
		} else {
3332
			if ($globalDBdriver == 'mysql') {
3333
				$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 
3334
				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 
3335
				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";
3336
			} else {
3337
				$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 
3338
				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 
3339
				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";
3340
			}
3341
			$sth = $this->db->prepare($query);
3342
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3343
		}
3344
		
3345
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3346
	}
3347
3348
3349
	/**
3350
	* Get a list of flights to airport since 7 days
3351
	* @return Array number, icao, name and city of airports
3352
	*/
3353
3354
	public function getLast7DaysAirportsArrivalByAirlines($airport_icao = '') {
3355
		global $globalTimezone, $globalDBdriver;
3356
		if ($globalTimezone != '') {
3357
			date_default_timezone_set($globalTimezone);
3358
			$datetime = new DateTime();
3359
			$offset = $datetime->format('P');
3360
		} else $offset = '+00:00';
3361
		if ($airport_icao == '') {
3362
			if ($globalDBdriver == 'mysql') {
3363
				$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";
3364
			} else {
3365
				$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";
3366
			}
3367
			$sth = $this->db->prepare($query);
3368
			$sth->execute(array(':offset' => $offset));
3369
		} else {
3370
			if ($globalDBdriver == 'mysql') {
3371
				$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";
3372
			} else {
3373
				$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";
3374
			}
3375
			$sth = $this->db->prepare($query);
3376
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3377
		}
3378
		
3379
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3380
	}
3381
3382
3383
	/**
3384
	* Get a list of flights detected to airport since 7 days
3385
	* @return Array number, icao, name and city of airports
3386
	*/
3387
3388
	public function getLast7DaysDetectedAirportsArrivalByAirlines($airport_icao = '') {
3389
		global $globalTimezone, $globalDBdriver;
3390
		if ($globalTimezone != '') {
3391
			date_default_timezone_set($globalTimezone);
3392
			$datetime = new DateTime();
3393
			$offset = $datetime->format('P');
3394
		} else $offset = '+00:00';
3395
		if ($airport_icao == '') {
3396
			if ($globalDBdriver == 'mysql') {
3397
				$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 
3398
				FROM `spotter_output`, airport 
3399
				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 <> '' 
3400
				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";
3401
			} else {
3402
				$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 
3403
				FROM spotter_output, airport 
3404
				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 <> '' 
3405
				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";
3406
			}
3407
			$sth = $this->db->prepare($query);
3408
			$sth->execute(array(':offset' => $offset));
3409
		} else {
3410
			if ($globalDBdriver == 'mysql') {
3411
				$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 
3412
				FROM `spotter_output`, airport 
3413
				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 
3414
				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";
3415
			} else {
3416
				$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 
3417
				FROM spotter_output, airport 
3418
				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 
3419
				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";
3420
			}
3421
			$sth = $this->db->prepare($query);
3422
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3423
		}
3424
		
3425
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3426
	}
3427
3428
3429
	/**
3430
	* Gets a list of all dates
3431
	*
3432
	* @return Array list of date names
3433
	*
3434
	*/
3435
	public function getAllDates()
3436
	{
3437
		global $globalTimezone, $globalDBdriver;
3438
		if ($globalTimezone != '') {
3439
			date_default_timezone_set($globalTimezone);
3440
			$datetime = new DateTime();
3441
			$offset = $datetime->format('P');
3442
		} else $offset = '+00:00';
3443
3444
		if ($globalDBdriver == 'mysql') {
3445
			$query  = "SELECT DISTINCT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) as date
3446
								FROM spotter_output
3447
								WHERE spotter_output.date <> '' 
3448
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3449
		} else {
3450
			$query  = "SELECT DISTINCT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date
3451
								FROM spotter_output
3452
								WHERE spotter_output.date <> '' 
3453
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3454
		}
3455
		
3456
		$sth = $this->db->prepare($query);
3457
		$sth->execute(array(':offset' => $offset));
3458
    
3459
		$date_array = array();
3460
		$temp_array = array();
3461
		
3462
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3463
		{
3464
			$temp_array['date'] = $row['date'];
3465
3466
			$date_array[] = $temp_array;
3467
		}
3468
3469
		return $date_array;
3470
	}
3471
	
3472
	
3473
	
3474
	/**
3475
	* Gets all route combinations
3476
	*
3477
	* @return Array the route list
3478
	*
3479
	*/
3480
	public function getAllRoutes()
3481
	{
3482
		$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 
3483
				FROM spotter_output
3484
				WHERE spotter_output.ident <> '' 
3485
				GROUP BY route
3486
				ORDER BY route ASC";
3487
3488
		$sth = $this->db->prepare($query);
3489
		$sth->execute();
3490
3491
		$routes_array = array();
3492
		$temp_array = array();
3493
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3494
		{
3495
			$temp_array['route'] = $row['route'];
3496
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
3497
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
3498
3499
			$routes_array[] = $temp_array;
3500
		}
3501
		return $routes_array;
3502
	}
3503
3504
	/**
3505
	* Update ident spotter data
3506
	*
3507
	* @param String $flightaware_id the ID from flightaware
3508
	* @param String $ident the flight ident
3509
	* @return String success or false
3510
	*
3511
	*/	
3512
	public function updateIdentSpotterData($flightaware_id = '', $ident = '',$fromsource = NULL)
3513
	{
3514
		if (!is_numeric(substr($ident, 0, 3)))
3515
		{
3516
			if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3517
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3518
			} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3519
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3520
			} else {
3521
				$airline_array = $this->getAllAirlineInfo("NA");
3522
			}
3523
			if (count($airline_array) == 0) {
3524
				$airline_array = $this->getAllAirlineInfo("NA");
3525
			}
3526
			if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3527
				$airline_array = $this->getAllAirlineInfo("NA");
3528
			}
3529
		} else {
3530
			$airline_array = $this->getAllAirlineInfo("NA");
3531
		}
3532
                $airline_name = $airline_array[0]['name'];
3533
                $airline_icao = $airline_array[0]['icao'];
3534
                $airline_country = $airline_array[0]['country'];
3535
                $airline_type = $airline_array[0]['type'];
3536
3537
3538
		$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';
3539
                $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);
3540
3541
		try {
3542
			$sth = $this->db->prepare($query);
3543
			$sth->execute($query_values);
3544
		} catch (PDOException $e) {
3545
			return "error : ".$e->getMessage();
3546
		}
3547
		
3548
		return "success";
3549
3550
	}
3551
	/**
3552
	* Update latest spotter data
3553
	*
3554
	* @param String $flightaware_id the ID from flightaware
3555
	* @param String $ident the flight ident
3556
	* @param String $arrival_airport_icao the arrival airport
3557
	* @return String success or false
3558
	*
3559
	*/	
3560
	public function updateLatestSpotterData($flightaware_id = '', $ident = '', $latitude = '', $longitude = '', $altitude = '', $ground = false, $groundspeed = NULL, $date = '', $arrival_airport_icao = '',$arrival_airport_time = '')
3561
	{
3562
		if ($groundspeed == '') $groundspeed = NULL;
3563
		$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';
3564
                $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);
3565
3566
		try {
3567
			$sth = $this->db->prepare($query);
3568
			$sth->execute($query_values);
3569
		} catch (PDOException $e) {
3570
			return "error : ".$e->getMessage();
3571
		}
3572
		
3573
		return "success";
3574
3575
	}
3576
3577
	/**
3578
	* Adds a new spotter data
3579
	*
3580
	* @param String $flightaware_id the ID from flightaware
3581
	* @param String $ident the flight ident
3582
	* @param String $aircraft_icao the aircraft type
3583
	* @param String $departure_airport_icao the departure airport
3584
	* @param String $arrival_airport_icao the arrival airport
3585
	* @param String $latitude latitude of flight
3586
	* @param String $longitude latitude of flight
3587
	* @param String $waypoints waypoints of flight
3588
	* @param String $altitude altitude of flight
3589
	* @param String $heading heading of flight
3590
	* @param String $groundspeed speed of flight
3591
	* @param String $date date of flight
3592
	* @param String $departure_airport_time departure time of flight
3593
	* @param String $arrival_airport_time arrival time of flight
3594
	* @param String $squawk squawk code of flight
3595
	* @param String $route_stop route stop of flight
3596
	* @param String $highlight highlight or not
3597
	* @param String $ModeS ModesS code of flight
3598
	* @param String $registration registration code of flight
3599
	* @param String $pilot_id pilot id of flight (for virtual airlines)
3600
	* @param String $pilot_name pilot name of flight (for virtual airlines)
3601
	* @param String $verticalrate vertival rate of flight
3602
	* @return String success or false
3603
	*/
3604
	public function addSpotterData($flightaware_id = '', $ident = '', $aircraft_icao = '', $departure_airport_icao = '', $arrival_airport_icao = '', $latitude = '', $longitude = '', $waypoints = '', $altitude = '', $altitude_real = '',$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 = '',$source_type = '')
0 ignored issues
show
Unused Code introduced by
The parameter $altitude_real 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...
3605
	{
3606
		global $globalURL, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalDebugTimeElapsed, $globalAirlinesSource, $globalVAM;
3607
		
3608
		//if (isset($globalDebugTimeElapsed) || $globalDebugTimeElapsed == '') $globalDebugTimeElapsed = FALSE;
3609
		$Image = new Image($this->db);
3610
		$Common = new Common();
3611
		
3612
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
3613
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
3614
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
3615
		if (!isset($globalVAM)) $globalVAM = FALSE;
3616
		date_default_timezone_set('UTC');
3617
		
3618
		//getting the registration
3619
		if ($flightaware_id != "" && $registration == '')
3620
		{
3621
			if (!is_string($flightaware_id))
3622
			{
3623
				return false;
3624
			} else {
3625
				if ($ModeS != '') {
3626
					$timeelapsed = microtime(true);
3627
					$registration = $this->getAircraftRegistrationBymodeS($ModeS,$source_type);
3628
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3629
				} else {
3630
					$myhex = explode('-',$flightaware_id);
3631
					if (count($myhex) > 0) {
3632
						$timeelapsed = microtime(true);
3633
						$registration = $this->getAircraftRegistrationBymodeS($myhex[0],$source_type);
3634
						if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3635
					}
3636
				}
3637
			}
3638
		}
3639
		$fromsource = NULL;
3640
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
3641
		elseif ($format_source == 'vatsimtxt') $fromsource = 'vatsim';
3642
		elseif ($format_source == 'whazzup') $fromsource = 'ivao';
3643
		elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
3644
		elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
3645
		//getting the airline information
3646
		if ($ident != "")
3647
		{
3648
			if (!is_string($ident))
3649
			{
3650
				return false;
3651
			} else {
3652
				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'))
3653
				{
3654
					$timeelapsed = microtime(true);
3655
					if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3656
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3657
					} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3658
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3659
					} else {
3660
						$airline_array = $this->getAllAirlineInfo("NA");
3661
					}
3662
					if (count($airline_array) == 0) {
3663
						$airline_array = $this->getAllAirlineInfo("NA");
3664
					}
3665
					if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3666
						$airline_array = $this->getAllAirlineInfo("NA");
3667
					}
3668
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3669
3670
				} else {
3671
					$timeelapsed = microtime(true);
3672
					$airline_array = $this->getAllAirlineInfo("NA");
3673
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3674
				}
3675
			}
3676
		} else $airline_array = array();
3677
		
3678
		//getting the aircraft information
3679
		$aircraft_array = array();
3680
		if ($aircraft_icao != '')
3681
		{
3682
			if (!is_string($aircraft_icao))
3683
			{
3684
				return false;
3685
			} else {
3686
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3687
				{
3688
					$timeelapsed = microtime(true);
3689
					$aircraft_array = $this->getAllAircraftInfo("NA");
3690
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3691
				} else {
3692
					$timeelapsed = microtime(true);
3693
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3694
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3695
				}
3696
			}
3697
		} else {
3698
			if ($ModeS != '') {
3699
				$timeelapsed = microtime(true);
3700
				$aircraft_icao = $this->getAllAircraftType($ModeS,$source_type);
3701
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAircraftType : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3702
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3703
				{
3704
					$timeelapsed = microtime(true);
3705
					$aircraft_array = $this->getAllAircraftInfo("NA");
3706
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3707
				} else {
3708
					$timeelapsed = microtime(true);
3709
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3710
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3711
				}
3712
			}
3713
		}
3714
		
3715
		//getting the departure airport information
3716
		$departure_airport_array = array();
3717
		$departure_airport_icao = trim($departure_airport_icao);
3718
		if ($departure_airport_icao != '')
3719
		{
3720
			if (!is_string($departure_airport_icao))
3721
			{
3722
				return false;
3723
			} else {
3724
				$timeelapsed = microtime(true);
3725
				$departure_airport_array = $this->getAllAirportInfo($departure_airport_icao);
3726
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3727
			}
3728
		}
3729
		
3730
		//getting the arrival airport information
3731
		$arrival_airport_array = array();
3732
		$arrival_airport_icao = trim($arrival_airport_icao);
3733
		if ($arrival_airport_icao != '')
3734
		{
3735
			if (!is_string($arrival_airport_icao))
3736
			{
3737
				return false;
3738
			} else {
3739
				$timeelapsed = microtime(true);
3740
				$arrival_airport_array = $this->getAllAirportInfo($arrival_airport_icao);
3741
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3742
			}
3743
		}
3744
3745
		if ($latitude != "")
3746
		{
3747
			if (!is_numeric($latitude))
3748
			{
3749
				return false;
3750
			}
3751
		}
3752
		
3753
		if ($longitude != "")
3754
		{
3755
			if (!is_numeric($longitude))
3756
			{
3757
				return false;
3758
			}
3759
		}
3760
		
3761
		if ($waypoints != "")
3762
		{
3763
			if (!is_string($waypoints))
3764
			{
3765
				return false;
3766
			}
3767
		}
3768
		
3769
		if ($altitude != "")
3770
		{
3771
			if (!is_numeric($altitude))
3772
			{
3773
				return false;
3774
			}
3775
		} else $altitude = 0;
3776
		
3777
		if ($heading != "")
3778
		{
3779
			if (!is_numeric($heading))
3780
			{
3781
				return false;
3782
			}
3783
		}
3784
		
3785
		if ($groundspeed != "")
3786
		{
3787
			if (!is_numeric($groundspeed))
3788
			{
3789
				return false;
3790
			}
3791
		}
3792
3793
    
3794
		if ($date == "" || strtotime($date) < time()-20*60)
3795
		{
3796
			$date = date("Y-m-d H:i:s", time());
3797
		}
3798
3799
		//getting the aircraft image
3800
		if (($registration != "" || $registration != 'NA') && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM)
3801
		{
3802
			$timeelapsed = microtime(true);
3803
			$image_array = $Image->getSpotterImage($registration);
3804
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getSpotterImage : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3805
			if (!isset($image_array[0]['registration']))
3806
			{
3807
				//echo "Add image !!!! \n";
3808
				$Image->addSpotterImage($registration);
3809
			}
3810
			$timeelapsed = microtime(true);
3811
			$owner_info = $this->getAircraftOwnerByRegistration($registration);
3812
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftOwnerByRegistration : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3813
			if ($owner_info['owner'] != '') $aircraft_owner = ucwords(strtolower($owner_info['owner']));
3814
		}
3815
    
3816
		if (($globalIVAO || $globalVATSIM || $globalphpVMS || $globalVAM) && $aircraft_icao != '')
3817
		{
3818
            		if (isset($airline_array[0]['icao'])) $airline_icao = $airline_array[0]['icao'];
3819
            		else $airline_icao = '';
3820
			$image_array = $Image->getSpotterImage('',$aircraft_icao,$airline_icao);
3821
			if (!isset($image_array[0]['registration']))
3822
			{
3823
				//echo "Add image !!!! \n";
3824
				$Image->addSpotterImage('',$aircraft_icao,$airline_icao);
3825
			}
3826
		}
3827
    
3828
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
3829
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
3830
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
3831
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
3832
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
3833
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
3834
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3835
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3836
		$waypoints = filter_var($waypoints,FILTER_SANITIZE_STRING);
3837
		$altitude = filter_var($altitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3838
		$heading = filter_var($heading,FILTER_SANITIZE_NUMBER_INT);
3839
		$groundspeed = filter_var($groundspeed,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3840
		$squawk = filter_var($squawk,FILTER_SANITIZE_NUMBER_INT);
3841
		$route_stop = filter_var($route_stop,FILTER_SANITIZE_STRING);
3842
		$ModeS = filter_var($ModeS,FILTER_SANITIZE_STRING);
3843
		$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_STRING);
3844
		$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
3845
		$format_source = filter_var($format_source,FILTER_SANITIZE_STRING);
3846
		$verticalrate = filter_var($verticalrate,FILTER_SANITIZE_NUMBER_INT);
3847
	
3848
		if (count($airline_array) == 0) 
3849
		{
3850
                        $airline_array = $this->getAllAirlineInfo('NA');
3851
                }
3852
                if (count($aircraft_array) == 0) 
3853
                {
3854
                        $aircraft_array = $this->getAllAircraftInfo('NA');
3855
                }
3856
                if (count($departure_airport_array) == 0 || $departure_airport_array[0]['icao'] == '' || $departure_airport_icao == '') 
3857
                {
3858
                        $departure_airport_array = $this->getAllAirportInfo('NA');
3859
                }
3860
                if (count($arrival_airport_array) == 0 || $arrival_airport_array[0]['icao'] == '' || $arrival_airport_icao == '') 
3861
                {
3862
                        $arrival_airport_array = $this->getAllAirportInfo('NA');
3863
                }
3864
                if ($registration == '') $registration = 'NA';
3865
                if ($latitude == '' && $longitude == '') {
3866
            		$latitude = 0;
3867
            		$longitude = 0;
3868
            	}
3869
                if ($squawk == '' || $Common->isInteger($squawk) === false) $squawk = NULL;
3870
                if ($verticalrate == '' || $Common->isInteger($verticalrate) === false) $verticalrate = NULL;
3871
                if ($heading == '' || $Common->isInteger($heading) === false) $heading = 0;
3872
                if ($groundspeed == '' || $Common->isInteger($groundspeed) === false) $groundspeed = 0;
3873
                if (!isset($aircraft_owner)) $aircraft_owner = NULL;
3874
                $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) 
3875
                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)";
3876
3877
                $airline_name = $airline_array[0]['name'];
3878
                $airline_icao = $airline_array[0]['icao'];
3879
                $airline_country = $airline_array[0]['country'];
3880
                $airline_type = $airline_array[0]['type'];
3881
		if ($airline_type == '') {
3882
			$timeelapsed = microtime(true);
3883
			$airline_type = $this->getAircraftTypeBymodeS($ModeS);
3884
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftTypeBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3885
		}
3886
		if ($airline_type == null) $airline_type = '';
3887
                $aircraft_type = $aircraft_array[0]['type'];
3888
                $aircraft_manufacturer = $aircraft_array[0]['manufacturer'];
3889
                $departure_airport_name = $departure_airport_array[0]['name'];
3890
	        $departure_airport_city = $departure_airport_array[0]['city'];
3891
            	$departure_airport_country = $departure_airport_array[0]['country'];
3892
                
3893
                $arrival_airport_name = $arrival_airport_array[0]['name'];
3894
                $arrival_airport_city = $arrival_airport_array[0]['city'];
3895
                $arrival_airport_country = $arrival_airport_array[0]['country'];
3896
                $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);
3897
3898
		try {
3899
		        
3900
			$sth = $this->db->prepare($query);
3901
			$sth->execute($query_values);
3902
			$this->db = null;
3903
		} catch (PDOException $e) {
3904
		    return "error : ".$e->getMessage();
3905
		}
3906
		
3907
		return "success";
3908
3909
	}
3910
	
3911
  
3912
	/**
3913
	* Gets the aircraft ident within the last hour
3914
	*
3915
	* @return String the ident
3916
	*
3917
	*/
3918
	public function getIdentFromLastHour($ident)
3919
	{
3920
		global $globalDBdriver, $globalTimezone;
3921
		if ($globalDBdriver == 'mysql') {
3922
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3923
								WHERE spotter_output.ident = :ident 
3924
								AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) 
3925
								AND spotter_output.date < UTC_TIMESTAMP()";
3926
			$query_data = array(':ident' => $ident);
3927
		} else {
3928
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3929
								WHERE spotter_output.ident = :ident 
3930
								AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INTERVAL '1 HOURS'
3931
								AND spotter_output.date < now() AT TIME ZONE 'UTC'";
3932
			$query_data = array(':ident' => $ident);
3933
    		}
3934
		
3935
		$sth = $this->db->prepare($query);
3936
		$sth->execute($query_data);
3937
    		$ident_result='';
3938
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3939
		{
3940
			$ident_result = $row['ident'];
3941
		}
3942
3943
		return $ident_result;
3944
	}
3945
	
3946
	
3947
	/**
3948
	* Gets the aircraft data from the last 20 seconds
3949
	*
3950
	* @return Array the spotter data
3951
	*
3952
	*/
3953
	public function getRealTimeData($q = '')
3954
	{
3955
		global $globalDBdriver;
3956
		$additional_query = '';
3957
		if ($q != "")
3958
		{
3959
			if (!is_string($q))
3960
			{
3961
				return false;
3962
			} else {
3963
				$q_array = explode(" ", $q);
3964
				foreach ($q_array as $q_item){
3965
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
3966
					$additional_query .= " AND (";
3967
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
3968
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
3969
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
3970
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
3971
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
3972
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
3973
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
3974
					$additional_query .= "(spotter_output.ident like '%".$q_item."%')";
3975
					$additional_query .= ")";
3976
				}
3977
			}
3978
		}
3979
		if ($globalDBdriver == 'mysql') {
3980
			$query  = "SELECT spotter_output.* FROM spotter_output 
3981
				WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 20 SECOND) ".$additional_query." 
3982
				AND spotter_output.date < UTC_TIMESTAMP()";
3983
		} else {
3984
			$query  = "SELECT spotter_output.* FROM spotter_output 
3985
				WHERE spotter_output.date::timestamp >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '20 SECONDS' ".$additional_query." 
3986
				AND spotter_output.date::timestamp < CURRENT_TIMESTAMP AT TIME ZONE 'UTC'";
3987
		}
3988
		$spotter_array = $this->getDataFromDB($query, array());
3989
3990
		return $spotter_array;
3991
	}
3992
	
3993
	
3994
	
3995
	 /**
3996
	* Gets all airlines that have flown over
3997
	*
3998
	* @return Array the airline list
3999
	*
4000
	*/
4001
	public function countAllAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(), $year = '', $month = '', $day = '')
4002
	{
4003
		global $globalDBdriver;
4004
		$filter_query = $this->getFilter($filters,true,true);
4005
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4006
		 			FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.airline_icao <> 'NA'";
4007
		if ($olderthanmonths > 0) {
4008
			if ($globalDBdriver == 'mysql') {
4009
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4010
			} else {
4011
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4012
			}
4013
		}
4014
                if ($sincedate != '') {
4015
			if ($globalDBdriver == 'mysql') {
4016
				$query .= " AND spotter_output.date > '".$sincedate."'";
4017
			} else {
4018
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4019
			}
4020
		}
4021
		$query_values = array();
4022
		if ($year != '') {
4023
			if ($globalDBdriver == 'mysql') {
4024
				$query .= " AND YEAR(spotter_output.date) = :year";
4025
				$query_values = array_merge($query_values,array(':year' => $year));
4026
			} else {
4027
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4028
				$query_values = array_merge($query_values,array(':year' => $year));
4029
			}
4030
		}
4031
		if ($month != '') {
4032
			if ($globalDBdriver == 'mysql') {
4033
				$query .= " AND MONTH(spotter_output.date) = :month";
4034
				$query_values = array_merge($query_values,array(':month' => $month));
4035
			} else {
4036
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4037
				$query_values = array_merge($query_values,array(':month' => $month));
4038
			}
4039
		}
4040
		if ($day != '') {
4041
			if ($globalDBdriver == 'mysql') {
4042
				$query .= " AND DAY(spotter_output.date) = :day";
4043
				$query_values = array_merge($query_values,array(':day' => $day));
4044
			} else {
4045
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4046
				$query_values = array_merge($query_values,array(':day' => $day));
4047
			}
4048
		}
4049
		$query .= " GROUP BY spotter_output.airline_name,spotter_output.airline_icao, spotter_output.airline_country ORDER BY airline_count DESC";
4050
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4051
4052
		$sth = $this->db->prepare($query);
4053
		$sth->execute($query_values);
4054
		$airline_array = array();
4055
		$temp_array = array();
4056
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4057
		{
4058
			$temp_array['airline_name'] = $row['airline_name'];
4059
			$temp_array['airline_icao'] = $row['airline_icao'];
4060
			$temp_array['airline_count'] = $row['airline_count'];
4061
			$temp_array['airline_country'] = $row['airline_country'];
4062
			$airline_array[] = $temp_array;
4063
		}
4064
		return $airline_array;
4065
	}
4066
4067
	 /**
4068
	* Gets all pilots that have flown over
4069
	*
4070
	* @return Array the pilots list
4071
	*
4072
	*/
4073
	public function countAllPilots($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '', $month = '',$day = '')
4074
	{
4075
		global $globalDBdriver;
4076
		$filter_query = $this->getFilter($filters,true,true);
4077
		$query  = "SELECT DISTINCT spotter_output.pilot_id, s.pilot_name, COUNT(spotter_output.pilot_id) AS pilot_count, spotter_output.format_source
4078
			FROM spotter_output LEFT JOIN (SELECT DISTINCT pilot_id, pilot_name, max(date) as date FROM spotter_output GROUP BY pilot_id, pilot_name) s ON s.pilot_id = spotter_output.pilot_id".$filter_query." spotter_output.pilot_id <> ''";
4079
                if ($olderthanmonths > 0) {
4080
            		if ($globalDBdriver == 'mysql') {
4081
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4082
			} else {
4083
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4084
			}
4085
		}
4086
                if ($sincedate != '') {
4087
            		if ($globalDBdriver == 'mysql') {
4088
				$query .= " AND spotter_output.date > '".$sincedate."'";
4089
			} else {
4090
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4091
			}
4092
		}
4093
		$query_values = array();
4094
		if ($year != '') {
4095
			if ($globalDBdriver == 'mysql') {
4096
				$query .= " AND YEAR(spotter_output.date) = :year";
4097
				$query_values = array_merge($query_values,array(':year' => $year));
4098
			} else {
4099
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4100
				$query_values = array_merge($query_values,array(':year' => $year));
4101
			}
4102
		}
4103
		if ($month != '') {
4104
			if ($globalDBdriver == 'mysql') {
4105
				$query .= " AND MONTH(spotter_output.date) = :month";
4106
				$query_values = array_merge($query_values,array(':month' => $month));
4107
			} else {
4108
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4109
				$query_values = array_merge($query_values,array(':month' => $month));
4110
			}
4111
		}
4112
		if ($day != '') {
4113
			if ($globalDBdriver == 'mysql') {
4114
				$query .= " AND DAY(spotter_output.date) = :day";
4115
				$query_values = array_merge($query_values,array(':day' => $day));
4116
			} else {
4117
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4118
				$query_values = array_merge($query_values,array(':day' => $day));
4119
			}
4120
		}
4121
		
4122
		$query .= " GROUP BY spotter_output.pilot_id,s.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
4123
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4124
      
4125
		
4126
		$sth = $this->db->prepare($query);
4127
		$sth->execute($query_values);
4128
		$airline_array = array();
4129
		$temp_array = array();
4130
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4131
		{
4132
			$temp_array['pilot_name'] = $row['pilot_name'];
4133
			$temp_array['pilot_id'] = $row['pilot_id'];
4134
			$temp_array['pilot_count'] = $row['pilot_count'];
4135
			$temp_array['format_source'] = $row['format_source'];
4136
			$airline_array[] = $temp_array;
4137
		}
4138
		return $airline_array;
4139
	}
4140
	
4141
	/**
4142
	* Gets all pilots that have flown over
4143
	*
4144
	* @return Array the pilots list
4145
	*
4146
	*/
4147
	public function countAllPilotsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '')
4148
	{
4149
		global $globalDBdriver;
4150
		$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
4151
		 			FROM spotter_output WHERE spotter_output.pilot_id <> '' ";
4152
                if ($olderthanmonths > 0) {
4153
            		if ($globalDBdriver == 'mysql') {
4154
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4155
			} else {
4156
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4157
			}
4158
		}
4159
                if ($sincedate != '') {
4160
            		if ($globalDBdriver == 'mysql') {
4161
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4162
			} else {
4163
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4164
			}
4165
		}
4166
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
4167
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4168
      
4169
		
4170
		$sth = $this->db->prepare($query);
4171
		$sth->execute();
4172
      
4173
		$airline_array = array();
4174
		$temp_array = array();
4175
        
4176
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4177
		{
4178
			$temp_array['pilot_name'] = $row['pilot_name'];
4179
			$temp_array['pilot_id'] = $row['pilot_id'];
4180
			$temp_array['pilot_count'] = $row['pilot_count'];
4181
			$temp_array['airline_icao'] = $row['airline_icao'];
4182
			$temp_array['format_source'] = $row['format_source'];
4183
			$airline_array[] = $temp_array;
4184
		}
4185
		return $airline_array;
4186
	}
4187
	
4188
	 /**
4189
	* Gets all owner that have flown over
4190
	*
4191
	* @return Array the pilots list
4192
	*
4193
	*/
4194
	public function countAllOwners($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
4195
	{
4196
		global $globalDBdriver;
4197
		$filter_query = $this->getFilter($filters,true,true);
4198
		$query  = "SELECT DISTINCT spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
4199
					FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL";
4200
                if ($olderthanmonths > 0) {
4201
            		if ($globalDBdriver == 'mysql') {
4202
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4203
			} else {
4204
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4205
			}
4206
		}
4207
                if ($sincedate != '') {
4208
            		if ($globalDBdriver == 'mysql') {
4209
				$query .= " AND spotter_output.date > '".$sincedate."' ";
4210
			} else {
4211
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4212
			}
4213
		}
4214
		$query_values = array();
4215
		if ($year != '') {
4216
			if ($globalDBdriver == 'mysql') {
4217
				$query .= " AND YEAR(spotter_output.date) = :year";
4218
				$query_values = array_merge($query_values,array(':year' => $year));
4219
			} else {
4220
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4221
				$query_values = array_merge($query_values,array(':year' => $year));
4222
			}
4223
		}
4224
		if ($month != '') {
4225
			if ($globalDBdriver == 'mysql') {
4226
				$query .= " AND MONTH(spotter_output.date) = :month";
4227
				$query_values = array_merge($query_values,array(':month' => $month));
4228
			} else {
4229
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4230
				$query_values = array_merge($query_values,array(':month' => $month));
4231
			}
4232
		}
4233
		if ($day != '') {
4234
			if ($globalDBdriver == 'mysql') {
4235
				$query .= " AND DAY(spotter_output.date) = :day";
4236
				$query_values = array_merge($query_values,array(':day' => $day));
4237
			} else {
4238
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4239
				$query_values = array_merge($query_values,array(':day' => $day));
4240
			}
4241
		}
4242
		$query .= " GROUP BY spotter_output.owner_name ORDER BY owner_count DESC";
4243
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4244
		
4245
		$sth = $this->db->prepare($query);
4246
		$sth->execute($query_values);
4247
		$airline_array = array();
4248
		$temp_array = array();
4249
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4250
		{
4251
			$temp_array['owner_name'] = $row['owner_name'];
4252
			$temp_array['owner_count'] = $row['owner_count'];
4253
			$airline_array[] = $temp_array;
4254
		}
4255
		return $airline_array;
4256
	}
4257
	
4258
	 /**
4259
	* Gets all owner that have flown over
4260
	*
4261
	* @return Array the pilots list
4262
	*
4263
	*/
4264
	public function countAllOwnersByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
4265
	{
4266
		global $globalDBdriver;
4267
		$filter_query = $this->getFilter($filters,true,true);
4268
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
4269
		 			FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL ";
4270
                if ($olderthanmonths > 0) {
4271
            		if ($globalDBdriver == 'mysql') {
4272
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4273
			} else {
4274
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4275
			}
4276
		}
4277
                if ($sincedate != '') {
4278
            		if ($globalDBdriver == 'mysql') {
4279
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4280
			} else {
4281
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4282
			}
4283
		}
4284
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.owner_name ORDER BY owner_count DESC";
4285
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4286
      
4287
		
4288
		$sth = $this->db->prepare($query);
4289
		$sth->execute();
4290
      
4291
		$airline_array = array();
4292
		$temp_array = array();
4293
        
4294
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4295
		{
4296
			$temp_array['owner_name'] = $row['owner_name'];
4297
			$temp_array['owner_count'] = $row['owner_count'];
4298
			$temp_array['airline_icao'] = $row['airline_icao'];
4299
			$airline_array[] = $temp_array;
4300
		}
4301
		return $airline_array;
4302
	}
4303
4304
	/**
4305
	* Gets all airlines that have flown over by aircraft
4306
	*
4307
	* @return Array the airline list
4308
	*
4309
	*/
4310
	public function countAllAirlinesByAircraft($aircraft_icao,$filters = array())
4311
	{
4312
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4313
		$filter_query = $this->getFilter($filters,true,true);
4314
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4315
		 	    FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
4316
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
4317
			    ORDER BY airline_count DESC";
4318
      
4319
		
4320
		$sth = $this->db->prepare($query);
4321
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4322
      
4323
		$airline_array = array();
4324
		$temp_array = array();
4325
        
4326
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4327
		{
4328
			$temp_array['airline_name'] = $row['airline_name'];
4329
			$temp_array['airline_icao'] = $row['airline_icao'];
4330
			$temp_array['airline_count'] = $row['airline_count'];
4331
			$temp_array['airline_country'] = $row['airline_country'];
4332
4333
			$airline_array[] = $temp_array;
4334
		}
4335
4336
		return $airline_array;
4337
	}
4338
4339
4340
	/**
4341
	* Gets all airline countries that have flown over by aircraft
4342
	*
4343
	* @return Array the airline country list
4344
	*
4345
	*/
4346
	public function countAllAirlineCountriesByAircraft($aircraft_icao,$filters = array())
4347
	{
4348
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4349
		$filter_query = $this->getFilter($filters,true,true);
4350
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count, countries.iso3 AS airline_country_iso3 
4351
			FROM spotter_output, countries ".$filter_query." countries.name = spotter_output.airline_country AND spotter_output.airline_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
4352
			GROUP BY spotter_output.airline_country, countries.iso3
4353
			ORDER BY airline_country_count DESC
4354
			LIMIT 10 OFFSET 0";
4355
      
4356
		
4357
		$sth = $this->db->prepare($query);
4358
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4359
      
4360
		$airline_country_array = array();
4361
		$temp_array = array();
4362
        
4363
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4364
		{
4365
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4366
			$temp_array['airline_country'] = $row['airline_country'];
4367
			$temp_array['airline_country_iso3'] = $row['airline_country_iso3'];
4368
 
4369
			$airline_country_array[] = $temp_array;
4370
		}
4371
		return $airline_country_array;
4372
	}
4373
4374
4375
	
4376
	
4377
	/**
4378
	* Gets all airlines that have flown over by airport
4379
	*
4380
	* @return Array the airline list
4381
	*
4382
	*/
4383
	public function countAllAirlinesByAirport($airport_icao,$filters = array())
4384
	{
4385
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4386
		$filter_query = $this->getFilter($filters,true,true);
4387
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4388
		    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 ) 
4389
                    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country
4390
		    ORDER BY airline_count DESC";
4391
      
4392
		
4393
		$sth = $this->db->prepare($query);
4394
		$sth->execute(array(':airport_icao' => $airport_icao));
4395
      
4396
		$airline_array = array();
4397
		$temp_array = array();
4398
        
4399
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4400
		{
4401
			$temp_array['airline_name'] = $row['airline_name'];
4402
			$temp_array['airline_icao'] = $row['airline_icao'];
4403
			$temp_array['airline_count'] = $row['airline_count'];
4404
			$temp_array['airline_country'] = $row['airline_country'];
4405
4406
			$airline_array[] = $temp_array;
4407
		}
4408
		return $airline_array;
4409
	}
4410
4411
4412
	/**
4413
	* Gets all airline countries that have flown over by airport icao
4414
	*
4415
	* @return Array the airline country list
4416
	*
4417
	*/
4418
	public function countAllAirlineCountriesByAirport($airport_icao,$filters = array())
4419
	{
4420
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4421
		$filter_query = $this->getFilter($filters,true,true);
4422
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count, countries.iso3 AS airline_country_iso3 
4423
			FROM countries, spotter_output".$filter_query." countries.name = spotter_output.airline_country AND spotter_output.airline_country <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao )
4424
			GROUP BY spotter_output.airline_country, countries.iso3
4425
			ORDER BY airline_country_count DESC
4426
			LIMIT 10 OFFSET 0";
4427
4428
		
4429
		$sth = $this->db->prepare($query);
4430
		$sth->execute(array(':airport_icao' => $airport_icao));
4431
4432
		$airline_country_array = array();
4433
		$temp_array = array();
4434
        
4435
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4436
		{
4437
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4438
			$temp_array['airline_country'] = $row['airline_country'];
4439
			$temp_array['airline_country_iso3'] = $row['airline_country_iso3'];
4440
 
4441
			$airline_country_array[] = $temp_array;
4442
		}
4443
		return $airline_country_array;
4444
	}
4445
4446
4447
	/**
4448
	* Gets all airlines that have flown over by aircraft manufacturer
4449
	*
4450
	* @return Array the airline list
4451
	*
4452
	*/
4453
	public function countAllAirlinesByManufacturer($aircraft_manufacturer,$filters = array())
4454
	{
4455
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4456
		$filter_query = $this->getFilter($filters,true,true);
4457
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4458
		 			FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4459
					GROUP BY spotter_output.airline_name
4460
					ORDER BY airline_count DESC";
4461
 
4462
		$sth = $this->db->prepare($query);
4463
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4464
 
4465
		$airline_array = array();
4466
		$temp_array = array();
4467
        
4468
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4469
		{
4470
			$temp_array['airline_name'] = $row['airline_name'];
4471
			$temp_array['airline_icao'] = $row['airline_icao'];
4472
			$temp_array['airline_count'] = $row['airline_count'];
4473
			$temp_array['airline_country'] = $row['airline_country'];
4474
4475
			$airline_array[] = $temp_array;
4476
		}
4477
		return $airline_array;
4478
	}
4479
4480
4481
4482
	/**
4483
	* Gets all airline countries that have flown over by aircraft manufacturer
4484
	*
4485
	* @return Array the airline country list
4486
	*
4487
	*/
4488
	public function countAllAirlineCountriesByManufacturer($aircraft_manufacturer,$filters = array())
4489
	{
4490
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4491
		$filter_query = $this->getFilter($filters,true,true);
4492
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4493
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4494
					GROUP BY spotter_output.airline_country
4495
					ORDER BY airline_country_count DESC
4496
					LIMIT 10 OFFSET 0";
4497
      
4498
		
4499
		$sth = $this->db->prepare($query);
4500
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4501
4502
		$airline_country_array = array();
4503
		$temp_array = array();
4504
        
4505
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4506
		{
4507
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4508
			$temp_array['airline_country'] = $row['airline_country'];
4509
			$airline_country_array[] = $temp_array;
4510
		}
4511
		return $airline_country_array;
4512
	}
4513
4514
4515
	/**
4516
	* Gets all airlines that have flown over by date
4517
	*
4518
	* @return Array the airline list
4519
	*
4520
	*/
4521
	public function countAllAirlinesByDate($date,$filters = array())
4522
	{
4523
		global $globalTimezone, $globalDBdriver;
4524
		$filter_query = $this->getFilter($filters,true,true);
4525
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4526
		if ($globalTimezone != '') {
4527
			date_default_timezone_set($globalTimezone);
4528
			$datetime = new DateTime($date);
4529
			$offset = $datetime->format('P');
4530
		} else $offset = '+00:00';
4531
4532
		if ($globalDBdriver == 'mysql') {
4533
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4534
		 			FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4535
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country 
4536
					ORDER BY airline_count DESC";
4537
		} else {
4538
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4539
		 			FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4540
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country
4541
					ORDER BY airline_count DESC";
4542
		}
4543
		
4544
		$sth = $this->db->prepare($query);
4545
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4546
4547
		$airline_array = array();
4548
		$temp_array = array();
4549
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4550
		{
4551
			$temp_array['airline_name'] = $row['airline_name'];
4552
			$temp_array['airline_icao'] = $row['airline_icao'];
4553
			$temp_array['airline_count'] = $row['airline_count'];
4554
			$temp_array['airline_country'] = $row['airline_country'];
4555
 
4556
			$airline_array[] = $temp_array;
4557
		}
4558
4559
		return $airline_array;
4560
	}	
4561
	
4562
	
4563
	/**
4564
	* Gets all airline countries that have flown over by date
4565
	*
4566
	* @return Array the airline country list
4567
	*
4568
	*/
4569
	public function countAllAirlineCountriesByDate($date,$filters = array())
4570
	{
4571
		global $globalTimezone, $globalDBdriver;
4572
		$filter_query = $this->getFilter($filters,true,true);
4573
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4574
		if ($globalTimezone != '') {
4575
			date_default_timezone_set($globalTimezone);
4576
			$datetime = new DateTime($date);
4577
			$offset = $datetime->format('P');
4578
		} else $offset = '+00:00';
4579
		
4580
		if ($globalDBdriver == 'mysql') {
4581
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4582
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4583
					GROUP BY spotter_output.airline_country
4584
					ORDER BY airline_country_count DESC
4585
					LIMIT 10 OFFSET 0";
4586
		} else {
4587
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4588
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4589
					GROUP BY spotter_output.airline_country
4590
					ORDER BY airline_country_count DESC
4591
					LIMIT 10 OFFSET 0";
4592
		}
4593
4594
		$sth = $this->db->prepare($query);
4595
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4596
 
4597
		$airline_country_array = array();
4598
		$temp_array = array();
4599
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4600
		{
4601
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4602
			$temp_array['airline_country'] = $row['airline_country'];
4603
4604
			$airline_country_array[] = $temp_array;
4605
		}
4606
		return $airline_country_array;
4607
	}
4608
4609
4610
	/**
4611
	* Gets all airlines that have flown over by ident/callsign
4612
	*
4613
	* @return Array the airline list
4614
	*
4615
	*/
4616
	public function countAllAirlinesByIdent($ident,$filters = array())
4617
	{
4618
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
4619
		$filter_query = $this->getFilter($filters,true,true);
4620
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4621
		 		FROM spotter_output".$filter_query." spotter_output.ident = :ident  
4622
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4623
				ORDER BY airline_count DESC";
4624
      
4625
		
4626
		$sth = $this->db->prepare($query);
4627
		$sth->execute(array(':ident' => $ident));
4628
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4629
	}
4630
4631
	/**
4632
	* Gets all airlines by owner
4633
	*
4634
	* @return Array the airline list
4635
	*
4636
	*/
4637
	public function countAllAirlinesByOwner($owner,$filters = array())
4638
	{
4639
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
4640
		$filter_query = $this->getFilter($filters,true,true);
4641
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4642
		 		FROM spotter_output".$filter_query." spotter_output.owner_name = :owner  
4643
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4644
				ORDER BY airline_count DESC";
4645
      
4646
		
4647
		$sth = $this->db->prepare($query);
4648
		$sth->execute(array(':owner' => $owner));
4649
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4650
	}
4651
4652
	/**
4653
	* Gets flight duration by owner
4654
	*
4655
	* @return String Duration of all flights
4656
	*
4657
	*/
4658
	public function getFlightDurationByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
4659
	{
4660
		global $globalDBdriver;
4661
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
4662
		$filter_query = $this->getFilter($filters,true,true);
4663
		$query  = "SELECT SUM(last_seen - date) AS duration 
4664
				FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
4665
				AND last_seen > date";
4666
		$query_values = array();
4667
		if ($year != '') {
4668
			if ($globalDBdriver == 'mysql') {
4669
				$query .= " AND YEAR(spotter_output.date) = :year";
4670
				$query_values = array_merge($query_values,array(':year' => $year));
4671
			} else {
4672
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4673
				$query_values = array_merge($query_values,array(':year' => $year));
4674
			}
4675
		}
4676
		if ($month != '') {
4677
			if ($globalDBdriver == 'mysql') {
4678
				$query .= " AND MONTH(spotter_output.date) = :month";
4679
				$query_values = array_merge($query_values,array(':month' => $month));
4680
			} else {
4681
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4682
				$query_values = array_merge($query_values,array(':month' => $month));
4683
			}
4684
		}
4685
		if ($day != '') {
4686
			if ($globalDBdriver == 'mysql') {
4687
				$query .= " AND DAY(spotter_output.date) = :day";
4688
				$query_values = array_merge($query_values,array(':day' => $day));
4689
			} else {
4690
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4691
				$query_values = array_merge($query_values,array(':day' => $day));
4692
			}
4693
		}
4694
		$query_values = array_merge($query_values,array(':owner' => $owner));
4695
		$sth = $this->db->prepare($query);
4696
		$sth->execute($query_values);
4697
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4698
		if (is_numeric($result[0]['duration'])) return gmdate('H:i:s',$result[0]['duration']);
4699
		elseif ($result[0]['duration'] == '') return 0;
4700
		else return $result[0]['duration'];
4701
	}
4702
4703
	/**
4704
	* Count flights by owner
4705
	*
4706
	* @return String Duration of all flights
4707
	*
4708
	*/
4709
	public function countFlightsByOwner($owner,$filters = array())
4710
	{
4711
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
4712
		$filter_query = $this->getFilter($filters,true,true);
4713
		$query  = "SELECT COUNT(*) AS nb 
4714
				FROM spotter_output".$filter_query." spotter_output.owner_name = :owner";
4715
		$query_values = array();
4716
		$query_values = array_merge($query_values,array(':owner' => $owner));
4717
		$sth = $this->db->prepare($query);
4718
		$sth->execute($query_values);
4719
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4720
		return $result[0]['nb'];
4721
	}
4722
4723
	/**
4724
	* Count flights by pilot
4725
	*
4726
	* @return String Duration of all flights
4727
	*
4728
	*/
4729
	public function countFlightsByPilot($pilot,$filters = array())
4730
	{
4731
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
4732
		$filter_query = $this->getFilter($filters,true,true);
4733
		$query  = "SELECT COUNT(*) AS nb 
4734
				FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilod_id = :pilot)";
4735
		$query_values = array();
4736
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
4737
		$sth = $this->db->prepare($query);
4738
		$sth->execute($query_values);
4739
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4740
		return $result[0]['nb'];
4741
	}
4742
4743
	/**
4744
	* Gets flight duration by pilot
4745
	*
4746
	* @return String Duration of all flights
4747
	*
4748
	*/
4749
	public function getFlightDurationByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
4750
	{
4751
		global $globalDBdriver;
4752
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
4753
		$filter_query = $this->getFilter($filters,true,true);
4754
		$query  = "SELECT SUM(last_seen - date) AS duration 
4755
		 		FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
4756
		 		AND last_seen > date";
4757
		$query_values = array();
4758
		if ($year != '') {
4759
			if ($globalDBdriver == 'mysql') {
4760
				$query .= " AND YEAR(spotter_output.date) = :year";
4761
				$query_values = array_merge($query_values,array(':year' => $year));
4762
			} else {
4763
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4764
				$query_values = array_merge($query_values,array(':year' => $year));
4765
			}
4766
		}
4767
		if ($month != '') {
4768
			if ($globalDBdriver == 'mysql') {
4769
				$query .= " AND MONTH(spotter_output.date) = :month";
4770
				$query_values = array_merge($query_values,array(':month' => $month));
4771
			} else {
4772
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4773
				$query_values = array_merge($query_values,array(':month' => $month));
4774
			}
4775
		}
4776
		if ($day != '') {
4777
			if ($globalDBdriver == 'mysql') {
4778
				$query .= " AND DAY(spotter_output.date) = :day";
4779
				$query_values = array_merge($query_values,array(':day' => $day));
4780
			} else {
4781
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4782
				$query_values = array_merge($query_values,array(':day' => $day));
4783
			}
4784
		}
4785
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
4786
		$sth = $this->db->prepare($query);
4787
		$sth->execute($query_values);
4788
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4789
		if (is_int($result[0]['duration'])) return gmdate('H:i:s',$result[0]['duration']);
4790
		else return $result[0]['duration'];
4791
	}
4792
4793
	/**
4794
	* Gets all airlines used by pilot
4795
	*
4796
	* @return Array the airline list
4797
	*
4798
	*/
4799
	public function countAllAirlinesByPilot($pilot,$filters = array())
4800
	{
4801
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
4802
		$filter_query = $this->getFilter($filters,true,true);
4803
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4804
		 		FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
4805
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4806
				ORDER BY airline_count DESC";
4807
      
4808
		
4809
		$sth = $this->db->prepare($query);
4810
		$sth->execute(array(':pilot' => $pilot));
4811
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4812
	}
4813
4814
	/**
4815
	* Gets all airlines that have flown over by route
4816
	*
4817
	* @return Array the airline list
4818
	*
4819
	*/
4820
	public function countAllAirlinesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
4821
	{
4822
		$filter_query = $this->getFilter($filters,true,true);
4823
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4824
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4825
4826
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4827
		 			FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
4828
					GROUP BY spotter_output.airline_name
4829
					ORDER BY airline_count DESC";
4830
      
4831
		
4832
		$sth = $this->db->prepare($query);
4833
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4834
      
4835
		$airline_array = array();
4836
		$temp_array = array();
4837
        
4838
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4839
		{
4840
			$temp_array['airline_name'] = $row['airline_name'];
4841
			$temp_array['airline_icao'] = $row['airline_icao'];
4842
			$temp_array['airline_count'] = $row['airline_count'];
4843
			$temp_array['airline_country'] = $row['airline_country'];
4844
4845
			$airline_array[] = $temp_array;
4846
		}
4847
		return $airline_array;
4848
	}
4849
4850
	/**
4851
	* Gets all airline countries that have flown over by route
4852
	*
4853
	* @return Array the airline country list
4854
	*
4855
	*/
4856
	public function countAllAirlineCountriesByRoute($departure_airport_icao, $arrival_airport_icao,$filters= array())
4857
	{
4858
		$filter_query = $this->getFilter($filters,true,true);
4859
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4860
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4861
      
4862
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4863
		 		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) 
4864
				GROUP BY spotter_output.airline_country
4865
				ORDER BY airline_country_count DESC
4866
				LIMIT 10 OFFSET 0";
4867
      
4868
		
4869
		$sth = $this->db->prepare($query);
4870
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4871
      
4872
		$airline_country_array = array();
4873
		$temp_array = array();
4874
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4875
		{
4876
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4877
			$temp_array['airline_country'] = $row['airline_country'];
4878
4879
			$airline_country_array[] = $temp_array;
4880
		}
4881
4882
		return $airline_country_array;
4883
	}
4884
4885
4886
	/**
4887
	* Gets all airlines that have flown over by country
4888
	*
4889
	* @return Array the airline list
4890
	*
4891
	*/
4892
	public function countAllAirlinesByCountry($country,$filters = array())
4893
	{
4894
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4895
		$filter_query = $this->getFilter($filters,true,true);
4896
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4897
		 	    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
4898
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
4899
			    ORDER BY airline_count DESC";
4900
      
4901
		
4902
		$sth = $this->db->prepare($query);
4903
		$sth->execute(array(':country' => $country));
4904
4905
		$airline_array = array();
4906
		$temp_array = array();
4907
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4908
		{
4909
			$temp_array['airline_name'] = $row['airline_name'];
4910
			$temp_array['airline_icao'] = $row['airline_icao'];
4911
			$temp_array['airline_count'] = $row['airline_count'];
4912
			$temp_array['airline_country'] = $row['airline_country'];
4913
 
4914
			$airline_array[] = $temp_array;
4915
		}
4916
		return $airline_array;
4917
	}
4918
4919
4920
	/**
4921
	* Gets all airline countries that have flown over by country
4922
	*
4923
	* @return Array the airline country list
4924
	*
4925
	*/
4926
	public function countAllAirlineCountriesByCountry($country,$filters = array())
4927
	{
4928
		$filter_query = $this->getFilter($filters,true,true);
4929
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4930
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count, countries.iso3 AS airline_country_iso3
4931
			FROM countries,spotter_output".$filter_query." countries.name = spotter_output.airline_country AND spotter_output.airline_country <> '' AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country) OR spotter_output.airline_country = :country) 
4932
			GROUP BY spotter_output.airline_country, countries.iso3
4933
			ORDER BY airline_country_count DESC
4934
			LIMIT 10 OFFSET 0";
4935
		
4936
		$sth = $this->db->prepare($query);
4937
		$sth->execute(array(':country' => $country));
4938
4939
		$airline_country_array = array();
4940
		$temp_array = array();
4941
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4942
		{
4943
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4944
			$temp_array['airline_country'] = $row['airline_country'];
4945
			$temp_array['airline_country_iso3'] = $row['airline_country_iso3'];
4946
			$airline_country_array[] = $temp_array;
4947
		}
4948
		return $airline_country_array;
4949
	}
4950
4951
4952
	/**
4953
	* Gets all airlines countries
4954
	*
4955
	* @return Array the airline country list
4956
	*
4957
	*/
4958
	public function countAllAirlineCountries($limit = true, $filters = array(), $year = '', $month = '', $day = '')
4959
	{
4960
		global $globalDBdriver;
4961
		$filter_query = $this->getFilter($filters,true,true);
4962
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count, countries.iso3 AS airline_country_iso3
4963
		 			FROM countries, spotter_output".$filter_query." countries.name = spotter_output.airline_country AND spotter_output.airline_country <> '' AND spotter_output.airline_country <> 'NA'";
4964
		$query_values = array();
4965
		if ($year != '') {
4966
			if ($globalDBdriver == 'mysql') {
4967
				$query .= " AND YEAR(spotter_output.date) = :year";
4968
				$query_values = array_merge($query_values,array(':year' => $year));
4969
			} else {
4970
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4971
				$query_values = array_merge($query_values,array(':year' => $year));
4972
			}
4973
		}
4974
		if ($month != '') {
4975
			if ($globalDBdriver == 'mysql') {
4976
				$query .= " AND MONTH(spotter_output.date) = :month";
4977
				$query_values = array_merge($query_values,array(':month' => $month));
4978
			} else {
4979
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4980
				$query_values = array_merge($query_values,array(':month' => $month));
4981
			}
4982
		}
4983
		if ($day != '') {
4984
			if ($globalDBdriver == 'mysql') {
4985
				$query .= " AND DAY(spotter_output.date) = :day";
4986
				$query_values = array_merge($query_values,array(':day' => $day));
4987
			} else {
4988
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4989
				$query_values = array_merge($query_values,array(':day' => $day));
4990
			}
4991
		}
4992
		$query .= " GROUP BY spotter_output.airline_country, countries.iso3
4993
					ORDER BY airline_country_count DESC";
4994
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4995
      
4996
		$sth = $this->db->prepare($query);
4997
		$sth->execute($query_values);
4998
4999
		$airline_array = array();
5000
		$temp_array = array();
5001
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5002
		{
5003
			$temp_array['airline_country_count'] = $row['airline_country_count'];
5004
			$temp_array['airline_country'] = $row['airline_country'];
5005
			$temp_array['airline_country_iso3'] = $row['airline_country_iso3'];
5006
5007
			$airline_array[] = $temp_array;
5008
		}
5009
		return $airline_array;
5010
	}
5011
5012
	/**
5013
	* Gets all number of flight over countries
5014
	*
5015
	* @return Array the airline country list
5016
	*
5017
	*/
5018
	public function countAllFlightOverCountries($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
5019
	{
5020
		global $globalDBdriver;
5021
		//$filter_query = $this->getFilter($filters,true,true);
5022
		$Connection= new Connection($this->db);
5023
		if (!$Connection->tableExists('countries')) return array();
5024
		/*
5025
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
5026
					FROM countries c, spotter_output s
5027
					WHERE Within(GeomFromText(CONCAT('POINT(',s.longitude,' ',s.latitude,')')), ogc_geom) ";
5028
		*/
5029
/*
5030
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
5031
					FROM countries c, spotter_live s
5032
					WHERE c.iso2 = s.over_country ";
5033
		$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 ";
5034
*/
5035
		require_once('class.SpotterLive.php');
5036
		$SpotterLive = new SpotterLive();
5037
		$filter_query = $SpotterLive->getFilter($filters,true,true);
5038
		$filter_query .= ' over_country IS NOT NULL';
5039
                if ($olderthanmonths > 0) {
5040
			if ($globalDBdriver == 'mysql') {
5041
				$filter_query .= ' AND spotter_live.date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5042
			} else {
5043
				$filter_query .= " AND spotter_live.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5044
			}
5045
		}
5046
                if ($sincedate != '') {
5047
            		if ($globalDBdriver == 'mysql') {
5048
				$filter_query .= " AND spotter_live.date > '".$sincedate."' ";
5049
			} else {
5050
				$filter_query .= " AND spotter_live.date > CAST('".$sincedate."' AS TIMESTAMP)";
5051
			}
5052
		}
5053
		$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 ";
5054
		$query .= "GROUP BY c.name,c.iso3,c.iso2 ORDER BY nb DESC";
5055
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5056
      
5057
		
5058
		$sth = $this->db->prepare($query);
5059
		$sth->execute();
5060
 
5061
		$flight_array = array();
5062
		$temp_array = array();
5063
        
5064
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5065
		{
5066
			$temp_array['flight_count'] = $row['nb'];
5067
			$temp_array['flight_country'] = $row['name'];
5068
			$temp_array['flight_country_iso3'] = $row['iso3'];
5069
			$temp_array['flight_country_iso2'] = $row['iso2'];
5070
			$flight_array[] = $temp_array;
5071
		}
5072
		return $flight_array;
5073
	}
5074
	
5075
	
5076
	/**
5077
	* Gets all aircraft types that have flown over
5078
	*
5079
	* @return Array the aircraft list
5080
	*
5081
	*/
5082
	public function countAllAircraftTypes($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
5083
	{
5084
		global $globalDBdriver;
5085
		$filter_query = $this->getFilter($filters,true,true);
5086
		$query  = "SELECT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
5087
		    FROM spotter_output ".$filter_query." spotter_output.aircraft_name  <> '' AND spotter_output.aircraft_icao  <> ''";
5088
		if ($olderthanmonths > 0) {
5089
			if ($globalDBdriver == 'mysql') {
5090
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5091
			} else {
5092
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5093
			}
5094
		}
5095
		if ($sincedate != '') {
5096
			if ($globalDBdriver == 'mysql') {
5097
				$query .= " AND spotter_output.date > '".$sincedate."'";
5098
			} else {
5099
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5100
			}
5101
		}
5102
		$query_values = array();
5103
		if ($year != '') {
5104
			if ($globalDBdriver == 'mysql') {
5105
				$query .= " AND YEAR(spotter_output.date) = :year";
5106
				$query_values = array_merge($query_values,array(':year' => $year));
5107
			} else {
5108
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5109
				$query_values = array_merge($query_values,array(':year' => $year));
5110
			}
5111
		}
5112
		if ($month != '') {
5113
			if ($globalDBdriver == 'mysql') {
5114
				$query .= " AND MONTH(spotter_output.date) = :month";
5115
				$query_values = array_merge($query_values,array(':month' => $month));
5116
			} else {
5117
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5118
				$query_values = array_merge($query_values,array(':month' => $month));
5119
			}
5120
		}
5121
		if ($day != '') {
5122
			if ($globalDBdriver == 'mysql') {
5123
				$query .= " AND DAY(spotter_output.date) = :day";
5124
				$query_values = array_merge($query_values,array(':day' => $day));
5125
			} else {
5126
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5127
				$query_values = array_merge($query_values,array(':day' => $day));
5128
			}
5129
		}
5130
5131
		$query .= " GROUP BY spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer ORDER BY aircraft_icao_count DESC";
5132
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5133
 
5134
		$sth = $this->db->prepare($query);
5135
		$sth->execute($query_values);
5136
5137
		$aircraft_array = array();
5138
		$temp_array = array();
5139
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5140
		{
5141
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5142
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5143
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5144
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5145
			$aircraft_array[] = $temp_array;
5146
		}
5147
		return $aircraft_array;
5148
	}
5149
5150
	/**
5151
	* Gets all aircraft types that have flown over by airline
5152
	*
5153
	* @return Array the aircraft list
5154
	*
5155
	*/
5156
	public function countAllAircraftTypesByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '',$month = '', $day = '')
5157
	{
5158
		global $globalDBdriver;
5159
		$filter_query = $this->getFilter($filters,true,true);
5160
		$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 
5161
		    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'";
5162
		if ($olderthanmonths > 0) {
5163
			if ($globalDBdriver == 'mysql') {
5164
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5165
			} else {
5166
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5167
			}
5168
		}
5169
		if ($sincedate != '') {
5170
			if ($globalDBdriver == 'mysql') {
5171
				$query .= " AND spotter_output.date > '".$sincedate."'";
5172
			} else {
5173
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5174
			}
5175
		}
5176
		$query_values = array();
5177
		if ($year != '') {
5178
			if ($globalDBdriver == 'mysql') {
5179
				$query .= " AND YEAR(spotter_output.date) = :year";
5180
				$query_values = array_merge($query_values,array(':year' => $year));
5181
			} else {
5182
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5183
				$query_values = array_merge($query_values,array(':year' => $year));
5184
			}
5185
		}
5186
		if ($month != '') {
5187
			if ($globalDBdriver == 'mysql') {
5188
				$query .= " AND MONTH(spotter_output.date) = :month";
5189
				$query_values = array_merge($query_values,array(':month' => $month));
5190
			} else {
5191
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5192
				$query_values = array_merge($query_values,array(':month' => $month));
5193
			}
5194
		}
5195
		if ($day != '') {
5196
			if ($globalDBdriver == 'mysql') {
5197
				$query .= " AND DAY(spotter_output.date) = :day";
5198
				$query_values = array_merge($query_values,array(':day' => $day));
5199
			} else {
5200
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5201
				$query_values = array_merge($query_values,array(':day' => $day));
5202
			}
5203
		}
5204
5205
		$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";
5206
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5207
 
5208
		$sth = $this->db->prepare($query);
5209
		$sth->execute($query_values);
5210
5211
		$aircraft_array = array();
5212
		$temp_array = array();
5213
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5214
		{
5215
			$temp_array['airline_icao'] = $row['airline_icao'];
5216
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5217
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5218
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5219
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5220
			$aircraft_array[] = $temp_array;
5221
		}
5222
		return $aircraft_array;
5223
	}
5224
5225
	/**
5226
	* Gets all aircraft types that have flown over by months
5227
	*
5228
	* @return Array the aircraft list
5229
	*
5230
	*/
5231
	public function countAllAircraftTypesByMonths($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
5232
	{
5233
		global $globalDBdriver;
5234
		$filter_query = $this->getFilter($filters,true,true);
5235
		$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 
5236
		    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' ";
5237
		if ($olderthanmonths > 0) {
5238
			if ($globalDBdriver == 'mysql') {
5239
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5240
			} else {
5241
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5242
			}
5243
		}
5244
		if ($sincedate != '') {
5245
			if ($globalDBdriver == 'mysql') {
5246
				$query .= "AND spotter_output.date > '".$sincedate."' ";
5247
			} else {
5248
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5249
			}
5250
		}
5251
5252
		$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";
5253
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5254
 
5255
		$sth = $this->db->prepare($query);
5256
		$sth->execute();
5257
5258
		$aircraft_array = array();
5259
		$temp_array = array();
5260
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5261
		{
5262
			//$temp_array['airline_icao'] = $row['airline_icao'];
5263
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5264
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5265
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5266
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5267
			$aircraft_array[] = $temp_array;
5268
		}
5269
		return $aircraft_array;
5270
	}
5271
5272
5273
	/**
5274
	* Gets all aircraft registration that have flown over by aircaft icao
5275
	*
5276
	* @return Array the aircraft list
5277
	*
5278
	*/
5279
	public function countAllAircraftRegistrationByAircraft($aircraft_icao,$filters = array())
5280
	{
5281
		$Image = new Image($this->db);
5282
		$filter_query = $this->getFilter($filters,true,true);
5283
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
5284
5285
		$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  
5286
				FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_icao = :aircraft_icao  
5287
				GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name  
5288
				ORDER BY registration_count DESC";
5289
5290
		$sth = $this->db->prepare($query);
5291
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
5292
5293
		$aircraft_array = array();
5294
		$temp_array = array();
5295
        
5296
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5297
		{
5298
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5299
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5300
			$temp_array['registration'] = $row['registration'];
5301
			$temp_array['airline_name'] = $row['airline_name'];
5302
			$temp_array['image_thumbnail'] = "";
5303
			if($row['registration'] != "")
5304
			{
5305
				$image_array = $Image->getSpotterImage($row['registration']);
5306
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5307
			}
5308
			$temp_array['registration_count'] = $row['registration_count'];
5309
5310
			$aircraft_array[] = $temp_array;
5311
		}
5312
		return $aircraft_array;
5313
	}
5314
5315
5316
	/**
5317
	* Gets all aircraft types that have flown over by airline icao
5318
	*
5319
	* @return Array the aircraft list
5320
	*
5321
	*/
5322
	public function countAllAircraftTypesByAirline($airline_icao,$filters = array())
5323
	{
5324
		$filter_query = $this->getFilter($filters,true,true);
5325
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5326
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5327
			    FROM spotter_output".$filter_query." spotter_output.aircraft_icao <> '' AND spotter_output.airline_icao = :airline_icao 
5328
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5329
			    ORDER BY aircraft_icao_count DESC";
5330
5331
		$sth = $this->db->prepare($query);
5332
		$sth->execute(array(':airline_icao' => $airline_icao));
5333
5334
		$aircraft_array = array();
5335
		$temp_array = array();
5336
5337
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5338
		{
5339
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5340
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5341
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5342
5343
			$aircraft_array[] = $temp_array;
5344
		}
5345
		return $aircraft_array;
5346
	}
5347
5348
5349
	/**
5350
	* Gets all aircraft registration that have flown over by airline icao
5351
	*
5352
	* @return Array the aircraft list
5353
	*
5354
	*/
5355
	public function countAllAircraftRegistrationByAirline($airline_icao,$filters = array())
5356
	{
5357
		$filter_query = $this->getFilter($filters,true,true);
5358
		$Image = new Image($this->db);
5359
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5360
5361
		$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 
5362
			    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.airline_icao = :airline_icao 
5363
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
5364
			    ORDER BY registration_count DESC";
5365
5366
		$sth = $this->db->prepare($query);
5367
		$sth->execute(array(':airline_icao' => $airline_icao));
5368
5369
		$aircraft_array = array();
5370
		$temp_array = array();
5371
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5372
		{
5373
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5374
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5375
			$temp_array['registration'] = $row['registration'];
5376
			$temp_array['airline_name'] = $row['airline_name'];
5377
			$temp_array['image_thumbnail'] = "";
5378
			if($row['registration'] != "")
5379
			{
5380
				$image_array = $Image->getSpotterImage($row['registration']);
5381
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5382
			}
5383
			$temp_array['registration_count'] = $row['registration_count'];
5384
5385
			$aircraft_array[] = $temp_array;
5386
		}
5387
		return $aircraft_array;
5388
	}
5389
5390
5391
	/**
5392
	* Gets all aircraft manufacturer that have flown over by airline icao
5393
	*
5394
	* @return Array the aircraft list
5395
	*
5396
	*/
5397
	public function countAllAircraftManufacturerByAirline($airline_icao,$filters = array())
5398
	{
5399
		$filter_query = $this->getFilter($filters,true,true);
5400
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5401
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5402
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.airline_icao = :airline_icao 
5403
				GROUP BY spotter_output.aircraft_manufacturer 
5404
				ORDER BY aircraft_manufacturer_count DESC";
5405
5406
		$sth = $this->db->prepare($query);
5407
		$sth->execute(array(':airline_icao' => $airline_icao));
5408
5409
		$aircraft_array = array();
5410
		$temp_array = array();
5411
5412
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5413
		{
5414
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5415
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5416
5417
			$aircraft_array[] = $temp_array;
5418
		}
5419
		return $aircraft_array;
5420
	}
5421
5422
5423
	/**
5424
	* Gets all aircraft types that have flown over by airline icao
5425
	*
5426
	* @return Array the aircraft list
5427
	*
5428
	*/
5429
	public function countAllAircraftTypesByAirport($airport_icao,$filters = array())
5430
	{
5431
		$filter_query = $this->getFilter($filters,true,true);
5432
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5433
5434
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5435
				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) 
5436
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5437
				ORDER BY aircraft_icao_count DESC";
5438
 
5439
		$sth = $this->db->prepare($query);
5440
		$sth->execute(array(':airport_icao' => $airport_icao));
5441
5442
		$aircraft_array = array();
5443
		$temp_array = array();
5444
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5445
		{
5446
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5447
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5448
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5449
5450
			$aircraft_array[] = $temp_array;
5451
		}
5452
		return $aircraft_array;
5453
	}
5454
5455
5456
	/**
5457
	* Gets all aircraft registration that have flown over by airport icao
5458
	*
5459
	* @return Array the aircraft list
5460
	*
5461
	*/
5462
	public function countAllAircraftRegistrationByAirport($airport_icao,$filters = array())
5463
	{
5464
		$filter_query = $this->getFilter($filters,true,true);
5465
		$Image = new Image($this->db);
5466
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5467
5468
		$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  
5469
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)   
5470
                    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5471
		    ORDER BY registration_count DESC";
5472
5473
		$sth = $this->db->prepare($query);
5474
		$sth->execute(array(':airport_icao' => $airport_icao));
5475
5476
		$aircraft_array = array();
5477
		$temp_array = array();
5478
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5479
		{
5480
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5481
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5482
			$temp_array['registration'] = $row['registration'];
5483
			$temp_array['airline_name'] = $row['airline_name'];
5484
			$temp_array['image_thumbnail'] = "";
5485
			if($row['registration'] != "")
5486
			{
5487
				$image_array = $Image->getSpotterImage($row['registration']);
5488
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5489
			}
5490
			$temp_array['registration_count'] = $row['registration_count'];
5491
			$aircraft_array[] = $temp_array;
5492
		}
5493
		return $aircraft_array;
5494
	}
5495
	
5496
	
5497
	/**
5498
	* Gets all aircraft manufacturer that have flown over by airport icao
5499
	*
5500
	* @return Array the aircraft list
5501
	*
5502
	*/
5503
	public function countAllAircraftManufacturerByAirport($airport_icao,$filters = array())
5504
	{
5505
		$filter_query = $this->getFilter($filters,true,true);
5506
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5507
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5508
                    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)  
5509
                    GROUP BY spotter_output.aircraft_manufacturer 
5510
					ORDER BY aircraft_manufacturer_count DESC";
5511
5512
		
5513
		$sth = $this->db->prepare($query);
5514
		$sth->execute(array(':airport_icao' => $airport_icao));
5515
5516
		$aircraft_array = array();
5517
		$temp_array = array();
5518
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5519
		{
5520
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5521
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5522
			$aircraft_array[] = $temp_array;
5523
		}
5524
		return $aircraft_array;
5525
	}
5526
5527
	/**
5528
	* Gets all aircraft types that have flown over by aircraft manufacturer
5529
	*
5530
	* @return Array the aircraft list
5531
	*
5532
	*/
5533
	public function countAllAircraftTypesByManufacturer($aircraft_manufacturer,$filters = array())
5534
	{
5535
		$filter_query = $this->getFilter($filters,true,true);
5536
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5537
5538
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5539
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
5540
                    GROUP BY spotter_output.aircraft_name 
5541
					ORDER BY aircraft_icao_count DESC";
5542
5543
		$sth = $this->db->prepare($query);
5544
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5545
		$aircraft_array = array();
5546
		$temp_array = array();
5547
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5548
		{
5549
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5550
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5551
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5552
			$aircraft_array[] = $temp_array;
5553
		}
5554
		return $aircraft_array;
5555
	}
5556
5557
5558
	/**
5559
	* Gets all aircraft registration that have flown over by aircaft manufacturer
5560
	*
5561
	* @return Array the aircraft list
5562
	*
5563
	*/
5564
	public function countAllAircraftRegistrationByManufacturer($aircraft_manufacturer, $filters = array())
5565
	{
5566
		$filter_query = $this->getFilter($filters,true,true);
5567
		$Image = new Image($this->db);
5568
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5569
5570
		$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   
5571
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
5572
                    GROUP BY spotter_output.registration 
5573
					ORDER BY registration_count DESC";
5574
5575
		
5576
		$sth = $this->db->prepare($query);
5577
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5578
		$aircraft_array = array();
5579
		$temp_array = array();
5580
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5581
		{
5582
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5583
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5584
			$temp_array['registration'] = $row['registration'];
5585
			$temp_array['airline_name'] = $row['airline_name'];
5586
			$temp_array['image_thumbnail'] = "";
5587
			if($row['registration'] != "")
5588
			{
5589
				$image_array = $Image->getSpotterImage($row['registration']);
5590
				$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5591
			}
5592
			$temp_array['registration_count'] = $row['registration_count'];
5593
			$aircraft_array[] = $temp_array;
5594
		}
5595
		return $aircraft_array;
5596
	}
5597
5598
	/**
5599
	* Gets all aircraft types that have flown over by date
5600
	*
5601
	* @return Array the aircraft list
5602
	*
5603
	*/
5604
	public function countAllAircraftTypesByDate($date,$filters = array())
5605
	{
5606
		global $globalTimezone, $globalDBdriver;
5607
		$filter_query = $this->getFilter($filters,true,true);
5608
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5609
		if ($globalTimezone != '') {
5610
			date_default_timezone_set($globalTimezone);
5611
			$datetime = new DateTime($date);
5612
			$offset = $datetime->format('P');
5613
		} else $offset = '+00:00';
5614
5615
		if ($globalDBdriver == 'mysql') {
5616
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5617
					FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
5618
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5619
					ORDER BY aircraft_icao_count DESC";
5620
		} else {
5621
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5622
					FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date
5623
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5624
					ORDER BY aircraft_icao_count DESC";
5625
		}
5626
		
5627
		$sth = $this->db->prepare($query);
5628
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5629
5630
		$aircraft_array = array();
5631
		$temp_array = array();
5632
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5633
		{
5634
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5635
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5636
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5637
5638
			$aircraft_array[] = $temp_array;
5639
		}
5640
		return $aircraft_array;
5641
	}
5642
5643
5644
	/**
5645
	* Gets all aircraft registration that have flown over by date
5646
	*
5647
	* @return Array the aircraft list
5648
	*
5649
	*/
5650
	public function countAllAircraftRegistrationByDate($date,$filters = array())
5651
	{
5652
		global $globalTimezone, $globalDBdriver;
5653
		$filter_query = $this->getFilter($filters,true,true);
5654
		$Image = new Image($this->db);
5655
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5656
		if ($globalTimezone != '') {
5657
			date_default_timezone_set($globalTimezone);
5658
			$datetime = new DateTime($date);
5659
			$offset = $datetime->format('P');
5660
		} else $offset = '+00:00';
5661
5662
		if ($globalDBdriver == 'mysql') {
5663
			$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 
5664
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5665
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5666
					ORDER BY registration_count DESC";
5667
		} else {
5668
			$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    
5669
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5670
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5671
					ORDER BY registration_count DESC";
5672
		}
5673
		
5674
		$sth = $this->db->prepare($query);
5675
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5676
5677
		$aircraft_array = array();
5678
		$temp_array = array();
5679
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5680
		{
5681
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5682
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5683
			$temp_array['registration'] = $row['registration'];
5684
			$temp_array['airline_name'] = $row['airline_name'];
5685
			$temp_array['image_thumbnail'] = "";
5686
			if($row['registration'] != "")
5687
			{
5688
				$image_array = $Image->getSpotterImage($row['registration']);
5689
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5690
			}
5691
			$temp_array['registration_count'] = $row['registration_count'];
5692
 
5693
			$aircraft_array[] = $temp_array;
5694
		}
5695
		return $aircraft_array;
5696
	}
5697
5698
5699
	/**
5700
	* Gets all aircraft manufacturer that have flown over by date
5701
	*
5702
	* @return Array the aircraft manufacturer list
5703
	*
5704
	*/
5705
	public function countAllAircraftManufacturerByDate($date,$filters = array())
5706
	{
5707
		global $globalTimezone, $globalDBdriver;
5708
		$filter_query = $this->getFilter($filters,true,true);
5709
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5710
		if ($globalTimezone != '') {
5711
			date_default_timezone_set($globalTimezone);
5712
			$datetime = new DateTime($date);
5713
			$offset = $datetime->format('P');
5714
		} else $offset = '+00:00';
5715
5716
		if ($globalDBdriver == 'mysql') {
5717
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5718
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5719
				GROUP BY spotter_output.aircraft_manufacturer 
5720
				ORDER BY aircraft_manufacturer_count DESC";
5721
		} else {
5722
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5723
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5724
				GROUP BY spotter_output.aircraft_manufacturer 
5725
				ORDER BY aircraft_manufacturer_count DESC";
5726
		}
5727
		
5728
		$sth = $this->db->prepare($query);
5729
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5730
5731
		$aircraft_array = array();
5732
		$temp_array = array();
5733
5734
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5735
		{
5736
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5737
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5738
5739
			$aircraft_array[] = $temp_array;
5740
		}
5741
		return $aircraft_array;
5742
	}
5743
5744
5745
	/**
5746
	* Gets all aircraft types that have flown over by ident/callsign
5747
	*
5748
	* @return Array the aircraft list
5749
	*
5750
	*/
5751
	public function countAllAircraftTypesByIdent($ident,$filters = array())
5752
	{
5753
		$filter_query = $this->getFilter($filters,true,true);
5754
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5755
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5756
				FROM spotter_output".$filter_query." spotter_output.ident = :ident 
5757
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao
5758
				ORDER BY aircraft_icao_count DESC";
5759
5760
		$sth = $this->db->prepare($query);
5761
		$sth->execute(array(':ident' => $ident));
5762
      
5763
		$aircraft_array = array();
5764
		$temp_array = array();
5765
5766
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5767
		{
5768
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5769
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5770
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5771
5772
			$aircraft_array[] = $temp_array;
5773
		}
5774
		return $aircraft_array;
5775
	}
5776
5777
	/**
5778
	* Gets all aircraft types that have flown over by pilot
5779
	*
5780
	* @return Array the aircraft list
5781
	*
5782
	*/
5783
	public function countAllAircraftTypesByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
5784
	{
5785
		global $globalDBdriver;
5786
		$filter_query = $this->getFilter($filters,true,true);
5787
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
5788
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5789
				FROM spotter_output".$filter_query." (spotter_output.pilot_id = :pilot OR spotter_output.pilot_name = :pilot)";
5790
		$query_values = array();
5791
		if ($year != '') {
5792
			if ($globalDBdriver == 'mysql') {
5793
				$query .= " AND YEAR(spotter_output.date) = :year";
5794
				$query_values = array_merge($query_values,array(':year' => $year));
5795
			} else {
5796
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5797
				$query_values = array_merge($query_values,array(':year' => $year));
5798
			}
5799
		}
5800
		if ($month != '') {
5801
			if ($globalDBdriver == 'mysql') {
5802
				$query .= " AND MONTH(spotter_output.date) = :month";
5803
				$query_values = array_merge($query_values,array(':month' => $month));
5804
			} else {
5805
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5806
				$query_values = array_merge($query_values,array(':month' => $month));
5807
			}
5808
		}
5809
		if ($day != '') {
5810
			if ($globalDBdriver == 'mysql') {
5811
				$query .= " AND DAY(spotter_output.date) = :day";
5812
				$query_values = array_merge($query_values,array(':day' => $day));
5813
			} else {
5814
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5815
				$query_values = array_merge($query_values,array(':day' => $day));
5816
			}
5817
		}
5818
5819
		$query .= " GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao
5820
				ORDER BY aircraft_icao_count DESC";
5821
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
5822
		$sth = $this->db->prepare($query);
5823
		$sth->execute($query_values);
5824
		return $sth->fetchAll(PDO::FETCH_ASSOC);
5825
	}
5826
5827
	/**
5828
	* Gets all aircraft types that have flown over by owner
5829
	*
5830
	* @return Array the aircraft list
5831
	*
5832
	*/
5833
	public function countAllAircraftTypesByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
5834
	{
5835
		global $globalDBdriver;
5836
		$filter_query = $this->getFilter($filters,true,true);
5837
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
5838
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
5839
				FROM spotter_output".$filter_query." spotter_output.owner_name = :owner";
5840
		$query_values = array();
5841
		if ($year != '') {
5842
			if ($globalDBdriver == 'mysql') {
5843
				$query .= " AND YEAR(spotter_output.date) = :year";
5844
				$query_values = array_merge($query_values,array(':year' => $year));
5845
			} else {
5846
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5847
				$query_values = array_merge($query_values,array(':year' => $year));
5848
			}
5849
		}
5850
		if ($month != '') {
5851
			if ($globalDBdriver == 'mysql') {
5852
				$query .= " AND MONTH(spotter_output.date) = :month";
5853
				$query_values = array_merge($query_values,array(':month' => $month));
5854
			} else {
5855
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5856
				$query_values = array_merge($query_values,array(':month' => $month));
5857
			}
5858
		}
5859
		if ($day != '') {
5860
			if ($globalDBdriver == 'mysql') {
5861
				$query .= " AND DAY(spotter_output.date) = :day";
5862
				$query_values = array_merge($query_values,array(':day' => $day));
5863
			} else {
5864
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5865
				$query_values = array_merge($query_values,array(':day' => $day));
5866
			}
5867
		}
5868
		$query .= " GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.aircraft_icao
5869
				ORDER BY aircraft_icao_count DESC";
5870
		$query_values = array_merge($query_values,array(':owner' => $owner));
5871
		$sth = $this->db->prepare($query);
5872
		$sth->execute($query_values);
5873
		return $sth->fetchAll(PDO::FETCH_ASSOC);
5874
	}
5875
5876
	/**
5877
	* Gets all aircraft registration that have flown over by ident/callsign
5878
	*
5879
	* @return Array the aircraft list
5880
	*
5881
	*/
5882
	public function countAllAircraftRegistrationByIdent($ident,$filters = array())
5883
	{
5884
		$filter_query = $this->getFilter($filters,true,true);
5885
		$Image = new Image($this->db);
5886
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5887
5888
		$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  
5889
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.ident = :ident   
5890
                    GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
5891
		    ORDER BY registration_count DESC";
5892
5893
		
5894
		$sth = $this->db->prepare($query);
5895
		$sth->execute(array(':ident' => $ident));
5896
      
5897
		$aircraft_array = array();
5898
		$temp_array = array();
5899
        
5900
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5901
		{
5902
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5903
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5904
			$temp_array['registration'] = $row['registration'];
5905
			$temp_array['airline_name'] = $row['airline_name'];
5906
			$temp_array['image_thumbnail'] = "";
5907
			if($row['registration'] != "")
5908
			{
5909
				$image_array = $Image->getSpotterImage($row['registration']);
5910
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5911
				else $temp_array['image_thumbnail'] = '';
5912
			}
5913
			$temp_array['registration_count'] = $row['registration_count'];
5914
			$aircraft_array[] = $temp_array;
5915
		}
5916
		return $aircraft_array;
5917
	}
5918
5919
	/**
5920
	* Gets all aircraft registration that have flown over by owner
5921
	*
5922
	* @return Array the aircraft list
5923
	*
5924
	*/
5925
	public function countAllAircraftRegistrationByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
5926
	{
5927
		global $globalDBdriver;
5928
		$filter_query = $this->getFilter($filters,true,true);
5929
		$Image = new Image($this->db);
5930
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
5931
5932
		$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  
5933
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.owner_name = :owner";
5934
		$query_values = array();
5935
		if ($year != '') {
5936
			if ($globalDBdriver == 'mysql') {
5937
				$query .= " AND YEAR(spotter_output.date) = :year";
5938
				$query_values = array_merge($query_values,array(':year' => $year));
5939
			} else {
5940
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5941
				$query_values = array_merge($query_values,array(':year' => $year));
5942
			}
5943
		}
5944
		if ($month != '') {
5945
			if ($globalDBdriver == 'mysql') {
5946
				$query .= " AND MONTH(spotter_output.date) = :month";
5947
				$query_values = array_merge($query_values,array(':month' => $month));
5948
			} else {
5949
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5950
				$query_values = array_merge($query_values,array(':month' => $month));
5951
			}
5952
		}
5953
		if ($day != '') {
5954
			if ($globalDBdriver == 'mysql') {
5955
				$query .= " AND DAY(spotter_output.date) = :day";
5956
				$query_values = array_merge($query_values,array(':day' => $day));
5957
			} else {
5958
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5959
				$query_values = array_merge($query_values,array(':day' => $day));
5960
			}
5961
		}
5962
		$query_values = array_merge($query_values,array(':owner' => $owner));
5963
5964
		$query .= " GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.airline_name
5965
		    ORDER BY registration_count DESC";
5966
5967
		
5968
		$sth = $this->db->prepare($query);
5969
		$sth->execute($query_values);
5970
      
5971
		$aircraft_array = array();
5972
		$temp_array = array();
5973
        
5974
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5975
		{
5976
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5977
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5978
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5979
			$temp_array['registration'] = $row['registration'];
5980
			$temp_array['airline_name'] = $row['airline_name'];
5981
			$temp_array['image_thumbnail'] = "";
5982
			if($row['registration'] != "")
5983
			{
5984
				$image_array = $Image->getSpotterImage($row['registration']);
5985
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5986
				else $temp_array['image_thumbnail'] = '';
5987
			}
5988
			$temp_array['registration_count'] = $row['registration_count'];
5989
			$aircraft_array[] = $temp_array;
5990
		}
5991
		return $aircraft_array;
5992
	}
5993
5994
	/**
5995
	* Gets all aircraft registration that have flown over by pilot
5996
	*
5997
	* @return Array the aircraft list
5998
	*
5999
	*/
6000
	public function countAllAircraftRegistrationByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
6001
	{
6002
		global $globalDBdriver;
6003
		$filter_query = $this->getFilter($filters,true,true);
6004
		$Image = new Image($this->db);
6005
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
6006
6007
		$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  
6008
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot)";
6009
		$query_values = array();
6010
		if ($year != '') {
6011
			if ($globalDBdriver == 'mysql') {
6012
				$query .= " AND YEAR(spotter_output.date) = :year";
6013
				$query_values = array_merge($query_values,array(':year' => $year));
6014
			} else {
6015
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6016
				$query_values = array_merge($query_values,array(':year' => $year));
6017
			}
6018
		}
6019
		if ($month != '') {
6020
			if ($globalDBdriver == 'mysql') {
6021
				$query .= " AND MONTH(spotter_output.date) = :month";
6022
				$query_values = array_merge($query_values,array(':month' => $month));
6023
			} else {
6024
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6025
				$query_values = array_merge($query_values,array(':month' => $month));
6026
			}
6027
		}
6028
		if ($day != '') {
6029
			if ($globalDBdriver == 'mysql') {
6030
				$query .= " AND DAY(spotter_output.date) = :day";
6031
				$query_values = array_merge($query_values,array(':day' => $day));
6032
			} else {
6033
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6034
				$query_values = array_merge($query_values,array(':day' => $day));
6035
			}
6036
		}
6037
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
6038
6039
		$query .= " GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.airline_name
6040
		    ORDER BY registration_count DESC";
6041
6042
		
6043
		$sth = $this->db->prepare($query);
6044
		$sth->execute($query_values);
6045
      
6046
		$aircraft_array = array();
6047
		$temp_array = array();
6048
        
6049
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6050
		{
6051
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6052
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6053
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6054
			$temp_array['registration'] = $row['registration'];
6055
			$temp_array['airline_name'] = $row['airline_name'];
6056
			$temp_array['image_thumbnail'] = "";
6057
			if($row['registration'] != "")
6058
			{
6059
				$image_array = $Image->getSpotterImage($row['registration']);
6060
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6061
				else $temp_array['image_thumbnail'] = '';
6062
			}
6063
			$temp_array['registration_count'] = $row['registration_count'];
6064
			$aircraft_array[] = $temp_array;
6065
		}
6066
		return $aircraft_array;
6067
	}
6068
6069
6070
	/**
6071
	* Gets all aircraft manufacturer that have flown over by ident/callsign
6072
	*
6073
	* @return Array the aircraft manufacturer list
6074
	*
6075
	*/
6076
	public function countAllAircraftManufacturerByIdent($ident,$filters = array())
6077
	{
6078
		$filter_query = $this->getFilter($filters,true,true);
6079
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
6080
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6081
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.ident = :ident  
6082
                    GROUP BY spotter_output.aircraft_manufacturer 
6083
					ORDER BY aircraft_manufacturer_count DESC";
6084
6085
		
6086
		$sth = $this->db->prepare($query);
6087
		$sth->execute(array(':ident' => $ident));
6088
		$aircraft_array = array();
6089
		$temp_array = array();
6090
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6091
		{
6092
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6093
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6094
			$aircraft_array[] = $temp_array;
6095
		}
6096
		return $aircraft_array;
6097
	}
6098
6099
	/**
6100
	* Gets all aircraft manufacturer that have flown over by owner
6101
	*
6102
	* @return Array the aircraft manufacturer list
6103
	*
6104
	*/
6105
	public function countAllAircraftManufacturerByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
6106
	{
6107
		global $globalDBdriver;
6108
		$filter_query = $this->getFilter($filters,true,true);
6109
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
6110
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6111
		    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.owner_name = :owner";
6112
		$query_values = array();
6113
		if ($year != '') {
6114
			if ($globalDBdriver == 'mysql') {
6115
				$query .= " AND YEAR(spotter_output.date) = :year";
6116
				$query_values = array_merge($query_values,array(':year' => $year));
6117
			} else {
6118
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6119
				$query_values = array_merge($query_values,array(':year' => $year));
6120
			}
6121
		}
6122
		if ($month != '') {
6123
			if ($globalDBdriver == 'mysql') {
6124
				$query .= " AND MONTH(spotter_output.date) = :month";
6125
				$query_values = array_merge($query_values,array(':month' => $month));
6126
			} else {
6127
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6128
				$query_values = array_merge($query_values,array(':month' => $month));
6129
			}
6130
		}
6131
		if ($day != '') {
6132
			if ($globalDBdriver == 'mysql') {
6133
				$query .= " AND DAY(spotter_output.date) = :day";
6134
				$query_values = array_merge($query_values,array(':day' => $day));
6135
			} else {
6136
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6137
				$query_values = array_merge($query_values,array(':day' => $day));
6138
			}
6139
		}
6140
		$query_values = array_merge($query_values,array(':owner' => $owner));
6141
6142
		$query .= " GROUP BY spotter_output.aircraft_manufacturer 
6143
		    ORDER BY aircraft_manufacturer_count DESC";
6144
6145
		
6146
		$sth = $this->db->prepare($query);
6147
		$sth->execute($query_values);
6148
		return $sth->fetchAll(PDO::FETCH_ASSOC);
6149
	}
6150
6151
	/**
6152
	* Gets all aircraft manufacturer that have flown over by pilot
6153
	*
6154
	* @return Array the aircraft manufacturer list
6155
	*
6156
	*/
6157
	public function countAllAircraftManufacturerByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
6158
	{
6159
		global $globalDBdriver;
6160
		$filter_query = $this->getFilter($filters,true,true);
6161
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
6162
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6163
		    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot)";
6164
		$query_values = array();
6165
		if ($year != '') {
6166
			if ($globalDBdriver == 'mysql') {
6167
				$query .= " AND YEAR(spotter_output.date) = :year";
6168
				$query_values = array_merge($query_values,array(':year' => $year));
6169
			} else {
6170
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6171
				$query_values = array_merge($query_values,array(':year' => $year));
6172
			}
6173
		}
6174
		if ($month != '') {
6175
			if ($globalDBdriver == 'mysql') {
6176
				$query .= " AND MONTH(spotter_output.date) = :month";
6177
				$query_values = array_merge($query_values,array(':month' => $month));
6178
			} else {
6179
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6180
				$query_values = array_merge($query_values,array(':month' => $month));
6181
			}
6182
		}
6183
		if ($day != '') {
6184
			if ($globalDBdriver == 'mysql') {
6185
				$query .= " AND DAY(spotter_output.date) = :day";
6186
				$query_values = array_merge($query_values,array(':day' => $day));
6187
			} else {
6188
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6189
				$query_values = array_merge($query_values,array(':day' => $day));
6190
			}
6191
		}
6192
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
6193
6194
		$query .= " GROUP BY spotter_output.aircraft_manufacturer 
6195
		    ORDER BY aircraft_manufacturer_count DESC";
6196
6197
		
6198
		$sth = $this->db->prepare($query);
6199
		$sth->execute($query_values);
6200
		return $sth->fetchAll(PDO::FETCH_ASSOC);
6201
	}
6202
6203
6204
	/**
6205
	* Gets all aircraft types that have flown over by route
6206
	*
6207
	* @return Array the aircraft list
6208
	*
6209
	*/
6210
	public function countAllAircraftTypesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
6211
	{
6212
		$filter_query = $this->getFilter($filters,true,true);
6213
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
6214
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
6215
		
6216
6217
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
6218
                    FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
6219
                    GROUP BY spotter_output.aircraft_name 
6220
					ORDER BY aircraft_icao_count DESC";
6221
 
6222
		
6223
		$sth = $this->db->prepare($query);
6224
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
6225
		$aircraft_array = array();
6226
		$temp_array = array();
6227
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6228
		{
6229
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6230
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6231
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
6232
			$aircraft_array[] = $temp_array;
6233
		}
6234
		return $aircraft_array;
6235
	}
6236
6237
	/**
6238
	* Gets all aircraft registration that have flown over by route
6239
	*
6240
	* @return Array the aircraft list
6241
	*
6242
	*/
6243
	public function countAllAircraftRegistrationByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
6244
	{
6245
		$filter_query = $this->getFilter($filters,true,true);
6246
		$Image = new Image($this->db);
6247
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
6248
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
6249
6250
		$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   
6251
                    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)   
6252
                    GROUP BY spotter_output.registration 
6253
					ORDER BY registration_count DESC";
6254
6255
		
6256
		$sth = $this->db->prepare($query);
6257
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
6258
      
6259
		$aircraft_array = array();
6260
		$temp_array = array();
6261
        
6262
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6263
		{
6264
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6265
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6266
			$temp_array['registration'] = $row['registration'];
6267
			$temp_array['airline_name'] = $row['airline_name'];
6268
			$temp_array['image_thumbnail'] = "";
6269
			if($row['registration'] != "")
6270
			{
6271
				$image_array = $Image->getSpotterImage($row['registration']);
6272
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6273
			}
6274
			$temp_array['registration_count'] = $row['registration_count'];
6275
          
6276
			$aircraft_array[] = $temp_array;
6277
		}
6278
6279
		return $aircraft_array;
6280
	}
6281
	
6282
	
6283
	/**
6284
	* Gets all aircraft manufacturer that have flown over by route
6285
	*
6286
	* @return Array the aircraft manufacturer list
6287
	*
6288
	*/
6289
	public function countAllAircraftManufacturerByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
6290
	{
6291
		$filter_query = $this->getFilter($filters,true,true);
6292
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
6293
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
6294
6295
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6296
                    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) 
6297
                    GROUP BY spotter_output.aircraft_manufacturer 
6298
					ORDER BY aircraft_manufacturer_count DESC";
6299
6300
		
6301
		$sth = $this->db->prepare($query);
6302
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
6303
      
6304
		$aircraft_array = array();
6305
		$temp_array = array();
6306
        
6307
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6308
		{
6309
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6310
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6311
          
6312
			$aircraft_array[] = $temp_array;
6313
		}
6314
6315
		return $aircraft_array;
6316
	}	
6317
6318
	
6319
	
6320
	
6321
	/**
6322
	* Gets all aircraft types that have flown over by country
6323
	*
6324
	* @return Array the aircraft list
6325
	*
6326
	*/
6327
	public function countAllAircraftTypesByCountry($country,$filters = array())
6328
	{
6329
		$filter_query = $this->getFilter($filters,true,true);
6330
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6331
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
6332
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
6333
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
6334
			    ORDER BY aircraft_icao_count DESC";
6335
 
6336
		
6337
		$sth = $this->db->prepare($query);
6338
		$sth->execute(array(':country' => $country));
6339
      
6340
		$aircraft_array = array();
6341
		$temp_array = array();
6342
        
6343
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6344
		{
6345
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6346
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6347
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
6348
          
6349
			$aircraft_array[] = $temp_array;
6350
		}
6351
6352
		return $aircraft_array;
6353
	}
6354
6355
6356
	/**
6357
	* Gets all aircraft registration that have flown over by country
6358
	*
6359
	* @return Array the aircraft list
6360
	*
6361
	*/
6362
	public function countAllAircraftRegistrationByCountry($country,$filters = array())
6363
	{
6364
		$filter_query = $this->getFilter($filters,true,true);
6365
		$Image = new Image($this->db);
6366
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6367
		$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 
6368
			    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)    
6369
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
6370
			    ORDER BY registration_count DESC";
6371
6372
		
6373
		$sth = $this->db->prepare($query);
6374
		$sth->execute(array(':country' => $country));
6375
      
6376
		$aircraft_array = array();
6377
		$temp_array = array();
6378
        
6379
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6380
		{
6381
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6382
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6383
			$temp_array['registration'] = $row['registration'];
6384
			$temp_array['airline_name'] = $row['airline_name'];
6385
			$temp_array['image_thumbnail'] = "";
6386
			if($row['registration'] != "")
6387
			{
6388
				$image_array = $Image->getSpotterImage($row['registration']);
6389
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6390
			}
6391
			$temp_array['registration_count'] = $row['registration_count'];
6392
          
6393
			$aircraft_array[] = $temp_array;
6394
		}
6395
6396
		return $aircraft_array;
6397
	}
6398
	
6399
	
6400
	/**
6401
	* Gets all aircraft manufacturer that have flown over by country
6402
	*
6403
	* @return Array the aircraft manufacturer list
6404
	*
6405
	*/
6406
	public function countAllAircraftManufacturerByCountry($country,$filters = array())
6407
	{
6408
		$filter_query = $this->getFilter($filters,true,true);
6409
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6410
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6411
                    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) 
6412
                    GROUP BY spotter_output.aircraft_manufacturer 
6413
					ORDER BY aircraft_manufacturer_count DESC";
6414
6415
		
6416
		$sth = $this->db->prepare($query);
6417
		$sth->execute(array(':country' => $country));
6418
      
6419
		$aircraft_array = array();
6420
		$temp_array = array();
6421
        
6422
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6423
		{
6424
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6425
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6426
          
6427
			$aircraft_array[] = $temp_array;
6428
		}
6429
6430
		return $aircraft_array;
6431
	}	
6432
	
6433
	
6434
	
6435
	/**
6436
	* Gets all aircraft manufacturers that have flown over
6437
	*
6438
	* @return Array the aircraft list
6439
	*
6440
	*/
6441
	public function countAllAircraftManufacturers($filters = array(),$year = '',$month = '',$day = '')
6442
	{
6443
		global $globalDBdriver;
6444
		$filter_query = $this->getFilter($filters,true,true);
6445
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6446
                    FROM spotter_output ".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.aircraft_manufacturer <> 'Not Available'";
6447
                $query_values = array();
6448
		if ($year != '') {
6449
			if ($globalDBdriver == 'mysql') {
6450
				$query .= " AND YEAR(spotter_output.date) = :year";
6451
				$query_values = array_merge($query_values,array(':year' => $year));
6452
			} else {
6453
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6454
				$query_values = array_merge($query_values,array(':year' => $year));
6455
			}
6456
		}
6457
		if ($month != '') {
6458
			if ($globalDBdriver == 'mysql') {
6459
				$query .= " AND MONTH(spotter_output.date) = :month";
6460
				$query_values = array_merge($query_values,array(':month' => $month));
6461
			} else {
6462
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6463
				$query_values = array_merge($query_values,array(':month' => $month));
6464
			}
6465
		}
6466
		if ($day != '') {
6467
			if ($globalDBdriver == 'mysql') {
6468
				$query .= " AND DAY(spotter_output.date) = :day";
6469
				$query_values = array_merge($query_values,array(':day' => $day));
6470
			} else {
6471
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6472
				$query_values = array_merge($query_values,array(':day' => $day));
6473
			}
6474
		}
6475
		$query .= " GROUP BY spotter_output.aircraft_manufacturer
6476
					ORDER BY aircraft_manufacturer_count DESC
6477
					LIMIT 10";
6478
      
6479
		
6480
		$sth = $this->db->prepare($query);
6481
		$sth->execute($query_values);
6482
      
6483
		$manufacturer_array = array();
6484
		$temp_array = array();
6485
        
6486
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6487
		{
6488
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6489
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6490
          
6491
			$manufacturer_array[] = $temp_array;
6492
		}
6493
6494
		return $manufacturer_array;
6495
	}
6496
	
6497
	
6498
	
6499
	/**
6500
	* Gets all aircraft registrations that have flown over
6501
	*
6502
	* @return Array the aircraft list
6503
	*
6504
	*/
6505
	public function countAllAircraftRegistrations($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '', $month = '', $day = '')
6506
	{
6507
		global $globalDBdriver;
6508
		$Image = new Image($this->db);
6509
		$filter_query = $this->getFilter($filters,true,true);
6510
		$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    
6511
                    FROM spotter_output ".$filter_query." spotter_output.registration <> '' AND spotter_output.registration <> 'NA'";
6512
                if ($olderthanmonths > 0) {
6513
            		if ($globalDBdriver == 'mysql') {
6514
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6515
			} else {
6516
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6517
			}
6518
		}
6519
                if ($sincedate != '') {
6520
            		if ($globalDBdriver == 'mysql') {
6521
				$query .= " AND spotter_output.date > '".$sincedate."'";
6522
			} else {
6523
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6524
			}
6525
		}
6526
		$query_values = array();
6527
		if ($year != '') {
6528
			if ($globalDBdriver == 'mysql') {
6529
				$query .= " AND YEAR(spotter_output.date) = :year";
6530
				$query_values = array_merge($query_values,array(':year' => $year));
6531
			} else {
6532
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6533
				$query_values = array_merge($query_values,array(':year' => $year));
6534
			}
6535
		}
6536
		if ($month != '') {
6537
			if ($globalDBdriver == 'mysql') {
6538
				$query .= " AND MONTH(spotter_output.date) = :month";
6539
				$query_values = array_merge($query_values,array(':month' => $month));
6540
			} else {
6541
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6542
				$query_values = array_merge($query_values,array(':month' => $month));
6543
			}
6544
		}
6545
		if ($day != '') {
6546
			if ($globalDBdriver == 'mysql') {
6547
				$query .= " AND DAY(spotter_output.date) = :day";
6548
				$query_values = array_merge($query_values,array(':day' => $day));
6549
			} else {
6550
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6551
				$query_values = array_merge($query_values,array(':day' => $day));
6552
			}
6553
		}
6554
		$query .= " GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name ORDER BY aircraft_registration_count DESC";
6555
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6556
		
6557
		$sth = $this->db->prepare($query);
6558
		$sth->execute($query_values);
6559
      
6560
		$aircraft_array = array();
6561
		$temp_array = array();
6562
        
6563
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6564
		{
6565
			$temp_array['registration'] = $row['registration'];
6566
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
6567
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6568
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6569
			$temp_array['airline_name'] = $row['airline_name'];
6570
			$temp_array['image_thumbnail'] = "";
6571
			if($row['registration'] != "")
6572
			{
6573
				$image_array = $Image->getSpotterImage($row['registration']);
6574
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6575
			}
6576
          
6577
			$aircraft_array[] = $temp_array;
6578
		}
6579
6580
		return $aircraft_array;
6581
	}
6582
6583
6584
	/**
6585
	* Gets all aircraft registrations that have flown over
6586
	*
6587
	* @return Array the aircraft list
6588
	*
6589
	*/
6590
	public function countAllAircraftRegistrationsByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
6591
	{
6592
		global $globalDBdriver;
6593
		$filter_query = $this->getFilter($filters,true,true);
6594
		$Image = new Image($this->db);
6595
		$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    
6596
                    FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.registration <> '' AND spotter_output.registration <> 'NA' ";
6597
                if ($olderthanmonths > 0) {
6598
            		if ($globalDBdriver == 'mysql') {
6599
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6600
			} else {
6601
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6602
			}
6603
		}
6604
                if ($sincedate != '') {
6605
            		if ($globalDBdriver == 'mysql') {
6606
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6607
			} else {
6608
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6609
			}
6610
		}
6611
6612
		// if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6613
		//if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6614
                $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";
6615
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6616
		
6617
		$sth = $this->db->prepare($query);
6618
		$sth->execute();
6619
      
6620
		$aircraft_array = array();
6621
		$temp_array = array();
6622
        
6623
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6624
		{
6625
			$temp_array['registration'] = $row['registration'];
6626
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
6627
			$temp_array['airline_icao'] = $row['airline_icao'];
6628
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6629
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6630
			$temp_array['airline_name'] = $row['airline_name'];
6631
			$temp_array['image_thumbnail'] = "";
6632
			if($row['registration'] != "")
6633
			{
6634
				$image_array = $Image->getSpotterImage($row['registration']);
6635
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6636
			}
6637
          
6638
			$aircraft_array[] = $temp_array;
6639
		}
6640
6641
		return $aircraft_array;
6642
	}
6643
	
6644
	
6645
	/**
6646
	* Gets all departure airports of the airplanes that have flown over
6647
	*
6648
	* @return Array the airport list
6649
	*
6650
	*/
6651
	public function countAllDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
6652
	{
6653
		global $globalDBdriver;
6654
		$filter_query = $this->getFilter($filters,true,true);
6655
		$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, airport.latitude, airport.longitude
6656
				FROM airport, spotter_output".$filter_query." airport.icao = spotter_output.departure_airport_icao AND spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> ''";
6657
                if ($olderthanmonths > 0) {
6658
            		if ($globalDBdriver == 'mysql') {
6659
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6660
			} else {
6661
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6662
			}
6663
                }
6664
                if ($sincedate != '') {
6665
            		if ($globalDBdriver == 'mysql') {
6666
				$query .= " AND spotter_output.date > '".$sincedate."'";
6667
			} else {
6668
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6669
			}
6670
		}
6671
		$query_values = array();
6672
		if ($year != '') {
6673
			if ($globalDBdriver == 'mysql') {
6674
				$query .= " AND YEAR(spotter_output.date) = :year";
6675
				$query_values = array_merge($query_values,array(':year' => $year));
6676
			} else {
6677
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6678
				$query_values = array_merge($query_values,array(':year' => $year));
6679
			}
6680
		}
6681
		if ($month != '') {
6682
			if ($globalDBdriver == 'mysql') {
6683
				$query .= " AND MONTH(spotter_output.date) = :month";
6684
				$query_values = array_merge($query_values,array(':month' => $month));
6685
			} else {
6686
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6687
				$query_values = array_merge($query_values,array(':month' => $month));
6688
			}
6689
		}
6690
		if ($day != '') {
6691
			if ($globalDBdriver == 'mysql') {
6692
				$query .= " AND DAY(spotter_output.date) = :day";
6693
				$query_values = array_merge($query_values,array(':day' => $day));
6694
			} else {
6695
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6696
				$query_values = array_merge($query_values,array(':day' => $day));
6697
			}
6698
		}
6699
                $query .= " GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, airport.latitude, airport.longitude
6700
				ORDER BY airport_departure_icao_count DESC";
6701
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6702
6703
		$sth = $this->db->prepare($query);
6704
		$sth->execute($query_values);
6705
6706
		$airport_array = array();
6707
		$temp_array = array();
6708
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6709
		{
6710
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6711
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6712
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6713
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6714
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6715
			$temp_array['airport_departure_latitude'] = $row['latitude'];
6716
			$temp_array['airport_departure_longitude'] = $row['longitude'];
6717
			$airport_array[] = $temp_array;
6718
		}
6719
		return $airport_array;
6720
	}
6721
6722
	/**
6723
	* Gets all departure airports of the airplanes that have flown over
6724
	*
6725
	* @return Array the airport list
6726
	*
6727
	*/
6728
	public function countAllDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
6729
	{
6730
		global $globalDBdriver;
6731
		$filter_query = $this->getFilter($filters,true,true);
6732
		$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 
6733
			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 <> '' ";
6734
                if ($olderthanmonths > 0) {
6735
            		if ($globalDBdriver == 'mysql') {
6736
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6737
			} else {
6738
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6739
			}
6740
                }
6741
                if ($sincedate != '') {
6742
            		if ($globalDBdriver == 'mysql') {
6743
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6744
			} else {
6745
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6746
			}
6747
		}
6748
6749
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6750
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6751
                $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
6752
				ORDER BY airport_departure_icao_count DESC";
6753
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6754
      
6755
		$sth = $this->db->prepare($query);
6756
		$sth->execute();
6757
      
6758
		$airport_array = array();
6759
		$temp_array = array();
6760
        
6761
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6762
		{
6763
			$temp_array['airline_icao'] = $row['airline_icao'];
6764
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6765
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6766
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6767
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6768
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6769
          
6770
			$airport_array[] = $temp_array;
6771
		}
6772
		return $airport_array;
6773
	}
6774
6775
	/**
6776
	* Gets all detected departure airports of the airplanes that have flown over
6777
	*
6778
	* @return Array the airport list
6779
	*
6780
	*/
6781
	public function countAllDetectedDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
6782
	{
6783
		global $globalDBdriver;
6784
		$filter_query = $this->getFilter($filters,true,true);
6785
		$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, airport.latitude as departure_airport_latitude, airport.longitude as departure_airport_longitude
6786
				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";
6787
                if ($olderthanmonths > 0) {
6788
            		if ($globalDBdriver == 'mysql') {
6789
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6790
			} else {
6791
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6792
			}
6793
                }
6794
                if ($sincedate != '') {
6795
            		if ($globalDBdriver == 'mysql') {
6796
				$query .= " AND spotter_output.date > '".$sincedate."'";
6797
			} else {
6798
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6799
			}
6800
		}
6801
		$query_values = array();
6802
		if ($year != '') {
6803
			if ($globalDBdriver == 'mysql') {
6804
				$query .= " AND YEAR(spotter_output.date) = :year";
6805
				$query_values = array_merge($query_values,array(':year' => $year));
6806
			} else {
6807
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6808
				$query_values = array_merge($query_values,array(':year' => $year));
6809
			}
6810
		}
6811
		if ($month != '') {
6812
			if ($globalDBdriver == 'mysql') {
6813
				$query .= " AND MONTH(spotter_output.date) = :month";
6814
				$query_values = array_merge($query_values,array(':month' => $month));
6815
			} else {
6816
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6817
				$query_values = array_merge($query_values,array(':month' => $month));
6818
			}
6819
		}
6820
		if ($day != '') {
6821
			if ($globalDBdriver == 'mysql') {
6822
				$query .= " AND DAY(spotter_output.date) = :day";
6823
				$query_values = array_merge($query_values,array(':day' => $day));
6824
			} else {
6825
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6826
				$query_values = array_merge($query_values,array(':day' => $day));
6827
			}
6828
		}
6829
                $query .= " GROUP BY spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country, airport.latitude, airport.longitude
6830
				ORDER BY airport_departure_icao_count DESC";
6831
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6832
    		//echo $query;
6833
		$sth = $this->db->prepare($query);
6834
		$sth->execute($query_values);
6835
      
6836
		$airport_array = array();
6837
		$temp_array = array();
6838
        
6839
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6840
		{
6841
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6842
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6843
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6844
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6845
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6846
			$temp_array['airport_departure_latitude'] = $row['departure_airport_latitude'];
6847
			$temp_array['airport_departure_longitude'] = $row['departure_airport_longitude'];
6848
          
6849
			$airport_array[] = $temp_array;
6850
		}
6851
		return $airport_array;
6852
	}
6853
	
6854
	/**
6855
	* Gets all detected departure airports of the airplanes that have flown over
6856
	*
6857
	* @return Array the airport list
6858
	*
6859
	*/
6860
	public function countAllDetectedDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
6861
	{
6862
		global $globalDBdriver;
6863
		$filter_query = $this->getFilter($filters,true,true);
6864
		$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
6865
				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 ";
6866
                if ($olderthanmonths > 0) {
6867
            		if ($globalDBdriver == 'mysql') {
6868
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6869
			} else {
6870
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6871
			}
6872
                }
6873
                if ($sincedate != '') {
6874
            		if ($globalDBdriver == 'mysql') {
6875
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6876
			} else {
6877
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
6878
			}
6879
		}
6880
6881
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6882
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6883
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
6884
				ORDER BY airport_departure_icao_count DESC";
6885
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6886
      
6887
		$sth = $this->db->prepare($query);
6888
		$sth->execute();
6889
      
6890
		$airport_array = array();
6891
		$temp_array = array();
6892
        
6893
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6894
		{
6895
			$temp_array['airline_icao'] = $row['airline_icao'];
6896
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6897
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6898
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6899
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6900
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6901
          
6902
			$airport_array[] = $temp_array;
6903
		}
6904
		return $airport_array;
6905
	}	
6906
	
6907
	/**
6908
	* Gets all departure airports of the airplanes that have flown over based on an airline icao
6909
	*
6910
	* @return Array the airport list
6911
	*
6912
	*/
6913
	public function countAllDepartureAirportsByAirline($airline_icao,$filters = array())
6914
	{
6915
		$filter_query = $this->getFilter($filters,true,true);
6916
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6917
		$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 
6918
			    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 <> '' 
6919
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6920
			    ORDER BY airport_departure_icao_count DESC";
6921
      
6922
		
6923
		$sth = $this->db->prepare($query);
6924
		$sth->execute(array(':airline_icao' => $airline_icao));
6925
      
6926
		$airport_array = array();
6927
		$temp_array = array();
6928
        
6929
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6930
		{
6931
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6932
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6933
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6934
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6935
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6936
          
6937
			$airport_array[] = $temp_array;
6938
		}
6939
6940
		return $airport_array;
6941
	}
6942
	
6943
	
6944
	
6945
	/**
6946
	* Gets all departure airports by country of the airplanes that have flown over based on an airline icao
6947
	*
6948
	* @return Array the airport list
6949
	*
6950
	*/
6951
	public function countAllDepartureAirportCountriesByAirline($airline_icao,$filters = array())
6952
	{
6953
		$filter_query = $this->getFilter($filters,true,true);
6954
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6955
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count, countries.iso3 AS departure_airport_country_iso3 
6956
			FROM countries,spotter_output".$filter_query." countries.name = spotter_output.departure_airport_country AND spotter_output.departure_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
6957
			GROUP BY spotter_output.departure_airport_country, countries.iso3
6958
			ORDER BY airport_departure_country_count DESC";
6959
		
6960
		$sth = $this->db->prepare($query);
6961
		$sth->execute(array(':airline_icao' => $airline_icao));
6962
      
6963
		$airport_array = array();
6964
		$temp_array = array();
6965
        
6966
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6967
		{
6968
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6969
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6970
			$temp_array['departure_airport_country_iso3'] = $row['departure_airport_country_iso3'];
6971
			$airport_array[] = $temp_array;
6972
		}
6973
		return $airport_array;
6974
	}
6975
	
6976
	
6977
	
6978
	/**
6979
	* Gets all departure airports of the airplanes that have flown over based on an aircraft icao
6980
	*
6981
	* @return Array the airport list
6982
	*
6983
	*/
6984
	public function countAllDepartureAirportsByAircraft($aircraft_icao,$filters = array())
6985
	{
6986
		$filter_query = $this->getFilter($filters,true,true);
6987
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
6988
		$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 
6989
			    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 <> '' 
6990
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6991
			    ORDER BY airport_departure_icao_count DESC";
6992
      
6993
		
6994
		$sth = $this->db->prepare($query);
6995
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
6996
      
6997
		$airport_array = array();
6998
		$temp_array = array();
6999
        
7000
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7001
		{
7002
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7003
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7004
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7005
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7006
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7007
          
7008
			$airport_array[] = $temp_array;
7009
		}
7010
7011
		return $airport_array;
7012
	}
7013
	
7014
	
7015
	/**
7016
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
7017
	*
7018
	* @return Array the airport list
7019
	*
7020
	*/
7021
	public function countAllDepartureAirportCountriesByAircraft($aircraft_icao,$filters = array())
7022
	{
7023
		$filter_query = $this->getFilter($filters,true,true);
7024
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7025
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count, countries.iso3 AS departure_airport_country_iso3 
7026
			FROM countries, spotter_output".$filter_query." countries.name = spotter_output.departure_airport_country AND spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
7027
			GROUP BY spotter_output.departure_airport_country, countries.iso3
7028
			ORDER BY airport_departure_country_count DESC";
7029
      
7030
		
7031
		$sth = $this->db->prepare($query);
7032
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7033
      
7034
		$airport_array = array();
7035
		$temp_array = array();
7036
        
7037
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7038
		{
7039
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7040
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7041
			$temp_array['departure_airport_country_iso3'] = $row['departure_airport_country_iso3'];
7042
			$airport_array[] = $temp_array;
7043
		}
7044
7045
		return $airport_array;
7046
	}
7047
	
7048
	
7049
	/**
7050
	* Gets all departure airports of the airplanes that have flown over based on an aircraft registration
7051
	*
7052
	* @return Array the airport list
7053
	*
7054
	*/
7055
	public function countAllDepartureAirportsByRegistration($registration,$filters = array())
7056
	{
7057
		$filter_query = $this->getFilter($filters,true,true);
7058
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
7059
		$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 
7060
			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 <> '' 
7061
                    GROUP BY spotter_output.departure_airport_icao
7062
					ORDER BY airport_departure_icao_count DESC";
7063
      
7064
		
7065
		$sth = $this->db->prepare($query);
7066
		$sth->execute(array(':registration' => $registration));
7067
      
7068
		$airport_array = array();
7069
		$temp_array = array();
7070
        
7071
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7072
		{
7073
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7074
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7075
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7076
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7077
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7078
          
7079
			$airport_array[] = $temp_array;
7080
		}
7081
7082
		return $airport_array;
7083
	}
7084
	
7085
	
7086
	/**
7087
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft registration
7088
	*
7089
	* @return Array the airport list
7090
	*
7091
	*/
7092
	public function countAllDepartureAirportCountriesByRegistration($registration,$filters = array())
7093
	{
7094
		$filter_query = $this->getFilter($filters,true,true);
7095
		$registration = filter_var($registration,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.registration = :registration 
7098
                    GROUP BY spotter_output.departure_airport_country
7099
					ORDER BY airport_departure_country_count DESC";
7100
      
7101
		
7102
		$sth = $this->db->prepare($query);
7103
		$sth->execute(array(':registration' => $registration));
7104
      
7105
		$airport_array = array();
7106
		$temp_array = array();
7107
        
7108
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7109
		{
7110
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7111
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7112
          
7113
			$airport_array[] = $temp_array;
7114
		}
7115
7116
		return $airport_array;
7117
	}
7118
	
7119
	
7120
	/**
7121
	* Gets all departure airports of the airplanes that have flown over based on an arrivl airport icao
7122
	*
7123
	* @return Array the airport list
7124
	*
7125
	*/
7126
	public function countAllDepartureAirportsByAirport($airport_icao,$filters = array())
7127
	{
7128
		$filter_query = $this->getFilter($filters,true,true);
7129
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7130
		$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 
7131
			    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 <> '' 
7132
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7133
			    ORDER BY airport_departure_icao_count DESC";
7134
      
7135
		
7136
		$sth = $this->db->prepare($query);
7137
		$sth->execute(array(':airport_icao' => $airport_icao));
7138
      
7139
		$airport_array = array();
7140
		$temp_array = array();
7141
        
7142
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7143
		{
7144
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7145
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7146
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7147
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7148
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7149
          
7150
			$airport_array[] = $temp_array;
7151
		}
7152
7153
		return $airport_array;
7154
	}
7155
	
7156
	
7157
	/**
7158
	* Gets all departure airports by country of the airplanes that have flown over based on an airport icao
7159
	*
7160
	* @return Array the airport list
7161
	*
7162
	*/
7163
	public function countAllDepartureAirportCountriesByAirport($airport_icao,$filters = array())
7164
	{
7165
		$filter_query = $this->getFilter($filters,true,true);
7166
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7167
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count, countries.iso3 AS departure_airport_country_iso3 
7168
			FROM countries,spotter_output".$filter_query." countries.name = spotter_output.departure_airport_country AND spotter_output.departure_airport_country <> '' AND spotter_output.arrival_airport_icao = :airport_icao 
7169
			GROUP BY spotter_output.departure_airport_country, countries.iso3
7170
			ORDER BY airport_departure_country_count DESC";
7171
		
7172
		$sth = $this->db->prepare($query);
7173
		$sth->execute(array(':airport_icao' => $airport_icao));
7174
      
7175
		$airport_array = array();
7176
		$temp_array = array();
7177
        
7178
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7179
		{
7180
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7181
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7182
			$temp_array['departure_airport_country_iso3'] = $row['departure_airport_country_iso3'];
7183
			$airport_array[] = $temp_array;
7184
		}
7185
		return $airport_array;
7186
	}
7187
	
7188
	
7189
	
7190
	/**
7191
	* Gets all departure airports of the airplanes that have flown over based on an aircraft manufacturer
7192
	*
7193
	* @return Array the airport list
7194
	*
7195
	*/
7196
	public function countAllDepartureAirportsByManufacturer($aircraft_manufacturer,$filters = array())
7197
	{
7198
		$filter_query = $this->getFilter($filters,true,true);
7199
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7200
		$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 
7201
			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 <> '' 
7202
                    GROUP BY spotter_output.departure_airport_icao
7203
					ORDER BY airport_departure_icao_count DESC";
7204
      
7205
		
7206
		$sth = $this->db->prepare($query);
7207
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7208
      
7209
		$airport_array = array();
7210
		$temp_array = array();
7211
        
7212
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7213
		{
7214
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7215
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7216
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7217
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7218
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7219
          
7220
			$airport_array[] = $temp_array;
7221
		}
7222
7223
		return $airport_array;
7224
	}
7225
	
7226
	
7227
	/**
7228
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft manufacturer
7229
	*
7230
	* @return Array the airport list
7231
	*
7232
	*/
7233
	public function countAllDepartureAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
7234
	{
7235
		$filter_query = $this->getFilter($filters,true,true);
7236
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7237
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7238
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
7239
                    GROUP BY spotter_output.departure_airport_country
7240
					ORDER BY airport_departure_country_count DESC";
7241
      
7242
		
7243
		$sth = $this->db->prepare($query);
7244
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7245
      
7246
		$airport_array = array();
7247
		$temp_array = array();
7248
        
7249
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7250
		{
7251
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7252
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7253
          
7254
			$airport_array[] = $temp_array;
7255
		}
7256
7257
		return $airport_array;
7258
	}
7259
	
7260
	
7261
	/**
7262
	* Gets all departure airports of the airplanes that have flown over based on a date
7263
	*
7264
	* @return Array the airport list
7265
	*
7266
	*/
7267
	public function countAllDepartureAirportsByDate($date,$filters = array())
7268
	{
7269
		global $globalTimezone, $globalDBdriver;
7270
		$filter_query = $this->getFilter($filters,true,true);
7271
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7272
		if ($globalTimezone != '') {
7273
			date_default_timezone_set($globalTimezone);
7274
			$datetime = new DateTime($date);
7275
			$offset = $datetime->format('P');
7276
		} else $offset = '+00:00';
7277
7278
		if ($globalDBdriver == 'mysql') {
7279
			$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 
7280
					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
7281
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7282
					ORDER BY airport_departure_icao_count DESC";
7283
		} else {
7284
			$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 
7285
					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
7286
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7287
					ORDER BY airport_departure_icao_count DESC";
7288
		}
7289
7290
		$sth = $this->db->prepare($query);
7291
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7292
      
7293
		$airport_array = array();
7294
		$temp_array = array();
7295
        
7296
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7297
		{
7298
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7299
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7300
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7301
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7302
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7303
          
7304
			$airport_array[] = $temp_array;
7305
		}
7306
		return $airport_array;
7307
	}
7308
	
7309
	
7310
	
7311
	/**
7312
	* Gets all departure airports by country of the airplanes that have flown over based on a date
7313
	*
7314
	* @return Array the airport list
7315
	*
7316
	*/
7317
	public function countAllDepartureAirportCountriesByDate($date,$filters = array())
7318
	{
7319
		global $globalTimezone, $globalDBdriver;
7320
		$filter_query = $this->getFilter($filters,true,true);
7321
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7322
		if ($globalTimezone != '') {
7323
			date_default_timezone_set($globalTimezone);
7324
			$datetime = new DateTime($date);
7325
			$offset = $datetime->format('P');
7326
		} else $offset = '+00:00';
7327
7328
		if ($globalDBdriver == 'mysql') {
7329
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7330
					FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
7331
					GROUP BY spotter_output.departure_airport_country
7332
					ORDER BY airport_departure_country_count DESC";
7333
		} else {
7334
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7335
					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 
7336
					GROUP BY spotter_output.departure_airport_country
7337
					ORDER BY airport_departure_country_count DESC";
7338
		}
7339
		
7340
		$sth = $this->db->prepare($query);
7341
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7342
      
7343
		$airport_array = array();
7344
		$temp_array = array();
7345
        
7346
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7347
		{
7348
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7349
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7350
          
7351
			$airport_array[] = $temp_array;
7352
		}
7353
		return $airport_array;
7354
	}
7355
	
7356
	
7357
	
7358
	/**
7359
	* Gets all departure airports of the airplanes that have flown over based on a ident/callsign
7360
	*
7361
	* @return Array the airport list
7362
	*
7363
	*/
7364
	public function countAllDepartureAirportsByIdent($ident,$filters = array())
7365
	{
7366
		$filter_query = $this->getFilter($filters,true,true);
7367
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7368
		$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 
7369
		    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 
7370
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7371
		    ORDER BY airport_departure_icao_count DESC";
7372
      
7373
		
7374
		$sth = $this->db->prepare($query);
7375
		$sth->execute(array(':ident' => $ident));
7376
      
7377
		$airport_array = array();
7378
		$temp_array = array();
7379
        
7380
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7381
		{
7382
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7383
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7384
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7385
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7386
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7387
          
7388
			$airport_array[] = $temp_array;
7389
		}
7390
7391
		return $airport_array;
7392
	}
7393
	
7394
	/**
7395
	* Gets all departure airports of the airplanes that have flown over based on a owner
7396
	*
7397
	* @return Array the airport list
7398
	*
7399
	*/
7400
	public function countAllDepartureAirportsByOwner($owner,$filters = array())
7401
	{
7402
		$filter_query = $this->getFilter($filters,true,true);
7403
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
7404
		$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 
7405
		    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 
7406
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7407
		    ORDER BY airport_departure_icao_count DESC";
7408
      
7409
		
7410
		$sth = $this->db->prepare($query);
7411
		$sth->execute(array(':owner' => $owner));
7412
      
7413
		$airport_array = array();
7414
		$temp_array = array();
7415
        
7416
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7417
		{
7418
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7419
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7420
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7421
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7422
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7423
          
7424
			$airport_array[] = $temp_array;
7425
		}
7426
7427
		return $airport_array;
7428
	}
7429
	
7430
	/**
7431
	* Gets all departure airports of the airplanes that have flown over based on a pilot
7432
	*
7433
	* @return Array the airport list
7434
	*
7435
	*/
7436
	public function countAllDepartureAirportsByPilot($pilot,$filters = array())
7437
	{
7438
		$filter_query = $this->getFilter($filters,true,true);
7439
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
7440
		$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 
7441
		    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) 
7442
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7443
		    ORDER BY airport_departure_icao_count DESC";
7444
		
7445
		$sth = $this->db->prepare($query);
7446
		$sth->execute(array(':pilot' => $pilot));
7447
      
7448
		$airport_array = array();
7449
		$temp_array = array();
7450
        
7451
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7452
		{
7453
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7454
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7455
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7456
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7457
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7458
          
7459
			$airport_array[] = $temp_array;
7460
		}
7461
7462
		return $airport_array;
7463
	}
7464
	
7465
	
7466
	
7467
	/**
7468
	* Gets all departure airports by country of the airplanes that have flown over based on a callsign/ident
7469
	*
7470
	* @return Array the airport list
7471
	*
7472
	*/
7473
	public function countAllDepartureAirportCountriesByIdent($ident,$filters = array())
7474
	{
7475
		$filter_query = $this->getFilter($filters,true,true);
7476
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7477
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7478
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.ident = :ident 
7479
                    GROUP BY spotter_output.departure_airport_country
7480
					ORDER BY airport_departure_country_count DESC";
7481
      
7482
		
7483
		$sth = $this->db->prepare($query);
7484
		$sth->execute(array(':ident' => $ident));
7485
      
7486
		$airport_array = array();
7487
		$temp_array = array();
7488
        
7489
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7490
		{
7491
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7492
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7493
          
7494
			$airport_array[] = $temp_array;
7495
		}
7496
7497
		return $airport_array;
7498
	}
7499
	
7500
	/**
7501
	* Gets all departure airports by country of the airplanes that have flown over based on owner
7502
	*
7503
	* @return Array the airport list
7504
	*
7505
	*/
7506
	public function countAllDepartureAirportCountriesByOwner($owner,$filters = array())
7507
	{
7508
		$filter_query = $this->getFilter($filters,true,true);
7509
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
7510
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7511
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.owner_name = :owner 
7512
			GROUP BY spotter_output.departure_airport_country
7513
			ORDER BY airport_departure_country_count DESC";
7514
		
7515
		$sth = $this->db->prepare($query);
7516
		$sth->execute(array(':owner' => $owner));
7517
		return $sth->fetchAll(PDO::FETCH_ASSOC);
7518
	}
7519
	
7520
	/**
7521
	* Gets all departure airports by country of the airplanes that have flown over based on pilot
7522
	*
7523
	* @return Array the airport list
7524
	*
7525
	*/
7526
	public function countAllDepartureAirportCountriesByPilot($pilot,$filters = array())
7527
	{
7528
		$filter_query = $this->getFilter($filters,true,true);
7529
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
7530
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7531
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
7532
			GROUP BY spotter_output.departure_airport_country
7533
			ORDER BY airport_departure_country_count DESC";
7534
		
7535
		$sth = $this->db->prepare($query);
7536
		$sth->execute(array(':pilot' => $pilot));
7537
		return $sth->fetchAll(PDO::FETCH_ASSOC);
7538
	}
7539
	
7540
	
7541
	
7542
	/**
7543
	* Gets all departure airports of the airplanes that have flown over based on a country
7544
	*
7545
	* @return Array the airport list
7546
	*
7547
	*/
7548
	public function countAllDepartureAirportsByCountry($country,$filters = array())
7549
	{
7550
		$filter_query = $this->getFilter($filters,true,true);
7551
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7552
7553
		$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 
7554
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
7555
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7556
			    ORDER BY airport_departure_icao_count DESC";
7557
      
7558
		
7559
		$sth = $this->db->prepare($query);
7560
		$sth->execute(array(':country' => $country));
7561
      
7562
		$airport_array = array();
7563
		$temp_array = array();
7564
        
7565
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7566
		{
7567
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7568
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7569
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7570
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7571
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7572
          
7573
			$airport_array[] = $temp_array;
7574
		}
7575
7576
		return $airport_array;
7577
	}
7578
7579
7580
	/**
7581
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
7582
	*
7583
	* @return Array the airport list
7584
	*
7585
	*/
7586
	public function countAllDepartureAirportCountriesByCountry($country,$filters = array())
7587
	{
7588
		$filter_query = $this->getFilter($filters,true,true);
7589
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7590
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count, countries.iso3 AS departure_airport_country_iso3 
7591
			FROM countries,spotter_output".$filter_query." countries.name = spotter_output.departure_airport_country AND 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) 
7592
			GROUP BY spotter_output.departure_airport_country, countries.iso3
7593
			ORDER BY airport_departure_country_count DESC";
7594
		
7595
		$sth = $this->db->prepare($query);
7596
		$sth->execute(array(':country' => $country));
7597
		$airport_array = array();
7598
		$temp_array = array();
7599
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7600
		{
7601
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7602
			$temp_array['departure_airport_country_iso3'] = $row['departure_airport_country_iso3'];
7603
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7604
			$airport_array[] = $temp_array;
7605
		}
7606
		return $airport_array;
7607
	}
7608
	
7609
7610
	/**
7611
	* Gets all arrival airports of the airplanes that have flown over
7612
	*
7613
	* @param Boolean $limit Limit result to 10 or not
7614
	* @param Integer $olderthanmonths Only show result older than x months
7615
	* @param String $sincedate Only show result since x date
7616
	* @param Boolean $icaoaskey Show result by ICAO
7617
	* @param Array $filters Filter used here
7618
	* @return Array the airport list
7619
	*
7620
	*/
7621
	public function countAllArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array(),$year = '',$month = '',$day = '')
7622
	{
7623
		global $globalDBdriver;
7624
		$filter_query = $this->getFilter($filters,true,true);
7625
		$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, airport.latitude as arrival_airport_latitude, airport.longitude as arrival_airport_longitude 
7626
				FROM airport, spotter_output".$filter_query." airport.icao = spotter_output.arrival_airport_icao AND spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''";
7627
                if ($olderthanmonths > 0) {
7628
            		if ($globalDBdriver == 'mysql') {
7629
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
7630
			} else {
7631
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
7632
			}
7633
		}
7634
                if ($sincedate != '') {
7635
            		if ($globalDBdriver == 'mysql') {
7636
				$query .= " AND spotter_output.date > '".$sincedate."'";
7637
			} else {
7638
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7639
			}
7640
		}
7641
		$query_values = array();
7642
		if ($year != '') {
7643
			if ($globalDBdriver == 'mysql') {
7644
				$query .= " AND YEAR(spotter_output.date) = :year";
7645
				$query_values = array_merge($query_values,array(':year' => $year));
7646
			} else {
7647
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
7648
				$query_values = array_merge($query_values,array(':year' => $year));
7649
			}
7650
		}
7651
		if ($month != '') {
7652
			if ($globalDBdriver == 'mysql') {
7653
				$query .= " AND MONTH(spotter_output.date) = :month";
7654
				$query_values = array_merge($query_values,array(':month' => $month));
7655
			} else {
7656
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
7657
				$query_values = array_merge($query_values,array(':month' => $month));
7658
			}
7659
		}
7660
		if ($day != '') {
7661
			if ($globalDBdriver == 'mysql') {
7662
				$query .= " AND DAY(spotter_output.date) = :day";
7663
				$query_values = array_merge($query_values,array(':day' => $day));
7664
			} else {
7665
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
7666
				$query_values = array_merge($query_values,array(':day' => $day));
7667
			}
7668
		}
7669
                $query .= " GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country, airport.latitude, airport.longitude
7670
					ORDER BY airport_arrival_icao_count DESC";
7671
		if ($limit) $query .= " LIMIT 10";
7672
      
7673
		
7674
		$sth = $this->db->prepare($query);
7675
		$sth->execute($query_values);
7676
      
7677
		$airport_array = array();
7678
		$temp_array = array();
7679
        
7680
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7681
		{
7682
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7683
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7684
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7685
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7686
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7687
			$temp_array['airport_arrival_latitude'] = $row['arrival_airport_latitude'];
7688
			$temp_array['airport_arrival_longitude'] = $row['arrival_airport_longitude'];
7689
          
7690
			if ($icaoaskey) {
7691
				$icao = $row['arrival_airport_icao'];
7692
				$airport_array[$icao] = $temp_array;
7693
			} else $airport_array[] = $temp_array;
7694
		}
7695
7696
		return $airport_array;
7697
	}
7698
7699
	/**
7700
	* Gets all arrival airports of the airplanes that have flown over
7701
	*
7702
	* @return Array the airport list
7703
	*
7704
	*/
7705
	public function countAllArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array())
7706
	{
7707
		global $globalDBdriver;
7708
		$filter_query = $this->getFilter($filters,true,true);
7709
		$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, countries.iso3 AS arrival_airport_country_iso3 
7710
			FROM countries,spotter_output".$filter_query." countries.name = spotter_output.arrival_airport_country AND spotter_output.airline_icao <> '' AND spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' ";
7711
                if ($olderthanmonths > 0) {
7712
            		if ($globalDBdriver == 'mysql') {
7713
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
7714
			} else {
7715
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
7716
			}
7717
		}
7718
                if ($sincedate != '') {
7719
            		if ($globalDBdriver == 'mysql') {
7720
				$query .= "AND spotter_output.date > '".$sincedate."' ";
7721
			} else {
7722
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7723
			}
7724
		}
7725
7726
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
7727
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
7728
                $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, countries.iso3
7729
					ORDER BY airport_arrival_icao_count DESC";
7730
		if ($limit) $query .= " LIMIT 10";
7731
      
7732
		
7733
		$sth = $this->db->prepare($query);
7734
		$sth->execute();
7735
      
7736
		$airport_array = array();
7737
		$temp_array = array();
7738
        
7739
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7740
		{
7741
			$temp_array['airline_icao'] = $row['airline_icao'];
7742
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7743
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7744
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7745
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7746
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7747
			$temp_array['airport_arrival_country_iso3'] = $row['arrival_airport_country_iso3'];
7748
          
7749
			if ($icaoaskey) {
7750
				$icao = $row['arrival_airport_icao'];
7751
				$airport_array[$icao] = $temp_array;
7752
			} else $airport_array[] = $temp_array;
7753
		}
7754
7755
		return $airport_array;
7756
	}
7757
7758
7759
	/**
7760
	* Gets all detected arrival airports of the airplanes that have flown over
7761
	*
7762
	* @return Array the airport list
7763
	*
7764
	*/
7765
	public function countAllDetectedArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array(),$year = '',$month = '',$day = '')
7766
	{
7767
		global $globalDBdriver;
7768
		$filter_query = $this->getFilter($filters,true,true);
7769
		$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, airport.latitude AS arrival_airport_latitude, airport.longitude AS arrival_airport_longitude 
7770
			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";
7771
                if ($olderthanmonths > 0) {
7772
            		if ($globalDBdriver == 'mysql') {
7773
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
7774
			} else {
7775
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
7776
			}
7777
		}
7778
                if ($sincedate != '') {
7779
            		if ($globalDBdriver == 'mysql') {
7780
				$query .= " AND spotter_output.date > '".$sincedate."'";
7781
			} else {
7782
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7783
			}
7784
		}
7785
		$query_values = array();
7786
		if ($year != '') {
7787
			if ($globalDBdriver == 'mysql') {
7788
				$query .= " AND YEAR(spotter_output.date) = :year";
7789
				$query_values = array_merge($query_values,array(':year' => $year));
7790
			} else {
7791
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
7792
				$query_values = array_merge($query_values,array(':year' => $year));
7793
			}
7794
		}
7795
		if ($month != '') {
7796
			if ($globalDBdriver == 'mysql') {
7797
				$query .= " AND MONTH(spotter_output.date) = :month";
7798
				$query_values = array_merge($query_values,array(':month' => $month));
7799
			} else {
7800
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
7801
				$query_values = array_merge($query_values,array(':month' => $month));
7802
			}
7803
		}
7804
		if ($day != '') {
7805
			if ($globalDBdriver == 'mysql') {
7806
				$query .= " AND DAY(spotter_output.date) = :day";
7807
				$query_values = array_merge($query_values,array(':day' => $day));
7808
			} else {
7809
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
7810
				$query_values = array_merge($query_values,array(':day' => $day));
7811
			}
7812
		}
7813
		$query .= " GROUP BY spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country, airport.latitude, airport.longitude
7814
					ORDER BY airport_arrival_icao_count DESC";
7815
		if ($limit) $query .= " LIMIT 10";
7816
      
7817
		
7818
		$sth = $this->db->prepare($query);
7819
		$sth->execute($query_values);
7820
      
7821
		$airport_array = array();
7822
		$temp_array = array();
7823
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7824
		{
7825
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7826
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7827
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7828
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7829
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7830
          
7831
			if ($icaoaskey) {
7832
				$icao = $row['arrival_airport_icao'];
7833
				$airport_array[$icao] = $temp_array;
7834
			} else $airport_array[] = $temp_array;
7835
		}
7836
7837
		return $airport_array;
7838
	}
7839
	
7840
	/**
7841
	* Gets all detected arrival airports of the airplanes that have flown over
7842
	*
7843
	* @return Array the airport list
7844
	*
7845
	*/
7846
	public function countAllDetectedArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array())
7847
	{
7848
		global $globalDBdriver;
7849
		$filter_query = $this->getFilter($filters,true,true);
7850
		$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 
7851
			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 ";
7852
                if ($olderthanmonths > 0) {
7853
            		if ($globalDBdriver == 'mysql') {
7854
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
7855
			} else {
7856
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
7857
			}
7858
		}
7859
                if ($sincedate != '') {
7860
            		if ($globalDBdriver == 'mysql') {
7861
				$query .= "AND spotter_output.date > '".$sincedate."' ";
7862
			} else {
7863
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7864
			}
7865
		}
7866
7867
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
7868
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
7869
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
7870
					ORDER BY airport_arrival_icao_count DESC";
7871
		if ($limit) $query .= " LIMIT 10";
7872
      
7873
		
7874
		$sth = $this->db->prepare($query);
7875
		$sth->execute();
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
			$temp_array['airline_icao'] = $row['airline_icao'];
7888
          
7889
			if ($icaoaskey) {
7890
				$icao = $row['arrival_airport_icao'];
7891
				$airport_array[$icao] = $temp_array;
7892
			} else $airport_array[] = $temp_array;
7893
		}
7894
7895
		return $airport_array;
7896
	}	
7897
	
7898
	/**
7899
	* Gets all arrival airports of the airplanes that have flown over based on an airline icao
7900
	*
7901
	* @return Array the airport list
7902
	*
7903
	*/
7904
	public function countAllArrivalAirportsByAirline($airline_icao, $filters = array())
7905
	{
7906
		$filter_query = $this->getFilter($filters,true,true);
7907
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7908
		$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 
7909
			    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 
7910
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7911
			    ORDER BY airport_arrival_icao_count DESC";
7912
		
7913
		$sth = $this->db->prepare($query);
7914
		$sth->execute(array(':airline_icao' => $airline_icao));
7915
      
7916
		$airport_array = array();
7917
		$temp_array = array();
7918
        
7919
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7920
		{
7921
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7922
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7923
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7924
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7925
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7926
          
7927
			$airport_array[] = $temp_array;
7928
		}
7929
7930
		return $airport_array;
7931
	}
7932
	
7933
	
7934
	/**
7935
	* Gets all arrival airports by country of the airplanes that have flown over based on an airline icao
7936
	*
7937
	* @return Array the airport list
7938
	*
7939
	*/
7940
	public function countAllArrivalAirportCountriesByAirline($airline_icao,$filters = array())
7941
	{
7942
		$filter_query = $this->getFilter($filters,true,true);
7943
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7944
		
7945
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count, countries.iso3 AS arrival_airport_country_iso3 
7946
			FROM countries, spotter_output".$filter_query." countries.name = spotter_output.arrival_airport_country AND spotter_output.arrival_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
7947
			GROUP BY spotter_output.arrival_airport_country, countries.iso3
7948
			ORDER BY airport_arrival_country_count DESC";
7949
      
7950
		
7951
		$sth = $this->db->prepare($query);
7952
		$sth->execute(array(':airline_icao' => $airline_icao));
7953
      
7954
		$airport_array = array();
7955
		$temp_array = array();
7956
        
7957
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7958
		{
7959
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7960
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7961
			$temp_array['arrival_airport_country_iso3'] = $row['arrival_airport_country_iso3'];
7962
			$airport_array[] = $temp_array;
7963
		}
7964
		return $airport_array;
7965
	}
7966
	
7967
	
7968
	/**
7969
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft icao
7970
	*
7971
	* @return Array the airport list
7972
	*
7973
	*/
7974
	public function countAllArrivalAirportsByAircraft($aircraft_icao,$filters = array())
7975
	{
7976
		$filter_query = $this->getFilter($filters,true,true);
7977
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7978
		$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 
7979
			    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 
7980
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7981
			    ORDER BY airport_arrival_icao_count DESC";
7982
      
7983
		
7984
		$sth = $this->db->prepare($query);
7985
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7986
      
7987
		$airport_array = array();
7988
		$temp_array = array();
7989
        
7990
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7991
		{
7992
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7993
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7994
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7995
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7996
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7997
          
7998
			$airport_array[] = $temp_array;
7999
		}
8000
8001
		return $airport_array;
8002
	}
8003
	
8004
	
8005
	
8006
	/**
8007
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft icao
8008
	*
8009
	* @return Array the airport list
8010
	*
8011
	*/
8012
	public function countAllArrivalAirportCountriesByAircraft($aircraft_icao,$filters = array())
8013
	{
8014
		$filter_query = $this->getFilter($filters,true,true);
8015
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
8016
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count, countries.iso3 AS airport_arrival_country_iso3 
8017
			    FROM countries, spotter_output".$filter_query." countries.name = spotter_output.arrival_airport_country AND spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
8018
			    GROUP BY spotter_output.arrival_airport_country, countries.iso3
8019
			    ORDER BY airport_arrival_country_count DESC";
8020
      
8021
		
8022
		$sth = $this->db->prepare($query);
8023
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
8024
      
8025
		$airport_array = array();
8026
		$temp_array = array();
8027
        
8028
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8029
		{
8030
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8031
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8032
			$temp_array['arrival_airport_country_iso3'] = $row['airport_arrival_country_iso3'];
8033
			$airport_array[] = $temp_array;
8034
		}
8035
8036
		return $airport_array;
8037
	}
8038
	
8039
	
8040
	/**
8041
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft registration
8042
	*
8043
	* @return Array the airport list
8044
	*
8045
	*/
8046
	public function countAllArrivalAirportsByRegistration($registration,$filters = array())
8047
	{
8048
		$filter_query = $this->getFilter($filters,true,true);
8049
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
8050
8051
		$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 
8052
			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 
8053
                    GROUP BY spotter_output.arrival_airport_icao
8054
					ORDER BY airport_arrival_icao_count DESC";
8055
      
8056
		
8057
		$sth = $this->db->prepare($query);
8058
		$sth->execute(array(':registration' => $registration));
8059
      
8060
		$airport_array = array();
8061
		$temp_array = array();
8062
        
8063
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8064
		{
8065
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8066
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8067
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8068
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8069
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8070
          
8071
			$airport_array[] = $temp_array;
8072
		}
8073
8074
		return $airport_array;
8075
	}
8076
	
8077
	
8078
	/**
8079
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft registration
8080
	*
8081
	* @return Array the airport list
8082
	*
8083
	*/
8084
	public function countAllArrivalAirportCountriesByRegistration($registration,$filters = array())
8085
	{
8086
		$filter_query = $this->getFilter($filters,true,true);
8087
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
8088
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8089
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.registration = :registration 
8090
                    GROUP BY spotter_output.arrival_airport_country
8091
					ORDER BY airport_arrival_country_count DESC";
8092
      
8093
		
8094
		$sth = $this->db->prepare($query);
8095
		$sth->execute(array(':registration' => $registration));
8096
      
8097
		$airport_array = array();
8098
		$temp_array = array();
8099
        
8100
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8101
		{
8102
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8103
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8104
          
8105
			$airport_array[] = $temp_array;
8106
		}
8107
8108
		return $airport_array;
8109
	}
8110
	
8111
	
8112
	
8113
	/**
8114
	* Gets all arrival airports of the airplanes that have flown over based on an departure airport
8115
	*
8116
	* @return Array the airport list
8117
	*
8118
	*/
8119
	public function countAllArrivalAirportsByAirport($airport_icao,$filters = array())
8120
	{
8121
		$filter_query = $this->getFilter($filters,true,true);
8122
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8123
		$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 
8124
			    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 
8125
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8126
			    ORDER BY airport_arrival_icao_count DESC";
8127
      
8128
		
8129
		$sth = $this->db->prepare($query);
8130
		$sth->execute(array(':airport_icao' => $airport_icao));
8131
      
8132
		$airport_array = array();
8133
		$temp_array = array();
8134
        
8135
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8136
		{
8137
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8138
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8139
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8140
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8141
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8142
          
8143
			$airport_array[] = $temp_array;
8144
		}
8145
8146
		return $airport_array;
8147
	}
8148
	
8149
	
8150
	/**
8151
	* Gets all arrival airports by country of the airplanes that have flown over based on an airport icao
8152
	*
8153
	* @return Array the airport list
8154
	*
8155
	*/
8156
	public function countAllArrivalAirportCountriesByAirport($airport_icao,$filters = array())
8157
	{
8158
		$filter_query = $this->getFilter($filters,true,true);
8159
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8160
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count, countries.iso3 AS arrival_airport_country_iso3 
8161
			FROM countries, spotter_output".$filter_query." countries.name = spotter_output.arrival_airport_country AND spotter_output.arrival_airport_country <> '' AND spotter_output.departure_airport_icao = :airport_icao 
8162
			GROUP BY spotter_output.arrival_airport_country, countries.iso3
8163
			ORDER BY airport_arrival_country_count DESC";
8164
		
8165
		$sth = $this->db->prepare($query);
8166
		$sth->execute(array(':airport_icao' => $airport_icao));
8167
      
8168
		$airport_array = array();
8169
		$temp_array = array();
8170
        
8171
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8172
		{
8173
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8174
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8175
			$temp_array['arrival_airport_country_iso3'] = $row['arrival_airport_country_iso3'];
8176
			$airport_array[] = $temp_array;
8177
		}
8178
		return $airport_array;
8179
	}
8180
	
8181
	
8182
	/**
8183
	* Gets all arrival airports of the airplanes that have flown over based on a aircraft manufacturer
8184
	*
8185
	* @return Array the airport list
8186
	*
8187
	*/
8188
	public function countAllArrivalAirportsByManufacturer($aircraft_manufacturer,$filters = array())
8189
	{
8190
		$filter_query = $this->getFilter($filters,true,true);
8191
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
8192
		$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 
8193
			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 
8194
                    GROUP BY spotter_output.arrival_airport_icao
8195
					ORDER BY airport_arrival_icao_count DESC";
8196
      
8197
		
8198
		$sth = $this->db->prepare($query);
8199
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
8200
      
8201
		$airport_array = array();
8202
		$temp_array = array();
8203
        
8204
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8205
		{
8206
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8207
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8208
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8209
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8210
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8211
          
8212
			$airport_array[] = $temp_array;
8213
		}
8214
8215
		return $airport_array;
8216
	}
8217
	
8218
	
8219
	
8220
	/**
8221
	* Gets all arrival airports by country of the airplanes that have flown over based on a aircraft manufacturer
8222
	*
8223
	* @return Array the airport list
8224
	*
8225
	*/
8226
	public function countAllArrivalAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
8227
	{
8228
		$filter_query = $this->getFilter($filters,true,true);
8229
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
8230
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8231
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
8232
                    GROUP BY spotter_output.arrival_airport_country
8233
					ORDER BY airport_arrival_country_count DESC";
8234
      
8235
		
8236
		$sth = $this->db->prepare($query);
8237
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
8238
      
8239
		$airport_array = array();
8240
		$temp_array = array();
8241
        
8242
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8243
		{
8244
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8245
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8246
          
8247
			$airport_array[] = $temp_array;
8248
		}
8249
8250
		return $airport_array;
8251
	}
8252
	
8253
	
8254
	
8255
	/**
8256
	* Gets all arrival airports of the airplanes that have flown over based on a date
8257
	*
8258
	* @return Array the airport list
8259
	*
8260
	*/
8261
	public function countAllArrivalAirportsByDate($date,$filters = array())
8262
	{
8263
		global $globalTimezone, $globalDBdriver;
8264
		$filter_query = $this->getFilter($filters,true,true);
8265
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8266
		if ($globalTimezone != '') {
8267
			date_default_timezone_set($globalTimezone);
8268
			$datetime = new DateTime($date);
8269
			$offset = $datetime->format('P');
8270
		} else $offset = '+00:00';
8271
8272
		if ($globalDBdriver == 'mysql') {
8273
			$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 
8274
					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  
8275
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8276
					ORDER BY airport_arrival_icao_count DESC";
8277
		} else {
8278
			$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 
8279
					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  
8280
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8281
					ORDER BY airport_arrival_icao_count DESC";
8282
		}
8283
		
8284
		$sth = $this->db->prepare($query);
8285
		$sth->execute(array(':date' => $date, ':offset' => $offset));
8286
      
8287
		$airport_array = array();
8288
		$temp_array = array();
8289
        
8290
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8291
		{
8292
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8293
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8294
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8295
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8296
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8297
          
8298
			$airport_array[] = $temp_array;
8299
		}
8300
		return $airport_array;
8301
	}
8302
	
8303
	
8304
	
8305
	/**
8306
	* Gets all arrival airports by country of the airplanes that have flown over based on a date
8307
	*
8308
	* @return Array the airport list
8309
	*
8310
	*/
8311
	public function countAllArrivalAirportCountriesByDate($date, $filters = array())
8312
	{
8313
		global $globalTimezone, $globalDBdriver;
8314
		$filter_query = $this->getFilter($filters,true,true);
8315
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8316
		if ($globalTimezone != '') {
8317
			date_default_timezone_set($globalTimezone);
8318
			$datetime = new DateTime($date);
8319
			$offset = $datetime->format('P');
8320
		} else $offset = '+00:00';
8321
8322
		if ($globalDBdriver == 'mysql') {
8323
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8324
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
8325
					GROUP BY spotter_output.arrival_airport_country
8326
					ORDER BY airport_arrival_country_count DESC";
8327
		} else {
8328
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8329
					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 
8330
					GROUP BY spotter_output.arrival_airport_country
8331
					ORDER BY airport_arrival_country_count DESC";
8332
		}
8333
		
8334
		$sth = $this->db->prepare($query);
8335
		$sth->execute(array(':date' => $date, ':offset' => $offset));
8336
      
8337
		$airport_array = array();
8338
		$temp_array = array();
8339
        
8340
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8341
		{
8342
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8343
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8344
          
8345
			$airport_array[] = $temp_array;
8346
		}
8347
		return $airport_array;
8348
	}
8349
	
8350
	
8351
	
8352
	/**
8353
	* Gets all arrival airports of the airplanes that have flown over based on a ident/callsign
8354
	*
8355
	* @return Array the airport list
8356
	*
8357
	*/
8358
	public function countAllArrivalAirportsByIdent($ident,$filters = array())
8359
	{
8360
		$filter_query = $this->getFilter($filters,true,true);
8361
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
8362
		$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 
8363
		    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  
8364
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8365
		    ORDER BY airport_arrival_icao_count DESC";
8366
      
8367
		
8368
		$sth = $this->db->prepare($query);
8369
		$sth->execute(array(':ident' => $ident));
8370
      
8371
		$airport_array = array();
8372
		$temp_array = array();
8373
        
8374
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8375
		{
8376
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8377
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8378
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8379
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8380
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8381
          
8382
			$airport_array[] = $temp_array;
8383
		}
8384
8385
		return $airport_array;
8386
	}
8387
	
8388
	/**
8389
	* Gets all arrival airports of the airplanes that have flown over based on a owner
8390
	*
8391
	* @return Array the airport list
8392
	*
8393
	*/
8394
	public function countAllArrivalAirportsByOwner($owner,$filters = array())
8395
	{
8396
		$filter_query = $this->getFilter($filters,true,true);
8397
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
8398
		$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 
8399
		    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 
8400
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8401
		    ORDER BY airport_arrival_icao_count DESC";
8402
      
8403
		
8404
		$sth = $this->db->prepare($query);
8405
		$sth->execute(array(':owner' => $owner));
8406
		$airport_array = array();
8407
		$temp_array = array();
8408
        
8409
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8410
		{
8411
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8412
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8413
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8414
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8415
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8416
          
8417
			$airport_array[] = $temp_array;
8418
		}
8419
8420
		return $airport_array;
8421
	}
8422
8423
	/**
8424
	* Gets all arrival airports of the airplanes that have flown over based on a pilot
8425
	*
8426
	* @return Array the airport list
8427
	*
8428
	*/
8429
	public function countAllArrivalAirportsByPilot($pilot,$filters = array())
8430
	{
8431
		$filter_query = $this->getFilter($filters,true,true);
8432
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
8433
		$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 
8434
		    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) 
8435
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8436
		    ORDER BY airport_arrival_icao_count DESC";
8437
      
8438
		
8439
		$sth = $this->db->prepare($query);
8440
		$sth->execute(array(':pilot' => $pilot));
8441
		$airport_array = array();
8442
		$temp_array = array();
8443
        
8444
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8445
		{
8446
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8447
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8448
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8449
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8450
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8451
          
8452
			$airport_array[] = $temp_array;
8453
		}
8454
8455
		return $airport_array;
8456
	}
8457
	
8458
	/**
8459
	* Gets all arrival airports by country of the airplanes that have flown over based on a callsign/ident
8460
	*
8461
	* @return Array the airport list
8462
	*
8463
	*/
8464
	public function countAllArrivalAirportCountriesByIdent($ident, $filters = array())
8465
	{
8466
		$filter_query = $this->getFilter($filters,true,true);
8467
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
8468
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8469
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.ident = :ident 
8470
                    GROUP BY spotter_output.arrival_airport_country
8471
					ORDER BY airport_arrival_country_count DESC";
8472
      
8473
		
8474
		$sth = $this->db->prepare($query);
8475
		$sth->execute(array(':ident' => $ident));
8476
      
8477
		$airport_array = array();
8478
		$temp_array = array();
8479
        
8480
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8481
		{
8482
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8483
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8484
          
8485
			$airport_array[] = $temp_array;
8486
		}
8487
8488
		return $airport_array;
8489
	}
8490
	
8491
	/**
8492
	* Gets all arrival airports by country of the airplanes that have flown over based on a owner
8493
	*
8494
	* @return Array the airport list
8495
	*
8496
	*/
8497
	public function countAllArrivalAirportCountriesByOwner($owner, $filters = array())
8498
	{
8499
		$filter_query = $this->getFilter($filters,true,true);
8500
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
8501
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8502
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.owner_name = :owner 
8503
                    GROUP BY spotter_output.arrival_airport_country
8504
		    ORDER BY airport_arrival_country_count DESC";
8505
8506
		$sth = $this->db->prepare($query);
8507
		$sth->execute(array(':owner' => $owner));
8508
		return $sth->fetchAll(PDO::FETCH_ASSOC);
8509
	}
8510
	
8511
	/**
8512
	* Gets all arrival airports by country of the airplanes that have flown over based on a pilot
8513
	*
8514
	* @return Array the airport list
8515
	*
8516
	*/
8517
	public function countAllArrivalAirportCountriesByPilot($pilot, $filters = array())
8518
	{
8519
		$filter_query = $this->getFilter($filters,true,true);
8520
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
8521
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8522
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
8523
                    GROUP BY spotter_output.arrival_airport_country
8524
		    ORDER BY airport_arrival_country_count DESC";
8525
8526
		$sth = $this->db->prepare($query);
8527
		$sth->execute(array(':pilot' => $pilot));
8528
		return $sth->fetchAll(PDO::FETCH_ASSOC);
8529
	}
8530
	
8531
	
8532
	
8533
	/**
8534
	* Gets all arrival airports of the airplanes that have flown over based on a country
8535
	*
8536
	* @return Array the airport list
8537
	*
8538
	*/
8539
	public function countAllArrivalAirportsByCountry($country,$filters = array())
8540
	{
8541
		$filter_query = $this->getFilter($filters,true,true);
8542
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8543
		$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 
8544
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
8545
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8546
			    ORDER BY airport_arrival_icao_count DESC";
8547
      
8548
		
8549
		$sth = $this->db->prepare($query);
8550
		$sth->execute(array(':country' => $country));
8551
      
8552
		$airport_array = array();
8553
		$temp_array = array();
8554
        
8555
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8556
		{
8557
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8558
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8559
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8560
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8561
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8562
          
8563
			$airport_array[] = $temp_array;
8564
		}
8565
8566
		return $airport_array;
8567
	}
8568
	
8569
	
8570
	/**
8571
	* Gets all arrival airports by country of the airplanes that have flown over based on a country
8572
	*
8573
	* @return Array the airport list
8574
	*
8575
	*/
8576
	public function countAllArrivalAirportCountriesByCountry($country,$filters = array())
8577
	{
8578
		global $globalDBdriver;
8579
		$filter_query = $this->getFilter($filters,true,true);
8580
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8581
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count, countries.iso3 AS arrival_airport_country_iso3 
8582
			FROM countries,spotter_output".$filter_query." countries.name = spotter_output.arrival_airport_country AND 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) 
8583
			GROUP BY spotter_output.arrival_airport_country, countries.iso3
8584
			ORDER BY airport_arrival_country_count DESC";
8585
		
8586
		$sth = $this->db->prepare($query);
8587
		$sth->execute(array(':country' => $country));
8588
		$airport_array = array();
8589
		$temp_array = array();
8590
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8591
		{
8592
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8593
			$temp_array['arrival_airport_country_iso3'] = $row['arrival_airport_country_iso3'];
8594
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8595
			$airport_array[] = $temp_array;
8596
		}
8597
		return $airport_array;
8598
	}
8599
8600
8601
8602
	/**
8603
	* Counts all airport departure countries
8604
	*
8605
	* @return Array the airport departure list
8606
	*
8607
	*/
8608
	public function countAllDepartureCountries($filters = array(),$year = '',$month = '', $day = '')
8609
	{
8610
		global $globalDBdriver;
8611
		$filter_query = $this->getFilter($filters,true,true);
8612
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count, countries.iso3 AS airport_departure_country_iso3 
8613
				FROM countries,spotter_output".$filter_query." countries.name = spotter_output.departure_airport_country AND spotter_output.departure_airport_country <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> ''";
8614
		$query_values = array();
8615
		if ($year != '') {
8616
			if ($globalDBdriver == 'mysql') {
8617
				$query .= " AND YEAR(spotter_output.date) = :year";
8618
				$query_values = array_merge($query_values,array(':year' => $year));
8619
			} else {
8620
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
8621
				$query_values = array_merge($query_values,array(':year' => $year));
8622
			}
8623
		}
8624
		if ($month != '') {
8625
			if ($globalDBdriver == 'mysql') {
8626
				$query .= " AND MONTH(spotter_output.date) = :month";
8627
				$query_values = array_merge($query_values,array(':month' => $month));
8628
			} else {
8629
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
8630
				$query_values = array_merge($query_values,array(':month' => $month));
8631
			}
8632
		}
8633
		if ($day != '') {
8634
			if ($globalDBdriver == 'mysql') {
8635
				$query .= " AND DAY(spotter_output.date) = :day";
8636
				$query_values = array_merge($query_values,array(':day' => $day));
8637
			} else {
8638
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
8639
				$query_values = array_merge($query_values,array(':day' => $day));
8640
			}
8641
		}
8642
		$query .= " GROUP BY spotter_output.departure_airport_country, countries.iso3
8643
					ORDER BY airport_departure_country_count DESC
8644
					LIMIT 10 OFFSET 0";
8645
      
8646
		
8647
		$sth = $this->db->prepare($query);
8648
		$sth->execute($query_values);
8649
      
8650
		$airport_array = array();
8651
		$temp_array = array();
8652
        
8653
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8654
		{
8655
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
8656
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
8657
          
8658
			$airport_array[] = $temp_array;
8659
		}
8660
8661
		return $airport_array;
8662
	}
8663
	
8664
	
8665
	/**
8666
	* Counts all airport arrival countries
8667
	*
8668
	* @return Array the airport arrival list
8669
	*
8670
	*/
8671
	public function countAllArrivalCountries($limit = true,$filters = array(),$year = '',$month = '',$day = '')
8672
	{
8673
		global $globalDBdriver;
8674
		$filter_query = $this->getFilter($filters,true,true);
8675
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count, countries.iso3 AS airport_arrival_country_iso3 
8676
			FROM countries, spotter_output".$filter_query." countries.name = spotter_output.arrival_airport_country AND spotter_output.arrival_airport_country <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''";
8677
		$query_values = array();
8678
		if ($year != '') {
8679
			if ($globalDBdriver == 'mysql') {
8680
				$query .= " AND YEAR(spotter_output.date) = :year";
8681
				$query_values = array_merge($query_values,array(':year' => $year));
8682
			} else {
8683
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
8684
				$query_values = array_merge($query_values,array(':year' => $year));
8685
			}
8686
		}
8687
		if ($month != '') {
8688
			if ($globalDBdriver == 'mysql') {
8689
				$query .= " AND MONTH(spotter_output.date) = :month";
8690
				$query_values = array_merge($query_values,array(':month' => $month));
8691
			} else {
8692
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
8693
				$query_values = array_merge($query_values,array(':month' => $month));
8694
			}
8695
		}
8696
		if ($day != '') {
8697
			if ($globalDBdriver == 'mysql') {
8698
				$query .= " AND DAY(spotter_output.date) = :day";
8699
				$query_values = array_merge($query_values,array(':day' => $day));
8700
			} else {
8701
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
8702
				$query_values = array_merge($query_values,array(':day' => $day));
8703
			}
8704
		}
8705
		$query .= " GROUP BY spotter_output.arrival_airport_country, countries.iso3
8706
					ORDER BY airport_arrival_country_count DESC";
8707
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
8708
      
8709
		
8710
		$sth = $this->db->prepare($query);
8711
		$sth->execute($query_values);
8712
      
8713
		$airport_array = array();
8714
		$temp_array = array();
8715
        
8716
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8717
		{
8718
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8719
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8720
			$temp_array['airport_arrival_country_iso3'] = $row['airport_arrival_country_iso3'];
8721
          
8722
			$airport_array[] = $temp_array;
8723
		}
8724
8725
		return $airport_array;
8726
	}
8727
8728
8729
8730
8731
8732
	/**
8733
	* Gets all route combinations
8734
	*
8735
	* @return Array the route list
8736
	*
8737
	*/
8738
	public function countAllRoutes($filters = array())
8739
	{
8740
		$filter_query = $this->getFilter($filters,true,true);
8741
		$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
8742
		    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 <> ''
8743
                    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
8744
                    ORDER BY route_count DESC
8745
		    LIMIT 10 OFFSET 0";
8746
      
8747
		
8748
		$sth = $this->db->prepare($query);
8749
		$sth->execute();
8750
      
8751
		$routes_array = array();
8752
		$temp_array = array();
8753
        
8754
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8755
		{
8756
			$temp_array['route_count'] = $row['route_count'];
8757
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8758
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8759
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8760
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8761
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8762
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8763
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8764
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8765
          
8766
			$routes_array[] = $temp_array;
8767
		}
8768
8769
		return $routes_array;
8770
	}
8771
	
8772
	
8773
	
8774
	
8775
	/**
8776
	* Gets all route combinations based on an aircraft
8777
	*
8778
	* @return Array the route list
8779
	*
8780
	*/
8781
	public function countAllRoutesByAircraft($aircraft_icao,$filters = array())
8782
	{
8783
		$filter_query = $this->getFilter($filters,true,true);
8784
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
8785
		$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
8786
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
8787
			    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 
8788
			    ORDER BY route_count DESC";
8789
		
8790
		$sth = $this->db->prepare($query);
8791
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
8792
      
8793
		$routes_array = array();
8794
		$temp_array = array();
8795
        
8796
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8797
		{
8798
			$temp_array['route_count'] = $row['route_count'];
8799
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8800
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8801
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8802
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8803
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8804
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8805
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8806
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8807
          
8808
			$routes_array[] = $temp_array;
8809
		}
8810
8811
		return $routes_array;
8812
	}
8813
	
8814
	
8815
	/**
8816
	* Gets all route combinations based on an aircraft registration
8817
	*
8818
	* @return Array the route list
8819
	*
8820
	*/
8821
	public function countAllRoutesByRegistration($registration, $filters = array())
8822
	{
8823
		$filter_query = $this->getFilter($filters,true,true);
8824
		$registration = filter_var($registration, FILTER_SANITIZE_STRING);
8825
		$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
8826
			FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.registration = :registration 
8827
                    GROUP BY route
8828
                    ORDER BY route_count DESC";
8829
      
8830
		
8831
		$sth = $this->db->prepare($query);
8832
		$sth->execute(array(':registration' => $registration));
8833
      
8834
		$routes_array = array();
8835
		$temp_array = array();
8836
        
8837
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8838
		{
8839
			$temp_array['route_count'] = $row['route_count'];
8840
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8841
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8842
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8843
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8844
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8845
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8846
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8847
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8848
          
8849
			$routes_array[] = $temp_array;
8850
		}
8851
8852
		return $routes_array;
8853
	}
8854
	
8855
	
8856
	
8857
	/**
8858
	* Gets all route combinations based on an airline
8859
	*
8860
	* @return Array the route list
8861
	*
8862
	*/
8863
	public function countAllRoutesByAirline($airline_icao, $filters = array())
8864
	{
8865
		$filter_query = $this->getFilter($filters,true,true);
8866
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
8867
		$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
8868
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.airline_icao = :airline_icao 
8869
			    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 
8870
			    ORDER BY route_count DESC";
8871
      
8872
		
8873
		$sth = $this->db->prepare($query);
8874
		$sth->execute(array(':airline_icao' => $airline_icao));
8875
      
8876
		$routes_array = array();
8877
		$temp_array = array();
8878
        
8879
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8880
		{
8881
			$temp_array['route_count'] = $row['route_count'];
8882
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8883
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8884
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8885
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8886
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8887
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8888
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8889
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8890
          
8891
			$routes_array[] = $temp_array;
8892
		}
8893
8894
		return $routes_array;
8895
	}
8896
	
8897
	
8898
	
8899
	/**
8900
	* Gets all route combinations based on an airport
8901
	*
8902
	* @return Array the route list
8903
	*
8904
	*/
8905
	public function countAllRoutesByAirport($airport_icao, $filters = array())
8906
	{
8907
		$filter_query = $this->getFilter($filters,true,true);
8908
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8909
		$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
8910
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
8911
			    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 
8912
			    ORDER BY route_count DESC";
8913
		
8914
		$sth = $this->db->prepare($query);
8915
		$sth->execute(array(':airport_icao' => $airport_icao));
8916
      
8917
		$routes_array = array();
8918
		$temp_array = array();
8919
        
8920
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8921
		{
8922
			$temp_array['route_count'] = $row['route_count'];
8923
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8924
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8925
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8926
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8927
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8928
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8929
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8930
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8931
          
8932
			$routes_array[] = $temp_array;
8933
		}
8934
8935
		return $routes_array;
8936
	}
8937
	
8938
	
8939
	
8940
	/**
8941
	* Gets all route combinations based on an country
8942
	*
8943
	* @return Array the route list
8944
	*
8945
	*/
8946
	public function countAllRoutesByCountry($country, $filters = array())
8947
	{
8948
		$filter_query = $this->getFilter($filters,true,true);
8949
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8950
		$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
8951
			    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 
8952
			    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 
8953
			    ORDER BY route_count DESC";
8954
		
8955
		$sth = $this->db->prepare($query);
8956
		$sth->execute(array(':country' => $country));
8957
      
8958
		$routes_array = array();
8959
		$temp_array = array();
8960
        
8961
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8962
		{
8963
			$temp_array['route_count'] = $row['route_count'];
8964
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8965
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8966
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8967
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8968
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8969
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8970
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8971
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8972
          
8973
			$routes_array[] = $temp_array;
8974
		}
8975
8976
		return $routes_array;
8977
	}
8978
8979
8980
	/**
8981
	* Gets all route combinations based on an date
8982
	*
8983
	* @return Array the route list
8984
	*
8985
	*/
8986
	public function countAllRoutesByDate($date, $filters = array())
8987
	{
8988
		global $globalTimezone, $globalDBdriver;
8989
		$filter_query = $this->getFilter($filters,true,true);
8990
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8991
		if ($globalTimezone != '') {
8992
			date_default_timezone_set($globalTimezone);
8993
			$datetime = new DateTime($date);
8994
			$offset = $datetime->format('P');
8995
		} else $offset = '+00:00';
8996
		
8997
		if ($globalDBdriver == 'mysql') {
8998
			$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
8999
				    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date  
9000
				    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
9001
				    ORDER BY route_count DESC";
9002
		} else {
9003
			$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
9004
				    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date  
9005
				    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
9006
				    ORDER BY route_count DESC";
9007
		}
9008
		
9009
		$sth = $this->db->prepare($query);
9010
		$sth->execute(array(':date' => $date, ':offset' => $offset));
9011
      
9012
		$routes_array = array();
9013
		$temp_array = array();
9014
        
9015
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9016
		{
9017
			$temp_array['route_count'] = $row['route_count'];
9018
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9019
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9020
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9021
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9022
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9023
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9024
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9025
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9026
          
9027
			$routes_array[] = $temp_array;
9028
		}
9029
9030
		return $routes_array;
9031
	}
9032
	
9033
	
9034
	/**
9035
	* Gets all route combinations based on an ident/callsign
9036
	*
9037
	* @return Array the route list
9038
	*
9039
	*/
9040
	public function countAllRoutesByIdent($ident, $filters = array())
9041
	{
9042
		$filter_query = $this->getFilter($filters,true,true);
9043
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
9044
		$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
9045
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.ident = :ident   
9046
                    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
9047
                    ORDER BY route_count DESC";
9048
      
9049
		
9050
		$sth = $this->db->prepare($query);
9051
		$sth->execute(array(':ident' => $ident));
9052
      
9053
		$routes_array = array();
9054
		$temp_array = array();
9055
        
9056
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9057
		{
9058
			$temp_array['route_count'] = $row['route_count'];
9059
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9060
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9061
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9062
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9063
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9064
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9065
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9066
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9067
          
9068
			$routes_array[] = $temp_array;
9069
		}
9070
9071
		return $routes_array;
9072
	}
9073
	
9074
	/**
9075
	* Gets all route combinations based on an owner
9076
	*
9077
	* @return Array the route list
9078
	*
9079
	*/
9080
	public function countAllRoutesByOwner($owner,$filters = array())
9081
	{
9082
		$filter_query = $this->getFilter($filters,true,true);
9083
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
9084
		$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
9085
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.owner_name = :owner 
9086
                    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
9087
                    ORDER BY route_count DESC";
9088
      
9089
		
9090
		$sth = $this->db->prepare($query);
9091
		$sth->execute(array(':owner' => $owner));
9092
      
9093
		$routes_array = array();
9094
		$temp_array = array();
9095
        
9096
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9097
		{
9098
			$temp_array['route_count'] = $row['route_count'];
9099
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9100
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9101
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9102
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9103
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9104
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9105
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9106
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9107
          
9108
			$routes_array[] = $temp_array;
9109
		}
9110
9111
		return $routes_array;
9112
	}
9113
	
9114
	/**
9115
	* Gets all route combinations based on a pilot
9116
	*
9117
	* @return Array the route list
9118
	*
9119
	*/
9120
	public function countAllRoutesByPilot($pilot,$filters = array())
9121
	{
9122
		$filter_query = $this->getFilter($filters,true,true);
9123
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
9124
		$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
9125
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
9126
                    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
9127
                    ORDER BY route_count DESC";
9128
      
9129
		
9130
		$sth = $this->db->prepare($query);
9131
		$sth->execute(array(':pilot' => $pilot));
9132
      
9133
		$routes_array = array();
9134
		$temp_array = array();
9135
        
9136
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9137
		{
9138
			$temp_array['route_count'] = $row['route_count'];
9139
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9140
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9141
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9142
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9143
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9144
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9145
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9146
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9147
          
9148
			$routes_array[] = $temp_array;
9149
		}
9150
9151
		return $routes_array;
9152
	}
9153
	
9154
	
9155
	/**
9156
	* Gets all route combinations based on an manufacturer
9157
	*
9158
	* @return Array the route list
9159
	*
9160
	*/
9161
	public function countAllRoutesByManufacturer($aircraft_manufacturer, $filters = array())
9162
	{
9163
		$filter_query = $this->getFilter($filters,true,true);
9164
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
9165
		$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
9166
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
9167
                    GROUP BY route
9168
                    ORDER BY route_count DESC";
9169
      
9170
		
9171
		$sth = $this->db->prepare($query);
9172
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
9173
      
9174
		$routes_array = array();
9175
		$temp_array = array();
9176
        
9177
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9178
		{
9179
			$temp_array['route_count'] = $row['route_count'];
9180
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9181
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9182
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9183
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9184
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9185
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9186
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9187
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9188
          
9189
			$routes_array[] = $temp_array;
9190
		}
9191
9192
		return $routes_array;
9193
	}
9194
9195
	
9196
	
9197
	/**
9198
	* Gets all route combinations with waypoints
9199
	*
9200
	* @return Array the route list
9201
	*
9202
	*/
9203
	public function countAllRoutesWithWaypoints($filters = array())
9204
	{
9205
		$filter_query = $this->getFilter($filters,true,true);
9206
		$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
9207
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.waypoints <> '' 
9208
                    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
9209
                    ORDER BY route_count DESC
9210
		    LIMIT 10 OFFSET 0";
9211
      
9212
		
9213
		$sth = $this->db->prepare($query);
9214
		$sth->execute();
9215
      
9216
		$routes_array = array();
9217
		$temp_array = array();
9218
        
9219
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9220
		{
9221
			$temp_array['spotter_id'] = $row['spotter_id'];
9222
			$temp_array['route_count'] = $row['route_count'];
9223
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9224
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9225
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9226
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9227
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9228
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9229
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9230
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9231
          
9232
			$routes_array[] = $temp_array;
9233
		}
9234
9235
		return $routes_array;
9236
	}
9237
	
9238
	/**
9239
	* Gets all callsigns that have flown over
9240
	*
9241
	* @return Array the callsign list
9242
	*
9243
	*/
9244
	public function countAllCallsigns($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '', $month = '', $day = '')
9245
	{
9246
		global $globalDBdriver;
9247
		$filter_query = $this->getFilter($filters,true,true);
9248
		$query  = "SELECT DISTINCT spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name, spotter_output.airline_icao  
9249
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''";
9250
		 if ($olderthanmonths > 0) {
9251
			if ($globalDBdriver == 'mysql') $query .= ' AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH)';
9252
			else $query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
9253
		}
9254
		if ($sincedate != '') {
9255
			if ($globalDBdriver == 'mysql') $query .= " AND spotter_output.date > '".$sincedate."'";
9256
			else $query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
9257
		}
9258
		$query_values = array();
9259
		if ($year != '') {
9260
			if ($globalDBdriver == 'mysql') {
9261
				$query .= " AND YEAR(spotter_output.date) = :year";
9262
				$query_values = array_merge($query_values,array(':year' => $year));
9263
			} else {
9264
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
9265
				$query_values = array_merge($query_values,array(':year' => $year));
9266
			}
9267
		}
9268
		if ($month != '') {
9269
			if ($globalDBdriver == 'mysql') {
9270
				$query .= " AND MONTH(spotter_output.date) = :month";
9271
				$query_values = array_merge($query_values,array(':month' => $month));
9272
			} else {
9273
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
9274
				$query_values = array_merge($query_values,array(':month' => $month));
9275
			}
9276
		}
9277
		if ($day != '') {
9278
			if ($globalDBdriver == 'mysql') {
9279
				$query .= " AND DAY(spotter_output.date) = :day";
9280
				$query_values = array_merge($query_values,array(':day' => $day));
9281
			} else {
9282
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
9283
				$query_values = array_merge($query_values,array(':day' => $day));
9284
			}
9285
		}
9286
		$query .= " GROUP BY spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
9287
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
9288
      		
9289
		$sth = $this->db->prepare($query);
9290
		$sth->execute($query_values);
9291
      
9292
		$callsign_array = array();
9293
		$temp_array = array();
9294
        
9295
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9296
		{
9297
			$temp_array['callsign_icao'] = $row['ident'];
9298
			$temp_array['airline_name'] = $row['airline_name'];
9299
			$temp_array['airline_icao'] = $row['airline_icao'];
9300
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
9301
          
9302
			$callsign_array[] = $temp_array;
9303
		}
9304
9305
		return $callsign_array;
9306
	}
9307
9308
	/**
9309
	* Gets all callsigns that have flown over
9310
	*
9311
	* @return Array the callsign list
9312
	*
9313
	*/
9314
	public function countAllCallsignsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $filters = array())
9315
	{
9316
		global $globalDBdriver;
9317
		$filter_query = $this->getFilter($filters,true,true);
9318
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name  
9319
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''  AND spotter_output.airline_icao <> '' ";
9320
		 if ($olderthanmonths > 0) {
9321
			if ($globalDBdriver == 'mysql') $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
9322
			else $query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
9323
		}
9324
		if ($sincedate != '') {
9325
			if ($globalDBdriver == 'mysql') $query .= "AND spotter_output.date > '".$sincedate."' ";
9326
			else $query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
9327
		}
9328
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
9329
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
9330
      		
9331
		$sth = $this->db->prepare($query);
9332
		$sth->execute();
9333
      
9334
		$callsign_array = array();
9335
		$temp_array = array();
9336
        
9337
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9338
		{
9339
			$temp_array['callsign_icao'] = $row['ident'];
9340
			$temp_array['airline_name'] = $row['airline_name'];
9341
			$temp_array['airline_icao'] = $row['airline_icao'];
9342
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
9343
          
9344
			$callsign_array[] = $temp_array;
9345
		}
9346
9347
		return $callsign_array;
9348
	}
9349
9350
9351
9352
9353
	/**
9354
	* Counts all dates
9355
	*
9356
	* @return Array the date list
9357
	*
9358
	*/
9359
	public function countAllDates($filters = array())
9360
	{
9361
		global $globalTimezone, $globalDBdriver;
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 DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9370
								FROM spotter_output";
9371
			$query .= $this->getFilter($filters);
9372
			$query .= " GROUP BY date_name 
9373
								ORDER BY date_count DESC
9374
								LIMIT 10 OFFSET 0";
9375
		} else {
9376
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9377
								FROM spotter_output";
9378
			$query .= $this->getFilter($filters);
9379
			$query .= " GROUP BY date_name 
9380
								ORDER BY date_count DESC
9381
								LIMIT 10 OFFSET 0";
9382
		}
9383
      
9384
		
9385
		$sth = $this->db->prepare($query);
9386
		$sth->execute(array(':offset' => $offset));
9387
      
9388
		$date_array = array();
9389
		$temp_array = array();
9390
        
9391
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9392
		{
9393
			$temp_array['date_name'] = $row['date_name'];
9394
			$temp_array['date_count'] = $row['date_count'];
9395
9396
			$date_array[] = $temp_array;
9397
		}
9398
9399
		return $date_array;
9400
	}
9401
	
9402
	/**
9403
	* Counts all dates
9404
	*
9405
	* @return Array the date list
9406
	*
9407
	*/
9408
	public function countAllDatesByAirlines($filters = array())
9409
	{
9410
		global $globalTimezone, $globalDBdriver;
9411
		if ($globalTimezone != '') {
9412
			date_default_timezone_set($globalTimezone);
9413
			$datetime = new DateTime();
9414
			$offset = $datetime->format('P');
9415
		} else $offset = '+00:00';
9416
		$filter_query = $this->getFilter($filters,true,true);
9417
		if ($globalDBdriver == 'mysql') {
9418
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9419
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9420
								GROUP BY spotter_output.airline_icao, date_name 
9421
								ORDER BY date_count DESC
9422
								LIMIT 10 OFFSET 0";
9423
		} else {
9424
			$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
9425
								FROM spotter_output 
9426
								WHERE spotter_output.airline_icao <> '' 
9427
								GROUP BY spotter_output.airline_icao, date_name 
9428
								ORDER BY date_count DESC
9429
								LIMIT 10 OFFSET 0";
9430
		}
9431
      
9432
		
9433
		$sth = $this->db->prepare($query);
9434
		$sth->execute(array(':offset' => $offset));
9435
      
9436
		$date_array = array();
9437
		$temp_array = array();
9438
        
9439
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9440
		{
9441
			$temp_array['date_name'] = $row['date_name'];
9442
			$temp_array['date_count'] = $row['date_count'];
9443
			$temp_array['airline_icao'] = $row['airline_icao'];
9444
9445
			$date_array[] = $temp_array;
9446
		}
9447
9448
		return $date_array;
9449
	}	
9450
	
9451
	/**
9452
	* Counts all dates during the last 7 days
9453
	*
9454
	* @return Array the date list
9455
	*
9456
	*/
9457
	public function countAllDatesLast7Days($filters = array())
9458
	{
9459
		global $globalTimezone, $globalDBdriver;
9460
		if ($globalTimezone != '') {
9461
			date_default_timezone_set($globalTimezone);
9462
			$datetime = new DateTime();
9463
			$offset = $datetime->format('P');
9464
		} else $offset = '+00:00';
9465
		$filter_query = $this->getFilter($filters,true,true);
9466
		if ($globalDBdriver == 'mysql') {
9467
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9468
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY)";
9469
			$query .= " GROUP BY date_name 
9470
								ORDER BY spotter_output.date ASC";
9471
			$query_data = array(':offset' => $offset);
9472
		} else {
9473
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9474
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '7 DAYS'";
9475
			$query .= " GROUP BY date_name 
9476
								ORDER BY date_name ASC";
9477
			$query_data = array(':offset' => $offset);
9478
    		}
9479
		
9480
		$sth = $this->db->prepare($query);
9481
		$sth->execute($query_data);
9482
      
9483
		$date_array = array();
9484
		$temp_array = array();
9485
        
9486
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9487
		{
9488
			$temp_array['date_name'] = $row['date_name'];
9489
			$temp_array['date_count'] = $row['date_count'];
9490
          
9491
			$date_array[] = $temp_array;
9492
		}
9493
9494
		return $date_array;
9495
	}
9496
9497
	/**
9498
	* Counts all dates during the last month
9499
	*
9500
	* @return Array the date list
9501
	*
9502
	*/
9503
	public function countAllDatesLastMonth($filters = array())
9504
	{
9505
		global $globalTimezone, $globalDBdriver;
9506
		if ($globalTimezone != '') {
9507
			date_default_timezone_set($globalTimezone);
9508
			$datetime = new DateTime();
9509
			$offset = $datetime->format('P');
9510
		} else $offset = '+00:00';
9511
		$filter_query = $this->getFilter($filters,true,true);
9512
		if ($globalDBdriver == 'mysql') {
9513
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9514
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)";
9515
			$query .= " GROUP BY date_name 
9516
								ORDER BY spotter_output.date ASC";
9517
			$query_data = array(':offset' => $offset);
9518
		} else {
9519
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9520
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'";
9521
			$query .= " GROUP BY date_name 
9522
								ORDER BY date_name ASC";
9523
			$query_data = array(':offset' => $offset);
9524
    		}
9525
		
9526
		$sth = $this->db->prepare($query);
9527
		$sth->execute($query_data);
9528
      
9529
		$date_array = array();
9530
		$temp_array = array();
9531
        
9532
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9533
		{
9534
			$temp_array['date_name'] = $row['date_name'];
9535
			$temp_array['date_count'] = $row['date_count'];
9536
          
9537
			$date_array[] = $temp_array;
9538
		}
9539
9540
		return $date_array;
9541
	}
9542
9543
9544
	/**
9545
	* Counts all dates during the last month
9546
	*
9547
	* @return Array the date list
9548
	*
9549
	*/
9550
	public function countAllDatesLastMonthByAirlines($filters = array())
9551
	{
9552
		global $globalTimezone, $globalDBdriver;
9553
		$filter_query = $this->getFilter($filters,true,true);
9554
		if ($globalTimezone != '') {
9555
			date_default_timezone_set($globalTimezone);
9556
			$datetime = new DateTime();
9557
			$offset = $datetime->format('P');
9558
		} else $offset = '+00:00';
9559
		
9560
		if ($globalDBdriver == 'mysql') {
9561
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9562
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)
9563
								GROUP BY spotter_output.airline_icao, date_name 
9564
								ORDER BY spotter_output.date ASC";
9565
			$query_data = array(':offset' => $offset);
9566
		} else {
9567
			$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
9568
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'
9569
								GROUP BY spotter_output.airline_icao, date_name 
9570
								ORDER BY date_name ASC";
9571
			$query_data = array(':offset' => $offset);
9572
    		}
9573
		
9574
		$sth = $this->db->prepare($query);
9575
		$sth->execute($query_data);
9576
      
9577
		$date_array = array();
9578
		$temp_array = array();
9579
        
9580
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9581
		{
9582
			$temp_array['date_name'] = $row['date_name'];
9583
			$temp_array['date_count'] = $row['date_count'];
9584
			$temp_array['airline_icao'] = $row['airline_icao'];
9585
          
9586
			$date_array[] = $temp_array;
9587
		}
9588
9589
		return $date_array;
9590
	}
9591
	
9592
9593
	/**
9594
	* Counts all month
9595
	*
9596
	* @return Array the month list
9597
	*
9598
	*/
9599
	public function countAllMonths($filters = array())
9600
	{
9601
		global $globalTimezone, $globalDBdriver;
9602
		if ($globalTimezone != '') {
9603
			date_default_timezone_set($globalTimezone);
9604
			$datetime = new DateTime();
9605
			$offset = $datetime->format('P');
9606
		} else $offset = '+00:00';
9607
9608
		if ($globalDBdriver == 'mysql') {
9609
			$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
9610
								FROM spotter_output";
9611
			$query .= $this->getFilter($filters);
9612
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
9613
		} else {
9614
			$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
9615
								FROM spotter_output";
9616
			$query .= $this->getFilter($filters);
9617
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
9618
		}
9619
      
9620
		
9621
		$sth = $this->db->prepare($query);
9622
		$sth->execute(array(':offset' => $offset));
9623
      
9624
		$date_array = array();
9625
		$temp_array = array();
9626
        
9627
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9628
		{
9629
			$temp_array['month_name'] = $row['month_name'];
9630
			$temp_array['year_name'] = $row['year_name'];
9631
			$temp_array['date_count'] = $row['date_count'];
9632
9633
			$date_array[] = $temp_array;
9634
		}
9635
9636
		return $date_array;
9637
	}
9638
9639
	/**
9640
	* Counts all month
9641
	*
9642
	* @return Array the month list
9643
	*
9644
	*/
9645
	public function countAllMonthsByAirlines($filters = array())
9646
	{
9647
		global $globalTimezone, $globalDBdriver;
9648
		$filter_query = $this->getFilter($filters,true,true);
9649
		if ($globalTimezone != '') {
9650
			date_default_timezone_set($globalTimezone);
9651
			$datetime = new DateTime();
9652
			$offset = $datetime->format('P');
9653
		} else $offset = '+00:00';
9654
9655
		if ($globalDBdriver == 'mysql') {
9656
			$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
9657
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9658
								GROUP BY spotter_output.airline_icao, year_name, month_name 
9659
								ORDER BY date_count DESC";
9660
		} else {
9661
			$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
9662
								FROM spotter_output 
9663
								WHERE spotter_output.airline_icao <> '' 
9664
								GROUP BY spotter_output.airline_icao, year_name, month_name 
9665
								ORDER BY date_count DESC";
9666
		}
9667
      
9668
		
9669
		$sth = $this->db->prepare($query);
9670
		$sth->execute(array(':offset' => $offset));
9671
      
9672
		$date_array = array();
9673
		$temp_array = array();
9674
        
9675
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9676
		{
9677
			$temp_array['month_name'] = $row['month_name'];
9678
			$temp_array['year_name'] = $row['year_name'];
9679
			$temp_array['date_count'] = $row['date_count'];
9680
			$temp_array['airline_icao'] = $row['airline_icao'];
9681
9682
			$date_array[] = $temp_array;
9683
		}
9684
9685
		return $date_array;
9686
	}
9687
9688
	/**
9689
	* Counts all military month
9690
	*
9691
	* @return Array the month list
9692
	*
9693
	*/
9694
	public function countAllMilitaryMonths($filters = array())
9695
	{
9696
		global $globalTimezone, $globalDBdriver;
9697
		if ($globalTimezone != '') {
9698
			date_default_timezone_set($globalTimezone);
9699
			$datetime = new DateTime();
9700
			$offset = $datetime->format('P');
9701
		} else $offset = '+00:00';
9702
		$filter_query = $this->getFilter($filters,true,true);
9703
		if ($globalDBdriver == 'mysql') {
9704
			$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
9705
								FROM spotter_output".$filter_query." spotter_output.airline_type = 'military'
9706
								GROUP BY year_name, month_name 
9707
								ORDER BY date_count DESC";
9708
		} else {
9709
			$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
9710
								FROM spotter_output".$filter_query." spotter_output.airline_type = 'military'
9711
								GROUP BY year_name, month_name 
9712
								ORDER BY date_count DESC";
9713
		}
9714
		
9715
		$sth = $this->db->prepare($query);
9716
		$sth->execute(array(':offset' => $offset));
9717
      
9718
		$date_array = array();
9719
		$temp_array = array();
9720
        
9721
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9722
		{
9723
			$temp_array['month_name'] = $row['month_name'];
9724
			$temp_array['year_name'] = $row['year_name'];
9725
			$temp_array['date_count'] = $row['date_count'];
9726
9727
			$date_array[] = $temp_array;
9728
		}
9729
9730
		return $date_array;
9731
	}
9732
	
9733
	/**
9734
	* Counts all month owners
9735
	*
9736
	* @return Array the month list
9737
	*
9738
	*/
9739
	public function countAllMonthsOwners($filters = array())
9740
	{
9741
		global $globalTimezone, $globalDBdriver;
9742
		if ($globalTimezone != '') {
9743
			date_default_timezone_set($globalTimezone);
9744
			$datetime = new DateTime();
9745
			$offset = $datetime->format('P');
9746
		} else $offset = '+00:00';
9747
		$filter_query = $this->getFilter($filters,true,true);
9748
9749
		if ($globalDBdriver == 'mysql') {
9750
			$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
9751
								FROM spotter_output".$filter_query." owner_name <> ''
9752
								GROUP BY year_name, month_name
9753
								ORDER BY date_count DESC";
9754
		} else {
9755
			$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
9756
								FROM spotter_output".$filter_query." owner_name <> ''
9757
								GROUP BY year_name, month_name
9758
								ORDER BY date_count DESC";
9759
		}
9760
		
9761
		$sth = $this->db->prepare($query);
9762
		$sth->execute(array(':offset' => $offset));
9763
      
9764
		$date_array = array();
9765
		$temp_array = array();
9766
        
9767
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9768
		{
9769
			$temp_array['month_name'] = $row['month_name'];
9770
			$temp_array['year_name'] = $row['year_name'];
9771
			$temp_array['date_count'] = $row['date_count'];
9772
9773
			$date_array[] = $temp_array;
9774
		}
9775
9776
		return $date_array;
9777
	}
9778
	
9779
	/**
9780
	* Counts all month owners
9781
	*
9782
	* @return Array the month list
9783
	*
9784
	*/
9785
	public function countAllMonthsOwnersByAirlines($filters = array())
9786
	{
9787
		global $globalTimezone, $globalDBdriver;
9788
		$filter_query = $this->getFilter($filters,true,true);
9789
		if ($globalTimezone != '') {
9790
			date_default_timezone_set($globalTimezone);
9791
			$datetime = new DateTime();
9792
			$offset = $datetime->format('P');
9793
		} else $offset = '+00:00';
9794
9795
		if ($globalDBdriver == 'mysql') {
9796
			$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
9797
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
9798
								GROUP BY spotter_output.airline_icao, year_name, month_name
9799
								ORDER BY date_count DESC";
9800
		} else {
9801
			$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
9802
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
9803
								GROUP BY spotter_output.airline_icao, year_name, month_name
9804
								ORDER BY date_count DESC";
9805
		}
9806
		
9807
		$sth = $this->db->prepare($query);
9808
		$sth->execute(array(':offset' => $offset));
9809
      
9810
		$date_array = array();
9811
		$temp_array = array();
9812
        
9813
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9814
		{
9815
			$temp_array['month_name'] = $row['month_name'];
9816
			$temp_array['year_name'] = $row['year_name'];
9817
			$temp_array['date_count'] = $row['date_count'];
9818
			$temp_array['airline_icao'] = $row['airline_icao'];
9819
9820
			$date_array[] = $temp_array;
9821
		}
9822
9823
		return $date_array;
9824
	}
9825
9826
	/**
9827
	* Counts all month pilot
9828
	*
9829
	* @return Array the month list
9830
	*
9831
	*/
9832
	public function countAllMonthsPilots($filters = array())
9833
	{
9834
		global $globalTimezone, $globalDBdriver;
9835
		if ($globalTimezone != '') {
9836
			date_default_timezone_set($globalTimezone);
9837
			$datetime = new DateTime();
9838
			$offset = $datetime->format('P');
9839
		} else $offset = '+00:00';
9840
		$filter_query = $this->getFilter($filters,true,true);
9841
9842
		if ($globalDBdriver == 'mysql') {
9843
			$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
9844
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
9845
								GROUP BY year_name, month_name
9846
								ORDER BY date_count DESC";
9847
		} else {
9848
			$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
9849
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
9850
								GROUP BY year_name, month_name
9851
								ORDER BY date_count DESC";
9852
		}
9853
		
9854
		$sth = $this->db->prepare($query);
9855
		$sth->execute(array(':offset' => $offset));
9856
      
9857
		$date_array = array();
9858
		$temp_array = array();
9859
        
9860
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9861
		{
9862
			$temp_array['month_name'] = $row['month_name'];
9863
			$temp_array['year_name'] = $row['year_name'];
9864
			$temp_array['date_count'] = $row['date_count'];
9865
9866
			$date_array[] = $temp_array;
9867
		}
9868
9869
		return $date_array;
9870
	}
9871
	
9872
	/**
9873
	* Counts all month pilot
9874
	*
9875
	* @return Array the month list
9876
	*
9877
	*/
9878
	public function countAllMonthsPilotsByAirlines($filters = array())
9879
	{
9880
		global $globalTimezone, $globalDBdriver;
9881
		$filter_query = $this->getFilter($filters,true,true);
9882
		if ($globalTimezone != '') {
9883
			date_default_timezone_set($globalTimezone);
9884
			$datetime = new DateTime();
9885
			$offset = $datetime->format('P');
9886
		} else $offset = '+00:00';
9887
9888
		if ($globalDBdriver == 'mysql') {
9889
			$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
9890
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
9891
								GROUP BY spotter_output.airline_icao,year_name, month_name
9892
								ORDER BY date_count DESC";
9893
		} else {
9894
			$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
9895
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
9896
								GROUP BY spotter_output.airline_icao, year_name, month_name
9897
								ORDER BY date_count DESC";
9898
		}
9899
		
9900
		$sth = $this->db->prepare($query);
9901
		$sth->execute(array(':offset' => $offset));
9902
      
9903
		$date_array = array();
9904
		$temp_array = array();
9905
        
9906
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9907
		{
9908
			$temp_array['month_name'] = $row['month_name'];
9909
			$temp_array['year_name'] = $row['year_name'];
9910
			$temp_array['date_count'] = $row['date_count'];
9911
			$temp_array['airline_icao'] = $row['airline_icao'];
9912
9913
			$date_array[] = $temp_array;
9914
		}
9915
9916
		return $date_array;
9917
	}
9918
9919
	/**
9920
	* Counts all month airline
9921
	*
9922
	* @return Array the month list
9923
	*
9924
	*/
9925
	public function countAllMonthsAirlines($filters = array())
9926
	{
9927
		global $globalTimezone, $globalDBdriver;
9928
		$filter_query = $this->getFilter($filters,true,true);
9929
		if ($globalTimezone != '') {
9930
			date_default_timezone_set($globalTimezone);
9931
			$datetime = new DateTime();
9932
			$offset = $datetime->format('P');
9933
		} else $offset = '+00:00';
9934
9935
		if ($globalDBdriver == 'mysql') {
9936
			$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
9937
								FROM spotter_output".$filter_query." airline_icao <> '' 
9938
								GROUP BY year_name, month_name
9939
								ORDER BY date_count DESC";
9940
		} else {
9941
			$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
9942
								FROM spotter_output".$filter_query." airline_icao <> '' 
9943
								GROUP BY year_name, month_name
9944
								ORDER BY date_count DESC";
9945
		}
9946
		
9947
		$sth = $this->db->prepare($query);
9948
		$sth->execute(array(':offset' => $offset));
9949
      
9950
		$date_array = array();
9951
		$temp_array = array();
9952
        
9953
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9954
		{
9955
			$temp_array['month_name'] = $row['month_name'];
9956
			$temp_array['year_name'] = $row['year_name'];
9957
			$temp_array['date_count'] = $row['date_count'];
9958
9959
			$date_array[] = $temp_array;
9960
		}
9961
9962
		return $date_array;
9963
	}
9964
	
9965
	/**
9966
	* Counts all month aircraft
9967
	*
9968
	* @return Array the month list
9969
	*
9970
	*/
9971
	public function countAllMonthsAircrafts($filters = array())
9972
	{
9973
		global $globalTimezone, $globalDBdriver;
9974
		if ($globalTimezone != '') {
9975
			date_default_timezone_set($globalTimezone);
9976
			$datetime = new DateTime();
9977
			$offset = $datetime->format('P');
9978
		} else $offset = '+00:00';
9979
		$filter_query = $this->getFilter($filters,true,true);
9980
9981
		if ($globalDBdriver == 'mysql') {
9982
			$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
9983
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
9984
								GROUP BY year_name, month_name
9985
								ORDER BY date_count DESC";
9986
		} else {
9987
			$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
9988
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
9989
								GROUP BY year_name, month_name
9990
								ORDER BY date_count DESC";
9991
		}
9992
		
9993
		$sth = $this->db->prepare($query);
9994
		$sth->execute(array(':offset' => $offset));
9995
      
9996
		$date_array = array();
9997
		$temp_array = array();
9998
        
9999
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10000
		{
10001
			$temp_array['month_name'] = $row['month_name'];
10002
			$temp_array['year_name'] = $row['year_name'];
10003
			$temp_array['date_count'] = $row['date_count'];
10004
10005
			$date_array[] = $temp_array;
10006
		}
10007
10008
		return $date_array;
10009
	}
10010
	
10011
10012
	/**
10013
	* Counts all month aircraft
10014
	*
10015
	* @return Array the month list
10016
	*
10017
	*/
10018
	public function countAllMonthsAircraftsByAirlines($filters = array())
10019
	{
10020
		global $globalTimezone, $globalDBdriver;
10021
		$filter_query = $this->getFilter($filters,true,true);
10022
		if ($globalTimezone != '') {
10023
			date_default_timezone_set($globalTimezone);
10024
			$datetime = new DateTime();
10025
			$offset = $datetime->format('P');
10026
		} else $offset = '+00:00';
10027
10028
		if ($globalDBdriver == 'mysql') {
10029
			$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
10030
								FROM spotter_output".$filter_query." aircraft_icao <> ''  AND spotter_output.airline_icao <> '' 
10031
								GROUP BY spotter_output.airline_icao, year_name, month_name
10032
								ORDER BY date_count DESC";
10033
		} else {
10034
			$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
10035
								FROM spotter_output".$filter_query." aircraft_icao <> '' AND spotter_output.airline_icao <> '' 
10036
								GROUP BY spotter_output.airline_icao, year_name, month_name
10037
								ORDER BY date_count DESC";
10038
		}
10039
		
10040
		$sth = $this->db->prepare($query);
10041
		$sth->execute(array(':offset' => $offset));
10042
      
10043
		$date_array = array();
10044
		$temp_array = array();
10045
        
10046
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10047
		{
10048
			$temp_array['month_name'] = $row['month_name'];
10049
			$temp_array['year_name'] = $row['year_name'];
10050
			$temp_array['date_count'] = $row['date_count'];
10051
			$temp_array['airline_icao'] = $row['airline_icao'];
10052
10053
			$date_array[] = $temp_array;
10054
		}
10055
10056
		return $date_array;
10057
	}
10058
10059
	/**
10060
	* Counts all month real arrival
10061
	*
10062
	* @return Array the month list
10063
	*
10064
	*/
10065
	public function countAllMonthsRealArrivals($filters = array())
10066
	{
10067
		global $globalTimezone, $globalDBdriver;
10068
		if ($globalTimezone != '') {
10069
			date_default_timezone_set($globalTimezone);
10070
			$datetime = new DateTime();
10071
			$offset = $datetime->format('P');
10072
		} else $offset = '+00:00';
10073
		$filter_query = $this->getFilter($filters,true,true);
10074
10075
		if ($globalDBdriver == 'mysql') {
10076
			$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
10077
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
10078
								GROUP BY year_name, month_name
10079
								ORDER BY date_count DESC";
10080
		} else {
10081
			$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
10082
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
10083
								GROUP BY year_name, month_name
10084
								ORDER BY date_count DESC";
10085
		}
10086
		
10087
		$sth = $this->db->prepare($query);
10088
		$sth->execute(array(':offset' => $offset));
10089
      
10090
		$date_array = array();
10091
		$temp_array = array();
10092
        
10093
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10094
		{
10095
			$temp_array['month_name'] = $row['month_name'];
10096
			$temp_array['year_name'] = $row['year_name'];
10097
			$temp_array['date_count'] = $row['date_count'];
10098
10099
			$date_array[] = $temp_array;
10100
		}
10101
10102
		return $date_array;
10103
	}
10104
	
10105
10106
	/**
10107
	* Counts all month real arrival
10108
	*
10109
	* @return Array the month list
10110
	*
10111
	*/
10112
	public function countAllMonthsRealArrivalsByAirlines($filters = array())
10113
	{
10114
		global $globalTimezone, $globalDBdriver;
10115
		$filter_query = $this->getFilter($filters,true,true);
10116
		if ($globalTimezone != '') {
10117
			date_default_timezone_set($globalTimezone);
10118
			$datetime = new DateTime();
10119
			$offset = $datetime->format('P');
10120
		} else $offset = '+00:00';
10121
10122
		if ($globalDBdriver == 'mysql') {
10123
			$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
10124
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
10125
								GROUP BY spotter_output.airline_icao, year_name, month_name
10126
								ORDER BY date_count DESC";
10127
		} else {
10128
			$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
10129
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
10130
								GROUP BY spotter_output.airline_icao, year_name, month_name
10131
								ORDER BY date_count DESC";
10132
		}
10133
		
10134
		$sth = $this->db->prepare($query);
10135
		$sth->execute(array(':offset' => $offset));
10136
      
10137
		$date_array = array();
10138
		$temp_array = array();
10139
        
10140
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10141
		{
10142
			$temp_array['month_name'] = $row['month_name'];
10143
			$temp_array['year_name'] = $row['year_name'];
10144
			$temp_array['date_count'] = $row['date_count'];
10145
			$temp_array['airline_icao'] = $row['airline_icao'];
10146
10147
			$date_array[] = $temp_array;
10148
		}
10149
10150
		return $date_array;
10151
	}
10152
	
10153
10154
	/**
10155
	* Counts all dates during the last year
10156
	*
10157
	* @return Array the date list
10158
	*
10159
	*/
10160
	public function countAllMonthsLastYear($filters)
10161
	{
10162
		global $globalTimezone, $globalDBdriver;
10163
		if ($globalTimezone != '') {
10164
			date_default_timezone_set($globalTimezone);
10165
			$datetime = new DateTime();
10166
			$offset = $datetime->format('P');
10167
		} else $offset = '+00:00';
10168
		$filter_query = $this->getFilter($filters,true,true);
10169
		if ($globalDBdriver == 'mysql') {
10170
			$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
10171
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 YEAR)";
10172
			$query .= " GROUP BY year_name, month_name
10173
								ORDER BY year_name, month_name ASC";
10174
			$query_data = array(':offset' => $offset);
10175
		} else {
10176
			$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
10177
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 YEARS'";
10178
			$query .= " GROUP BY year_name, month_name
10179
								ORDER BY year_name, month_name ASC";
10180
			$query_data = array(':offset' => $offset);
10181
    		}
10182
		
10183
		$sth = $this->db->prepare($query);
10184
		$sth->execute($query_data);
10185
      
10186
		$date_array = array();
10187
		$temp_array = array();
10188
        
10189
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10190
		{
10191
			$temp_array['year_name'] = $row['year_name'];
10192
			$temp_array['month_name'] = $row['month_name'];
10193
			$temp_array['date_count'] = $row['date_count'];
10194
          
10195
			$date_array[] = $temp_array;
10196
		}
10197
10198
		return $date_array;
10199
	}
10200
	
10201
	
10202
	
10203
	/**
10204
	* Counts all hours
10205
	*
10206
	* @return Array the hour list
10207
	*
10208
	*/
10209
	public function countAllHours($orderby,$filters = array())
10210
	{
10211
		global $globalTimezone, $globalDBdriver;
10212
		if ($globalTimezone != '') {
10213
			date_default_timezone_set($globalTimezone);
10214
			$datetime = new DateTime();
10215
			$offset = $datetime->format('P');
10216
		} else $offset = '+00:00';
10217
10218
		$orderby_sql = '';
10219
		if ($orderby == "hour")
10220
		{
10221
			$orderby_sql = "ORDER BY hour_name ASC";
10222
		}
10223
		if ($orderby == "count")
10224
		{
10225
			$orderby_sql = "ORDER BY hour_count DESC";
10226
		}
10227
		
10228
		if ($globalDBdriver == 'mysql') {
10229
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10230
								FROM spotter_output";
10231
			$query .= $this->getFilter($filters);
10232
			$query .= " GROUP BY hour_name 
10233
								".$orderby_sql;
10234
10235
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
10236
								FROM spotter_output 
10237
								GROUP BY hour_name 
10238
								".$orderby_sql."
10239
								LIMIT 10 OFFSET 00";
10240
  */    
10241
		$query_data = array(':offset' => $offset);
10242
		} else {
10243
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10244
								FROM spotter_output";
10245
			$query .= $this->getFilter($filters);
10246
			$query .= " GROUP BY hour_name 
10247
								".$orderby_sql;
10248
			$query_data = array(':offset' => $offset);
10249
		}
10250
		
10251
		$sth = $this->db->prepare($query);
10252
		$sth->execute($query_data);
10253
      
10254
		$hour_array = array();
10255
		$temp_array = array();
10256
        
10257
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10258
		{
10259
			$temp_array['hour_name'] = $row['hour_name'];
10260
			$temp_array['hour_count'] = $row['hour_count'];
10261
          
10262
			$hour_array[] = $temp_array;
10263
		}
10264
10265
		return $hour_array;
10266
	}
10267
	
10268
	/**
10269
	* Counts all hours
10270
	*
10271
	* @return Array the hour list
10272
	*
10273
	*/
10274
	public function countAllHoursByAirlines($orderby, $filters = array())
10275
	{
10276
		global $globalTimezone, $globalDBdriver;
10277
		$filter_query = $this->getFilter($filters,true,true);
10278
		if ($globalTimezone != '') {
10279
			date_default_timezone_set($globalTimezone);
10280
			$datetime = new DateTime();
10281
			$offset = $datetime->format('P');
10282
		} else $offset = '+00:00';
10283
10284
		$orderby_sql = '';
10285
		if ($orderby == "hour")
10286
		{
10287
			$orderby_sql = "ORDER BY hour_name ASC";
10288
		}
10289
		if ($orderby == "count")
10290
		{
10291
			$orderby_sql = "ORDER BY hour_count DESC";
10292
		}
10293
		
10294
		if ($globalDBdriver == 'mysql') {
10295
			$query  = "SELECT spotter_output.airline_icao, HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10296
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
10297
								GROUP BY spotter_output.airline_icao, hour_name 
10298
								".$orderby_sql;
10299
10300
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
10301
								FROM spotter_output 
10302
								GROUP BY hour_name 
10303
								".$orderby_sql."
10304
								LIMIT 10 OFFSET 00";
10305
  */    
10306
		$query_data = array(':offset' => $offset);
10307
		} else {
10308
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10309
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
10310
								GROUP BY spotter_output.airline_icao, hour_name 
10311
								".$orderby_sql;
10312
			$query_data = array(':offset' => $offset);
10313
		}
10314
		
10315
		$sth = $this->db->prepare($query);
10316
		$sth->execute($query_data);
10317
      
10318
		$hour_array = array();
10319
		$temp_array = array();
10320
        
10321
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10322
		{
10323
			$temp_array['hour_name'] = $row['hour_name'];
10324
			$temp_array['hour_count'] = $row['hour_count'];
10325
			$temp_array['airline_icao'] = $row['airline_icao'];
10326
          
10327
			$hour_array[] = $temp_array;
10328
		}
10329
10330
		return $hour_array;
10331
	}
10332
10333
10334
10335
	/**
10336
	* Counts all hours by airline
10337
	*
10338
	* @return Array the hour list
10339
	*
10340
	*/
10341
	public function countAllHoursByAirline($airline_icao, $filters = array())
10342
	{
10343
		global $globalTimezone, $globalDBdriver;
10344
		$filter_query = $this->getFilter($filters,true,true);
10345
		if ($globalTimezone != '') {
10346
			date_default_timezone_set($globalTimezone);
10347
			$datetime = new DateTime();
10348
			$offset = $datetime->format('P');
10349
		} else $offset = '+00:00';
10350
10351
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
10352
10353
		if ($globalDBdriver == 'mysql') {
10354
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10355
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
10356
								GROUP BY hour_name 
10357
								ORDER BY hour_name ASC";
10358
		} else {
10359
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10360
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
10361
								GROUP BY hour_name 
10362
								ORDER BY hour_name ASC";
10363
		}
10364
		
10365
		$sth = $this->db->prepare($query);
10366
		$sth->execute(array(':airline_icao' => $airline_icao,':offset' => $offset));
10367
      
10368
		$hour_array = array();
10369
		$temp_array = array();
10370
        
10371
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10372
		{
10373
			$temp_array['hour_name'] = $row['hour_name'];
10374
			$temp_array['hour_count'] = $row['hour_count'];
10375
          
10376
			$hour_array[] = $temp_array;
10377
		}
10378
10379
		return $hour_array;
10380
	}
10381
	
10382
	
10383
	
10384
	
10385
	/**
10386
	* Counts all hours by aircraft
10387
	*
10388
	* @return Array the hour list
10389
	*
10390
	*/
10391
	public function countAllHoursByAircraft($aircraft_icao, $filters = array())
10392
	{
10393
		global $globalTimezone, $globalDBdriver;
10394
		$filter_query = $this->getFilter($filters,true,true);
10395
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
10396
		if ($globalTimezone != '') {
10397
			date_default_timezone_set($globalTimezone);
10398
			$datetime = new DateTime();
10399
			$offset = $datetime->format('P');
10400
		} else $offset = '+00:00';
10401
10402
		if ($globalDBdriver == 'mysql') {
10403
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10404
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
10405
								GROUP BY hour_name 
10406
								ORDER BY hour_name ASC";
10407
		} else {
10408
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10409
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
10410
								GROUP BY hour_name 
10411
								ORDER BY hour_name ASC";
10412
		}
10413
		
10414
		$sth = $this->db->prepare($query);
10415
		$sth->execute(array(':aircraft_icao' => $aircraft_icao,':offset' => $offset));
10416
      
10417
		$hour_array = array();
10418
		$temp_array = array();
10419
        
10420
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10421
		{
10422
			$temp_array['hour_name'] = $row['hour_name'];
10423
			$temp_array['hour_count'] = $row['hour_count'];
10424
          
10425
			$hour_array[] = $temp_array;
10426
		}
10427
10428
		return $hour_array;
10429
	}
10430
	
10431
	
10432
	/**
10433
	* Counts all hours by aircraft registration
10434
	*
10435
	* @return Array the hour list
10436
	*
10437
	*/
10438
	public function countAllHoursByRegistration($registration, $filters = array())
10439
	{
10440
		global $globalTimezone, $globalDBdriver;
10441
		$filter_query = $this->getFilter($filters,true,true);
10442
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
10443
		if ($globalTimezone != '') {
10444
			date_default_timezone_set($globalTimezone);
10445
			$datetime = new DateTime();
10446
			$offset = $datetime->format('P');
10447
		} else $offset = '+00:00';
10448
10449
		if ($globalDBdriver == 'mysql') {
10450
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10451
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
10452
								GROUP BY hour_name 
10453
								ORDER BY hour_name ASC";
10454
		} else {
10455
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10456
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
10457
								GROUP BY hour_name 
10458
								ORDER BY hour_name ASC";
10459
		}
10460
		
10461
		$sth = $this->db->prepare($query);
10462
		$sth->execute(array(':registration' => $registration,':offset' => $offset));
10463
      
10464
		$hour_array = array();
10465
		$temp_array = array();
10466
        
10467
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10468
		{
10469
			$temp_array['hour_name'] = $row['hour_name'];
10470
			$temp_array['hour_count'] = $row['hour_count'];
10471
          
10472
			$hour_array[] = $temp_array;
10473
		}
10474
10475
		return $hour_array;
10476
	}
10477
	
10478
	
10479
	/**
10480
	* Counts all hours by airport
10481
	*
10482
	* @return Array the hour list
10483
	*
10484
	*/
10485
	public function countAllHoursByAirport($airport_icao, $filters = array())
10486
	{
10487
		global $globalTimezone, $globalDBdriver;
10488
		$filter_query = $this->getFilter($filters,true,true);
10489
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
10490
		if ($globalTimezone != '') {
10491
			date_default_timezone_set($globalTimezone);
10492
			$datetime = new DateTime();
10493
			$offset = $datetime->format('P');
10494
		} else $offset = '+00:00';
10495
10496
		if ($globalDBdriver == 'mysql') {
10497
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10498
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
10499
								GROUP BY hour_name 
10500
								ORDER BY hour_name ASC";
10501
		} else {
10502
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10503
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
10504
								GROUP BY hour_name 
10505
								ORDER BY hour_name ASC";
10506
		}
10507
		
10508
		$sth = $this->db->prepare($query);
10509
		$sth->execute(array(':airport_icao' => $airport_icao,':offset' => $offset));
10510
      
10511
		$hour_array = array();
10512
		$temp_array = array();
10513
        
10514
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10515
		{
10516
			$temp_array['hour_name'] = $row['hour_name'];
10517
			$temp_array['hour_count'] = $row['hour_count'];
10518
          
10519
			$hour_array[] = $temp_array;
10520
		}
10521
10522
		return $hour_array;
10523
	}
10524
	
10525
	
10526
	
10527
	/**
10528
	* Counts all hours by manufacturer
10529
	*
10530
	* @return Array the hour list
10531
	*
10532
	*/
10533
	public function countAllHoursByManufacturer($aircraft_manufacturer,$filters =array())
10534
	{
10535
		global $globalTimezone, $globalDBdriver;
10536
		$filter_query = $this->getFilter($filters,true,true);
10537
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
10538
		if ($globalTimezone != '') {
10539
			date_default_timezone_set($globalTimezone);
10540
			$datetime = new DateTime();
10541
			$offset = $datetime->format('P');
10542
		} else $offset = '+00:00';
10543
10544
		if ($globalDBdriver == 'mysql') {
10545
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10546
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
10547
								GROUP BY hour_name 
10548
								ORDER BY hour_name ASC";
10549
		} else {
10550
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10551
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
10552
								GROUP BY hour_name 
10553
								ORDER BY hour_name ASC";
10554
		}
10555
		
10556
		$sth = $this->db->prepare($query);
10557
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer,':offset' => $offset));
10558
      
10559
		$hour_array = array();
10560
		$temp_array = array();
10561
        
10562
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10563
		{
10564
			$temp_array['hour_name'] = $row['hour_name'];
10565
			$temp_array['hour_count'] = $row['hour_count'];
10566
          
10567
			$hour_array[] = $temp_array;
10568
		}
10569
10570
		return $hour_array;
10571
	}
10572
	
10573
	
10574
	
10575
	/**
10576
	* Counts all hours by date
10577
	*
10578
	* @return Array the hour list
10579
	*
10580
	*/
10581
	public function countAllHoursByDate($date, $filters = array())
10582
	{
10583
		global $globalTimezone, $globalDBdriver;
10584
		$filter_query = $this->getFilter($filters,true,true);
10585
		$date = filter_var($date,FILTER_SANITIZE_STRING);
10586
		if ($globalTimezone != '') {
10587
			date_default_timezone_set($globalTimezone);
10588
			$datetime = new DateTime($date);
10589
			$offset = $datetime->format('P');
10590
		} else $offset = '+00:00';
10591
10592
		if ($globalDBdriver == 'mysql') {
10593
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10594
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
10595
								GROUP BY hour_name 
10596
								ORDER BY hour_name ASC";
10597
		} else {
10598
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10599
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset, 'YYYY-mm-dd') = :date
10600
								GROUP BY hour_name 
10601
								ORDER BY hour_name ASC";
10602
		}
10603
		
10604
		$sth = $this->db->prepare($query);
10605
		$sth->execute(array(':date' => $date, ':offset' => $offset));
10606
      
10607
		$hour_array = array();
10608
		$temp_array = array();
10609
        
10610
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10611
		{
10612
			$temp_array['hour_name'] = $row['hour_name'];
10613
			$temp_array['hour_count'] = $row['hour_count'];
10614
          
10615
			$hour_array[] = $temp_array;
10616
		}
10617
10618
		return $hour_array;
10619
	}
10620
	
10621
	
10622
	
10623
	/**
10624
	* Counts all hours by a ident/callsign
10625
	*
10626
	* @return Array the hour list
10627
	*
10628
	*/
10629
	public function countAllHoursByIdent($ident, $filters = array())
10630
	{
10631
		global $globalTimezone, $globalDBdriver;
10632
		$filter_query = $this->getFilter($filters,true,true);
10633
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
10634
		if ($globalTimezone != '') {
10635
			date_default_timezone_set($globalTimezone);
10636
			$datetime = new DateTime();
10637
			$offset = $datetime->format('P');
10638
		} else $offset = '+00:00';
10639
10640
		if ($globalDBdriver == 'mysql') {
10641
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10642
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
10643
								GROUP BY hour_name 
10644
								ORDER BY hour_name ASC";
10645
		} else {
10646
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10647
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
10648
								GROUP BY hour_name 
10649
								ORDER BY hour_name ASC";
10650
		}
10651
      
10652
		
10653
		$sth = $this->db->prepare($query);
10654
		$sth->execute(array(':ident' => $ident,':offset' => $offset));
10655
      
10656
		$hour_array = array();
10657
		$temp_array = array();
10658
        
10659
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10660
		{
10661
			$temp_array['hour_name'] = $row['hour_name'];
10662
			$temp_array['hour_count'] = $row['hour_count'];
10663
          
10664
			$hour_array[] = $temp_array;
10665
		}
10666
10667
		return $hour_array;
10668
	}
10669
	
10670
	/**
10671
	* Counts all hours by a owner
10672
	*
10673
	* @return Array the hour list
10674
	*
10675
	*/
10676
	public function countAllHoursByOwner($owner, $filters = array())
10677
	{
10678
		global $globalTimezone, $globalDBdriver;
10679
		$filter_query = $this->getFilter($filters,true,true);
10680
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
10681
		if ($globalTimezone != '') {
10682
			date_default_timezone_set($globalTimezone);
10683
			$datetime = new DateTime();
10684
			$offset = $datetime->format('P');
10685
		} else $offset = '+00:00';
10686
10687
		if ($globalDBdriver == 'mysql') {
10688
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10689
								FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
10690
								GROUP BY hour_name 
10691
								ORDER BY hour_name ASC";
10692
		} else {
10693
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10694
								FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
10695
								GROUP BY hour_name 
10696
								ORDER BY hour_name ASC";
10697
		}
10698
      
10699
		
10700
		$sth = $this->db->prepare($query);
10701
		$sth->execute(array(':owner' => $owner,':offset' => $offset));
10702
      
10703
		$hour_array = array();
10704
		$temp_array = array();
10705
        
10706
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10707
		{
10708
			$temp_array['hour_name'] = $row['hour_name'];
10709
			$temp_array['hour_count'] = $row['hour_count'];
10710
          
10711
			$hour_array[] = $temp_array;
10712
		}
10713
10714
		return $hour_array;
10715
	}
10716
	
10717
	/**
10718
	* Counts all hours by a pilot
10719
	*
10720
	* @return Array the hour list
10721
	*
10722
	*/
10723
	public function countAllHoursByPilot($pilot, $filters = array())
10724
	{
10725
		global $globalTimezone, $globalDBdriver;
10726
		$filter_query = $this->getFilter($filters,true,true);
10727
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
10728
		if ($globalTimezone != '') {
10729
			date_default_timezone_set($globalTimezone);
10730
			$datetime = new DateTime();
10731
			$offset = $datetime->format('P');
10732
		} else $offset = '+00:00';
10733
10734
		if ($globalDBdriver == 'mysql') {
10735
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10736
								FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
10737
								GROUP BY hour_name 
10738
								ORDER BY hour_name ASC";
10739
		} else {
10740
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10741
								FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
10742
								GROUP BY hour_name 
10743
								ORDER BY hour_name ASC";
10744
		}
10745
      
10746
		
10747
		$sth = $this->db->prepare($query);
10748
		$sth->execute(array(':pilot' => $pilot,':offset' => $offset));
10749
      
10750
		$hour_array = array();
10751
		$temp_array = array();
10752
        
10753
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10754
		{
10755
			$temp_array['hour_name'] = $row['hour_name'];
10756
			$temp_array['hour_count'] = $row['hour_count'];
10757
          
10758
			$hour_array[] = $temp_array;
10759
		}
10760
10761
		return $hour_array;
10762
	}
10763
	
10764
	
10765
	
10766
	/**
10767
	* Counts all hours by route
10768
	*
10769
	* @return Array the hour list
10770
	*
10771
	*/
10772
	public function countAllHoursByRoute($departure_airport_icao, $arrival_airport_icao, $filters =array())
10773
	{
10774
		global $globalTimezone, $globalDBdriver;
10775
		$filter_query = $this->getFilter($filters,true,true);
10776
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
10777
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
10778
		if ($globalTimezone != '') {
10779
			date_default_timezone_set($globalTimezone);
10780
			$datetime = new DateTime();
10781
			$offset = $datetime->format('P');
10782
		} else $offset = '+00:00';
10783
10784
		if ($globalDBdriver == 'mysql') {
10785
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10786
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
10787
								GROUP BY hour_name 
10788
								ORDER BY hour_name ASC";
10789
		} else {
10790
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10791
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
10792
								GROUP BY hour_name 
10793
								ORDER BY hour_name ASC";
10794
		}
10795
		
10796
		$sth = $this->db->prepare($query);
10797
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao,':offset' => $offset));
10798
      
10799
		$hour_array = array();
10800
		$temp_array = array();
10801
        
10802
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10803
		{
10804
			$temp_array['hour_name'] = $row['hour_name'];
10805
			$temp_array['hour_count'] = $row['hour_count'];
10806
          
10807
			$hour_array[] = $temp_array;
10808
		}
10809
10810
		return $hour_array;
10811
	}
10812
	
10813
	
10814
	/**
10815
	* Counts all hours by country
10816
	*
10817
	* @return Array the hour list
10818
	*
10819
	*/
10820
	public function countAllHoursByCountry($country, $filters = array())
10821
	{
10822
		global $globalTimezone, $globalDBdriver;
10823
		$filter_query = $this->getFilter($filters,true,true);
10824
		$country = filter_var($country,FILTER_SANITIZE_STRING);
10825
		if ($globalTimezone != '') {
10826
			date_default_timezone_set($globalTimezone);
10827
			$datetime = new DateTime();
10828
			$offset = $datetime->format('P');
10829
		} else $offset = '+00:00';
10830
10831
		if ($globalDBdriver == 'mysql') {
10832
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10833
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
10834
								GROUP BY hour_name 
10835
								ORDER BY hour_name ASC";
10836
		} else {
10837
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10838
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
10839
								GROUP BY hour_name 
10840
								ORDER BY hour_name ASC";
10841
		}
10842
		
10843
		$sth = $this->db->prepare($query);
10844
		$sth->execute(array(':country' => $country,':offset' => $offset));
10845
      
10846
		$hour_array = array();
10847
		$temp_array = array();
10848
        
10849
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10850
		{
10851
			$temp_array['hour_name'] = $row['hour_name'];
10852
			$temp_array['hour_count'] = $row['hour_count'];
10853
          
10854
			$hour_array[] = $temp_array;
10855
		}
10856
10857
		return $hour_array;
10858
	}
10859
10860
10861
10862
10863
	/**
10864
	* Counts all aircraft that have flown over
10865
	*
10866
	* @return Integer the number of aircrafts
10867
	*
10868
	*/
10869
	public function countOverallAircrafts($filters = array(),$year = '',$month = '')
10870
	{
10871
		global $globalDBdriver;
10872
		$filter_query = $this->getFilter($filters,true,true);
10873
		$query  = "SELECT COUNT(DISTINCT spotter_output.aircraft_icao) AS aircraft_count  
10874
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''";
10875
		$query_values = array();
10876
		if ($year != '') {
10877
			if ($globalDBdriver == 'mysql') {
10878
				$query .= " AND YEAR(spotter_output.date) = :year";
10879
				$query_values = array_merge($query_values,array(':year' => $year));
10880
			} else {
10881
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10882
				$query_values = array_merge($query_values,array(':year' => $year));
10883
			}
10884
		}
10885
		if ($month != '') {
10886
			if ($globalDBdriver == 'mysql') {
10887
				$query .= " AND MONTH(spotter_output.date) = :month";
10888
				$query_values = array_merge($query_values,array(':month' => $month));
10889
			} else {
10890
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10891
				$query_values = array_merge($query_values,array(':month' => $month));
10892
			}
10893
		}
10894
10895
		$sth = $this->db->prepare($query);
10896
		$sth->execute($query_values);
10897
		return $sth->fetchColumn();
10898
	}
10899
10900
	/**
10901
	* Counts all flight that really arrival
10902
	*
10903
	* @return Integer the number of aircrafts
10904
	*
10905
	*/
10906
	public function countOverallArrival($filters = array(),$year = '',$month = '')
10907
	{
10908
		global $globalDBdriver;
10909
		$filter_query = $this->getFilter($filters,true,true);
10910
		$query  = "SELECT COUNT(spotter_output.real_arrival_airport_icao) AS arrival_count  
10911
                    FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> ''";
10912
		$query_values = array();
10913
		if ($year != '') {
10914
			if ($globalDBdriver == 'mysql') {
10915
				$query .= " AND YEAR(spotter_output.date) = :year";
10916
				$query_values = array_merge($query_values,array(':year' => $year));
10917
			} else {
10918
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10919
				$query_values = array_merge($query_values,array(':year' => $year));
10920
			}
10921
		}
10922
		if ($month != '') {
10923
			if ($globalDBdriver == 'mysql') {
10924
				$query .= " AND MONTH(spotter_output.date) = :month";
10925
				$query_values = array_merge($query_values,array(':month' => $month));
10926
			} else {
10927
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10928
				$query_values = array_merge($query_values,array(':month' => $month));
10929
			}
10930
		}
10931
		
10932
		$sth = $this->db->prepare($query);
10933
		$sth->execute($query_values);
10934
		return $sth->fetchColumn();
10935
	}
10936
10937
	/**
10938
	* Counts all pilots that have flown over
10939
	*
10940
	* @return Integer the number of pilots
10941
	*
10942
	*/
10943
	public function countOverallPilots($filters = array(),$year = '',$month = '')
10944
	{
10945
		global $globalDBdriver;
10946
		$filter_query = $this->getFilter($filters,true,true);
10947
		$query  = "SELECT COUNT(DISTINCT spotter_output.pilot_id) AS pilot_count  
10948
                    FROM spotter_output".$filter_query." spotter_output.pilot_id <> ''";
10949
		$query_values = array();
10950
		if ($year != '') {
10951
			if ($globalDBdriver == 'mysql') {
10952
				$query .= " AND YEAR(spotter_output.date) = :year";
10953
				$query_values = array_merge($query_values,array(':year' => $year));
10954
			} else {
10955
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10956
				$query_values = array_merge($query_values,array(':year' => $year));
10957
			}
10958
		}
10959
		if ($month != '') {
10960
			if ($globalDBdriver == 'mysql') {
10961
				$query .= " AND MONTH(spotter_output.date) = :month";
10962
				$query_values = array_merge($query_values,array(':month' => $month));
10963
			} else {
10964
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10965
				$query_values = array_merge($query_values,array(':month' => $month));
10966
			}
10967
		}
10968
		$sth = $this->db->prepare($query);
10969
		$sth->execute($query_values);
10970
		return $sth->fetchColumn();
10971
	}
10972
10973
	/**
10974
	* Counts all owners that have flown over
10975
	*
10976
	* @return Integer the number of owners
10977
	*
10978
	*/
10979
	public function countOverallOwners($filters = array(),$year = '',$month = '')
10980
	{
10981
		global $globalDBdriver;
10982
		$filter_query = $this->getFilter($filters,true,true);
10983
		$query  = "SELECT COUNT(DISTINCT spotter_output.owner_name) AS owner_count  
10984
                    FROM spotter_output".$filter_query." spotter_output.owner_name <> ''";
10985
		$query_values = array();
10986
		if ($year != '') {
10987
			if ($globalDBdriver == 'mysql') {
10988
				$query .= " AND YEAR(spotter_output.date) = :year";
10989
				$query_values = array_merge($query_values,array(':year' => $year));
10990
			} else {
10991
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10992
				$query_values = array_merge($query_values,array(':year' => $year));
10993
			}
10994
		}
10995
		if ($month != '') {
10996
			if ($globalDBdriver == 'mysql') {
10997
				$query .= " AND MONTH(spotter_output.date) = :month";
10998
				$query_values = array_merge($query_values,array(':month' => $month));
10999
			} else {
11000
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
11001
				$query_values = array_merge($query_values,array(':month' => $month));
11002
			}
11003
		}
11004
		$sth = $this->db->prepare($query);
11005
		$sth->execute($query_values);
11006
		return $sth->fetchColumn();
11007
	}
11008
	
11009
	
11010
	/**
11011
	* Counts all flights that have flown over
11012
	*
11013
	* @return Integer the number of flights
11014
	*
11015
	*/
11016
	public function countOverallFlights($filters = array(),$year = '',$month = '')
11017
	{
11018
		global $globalDBdriver;
11019
		$queryi  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count FROM spotter_output";
11020
		$query_values = array();
11021
		$query = '';
11022
		if ($year != '') {
11023
			if ($globalDBdriver == 'mysql') {
11024
				$query .= " AND YEAR(spotter_output.date) = :year";
11025
				$query_values = array_merge($query_values,array(':year' => $year));
11026
			} else {
11027
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
11028
				$query_values = array_merge($query_values,array(':year' => $year));
11029
			}
11030
		}
11031
		if ($month != '') {
11032
			if ($globalDBdriver == 'mysql') {
11033
				$query .= " AND MONTH(spotter_output.date) = :month";
11034
				$query_values = array_merge($query_values,array(':month' => $month));
11035
			} else {
11036
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
11037
				$query_values = array_merge($query_values,array(':month' => $month));
11038
			}
11039
		}
11040
		if (empty($query_values)) $queryi .= $this->getFilter($filters);
11041
		else $queryi .= $this->getFilter($filters,true,true).substr($query,4);
11042
		
11043
		$sth = $this->db->prepare($queryi);
11044
		$sth->execute($query_values);
11045
		return $sth->fetchColumn();
11046
	}
11047
	
11048
	/**
11049
	* Counts all military flights that have flown over
11050
	*
11051
	* @return Integer the number of flights
11052
	*
11053
	*/
11054
	public function countOverallMilitaryFlights($filters = array(),$year = '',$month = '')
11055
	{
11056
		global $globalDBdriver;
11057
		$filter_query = $this->getFilter($filters,true,true);
11058
		$query  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count  
11059
                    FROM airlines,spotter_output".$filter_query." spotter_output.airline_icao = airlines.icao AND airlines.type = 'military'";
11060
		$query_values = array();
11061
		if ($year != '') {
11062
			if ($globalDBdriver == 'mysql') {
11063
				$query .= " AND YEAR(spotter_output.date) = :year";
11064
				$query_values = array_merge($query_values,array(':year' => $year));
11065
			} else {
11066
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
11067
				$query_values = array_merge($query_values,array(':year' => $year));
11068
			}
11069
		}
11070
		if ($month != '') {
11071
			if ($globalDBdriver == 'mysql') {
11072
				$query .= " AND MONTH(spotter_output.date) = :month";
11073
				$query_values = array_merge($query_values,array(':month' => $month));
11074
			} else {
11075
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
11076
				$query_values = array_merge($query_values,array(':month' => $month));
11077
			}
11078
		}
11079
      
11080
		$sth = $this->db->prepare($query);
11081
		$sth->execute($query_values);
11082
		return $sth->fetchColumn();
11083
	}
11084
	
11085
	
11086
	
11087
	/**
11088
	* Counts all airlines that have flown over
11089
	*
11090
	* @return Integer the number of airlines
11091
	*
11092
	*/
11093
	public function countOverallAirlines($filters = array(),$year = '',$month = '')
11094
	{
11095
		global $globalDBdriver;
11096
		$queryi  = "SELECT COUNT(DISTINCT spotter_output.airline_name) AS airline_count 
11097
							FROM spotter_output";
11098
      
11099
		$query_values = array();
11100
		$query = '';
11101
		if ($year != '') {
11102
			if ($globalDBdriver == 'mysql') {
11103
				$query .= " AND YEAR(spotter_output.date) = :year";
11104
				$query_values = array_merge($query_values,array(':year' => $year));
11105
			} else {
11106
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
11107
				$query_values = array_merge($query_values,array(':year' => $year));
11108
			}
11109
		}
11110
		if ($month != '') {
11111
			if ($globalDBdriver == 'mysql') {
11112
				$query .= " AND MONTH(spotter_output.date) = :month";
11113
				$query_values = array_merge($query_values,array(':month' => $month));
11114
			} else {
11115
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
11116
				$query_values = array_merge($query_values,array(':month' => $month));
11117
			}
11118
		}
11119
                if ($query == '') $queryi .= $this->getFilter($filters);
11120
                else $queryi .= $this->getFilter($filters,true,true).substr($query,4);
11121
11122
11123
		$sth = $this->db->prepare($queryi);
11124
		$sth->execute($query_values);
11125
		return $sth->fetchColumn();
11126
	}
11127
11128
  
11129
	/**
11130
	* Counts all hours of today
11131
	*
11132
	* @return Array the hour list
11133
	*
11134
	*/
11135
	public function countAllHoursFromToday($filters = array())
11136
	{
11137
		global $globalTimezone, $globalDBdriver;
11138
		$filter_query = $this->getFilter($filters,true,true);
11139
		if ($globalTimezone != '') {
11140
			date_default_timezone_set($globalTimezone);
11141
			$datetime = new DateTime();
11142
			$offset = $datetime->format('P');
11143
		} else $offset = '+00:00';
11144
11145
		if ($globalDBdriver == 'mysql') {
11146
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
11147
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = CURDATE()
11148
								GROUP BY hour_name 
11149
								ORDER BY hour_name ASC";
11150
		} else {
11151
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
11152
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = CAST(NOW() AS date)
11153
								GROUP BY hour_name 
11154
								ORDER BY hour_name ASC";
11155
		}
11156
		
11157
		$sth = $this->db->prepare($query);
11158
		$sth->execute(array(':offset' => $offset));
11159
      
11160
		$hour_array = array();
11161
		$temp_array = array();
11162
        
11163
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11164
		{
11165
			$temp_array['hour_name'] = $row['hour_name'];
11166
			$temp_array['hour_count'] = $row['hour_count'];
11167
			$hour_array[] = $temp_array;
11168
		}
11169
11170
		return $hour_array;
11171
	}
11172
    
11173
	/**
11174
	* Gets all the spotter information based on calculated upcoming flights
11175
	*
11176
	* @return Array the spotter information
11177
	*
11178
	*/
11179
	public function getUpcomingFlights($limit = '', $sort = '', $filters = array())
11180
	{
11181
		global $global_query, $globalDBdriver, $globalTimezone;
11182
		$filter_query = $this->getFilter($filters,true,true);
11183
		date_default_timezone_set('UTC');
11184
		$limit_query = '';
11185
		if ($limit != "")
11186
		{
11187
			$limit_array = explode(",", $limit);
11188
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
11189
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
11190
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
11191
			{
11192
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
11193
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
11194
			}
11195
		}
11196
		$currentHour = date("G");
11197
		$next3Hours = date("G", strtotime("+3 hour"));
11198
		//if the next 3 hours is already equal to/past midnight, we limit it to stay there, otherwise the query will fail
11199
		if ($currentHour >= 21 && $next3Hours >= 00)
11200
		{
11201
			$next3Hours = 24;
11202
		}
11203
		$currentDayofWeek = date("l");
11204
		if ($globalDBdriver == 'mysql') {
11205
			if ($sort != "")
11206
			{
11207
				$search_orderby_array = $this->getOrderBy();
11208
				$orderby_query = $search_orderby_array[$sort]['sql'];
11209
			} else {
11210
				$orderby_query = " ORDER BY HOUR(spotter_output.date) ASC";
11211
			}
11212
/*
11213
			$query = "SELECT spotter_output.*, count(spotter_output.ident) as ident_count
11214
			    FROM spotter_output
11215
			    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'
11216
			    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";
11217
*/
11218
/*			$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
11219
			    FROM spotter_output
11220
			    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'
11221
			    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";
11222
*/
11223
			$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 
11224
			    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'
11225
			    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
11226
			    HAVING count(spotter_output.ident) > 5$orderby_query";
11227
11228
			$spotter_array = $this->getDataFromDB($query.$limit_query);
11229
		} else {
11230
			if ($sort != "")
11231
			{
11232
				$search_orderby_array = $this->getOrderBy();
11233
				$orderby_query = $search_orderby_array[$sort]['sql'];
11234
			} else {
11235
				$orderby_query = " ORDER BY to_char(spotter_output.date,'HH') ASC";
11236
			}
11237
			$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') 
11238
			    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 <> '' 
11239
			    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')
11240
			    HAVING count(spotter_output.ident) > 5$orderby_query";
11241
			//echo $query;
11242
			$spotter_array = $this->getDataFromDB($query.$limit_query,array(':timezone' => $globalTimezone));
11243
			/*
11244
			$sth = $this->db->prepare($query);
11245
			$sth->execute(array(':timezone' => $globalTimezone));
11246
			return $sth->fetchAll(PDO::FETCH_ASSOC);
11247
			*/
11248
		}
11249
		return $spotter_array;
11250
	}
11251
    
11252
    
11253
     /**
11254
	* Gets the Barrie Spotter ID based on the FlightAware ID
11255
	*
11256
	* @return Integer the Barrie Spotter ID
11257
q	*
11258
	*/
11259
	public function getSpotterIDBasedOnFlightAwareID($flightaware_id)
11260
	{
11261
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
11262
11263
		$query  = "SELECT spotter_output.spotter_id
11264
								FROM spotter_output 
11265
								WHERE spotter_output.flightaware_id = '".$flightaware_id."'";
11266
        
11267
		
11268
		$sth = $this->db->prepare($query);
11269
		$sth->execute();
11270
11271
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11272
		{
11273
			return $row['spotter_id'];
11274
		}
11275
	}
11276
  
11277
 
11278
	/**
11279
	* Parses a date string
11280
	*
11281
	* @param String $dateString the date string
11282
	* @param String $timezone the timezone of a user
11283
	* @return Array the time information
11284
	*
11285
	*/
11286
	public function parseDateString($dateString, $timezone = '')
11287
	{
11288
		$time_array = array();
11289
	
11290
		if ($timezone != "")
11291
		{
11292
			date_default_timezone_set($timezone);
11293
		}
11294
		
11295
		$current_date = date("Y-m-d H:i:s");
11296
		$date = date("Y-m-d H:i:s",strtotime($dateString." UTC"));
11297
		
11298
		$diff = abs(strtotime($current_date) - strtotime($date));
11299
11300
		$time_array['years'] = floor($diff / (365*60*60*24)); 
11301
		$years = $time_array['years'];
11302
		
11303
		$time_array['months'] = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
11304
		$months = $time_array['months'];
11305
		
11306
		$time_array['days'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
11307
		$days = $time_array['days'];
11308
		$time_array['hours'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24)/ (60*60));
11309
		$hours = $time_array['hours'];
11310
		$time_array['minutes'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60)/ 60);
11311
		$minutes = $time_array['minutes'];
11312
		$time_array['seconds'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60 - $minutes*60));  
11313
		
11314
		return $time_array;	
11315
	}	
11316
	
11317
	
11318
	
11319
	
11320
	/**
11321
	* Parses the direction degrees to working
11322
	*
11323
	* @param Float $direction the direction in degrees
11324
	* @return Array the direction information
11325
	*
11326
	*/
11327
	public function parseDirection($direction = 0)
11328
	{
11329
		if ($direction == '') $direction = 0;
11330
		$direction_array = array();
11331
		$temp_array = array();
11332
11333
		if ($direction == 360 || ($direction >= 0 && $direction < 22.5))
11334
		{
11335
			$temp_array['direction_degree'] = $direction;
11336
			$temp_array['direction_shortname'] = "N";
11337
			$temp_array['direction_fullname'] = "North";
11338
		} elseif ($direction >= 22.5 && $direction < 45){
11339
			$temp_array['direction_degree'] = $direction;
11340
			$temp_array['direction_shortname'] = "NNE";
11341
			$temp_array['direction_fullname'] = "North-Northeast";
11342
		} elseif ($direction >= 45 && $direction < 67.5){
11343
			$temp_array['direction_degree'] = $direction;
11344
			$temp_array['direction_shortname'] = "NE";
11345
			$temp_array['direction_fullname'] = "Northeast";
11346
		} elseif ($direction >= 67.5 && $direction < 90){
11347
			$temp_array['direction_degree'] = $direction;
11348
			$temp_array['direction_shortname'] = "ENE";
11349
			$temp_array['direction_fullname'] = "East-Northeast";
11350
		} elseif ($direction >= 90 && $direction < 112.5){
11351
			$temp_array['direction_degree'] = $direction;
11352
			$temp_array['direction_shortname'] = "E";
11353
			$temp_array['direction_fullname'] = "East";
11354
		} elseif ($direction >= 112.5 && $direction < 135){
11355
			$temp_array['direction_degree'] = $direction;
11356
			$temp_array['direction_shortname'] = "ESE";
11357
			$temp_array['direction_fullname'] = "East-Southeast";
11358
		} elseif ($direction >= 135 && $direction < 157.5){
11359
			$temp_array['direction_degree'] = $direction;
11360
			$temp_array['direction_shortname'] = "SE";
11361
			$temp_array['direction_fullname'] = "Southeast";
11362
		} elseif ($direction >= 157.5 && $direction < 180){
11363
			$temp_array['direction_degree'] = $direction;
11364
			$temp_array['direction_shortname'] = "SSE";
11365
			$temp_array['direction_fullname'] = "South-Southeast";
11366
		} elseif ($direction >= 180 && $direction < 202.5){
11367
			$temp_array['direction_degree'] = $direction;
11368
			$temp_array['direction_shortname'] = "S";
11369
			$temp_array['direction_fullname'] = "South";
11370
		} elseif ($direction >= 202.5 && $direction < 225){
11371
			$temp_array['direction_degree'] = $direction;
11372
			$temp_array['direction_shortname'] = "SSW";
11373
			$temp_array['direction_fullname'] = "South-Southwest";
11374
		} elseif ($direction >= 225 && $direction < 247.5){
11375
			$temp_array['direction_degree'] = $direction;
11376
			$temp_array['direction_shortname'] = "SW";
11377
			$temp_array['direction_fullname'] = "Southwest";
11378
		} elseif ($direction >= 247.5 && $direction < 270){
11379
			$temp_array['direction_degree'] = $direction;
11380
			$temp_array['direction_shortname'] = "WSW";
11381
			$temp_array['direction_fullname'] = "West-Southwest";
11382
		} elseif ($direction >= 270 && $direction < 292.5){
11383
			$temp_array['direction_degree'] = $direction;
11384
			$temp_array['direction_shortname'] = "W";
11385
			$temp_array['direction_fullname'] = "West";
11386
		} elseif ($direction >= 292.5 && $direction < 315){
11387
			$temp_array['direction_degree'] = $direction;
11388
			$temp_array['direction_shortname'] = "WNW";
11389
			$temp_array['direction_fullname'] = "West-Northwest";
11390
		} elseif ($direction >= 315 && $direction < 337.5){
11391
			$temp_array['direction_degree'] = $direction;
11392
			$temp_array['direction_shortname'] = "NW";
11393
			$temp_array['direction_fullname'] = "Northwest";
11394
		} elseif ($direction >= 337.5 && $direction < 360){
11395
			$temp_array['direction_degree'] = $direction;
11396
			$temp_array['direction_shortname'] = "NNW";
11397
			$temp_array['direction_fullname'] = "North-Northwest";
11398
		}
11399
		$direction_array[] = $temp_array;
11400
		return $direction_array;
11401
	}
11402
	
11403
	
11404
	/**
11405
	* Gets the aircraft registration
11406
	*
11407
	* @param String $flightaware_id the flight aware id
11408
	* @return String the aircraft registration
11409
	*
11410
	*/
11411
	
11412
	public function getAircraftRegistration($flightaware_id)
11413
	{
11414
		global $globalFlightAwareUsername, $globalFlightAwarePassword;
11415
        
11416
		$options = array(
11417
			'trace' => true,
11418
			'exceptions' => 0,
11419
			'login' => $globalFlightAwareUsername,
11420
			'password' => $globalFlightAwarePassword,
11421
		);
11422
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
11423
		
11424
		$params = array('faFlightID' => $flightaware_id);
11425
		$result = $client->AirlineFlightInfo($params);
11426
		
11427
		if (isset($result->AirlineFlightInfoResult))
11428
		{
11429
			$registration = $result->AirlineFlightInfoResult->tailnumber;
11430
		} else return '';
11431
		
11432
		$registration = $this->convertAircraftRegistration($registration);
11433
		
11434
		return $registration;
11435
	}
11436
11437
11438
	/**
11439
	* Gets the aircraft registration from ModeS
11440
	*
11441
	* @param String $aircraft_modes the flight ModeS in hex
11442
	* @return String the aircraft registration
11443
	*
11444
	*/
11445
	public function getAircraftRegistrationBymodeS($aircraft_modes, $source_type = '')
11446
	{
11447
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
11448
		$source_type = filter_var($source_type,FILTER_SANITIZE_STRING);
11449
		if ($source_type == '' || $source_type == 'modes') {
11450
			$query  = "SELECT aircraft_modes.Registration FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes AND aircraft_modes.source_type = 'modes' ORDER BY FirstCreated DESC LIMIT 1";
11451
		} else {
11452
			$query  = "SELECT aircraft_modes.Registration FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes AND aircraft_modes.source_type = 'flarm' ORDER BY FirstCreated DESC LIMIT 1";
11453
		}
11454
		$sth = $this->db->prepare($query);
11455
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
11456
    
11457
		$row = $sth->fetch(PDO::FETCH_ASSOC);
11458
		$sth->closeCursor();
11459
		if (count($row) > 0) {
11460
		    //return $row['Registration'];
11461
		    return $row['registration'];
11462
		} elseif ($source_type == 'flarm') {
11463
			return $this->getAircraftRegistrationBymodeS($aircraft_modes);
11464
		} else return '';
11465
	
11466
	}
11467
11468
	/**
11469
	* Gets the aircraft type from ModeS
11470
	*
11471
	* @param String $aircraft_modes the flight ModeS in hex
11472
	* @return String the aircraft type
11473
	*
11474
	*/
11475
	public function getAircraftTypeBymodeS($aircraft_modes,$source_type = '')
11476
	{
11477
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
11478
		$source_type = filter_var($source_type,FILTER_SANITIZE_STRING);
11479
		if ($source_type == '' || $source_type == 'modes') {
11480
			$query  = "SELECT aircraft_modes.type_flight FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes AND aircraft_modes.source_type = 'modes' ORDER BY FirstCreated DESC LIMIT 1";
11481
		} else {
11482
			$query  = "SELECT aircraft_modes.type_flight FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes AND aircraft_modes.source_type = 'flarm' ORDER BY FirstCreated DESC LIMIT 1";
11483
		}
11484
		
11485
		$sth = $this->db->prepare($query);
11486
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
11487
    
11488
		$row = $sth->fetch(PDO::FETCH_ASSOC);
11489
		$sth->closeCursor();
11490
		if (count($row) > 0) {
11491
			if ($row['type_flight'] == null) return '';
11492
			else return $row['type_flight'];
11493
		} elseif ($source_type == 'flarm') {
11494
			return $this->getAircraftTypeBymodeS($aircraft_modes);
11495
		} else return '';
11496
	
11497
	}
11498
11499
	/**
11500
	* Gets Country from latitude/longitude
11501
	*
11502
	* @param Float $latitude latitute of the flight
11503
	* @param Float $longitude longitute of the flight
11504
	* @return String the countrie
11505
	*/
11506
	public function getCountryFromLatitudeLongitude($latitude,$longitude)
11507
	{
11508
		global $globalDBdriver, $globalDebug;
11509
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
11510
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
11511
	
11512
		$Connection = new Connection($this->db);
11513
		if (!$Connection->tableExists('countries')) return '';
11514
	
11515
		try {
11516
			/*
11517
			if ($globalDBdriver == 'mysql') {
11518
				//$query  = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(:latitude :longitude)'), ogc_geom) LIMIT 1";
11519
				$query = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(".$longitude.' '.$latitude.")'), ogc_geom) LIMIT 1";
11520
			}
11521
			*/
11522
			// This query seems to work both for MariaDB and PostgreSQL
11523
			$query = "SELECT name,iso2,iso3 FROM countries WHERE ST_Within(ST_GeomFromText('POINT(".$longitude." ".$latitude.")',4326), ogc_geom) LIMIT 1";
11524
		
11525
			$sth = $this->db->prepare($query);
11526
			//$sth->execute(array(':latitude' => $latitude,':longitude' => $longitude));
11527
			$sth->execute();
11528
    
11529
			$row = $sth->fetch(PDO::FETCH_ASSOC);
11530
			$sth->closeCursor();
11531
			if (count($row) > 0) {
11532
				return $row;
11533
			} else return '';
11534
		} catch (PDOException $e) {
11535
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
11536
			return '';
11537
		}
11538
	
11539
	}
11540
11541
	/**
11542
	* Gets Country from iso2
11543
	*
11544
	* @param String $iso2 ISO2 country code
11545
	* @return String the countrie
11546
	*/
11547
	public function getCountryFromISO2($iso2)
11548
	{
11549
		global $globalDBdriver, $globalDebug;
11550
		$iso2 = filter_var($iso2,FILTER_SANITIZE_STRING);
11551
	
11552
		$Connection = new Connection($this->db);
11553
		if (!$Connection->tableExists('countries')) return '';
11554
	
11555
		try {
11556
			$query = "SELECT name,iso2,iso3 FROM countries WHERE iso2 = :iso2 LIMIT 1";
11557
		
11558
			$sth = $this->db->prepare($query);
11559
			$sth->execute(array(':iso2' => $iso2));
11560
    
11561
			$row = $sth->fetch(PDO::FETCH_ASSOC);
11562
			$sth->closeCursor();
11563
			if (count($row) > 0) {
11564
				return $row;
11565
			} else return '';
11566
		} catch (PDOException $e) {
11567
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
11568
			return '';
11569
		}
11570
	
11571
	}
11572
11573
	/**
11574
	* converts the registration code using the country prefix
11575
	*
11576
	* @param String $registration the aircraft registration
11577
	* @return String the aircraft registration
11578
	*
11579
	*/
11580
	public function convertAircraftRegistration($registration)
11581
	{
11582
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11583
		$registration_prefix = '';
11584
		$registration_1 = substr($registration, 0, 1);
11585
		$registration_2 = substr($registration, 0, 2);
11586
11587
		//first get the prefix based on two characters
11588
		$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_2";
11589
      
11590
		
11591
		$sth = $this->db->prepare($query);
11592
		$sth->execute(array(':registration_2' => $registration_2));
11593
        
11594
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11595
		{
11596
			$registration_prefix = $row['registration_prefix'];
11597
		}
11598
11599
		//if we didn't find a two chracter prefix lets just search the one with one character
11600
		if ($registration_prefix == '')
11601
		{
11602
			$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_1";
11603
			$sth = $this->db->prepare($query);
11604
			$sth->execute(array(':registration_1' => $registration_1));
11605
	        
11606
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11607
			{
11608
				$registration_prefix = $row['registration_prefix'];
11609
			}
11610
		}
11611
11612
		//determine which characters are being used and convert the registration code appropiately
11613
		if (strlen($registration_prefix) == 1)
11614
		{
11615
			if (0 === strpos($registration, 'N')) {
11616
				$registration = preg_replace("/^(.{1})/", "$1", $registration);
11617
			} else {
11618
				$registration = preg_replace("/^(.{1})/", "$1-", $registration);
11619
			}
11620
		} else if(strlen($registration_prefix) == 2){
11621
			if (0 === strpos($registration, 'N')) {
11622
				$registration = preg_replace("/^(.{2})/", "$1", $registration);
11623
			} else {
11624
				$registration = preg_replace("/^(.{2})/", "$1-", $registration);
11625
			}
11626
		}
11627
		return $registration;
11628
	}
11629
11630
	/**
11631
	* Country from the registration code
11632
	*
11633
	* @param String $registration the aircraft registration
11634
	* @return String the country
11635
	*
11636
	*/
11637
	public function countryFromAircraftRegistration($registration)
11638
	{
11639
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11640
		
11641
		$registration_prefix = '';
11642
		$registration_test = explode('-',$registration);
11643
		$country = '';
11644
		if ($registration_test[0] != $registration) {
11645
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11646
	      
11647
			$sth = $this->db->prepare($query);
11648
			$sth->execute(array(':registration_1' => $registration_test[0]));
11649
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11650
			{
11651
				//$registration_prefix = $row['registration_prefix'];
11652
				$country = $row['country'];
11653
			}
11654
		} else {
11655
    			$registration_1 = substr($registration, 0, 1);
11656
		        $registration_2 = substr($registration, 0, 2);
11657
11658
			$country = '';
11659
			//first get the prefix based on two characters
11660
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
11661
      
11662
			
11663
			$sth = $this->db->prepare($query);
11664
			$sth->execute(array(':registration_2' => $registration_2));
11665
        
11666
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11667
			{
11668
				$registration_prefix = $row['registration_prefix'];
11669
				$country = $row['country'];
11670
			}
11671
11672
			//if we didn't find a two chracter prefix lets just search the one with one character
11673
			if ($registration_prefix == "")
11674
			{
11675
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11676
	      
11677
				$sth = $this->db->prepare($query);
11678
				$sth->execute(array(':registration_1' => $registration_1));
11679
	        
11680
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
11681
				{
11682
					//$registration_prefix = $row['registration_prefix'];
11683
					$country = $row['country'];
11684
				}
11685
			}
11686
		}
11687
    
11688
		return $country;
11689
	}
11690
11691
	/**
11692
	* Registration prefix from the registration code
11693
	*
11694
	* @param String $registration the aircraft registration
11695
	* @return String the registration prefix
11696
	*
11697
	*/
11698
	public function registrationPrefixFromAircraftRegistration($registration)
11699
	{
11700
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11701
		
11702
		$registration_prefix = '';
11703
		$registration_test = explode('-',$registration);
11704
		//$country = '';
11705
		if ($registration_test[0] != $registration) {
11706
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11707
	      
11708
			$sth = $this->db->prepare($query);
11709
			$sth->execute(array(':registration_1' => $registration_test[0]));
11710
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11711
			{
11712
				$registration_prefix = $row['registration_prefix'];
11713
				//$country = $row['country'];
11714
			}
11715
		} else {
11716
    			$registration_1 = substr($registration, 0, 1);
11717
		        $registration_2 = substr($registration, 0, 2);
11718
11719
			//first get the prefix based on two characters
11720
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
11721
      
11722
			
11723
			$sth = $this->db->prepare($query);
11724
			$sth->execute(array(':registration_2' => $registration_2));
11725
        
11726
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11727
			{
11728
				$registration_prefix = $row['registration_prefix'];
11729
				//$country = $row['country'];
11730
			}
11731
11732
			//if we didn't find a two chracter prefix lets just search the one with one character
11733
			if ($registration_prefix == "")
11734
			{
11735
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11736
	      
11737
				$sth = $this->db->prepare($query);
11738
				$sth->execute(array(':registration_1' => $registration_1));
11739
	        
11740
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
11741
				{
11742
					$registration_prefix = $row['registration_prefix'];
11743
					//$country = $row['country'];
11744
				}
11745
			}
11746
		}
11747
    
11748
		return $registration_prefix;
11749
	}
11750
11751
11752
	/**
11753
	* Country from the registration code
11754
	*
11755
	* @param String $registration the aircraft registration
11756
	* @return String the country
11757
	*
11758
	*/
11759
	public function countryFromAircraftRegistrationCode($registration)
11760
	{
11761
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11762
		
11763
		$country = '';
11764
		$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration LIMIT 1";
11765
		$sth = $this->db->prepare($query);
11766
		$sth->execute(array(':registration' => $registration));
11767
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11768
		{
11769
			$country = $row['country'];
11770
		}
11771
		return $country;
11772
	}
11773
	
11774
	/**
11775
	* Set a new highlight value for a flight
11776
	*
11777
	* @param String $flightaware_id flightaware_id from spotter_output table
11778
	* @param String $highlight New highlight value
11779
	*/
11780
	public function setHighlightFlight($flightaware_id,$highlight) {
11781
		
11782
		$query  = "UPDATE spotter_output SET highlight = :highlight WHERE flightaware_id = :flightaware_id";
11783
		$sth = $this->db->prepare($query);
11784
		$sth->execute(array(':flightaware_id' => $flightaware_id, ':highlight' => $highlight));
11785
	}
11786
11787
	/**
11788
	* Set a new highlight value for a flight by Registration
11789
	*
11790
	* @param String $registration Registration of the aircraft
11791
	* @param String $date Date of spotted aircraft
11792
	* @param String $highlight New highlight value
11793
	*/
11794
	public function setHighlightFlightByRegistration($registration,$highlight, $date = '') {
11795
		if ($date == '') {
11796
			$query  = "UPDATE spotter_output SET highlight = :highlight WHERE spotter_id IN (SELECT MAX(spotter_id) FROM spotter_output WHERE registration = :registration)";
11797
			$query_values = array(':registration' => $registration, ':highlight' => $highlight);
11798
		} else {
11799
			$query  = "UPDATE spotter_output SET highlight = :highlight WHERE registration = :registration AND date(date) = :date";
11800
			$query_values = array(':registration' => $registration, ':highlight' => $highlight,':date' => $date);
11801
		}
11802
		$sth = $this->db->prepare($query);
11803
		$sth->execute($query_values);
11804
	}
11805
	
11806
	/**
11807
	* Gets the short url from bit.ly
11808
	*
11809
	* @param String $url the full url
11810
	* @return String the bit.ly url
11811
	*
11812
	*/
11813
	public function getBitlyURL($url)
11814
	{
11815
		global $globalBitlyAccessToken;
11816
		
11817
		if ($globalBitlyAccessToken == '') return $url;
11818
        
11819
		$google_url = 'https://api-ssl.bitly.com/v3/shorten?access_token='.$globalBitlyAccessToken.'&longUrl='.$url;
11820
		
11821
		$ch = curl_init();
11822
		curl_setopt($ch, CURLOPT_HEADER, 0);
11823
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
11824
		curl_setopt($ch, CURLOPT_URL, $google_url);
11825
		$bitly_data = curl_exec($ch);
11826
		curl_close($ch);
11827
		
11828
		$bitly_data = json_decode($bitly_data);
11829
		$bitly_url = '';
11830
		if ($bitly_data->status_txt = "OK"){
11831
			$bitly_url = $bitly_data->data->url;
11832
		}
11833
11834
		return $bitly_url;
11835
	}
11836
11837
11838
	public function getOrderBy()
11839
	{
11840
		$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"));
11841
		
11842
		return $orderby;
11843
		
11844
	}
11845
    
11846
/*
11847
	public function importFromFlightAware()
11848
	{
11849
		global $globalFlightAwareUsername, $globalFlightAwarePassword, $globalLatitudeMax, $globalLatitudeMin, $globalLongitudeMax, $globalLongitudeMin, $globalAirportIgnore;
11850
		$Spotter = new Spotter($this->db);
11851
		$SpotterLive = new SpotterLive($this->db);
11852
		$options = array(
11853
		            'trace' => true,
11854
		            'exceptions' => 0,
11855
		            'login' => $globalFlightAwareUsername,
11856
		            'password' => $globalFlightAwarePassword,
11857
		);
11858
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
11859
		$params = array('query' => '{range lat '.$globalLatitudeMin.' '.$globalLatitudeMax.'} {range lon '.$globalLongitudeMax.' '.$globalLongitudeMin.'} {true inAir}', 'howMany' => '15', 'offset' => '0');
11860
		$result = $client->SearchBirdseyeInFlight($params);
11861
		$dataFound = false;
11862
		$ignoreImport = false;
11863
		if (isset($result->SearchBirdseyeInFlightResult))
11864
		{
11865
			if (is_array($result->SearchBirdseyeInFlightResult->aircraft))
11866
			{
11867
				foreach($result->SearchBirdseyeInFlightResult->aircraft as $aircraft)
11868
				{
11869
					if (!strstr($aircraft->origin, 'L ') && !strstr($aircraft->destination, 'L '))
11870
					{
11871
						foreach($globalAirportIgnore as $airportIgnore)
11872
						{
11873
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
11874
							{
11875
								$ignoreImport = true; 
11876
							}
11877
						}
11878
						if ($ignoreImport == false)
11879
						{
11880
							$flightaware_id = $aircraft->faFlightID;
11881
							$ident = $aircraft->ident;
11882
							$aircraft_type = $aircraft->type;
11883
							$departure_airport = $aircraft->origin;
11884
							$arrival_airport = $aircraft->destination;
11885
							$latitude = $aircraft->latitude;
11886
							$longitude = $aircraft->longitude;
11887
							$waypoints = $aircraft->waypoints;
11888
							$altitude = $aircraft->altitude;
11889
							$heading = $aircraft->heading;
11890
							$groundspeed = $aircraft->groundspeed;
11891
							$dataFound = true;
11892
							//gets the callsign from the last hour
11893
							$last_hour_ident = $this->getIdentFromLastHour($ident);
11894
							//change the departure/arrival airport to NA if its not available
11895
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
11896
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
11897
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
11898
							if($last_hour_ident == "")
11899
							{
11900
								//adds the spotter data for the archive
11901
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11902
							}
11903
11904
							//adds the spotter LIVE data
11905
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11906
						}
11907
					}
11908
					$ignoreImport = false;
11909
				}
11910
			} else {
11911
				if (!strstr($result->SearchBirdseyeInFlightResult->aircraft->origin, 'L ') && !strstr($result->SearchBirdseyeInFlightResult->aircraft->destination, 'L '))
11912
				{
11913
					foreach($globalAirportIgnore as $airportIgnore)
11914
					{
11915
						foreach($globalAirportIgnore as $airportIgnore)
11916
						{
11917
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
11918
							{
11919
								$ignoreImport = true; 
11920
							}
11921
						}
11922
						if ($ignoreImport == false)
11923
						{
11924
							$flightaware_id = $result->SearchBirdseyeInFlightResult->aircraft->faFlightID;
11925
							$ident = $result->SearchBirdseyeInFlightResult->aircraft->ident;
11926
							$aircraft_type = $result->SearchBirdseyeInFlightResult->aircraft->type;
11927
							$departure_airport = $result->SearchBirdseyeInFlightResult->aircraft->origin;
11928
							$arrival_airport = $result->SearchBirdseyeInFlightResult->aircraft->destination;
11929
							$latitude = $result->SearchBirdseyeInFlightResult->aircraft->latitude;
11930
							$longitude = $result->SearchBirdseyeInFlightResult->aircraft->longitude;
11931
							$waypoints = $result->SearchBirdseyeInFlightResult->aircraft->waypoints;
11932
							$altitude = $result->SearchBirdseyeInFlightResult->aircraft->altitude;
11933
							$heading = $result->SearchBirdseyeInFlightResult->aircraft->heading;
11934
							$groundspeed = $result->SearchBirdseyeInFlightResult->aircraft->groundspeed;
11935
							$dataFound = true;
11936
							//gets the callsign from the last hour
11937
							$last_hour_ident = $this->getIdentFromLastHour($ident);
11938
							//change the departure/arrival airport to NA if its not available
11939
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
11940
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
11941
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
11942
							if($last_hour_ident == "")
11943
							{
11944
								//adds the spotter data for the archive
11945
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11946
							}
11947
							//adds the spotter LIVE data
11948
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11949
						}
11950
						$ignoreImport = false;
11951
					}
11952
				}
11953
			}
11954
		} 
11955
	}
11956
*/
11957
11958
	// Update flights data when new data in DB
11959
	public function updateFieldsFromOtherTables()
11960
	{
11961
		global $globalDebug, $globalDBdriver;
11962
		$Image = new Image($this->db);
11963
		
11964
11965
		// routes
11966
		if ($globalDebug) print "Routes...\n";
11967
		if ($globalDBdriver == 'mysql') {
11968
			$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)";
11969
		} else {
11970
			$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'";
11971
		}
11972
		$sth = $this->db->prepare($query);
11973
		$sth->execute();
11974
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11975
		{
11976
			$departure_airport_array = $this->getAllAirportInfo($row['fromairport_icao']);
11977
			$arrival_airport_array = $this->getAllAirportInfo($row['toairport_icao']);
11978
			if (count($departure_airport_array) > 0 && count($arrival_airport_array) > 0) {
11979
				$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";
11980
				$sthu = $this->db->prepare($update_query);
11981
				$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']));
11982
			}
11983
		}
11984
		
11985
		if ($globalDebug) print "Airlines...\n";
11986
		//airlines
11987
		if ($globalDBdriver == 'mysql') {
11988
			$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)";
11989
		} elseif ($globalDBdriver == 'pgsql') {
11990
			$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'";
11991
		}
11992
		$sth = $this->db->prepare($query);
11993
		$sth->execute();
11994
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11995
		{
11996
			if (is_numeric(substr($row['ident'], -1, 1)))
11997
			{
11998
				$fromsource = NULL;
11999
				if (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
12000
				elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
12001
				elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
12002
				elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
12003
				$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
12004
				if (isset($airline_array[0]['name'])) {
12005
					$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";
12006
					$sthu = $this->db->prepare($update_query);
12007
					$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']));
12008
				}
12009
			}
12010
		}
12011
12012
		if ($globalDebug) print "Remove Duplicate in aircraft_modes...\n";
12013
		//duplicate modes
12014
		$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";
12015
		$sth = $this->db->prepare($query);
12016
		$sth->execute();
12017
		
12018
		if ($globalDebug) print "Aircraft...\n";
12019
		//aircraft
12020
		if ($globalDBdriver == 'mysql') {
12021
			$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)";
12022
		} elseif ($globalDBdriver == 'pgsql') {
12023
			$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'";
12024
		}
12025
		$sth = $this->db->prepare($query);
12026
		$sth->execute();
12027
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
12028
		{
12029
			if ($row['aircraft_icao'] != '') {
12030
				$aircraft_name = $this->getAllAircraftInfo($row['aircraft_icao']);
12031
				if ($row['registration'] != ""){
12032
					$image_array = $Image->getSpotterImage($row['registration']);
12033
					if (!isset($image_array[0]['registration'])) {
12034
						$Image->addSpotterImage($row['registration']);
12035
					}
12036
				}
12037
				if (count($aircraft_name) > 0) {
12038
					$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";
12039
					$sthu = $this->db->prepare($update_query);
12040
					$sthu->execute(array(':aircraft_name' => $aircraft_name[0]['type'], ':aircraft_manufacturer' => $aircraft_name[0]['manufacturer'], ':spotter_id' => $row['spotter_id']));
12041
				}
12042
			}
12043
		}
12044
	}	
12045
12046
	// Update arrival airports for data already in DB
12047
	public function updateArrivalAirports()
12048
	{
12049
		global $globalDebug, $globalDBdriver, $globalClosestMinDist;
12050
		$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";
12051
		$sth = $this->db->prepare($query);
12052
		$sth->execute();
12053
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
12054
		{
12055
			if ($row['last_latitude'] != '' && $row['last_longitude'] != '') {
12056
				$closestAirports = $this->closestAirports($row['last_latitude'],$row['last_longitude'],$globalClosestMinDist);
12057
				$airport_icao = '';
12058
				 if (isset($closestAirports[0])) {
12059
					if ($row['arrival_airport_icao'] == $closestAirports[0]['icao']) {
12060
						$airport_icao = $closestAirports[0]['icao'];
12061
						if ($globalDebug) echo "\o/ 1st ---++ Find arrival airport. airport_icao : ".$airport_icao."\n";
12062
					} elseif (count($closestAirports > 1) && $row['arrival_airport_icao'] != '' && $row['arrival_airport_icao'] != 'NA') {
12063
						foreach ($closestAirports as $airport) {
12064
							if ($row['arrival_airport_icao'] == $airport['icao']) {
12065
								$airport_icao = $airport['icao'];
12066
								if ($globalDebug) echo "\o/ try --++ Find arrival airport. airport_icao : ".$airport_icao."\n";
12067
								break;
12068
							}
12069
						}
12070
					} elseif ($row['last_altitude'] == 0 || ($row['last_altitude'] != '' && ($closestAirports[0]['altitude'] <= $row['last_altitude']*100+1000 && $row['last_altitude']*100 < $closestAirports[0]['altitude']+5000))) {
12071
						$airport_icao = $closestAirports[0]['icao'];
12072
						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";
12073
					} else {
12074
						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";
12075
					}
12076
				} else {
12077
					if ($globalDebug) echo "----- No Airport near last coord. Latitude : ".$row['last_latitude'].' - Longitude : '.$row['last_longitude'].' - MinDist : '.$globalClosestMinDist."\n";
12078
				}
12079
				if ($row['real_arrival_airport_icao'] != $airport_icao) {
12080
					if ($globalDebug) echo "Updating airport to ".$airport_icao."...\n";
12081
					$update_query="UPDATE spotter_output SET real_arrival_airport_icao = :airport_icao WHERE spotter_id = :spotter_id";
12082
					$sthu = $this->db->prepare($update_query);
12083
					$sthu->execute(array(':airport_icao' => $airport_icao,':spotter_id' => $row['spotter_id']));
12084
				}
12085
			}
12086
		}
12087
	}
12088
	
12089
	public function closestAirports($origLat,$origLon,$dist = 10) {
12090
		global $globalDBdriver;
12091
		$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
12092
/*
12093
		$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 
12094
                      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)) 
12095
                      having distance < $dist ORDER BY distance limit 100;";
12096
*/
12097
		if ($globalDBdriver == 'mysql') {
12098
			$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 
12099
	                      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)) 
12100
	                      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;";
12101
                } else {
12102
			$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 
12103
	                      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)) 
12104
	                      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;";
12105
    		}
12106
		$sth = $this->db->prepare($query);
12107
		$sth->execute();
12108
		return $sth->fetchAll(PDO::FETCH_ASSOC);
12109
	}
12110
}
12111
/*
12112
$Spotter = new Spotter();
12113
print_r($Spotter->closestAirports('-19.9813','-47.8286',10));
12114
*/
12115
/*
12116
$Spotter = new Spotter();
12117
$da = $Spotter->countAllDetectedArrivalAirports(true,0,'',true);
12118
$aa = $Spotter->countAllArrivalAirports(true,0,'',true);
12119
print_r($da);
12120
print_r($aa);
12121
print_r(array_merge($da,$aa));
12122
*/
12123
?>