Completed
Push — master ( cc50d0...0f8c33 )
by Yannick
09:46
created

Spotter::countAllDetectedArrivalAirports()   F

Complexity

Conditions 14
Paths 1458

Size

Total Lines 74
Code Lines 54

Duplication

Lines 0
Ratio 0 %

Importance

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

How to fix   Long Method    Complexity    Many Parameters   

Long Method

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

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

Commonly applied refactorings include:

Many Parameters

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

There are several approaches to avoid long parameter lists:

1
<?php
2
require_once(dirname(__FILE__).'/class.Scheduler.php');
3
require_once(dirname(__FILE__).'/class.ACARS.php');
4
require_once(dirname(__FILE__).'/class.Image.php');
5
$global_query = "SELECT spotter_output.* FROM spotter_output";
6
7
class Spotter{
8
	public $aircraft_correct_icaotype = array('CL64' => 'CL60',
9
					'F9LX' => 'F900',
10
					'K35T' => 'K35R',
11
					'F5EX' => 'FA50',
12
					'G102' => 'GLID',
13
					'LJ36' => 'LJ35',
14
					'G500' => 'EGRT',
15
					'A300' => 'A30B',
16
					'ROT' => 'B77W',
17
					'BPN' => 'B772',
18
					'0011' => 'B77W',
19
					'F9DX' => 'F900',
20
					'B757' => 'B752',
21
					'4/05' => 'A332',
22
					'F/A3' => 'A320',
23
					'F2EX' => 'F2TH',
24
					'EA55' => 'EA50',
25
					'B73B' => 'B737',
26
					'G450' => 'GLF4',
27
					'H25X' => 'H25B',
28
					'E175' => 'E75S',
29
					'B777' => 'B77W',
30
					'F2LX' => 'F2TH',
31
					'CL65' => 'CL60',
32
					'A380' => 'A388',
33
					'G550' => 'GLF5',
34
					'F9EX' => 'F900',
35
					'E195' => 'E190',
36
					'H750' => 'H25B',
37
					'B747' => 'B744',
38
					'B767' => 'B763',
39
					'PA39' => 'PA30',
40
					'H900' => 'H25B',
41
					'AN74' => 'AN72',
42
					'CL85' => 'CRJ2',
43
					'G400' => 'GLF4',
44
					'CL61' => 'CL60',
45
					'F2TS' => 'F2TH',
46
					'Z602' => 'CH60',
47
					'G100' => 'ASTR');
48
49
50
	public $db;
51
	
52
	public function __construct($dbc = null) {
53
		$Connection = new Connection($dbc);
54
		$this->db = $Connection->db();
55
	}
56
57
	/**
58
	* Get SQL query part for filter used
59
	* @param Array $filter the filter
60
	* @return Array the SQL part
61
	*/
62
	public function getFilter($filter = array(),$where = false,$and = false) {
63
		global $globalFilter, $globalStatsFilters, $globalFilterName, $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 && 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
				} else $image_array = $Image->getSpotterImage($temp_array['registration']);
422
				if (count($image_array) > 0) {
423
					$temp_array['image'] = $image_array[0]['image'];
424
					$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
425
					$temp_array['image_source'] = $image_array[0]['image_source'];
426
					$temp_array['image_source_website'] = $image_array[0]['image_source_website'];
427
					if ($temp_array['image_source_website'] == '' && $temp_array['image_source'] == 'planespotters') {
428
						$planespotter_url_array = explode("_", $temp_array['image']);
429
						$planespotter_id = str_replace(".jpg", "", $planespotter_url_array[1]);
430
						$temp_array['image_source_website'] = 'http://www.planespotters.net/Aviation_Photos/photo.show?id='.$planespotter_id;
431
					 }
432
					$temp_array['image_copyright'] = $image_array[0]['image_copyright'];
433
				}
434
			}
435
436
437
			if (isset($row['departure_airport_time']) && $row['departure_airport_time'] != '') {
438
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
439
			}
440
			if (isset($row['arrival_airport_time']) && $row['arrival_airport_time'] != '') {
441
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
442
			}
443
			
444
			if ((!isset($globalIVAO) || ! $globalIVAO) && (!isset($globalVATSIM) || !$globalVATSIM) && (!isset($globalphpVMS) || !$globalphpVMS) && (!isset($globalVAM) || !$globalVAM)) {
445
				if ($schedules === true) {
446
					$schedule_array = $Schedule->getSchedule($temp_array['ident']);
447
					//print_r($schedule_array);
448
					if (count($schedule_array) > 0) {
449
						if ($schedule_array['departure_airport_icao'] != '') {
450
							$row['departure_airport_icao'] = $schedule_array['departure_airport_icao'];
451
							$temp_array['departure_airport'] = $row['departure_airport_icao'];
452
						}
453
						if ($schedule_array['arrival_airport_icao'] != '') {
454
							$row['arrival_airport_icao'] = $schedule_array['arrival_airport_icao'];
455
							$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
456
						}
457
						$temp_array['departure_airport_time'] = $schedule_array['departure_airport_time'];
458
						$temp_array['arrival_airport_time'] = $schedule_array['arrival_airport_time'];
459
					}
460
				}
461
			} else {
462
				if (isset($row['real_departure_airport_time']) && $row['real_departure_airport_time'] != '') {
463
					$temp_array['departure_airport_time'] = $row['real_departure_airport_time'];
464
				}
465
				if (isset($row['real_arrival_airport_time']) && $row['real_arrival_airport_time'] != '') {
466
					$temp_array['real_arrival_airport_time'] = $row['real_arrival_airport_time'];
467
				}
468
			}
469
			
470
			//if ($row['departure_airport_icao'] != '' && $row['departure_airport_name'] == '') {
471
			if ($row['departure_airport_icao'] != '') {
472
				$departure_airport_array = $this->getAllAirportInfo($row['departure_airport_icao']);
473
				if (!isset($departure_airport_array[0]['name'])) $departure_airport_array = $this->getAllAirportInfo('NA');
474
			/*
475
			} elseif ($row['departure_airport_name'] != '') {
476
				$temp_array['departure_airport_name'] = $row['departure_airport_name'];
477
				$temp_array['departure_airport_city'] = $row['departure_airport_city'];
478
				$temp_array['departure_airport_country'] = $row['departure_airport_country'];
479
				$temp_array['departure_airport_icao'] = $row['departure_airport_icao'];
480
			*/
481
			} else $departure_airport_array = $this->getAllAirportInfo('NA');
482
			if (isset($departure_airport_array[0]['name'])) {
483
				$temp_array['departure_airport_name'] = $departure_airport_array[0]['name'];
484
				$temp_array['departure_airport_city'] = $departure_airport_array[0]['city'];
485
				$temp_array['departure_airport_country'] = $departure_airport_array[0]['country'];
486
				$temp_array['departure_airport_iata'] = $departure_airport_array[0]['iata'];
487
				$temp_array['departure_airport_icao'] = $departure_airport_array[0]['icao'];
488
				$temp_array['departure_airport_latitude'] = $departure_airport_array[0]['latitude'];
489
				$temp_array['departure_airport_longitude'] = $departure_airport_array[0]['longitude'];
490
				$temp_array['departure_airport_altitude'] = $departure_airport_array[0]['altitude'];
491
			}
492
493
			/*
494
			if (isset($row['departure_airport_time'])) {
495
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
496
			}
497
			*/
498
			
499
			if ($row['arrival_airport_icao'] != '') {
500
				$arrival_airport_array = $this->getAllAirportInfo($row['arrival_airport_icao']);
501
				if (count($arrival_airport_array) == 0) $arrival_airport_array = $this->getAllAirportInfo('NA');
502
			} else $arrival_airport_array = $this->getAllAirportInfo('NA');
503
			if (isset($arrival_airport_array[0]['name'])) {
504
				$temp_array['arrival_airport_name'] = $arrival_airport_array[0]['name'];
505
				$temp_array['arrival_airport_city'] = $arrival_airport_array[0]['city'];
506
				$temp_array['arrival_airport_country'] = $arrival_airport_array[0]['country'];
507
				$temp_array['arrival_airport_iata'] = $arrival_airport_array[0]['iata'];
508
				$temp_array['arrival_airport_icao'] = $arrival_airport_array[0]['icao'];
509
				$temp_array['arrival_airport_latitude'] = $arrival_airport_array[0]['latitude'];
510
				$temp_array['arrival_airport_longitude'] = $arrival_airport_array[0]['longitude'];
511
				$temp_array['arrival_airport_altitude'] = $arrival_airport_array[0]['altitude'];
512
			}
513
			/*
514
			if (isset($row['arrival_airport_time'])) {
515
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
516
			}
517
			*/
518
			if (isset($row['pilot_id']) && $row['pilot_id'] != '') $temp_array['pilot_id'] = $row['pilot_id'];
519
			if (isset($row['pilot_name']) && $row['pilot_name'] != '') $temp_array['pilot_name'] = $row['pilot_name'];
520
			if (isset($row['source_name']) && $row['source_name'] != '') $temp_array['source_name'] = $row['source_name'];
521
			if (isset($row['over_country']) && $row['over_country'] != '') $temp_array['over_country'] = $row['over_country'];
522
			if (isset($row['distance']) && $row['distance'] != '') $temp_array['distance'] = $row['distance'];
523
			if (isset($row['squawk'])) {
524
				$temp_array['squawk'] = $row['squawk'];
525
				if ($row['squawk'] != '' && isset($temp_array['country_iso2'])) {
526
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['country_iso2']);
527
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
528
				} elseif ($row['squawk'] != '' && isset($temp_array['over_country'])) {
529
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['over_country']);
530
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
531
				} elseif ($row['squawk'] != '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
532
			}
533
    			
534
			$temp_array['query_number_rows'] = $num_rows;
535
			
536
			$spotter_array[] = $temp_array;
537
		}
538
		if ($num_rows == 0) return array();
539
		$spotter_array[0]['query_number_rows'] = $num_rows;
540
		return $spotter_array;
541
	}	
542
	
543
	
544
	/**
545
	* Gets all the spotter information
546
	*
547
	* @return Array the spotter information
548
	*
549
	*/
550
	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())
551
	{
552
		global $globalTimezone, $globalDBdriver;
553
		require_once(dirname(__FILE__).'/class.Translation.php');
554
		$Translation = new Translation();
555
556
		date_default_timezone_set('UTC');
557
558
		$query_values = array();
559
		$additional_query = '';
560
		$filter_query = $this->getFilter($filters,true,true);
561
		if ($q != "")
562
		{
563
			if (!is_string($q))
564
			{
565
				return false;
566
			} else {
567
				$q_array = explode(" ", $q);
568
				foreach ($q_array as $q_item){
569
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
570
					$additional_query .= " AND (";
571
					if (is_int($q_item)) $additional_query .= "(spotter_output.spotter_id like '%".$q_item."%') OR ";
572
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
573
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
574
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
575
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
576
					$additional_query .= "(spotter_output.airline_name like '%".$q_item."%') OR ";
577
					$additional_query .= "(spotter_output.airline_country like '%".$q_item."%') OR ";
578
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
579
					$additional_query .= "(spotter_output.departure_airport_name like '%".$q_item."%') OR ";
580
					$additional_query .= "(spotter_output.departure_airport_city like '%".$q_item."%') OR ";
581
					$additional_query .= "(spotter_output.departure_airport_country like '%".$q_item."%') OR ";
582
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
583
					$additional_query .= "(spotter_output.arrival_airport_name like '%".$q_item."%') OR ";
584
					$additional_query .= "(spotter_output.arrival_airport_city like '%".$q_item."%') OR ";
585
					$additional_query .= "(spotter_output.arrival_airport_country like '%".$q_item."%') OR ";
586
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
587
					$additional_query .= "(spotter_output.owner_name like '%".$q_item."%') OR ";
588
					$additional_query .= "(spotter_output.pilot_id like '%".$q_item."%') OR ";
589
					$additional_query .= "(spotter_output.pilot_name like '%".$q_item."%') OR ";
590
					$additional_query .= "(spotter_output.ident like '%".$q_item."%') OR ";
591
					$translate = $Translation->ident2icao($q_item);
592
					if ($translate != $q_item) $additional_query .= "(spotter_output.ident like '%".$translate."%') OR ";
593
					$additional_query .= "(spotter_output.highlight like '%".$q_item."%')";
594
					$additional_query .= ")";
595
				}
596
			}
597
		}
598
599
		if ($registration != "")
600
		{
601
			$registration = filter_var($registration,FILTER_SANITIZE_STRING);
602
			if (!is_string($registration))
603
			{
604
				return false;
605
			} else {
606
				$additional_query .= " AND spotter_output.registration = :registration";
607
				$query_values = array_merge($query_values,array(':registration' => $registration));
608
			}
609
		}
610
611
		if ($aircraft_icao != "")
612
		{
613
			$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
614
			if (!is_string($aircraft_icao))
615
			{
616
				return false;
617
			} else {
618
				$additional_query .= " AND spotter_output.aircraft_icao = :aircraft_icao";
619
				$query_values = array_merge($query_values,array(':aircraft_icao' => $aircraft_icao));
620
			}
621
		}
622
623
		if ($aircraft_manufacturer != "")
624
		{
625
			$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
626
			if (!is_string($aircraft_manufacturer))
627
			{
628
				return false;
629
			} else {
630
				$additional_query .= " AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer";
631
				$query_values = array_merge($query_values,array(':aircraft_manufacturer' => $aircraft_manufacturer));
632
			}
633
		}
634
635
		if ($highlights == "true")
636
		{
637
			if (!is_string($highlights))
638
			{
639
				return false;
640
			} else {
641
				$additional_query .= " AND (spotter_output.highlight <> '')";
642
			}
643
		}
644
645
		if ($airline_icao != "")
646
		{
647
			$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
648
			if (!is_string($airline_icao))
649
			{
650
				return false;
651
			} else {
652
				$additional_query .= " AND spotter_output.airline_icao = :airline_icao";
653
				$query_values = array_merge($query_values,array(':airline_icao' => $airline_icao));
654
			}
655
		}
656
657
		if ($airline_country != "")
658
		{
659
			$airline_country = filter_var($airline_country,FILTER_SANITIZE_STRING);
660
			if (!is_string($airline_country))
661
			{
662
				return false;
663
			} else {
664
				$additional_query .= " AND spotter_output.airline_country = :airline_country";
665
				$query_values = array_merge($query_values,array(':airline_country' => $airline_country));
666
			}
667
		}
668
669
		if ($airline_type != "")
670
		{
671
			if (!is_string($airline_type))
672
			{
673
				return false;
674
			} else {
675
				if ($airline_type == "passenger")
676
				{
677
					$additional_query .= " AND (spotter_output.airline_type = 'passenger')";
678
				}
679
				if ($airline_type == "cargo")
680
				{
681
					$additional_query .= " AND (spotter_output.airline_type = 'cargo')";
682
				}
683
				if ($airline_type == "military")
684
				{
685
					$additional_query .= " AND (spotter_output.airline_type = 'military')";
686
				}
687
			}
688
		}
689
690
		if ($airport != "")
691
		{
692
			$airport = filter_var($airport,FILTER_SANITIZE_STRING);
693
			if (!is_string($airport))
694
			{
695
				return false;
696
			} else {
697
				$additional_query .= " AND (spotter_output.departure_airport_icao = :airport OR spotter_output.arrival_airport_icao = :airport)";
698
				$query_values = array_merge($query_values,array(':airport' => $airport));
699
			}
700
		}
701
702
		if ($airport_country != "")
703
		{
704
			$airport_country = filter_var($airport_country,FILTER_SANITIZE_STRING);
705
			if (!is_string($airport_country))
706
			{
707
				return false;
708
			} else {
709
				$additional_query .= " AND (spotter_output.departure_airport_country = :airport_country OR spotter_output.arrival_airport_country = :airport_country)";
710
				$query_values = array_merge($query_values,array(':airport_country' => $airport_country));
711
			}
712
		}
713
    
714
		if ($callsign != "")
715
		{
716
			$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
717
			if (!is_string($callsign))
718
			{
719
				return false;
720
			} else {
721
				$translate = $Translation->ident2icao($callsign);
722
				if ($translate != $callsign) {
723
					$additional_query .= " AND (spotter_output.ident = :callsign OR spotter_output.ident = :translate)";
724
					$query_values = array_merge($query_values,array(':callsign' => $callsign,':translate' => $translate));
725
				} else {
726
					$additional_query .= " AND spotter_output.ident = :callsign";
727
					$query_values = array_merge($query_values,array(':callsign' => $callsign));
728
				}
729
			}
730
		}
731
732
		if ($owner != "")
733
		{
734
			$owner = filter_var($owner,FILTER_SANITIZE_STRING);
735
			if (!is_string($owner))
736
			{
737
				return false;
738
			} else {
739
				$additional_query .= " AND spotter_output.owner_name = :owner";
740
				$query_values = array_merge($query_values,array(':owner' => $owner));
741
			}
742
		}
743
744
		if ($pilot_name != "")
745
		{
746
			$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
747
			if (!is_string($pilot_name))
748
			{
749
				return false;
750
			} else {
751
				$additional_query .= " AND spotter_output.pilot_name = :pilot_name";
752
				$query_values = array_merge($query_values,array(':pilot_name' => $pilot_name));
753
			}
754
		}
755
756
		if ($pilot_id != "")
757
		{
758
			$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_STRING);
759
			if (!is_string($pilot_id))
760
			{
761
				return false;
762
			} else {
763
				$additional_query .= " AND spotter_output.pilot_id = :pilot_id";
764
				$query_values = array_merge($query_values,array(':pilot_id' => $pilot_id));
765
			}
766
		}
767
768
		if ($departure_airport_route != "")
769
		{
770
			$departure_airport_route = filter_var($departure_airport_route,FILTER_SANITIZE_STRING);
771
			if (!is_string($departure_airport_route))
772
			{
773
				return false;
774
			} else {
775
				$additional_query .= " AND spotter_output.departure_airport_icao = :departure_airport_route";
776
				$query_values = array_merge($query_values,array(':departure_airport_route' => $departure_airport_route));
777
			}
778
		}
779
780
		if ($arrival_airport_route != "")
781
		{
782
			$arrival_airport_route = filter_var($arrival_airport_route,FILTER_SANITIZE_STRING);
783
			if (!is_string($arrival_airport_route))
784
			{
785
				return false;
786
			} else {
787
				$additional_query .= " AND spotter_output.arrival_airport_icao = :arrival_airport_route";
788
				$query_values = array_merge($query_values,array(':arrival_airport_route' => $arrival_airport_route));
789
			}
790
		}
791
792
		if ($altitude != "")
793
		{
794
			$altitude_array = explode(",", $altitude);
795
			$altitude_array[0] = filter_var($altitude_array[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
796
			$altitude_array[1] = filter_var($altitude_array[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
797
798
			if ($altitude_array[1] != "")
799
			{                
800
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
801
				$altitude_array[1] = substr($altitude_array[1], 0, -2);
802
				$additional_query .= " AND altitude BETWEEN '".$altitude_array[0]."' AND '".$altitude_array[1]."' ";
803
			} else {
804
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
805
				$additional_query .= " AND altitude <= '".$altitude_array[0]."' ";
806
			}
807
		}
808
809
		if ($date_posted != "")
810
		{
811
			$date_array = explode(",", $date_posted);
812
			$date_array[0] = filter_var($date_array[0],FILTER_SANITIZE_STRING);
813
			$date_array[1] = filter_var($date_array[1],FILTER_SANITIZE_STRING);
814
815
			if ($globalTimezone != '') {
816
				date_default_timezone_set($globalTimezone);
817
				$datetime = new DateTime();
818
				$offset = $datetime->format('P');
819
			} else $offset = '+00:00';
820
821
			if ($date_array[1] != "")
822
			{
823
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
824
				$date_array[1] = date("Y-m-d H:i:s", strtotime($date_array[1]));
825
				if ($globalDBdriver == 'mysql') {
826
					$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]."' ";
827
				} else {
828
					$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]."' ";
829
				}
830
			} else {
831
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
832
				if ($globalDBdriver == 'mysql') {
833
					$additional_query .= " AND TIMESTAMP(CONVERT_TZ(spotter_output.date,'+00:00', '".$offset."')) >= '".$date_array[0]."' ";
834
				} else {
835
					$additional_query .= " AND CAST(spotter_output.date AT TIME ZONE INTERVAL ".$offset." AS TIMESTAMP) >= '".$date_array[0]."' ";
836
				}
837
			}
838
		}
839
840
		if ($limit != "")
841
		{
842
			$limit_array = explode(",", $limit);
843
			
844
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
845
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
846
			
847
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
848
			{
849
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
850
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
851
			} else $limit_query = "";
852
		} else $limit_query = "";
853
854
855
		if ($sort != "")
856
		{
857
			$search_orderby_array = $this->getOrderBy();
858
			$orderby_query = $search_orderby_array[$sort]['sql'];
859
		} else {
860
			if ($origLat != "" && $origLon != "" && $dist != "") {
861
				$orderby_query = " ORDER BY distance ASC";
862
			} else {
863
				$orderby_query = " ORDER BY spotter_output.date DESC";
864
			}
865
		}
866
867
		if ($includegeodata == "true")
868
		{
869
			$additional_query .= " AND spotter_output.waypoints <> ''";
870
		}
871
872
873
		if ($origLat != "" && $origLon != "" && $dist != "") {
874
			$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
875
876
			if ($globalDBdriver == 'mysql') {
877
				$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 
878
						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)) 
879
						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;
880
			} else {
881
				$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 
882
						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)) 
883
						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;
884
			}
885
		} else {		
886
			$query  = "SELECT spotter_output.* FROM spotter_output".$filter_query." spotter_output.ident <> '' 
887
					".$additional_query."
888
					".$orderby_query;
889
		}
890
		$spotter_array = $this->getDataFromDB($query, $query_values,$limit_query);
891
		return $spotter_array;
892
	}
893
	
894
	
895
	/**
896
	* Gets all the spotter information based on the latest data entry
897
	*
898
	* @return Array the spotter information
899
	*
900
	*/
901
	public function getLatestSpotterData($limit = '', $sort = '', $filter = array())
902
	{
903
		global $global_query;
904
		
905
		date_default_timezone_set('UTC');
906
907
		$filter_query = $this->getFilter($filter);
908
		
909
		if ($limit != "")
910
		{
911
			$limit_array = explode(",", $limit);
912
			
913
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
914
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
915
			
916
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
917
			{
918
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
919
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
920
			} else $limit_query = "";
921
		} else $limit_query = "";
922
		
923
		if ($sort != "")
924
		{
925
			$search_orderby_array = $this->getOrderBy();
926
			$orderby_query = $search_orderby_array[$sort]['sql'];
927
		} else {
928
			$orderby_query = " ORDER BY spotter_output.date DESC";
929
		}
930
931
		$query  = $global_query.$filter_query." ".$orderby_query;
932
933
		$spotter_array = $this->getDataFromDB($query, array(),$limit_query,true);
934
935
		return $spotter_array;
936
	}
937
    
938
    
939
    /**
940
	* Gets all the spotter information based on a user's latitude and longitude
941
	*
942
	* @return Array the spotter information
943
	*
944
	*/
945
	public function getLatestSpotterForLayar($lat, $lng, $radius, $interval)
946
	{
947
		date_default_timezone_set('UTC');
948
		$limit_query = '';
949
		if ($lat != "")
950
		{
951
			if (!is_numeric($lat))
952
			{
953
				return false;
954
			}
955
		}
956
        
957
		if ($lng != "")
958
		{
959
			if (!is_numeric($lng))
960
			{
961
				return false;
962
			}
963
		}
964
		
965
		if ($radius != "")
966
		{
967
			if (!is_numeric($radius))
968
			{
969
				return false;
970
			}
971
		}
972
    		$additional_query = '';
973
		if ($interval != "")
974
		{
975
			if (!is_string($interval))
976
			{
977
				return false;
978
			} else {
979
				if ($interval == "30m"){
980
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 MINUTE) <= $this_output.date ';
981
				} else if ($interval == "1h"){
982
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) <= $this_output.date ';
983
				} else if ($interval == "3h"){
984
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 3 HOUR) <= $this_output.date ';
985
				} else if ($interval == "6h"){
986
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 6 HOUR) <= $this_output.date ';
987
				} else if ($interval == "12h"){
988
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 12 HOUR) <= $this_output.date ';
989
				} else if ($interval == "24h"){
990
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 24 HOUR) <= $this_output.date ';
991
				} else if ($interval == "7d"){
992
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY) <= $this_output.date ';
993
				} else if ($interval == "30d"){
994
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 DAY) <= $this_output.date ';
995
				} 
996
			}
997
		}
998
999
		$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 
1000
                   WHERE spotter_output.latitude <> '' 
1001
				   AND spotter_output.longitude <> '' 
1002
                   ".$additional_query."
1003
                   HAVING distance < :radius  
1004
				   ORDER BY distance";
1005
1006
		$spotter_array = $this->getDataFromDB($query, array(':radius' => $radius),$limit_query);
1007
1008
		return $spotter_array;
1009
	}
1010
    
1011
    
1012
    /**
1013
	* Gets all the spotter information sorted by the newest aircraft type
1014
	*
1015
	* @return Array the spotter information
1016
	*
1017
	*/
1018
	public function getNewestSpotterDataSortedByAircraftType($limit = '', $sort = '',$filter = array())
1019
	{
1020
		global $global_query;
1021
		
1022
		date_default_timezone_set('UTC');
1023
1024
		$filter_query = $this->getFilter($filter,true,true);
1025
1026
		$limit_query = '';
1027
		if ($limit != "")
1028
		{
1029
			$limit_array = explode(",", $limit);
1030
			
1031
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1032
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1033
			
1034
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1035
			{
1036
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1037
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1038
			}
1039
		}
1040
		
1041
		if ($sort != "")
1042
		{
1043
			$search_orderby_array = $this->getOrderBy();
1044
			$orderby_query = $search_orderby_array[$sort]['sql'];
1045
		} else {
1046
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1047
		}
1048
1049
		$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;
1050
1051
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1052
1053
		return $spotter_array;
1054
	}
1055
    
1056
    
1057
	/**
1058
	* Gets all the spotter information sorted by the newest aircraft registration
1059
	*
1060
	* @return Array the spotter information
1061
	*
1062
	*/
1063
	public function getNewestSpotterDataSortedByAircraftRegistration($limit = '', $sort = '', $filter = array())
1064
	{
1065
		global $global_query;
1066
		
1067
		date_default_timezone_set('UTC');
1068
		$filter_query = $this->getFilter($filter,true,true);
1069
1070
		$limit_query = '';
1071
		if ($limit != "")
1072
		{
1073
			$limit_array = explode(",", $limit);
1074
			
1075
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1076
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1077
			
1078
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1079
			{
1080
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1081
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1082
			}
1083
		}
1084
		
1085
		if ($sort != "")
1086
		{
1087
			$search_orderby_array = $this->getOrderBy();
1088
			$orderby_query = $search_orderby_array[$sort]['sql'];
1089
		} else {
1090
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1091
		}
1092
1093
		$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;
1094
1095
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1096
1097
		return $spotter_array;
1098
	}
1099
1100
1101
	/**
1102
	* Gets all the spotter information sorted by the newest airline
1103
	*
1104
	* @return Array the spotter information
1105
	*
1106
	*/
1107
	public function getNewestSpotterDataSortedByAirline($limit = '', $sort = '',$filter = array())
1108
	{
1109
		global $global_query;
1110
		
1111
		date_default_timezone_set('UTC');
1112
		$filter_query = $this->getFilter($filter,true,true);
1113
		
1114
		$limit_query = '';
1115
		if ($limit != "")
1116
		{
1117
			$limit_array = explode(",", $limit);
1118
			
1119
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1120
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1121
			
1122
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1123
			{
1124
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1125
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1126
			}
1127
		}
1128
		
1129
		if ($sort != "")
1130
		{
1131
			$search_orderby_array = $this->getOrderBy();
1132
			$orderby_query = $search_orderby_array[$sort]['sql'];
1133
		} else {
1134
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1135
		}
1136
1137
		$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;
1138
1139
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1140
1141
		return $spotter_array;
1142
	}
1143
    
1144
    
1145
    /**
1146
	* Gets all the spotter information sorted by the newest departure airport
1147
	*
1148
	* @return Array the spotter information
1149
	*
1150
	*/
1151
	public function getNewestSpotterDataSortedByDepartureAirport($limit = '', $sort = '', $filter = array())
1152
	{
1153
		global $global_query;
1154
		
1155
		date_default_timezone_set('UTC');
1156
		
1157
		$filter_query = $this->getFilter($filter,true,true);
1158
		
1159
		$limit_query = '';
1160
		
1161
		if ($limit != "")
1162
		{
1163
			$limit_array = explode(",", $limit);
1164
			
1165
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1166
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1167
			
1168
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1169
			{
1170
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1171
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1172
			}
1173
		}
1174
		
1175
		if ($sort != "")
1176
		{
1177
			$search_orderby_array = $this->getOrderBy();
1178
			$orderby_query = $search_orderby_array[$sort]['sql'];
1179
		} else {
1180
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1181
		}
1182
1183
		$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;
1184
1185
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1186
1187
		return $spotter_array;
1188
	}
1189
1190
1191
	/**
1192
	* Gets all the spotter information sorted by the newest arrival airport
1193
	*
1194
	* @return Array the spotter information
1195
	*
1196
	*/
1197
	public function getNewestSpotterDataSortedByArrivalAirport($limit = '', $sort = '', $filter = array())
1198
	{
1199
		global $global_query;
1200
		
1201
		date_default_timezone_set('UTC');
1202
		$filter_query = $this->getFilter($filter,true,true);
1203
		$limit_query = '';
1204
		if ($limit != "")
1205
		{
1206
			$limit_array = explode(",", $limit);
1207
			
1208
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1209
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1210
			
1211
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1212
			{
1213
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1214
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1215
			}
1216
		}
1217
		
1218
		if ($sort != "")
1219
		{
1220
			$search_orderby_array = $this->getOrderBy();
1221
			$orderby_query = $search_orderby_array[$sort]['sql'];
1222
		} else {
1223
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1224
		}
1225
1226
		$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;
1227
1228
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1229
1230
		return $spotter_array;
1231
	}
1232
	
1233
1234
	/**
1235
	* Gets all the spotter information based on the spotter id
1236
	*
1237
	* @return Array the spotter information
1238
	*
1239
	*/
1240
	public function getSpotterDataByID($id = '')
1241
	{
1242
		global $global_query;
1243
		
1244
		date_default_timezone_set('UTC');
1245
		if ($id == '') return array();
1246
		$additional_query = "spotter_output.spotter_id = :id";
1247
		$query_values = array(':id' => $id);
1248
1249
		//$query  = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ";
1250
		$query  = $global_query." WHERE ".$additional_query." ";
1251
1252
		$spotter_array = $this->getDataFromDB($query,$query_values);
1253
1254
		return $spotter_array;
1255
	}
1256
1257
	
1258
	
1259
	
1260
	/**
1261
	* Gets all the spotter information based on the callsign
1262
	*
1263
	* @return Array the spotter information
1264
	*
1265
	*/
1266
	public function getSpotterDataByIdent($ident = '', $limit = '', $sort = '', $filter = array())
1267
	{
1268
		global $global_query;
1269
		
1270
		date_default_timezone_set('UTC');
1271
		
1272
		$query_values = array();
1273
		$limit_query = '';
1274
		$additional_query = '';
1275
		$filter_query = $this->getFilter($filter,true,true);
1276
		if ($ident != "")
1277
		{
1278
			if (!is_string($ident))
1279
			{
1280
				return false;
1281
			} else {
1282
				$additional_query = " AND (spotter_output.ident = :ident)";
1283
				$query_values = array(':ident' => $ident);
1284
			}
1285
		}
1286
		
1287
		if ($limit != "")
1288
		{
1289
			$limit_array = explode(",", $limit);
1290
			
1291
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1292
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1293
			
1294
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1295
			{
1296
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1297
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1298
			}
1299
		}
1300
1301
		if ($sort != "")
1302
		{
1303
			$search_orderby_array = $this->getOrderBy();
1304
			$orderby_query = $search_orderby_array[$sort]['sql'];
1305
		} else {
1306
			$orderby_query = " ORDER BY spotter_output.date DESC";
1307
		}
1308
1309
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1310
1311
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1312
1313
		return $spotter_array;
1314
	}
1315
	
1316
	/**
1317
	* Gets all the spotter information based on the owner
1318
	*
1319
	* @return Array the spotter information
1320
	*
1321
	*/
1322
	public function getSpotterDataByOwner($owner = '', $limit = '', $sort = '', $filter = array())
1323
	{
1324
		global $global_query;
1325
		
1326
		date_default_timezone_set('UTC');
1327
		
1328
		$query_values = array();
1329
		$limit_query = '';
1330
		$additional_query = '';
1331
		$filter_query = $this->getFilter($filter,true,true);
1332
		if ($owner != "")
1333
		{
1334
			if (!is_string($owner))
1335
			{
1336
				return false;
1337
			} else {
1338
				$additional_query = " AND (spotter_output.owner_name = :owner)";
1339
				$query_values = array(':owner' => $owner);
1340
			}
1341
		}
1342
		
1343
		if ($limit != "")
1344
		{
1345
			$limit_array = explode(",", $limit);
1346
			
1347
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1348
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1349
			
1350
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1351
			{
1352
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1353
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1354
			}
1355
		}
1356
1357
		if ($sort != "")
1358
		{
1359
			$search_orderby_array = $this->getOrderBy();
1360
			if (isset($search_orderby_array[$sort]['sql'])) $orderby_query = $search_orderby_array[$sort]['sql'];
1361
			else $orderby_query = " ORDER BY spotter_output.date DESC";
1362
		} else {
1363
			$orderby_query = " ORDER BY spotter_output.date DESC";
1364
		}
1365
1366
		$query = $global_query.$filter_query." spotter_output.owner_name <> '' ".$additional_query." ".$orderby_query;
1367
1368
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1369
1370
		return $spotter_array;
1371
	}
1372
	
1373
	/**
1374
	* Gets all the spotter information based on the pilot
1375
	*
1376
	* @return Array the spotter information
1377
	*
1378
	*/
1379
	public function getSpotterDataByPilot($pilot = '', $limit = '', $sort = '', $filter = array())
1380
	{
1381
		global $global_query;
1382
		
1383
		date_default_timezone_set('UTC');
1384
		
1385
		$query_values = array();
1386
		$limit_query = '';
1387
		$additional_query = '';
1388
		$filter_query = $this->getFilter($filter,true,true);
1389
		if ($pilot != "")
1390
		{
1391
			$additional_query = " AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot)";
1392
			$query_values = array(':pilot' => $pilot);
1393
		}
1394
		
1395
		if ($limit != "")
1396
		{
1397
			$limit_array = explode(",", $limit);
1398
			
1399
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1400
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1401
			
1402
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1403
			{
1404
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1405
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1406
			}
1407
		}
1408
1409
		if ($sort != "")
1410
		{
1411
			$search_orderby_array = $this->getOrderBy();
1412
			$orderby_query = $search_orderby_array[$sort]['sql'];
1413
		} else {
1414
			$orderby_query = " ORDER BY spotter_output.date DESC";
1415
		}
1416
1417
		$query = $global_query.$filter_query." spotter_output.pilot_name <> '' ".$additional_query." ".$orderby_query;
1418
1419
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1420
1421
		return $spotter_array;
1422
	}
1423
	
1424
	
1425
	
1426
	/**
1427
	* Gets all the spotter information based on the aircraft type
1428
	*
1429
	* @return Array the spotter information
1430
	*
1431
	*/
1432
	public function getSpotterDataByAircraft($aircraft_type = '', $limit = '', $sort = '', $filter = array())
1433
	{
1434
		global $global_query;
1435
		
1436
		date_default_timezone_set('UTC');
1437
		
1438
		$query_values = array();
1439
		$limit_query = '';
1440
		$additional_query = '';
1441
		$filter_query = $this->getFilter($filter,true,true);
1442
		
1443
		if ($aircraft_type != "")
1444
		{
1445
			if (!is_string($aircraft_type))
1446
			{
1447
				return false;
1448
			} else {
1449
				$additional_query = " AND (spotter_output.aircraft_icao = :aircraft_type)";
1450
				$query_values = array(':aircraft_type' => $aircraft_type);
1451
			}
1452
		}
1453
		
1454
		if ($limit != "")
1455
		{
1456
			$limit_array = explode(",", $limit);
1457
			
1458
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1459
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1460
			
1461
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1462
			{
1463
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1464
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1465
			}
1466
		}
1467
1468
		if ($sort != "")
1469
		{
1470
			$search_orderby_array = $this->getOrderBy();
1471
			$orderby_query = $search_orderby_array[$sort]['sql'];
1472
		} else {
1473
			$orderby_query = " ORDER BY spotter_output.date DESC";
1474
		}
1475
1476
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1477
1478
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1479
1480
		return $spotter_array;
1481
	}
1482
	
1483
	
1484
	/**
1485
	* Gets all the spotter information based on the aircraft registration
1486
	*
1487
	* @return Array the spotter information
1488
	*
1489
	*/
1490
	public function getSpotterDataByRegistration($registration = '', $limit = '', $sort = '', $filter = array())
1491
	{
1492
		global $global_query;
1493
		
1494
		date_default_timezone_set('UTC');
1495
		
1496
		$query_values = array();
1497
		$limit_query = '';
1498
		$additional_query = '';
1499
		
1500
		if ($registration != "")
1501
		{
1502
			if (!is_string($registration))
1503
			{
1504
				return false;
1505
			} else {
1506
				$additional_query = " (spotter_output.registration = :registration)";
1507
				$query_values = array(':registration' => $registration);
1508
			}
1509
		}
1510
		
1511
		if ($limit != "")
1512
		{
1513
			$limit_array = explode(",", $limit);
1514
			
1515
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1516
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1517
			
1518
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1519
			{
1520
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1521
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1522
			}
1523
		}
1524
1525
		if ($sort != "")
1526
		{
1527
			$search_orderby_array = $this->getOrderBy();
1528
			$orderby_query = $search_orderby_array[$sort]['sql'];
1529
		} else {
1530
			$orderby_query = " ORDER BY spotter_output.date DESC";
1531
		}
1532
		$filter_query = $this->getFilter($filter,true,true);
1533
1534
		//$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1535
		$query = $global_query.$filter_query." ".$additional_query." ".$orderby_query;
1536
1537
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1538
1539
		return $spotter_array;
1540
	}
1541
1542
	
1543
	
1544
	
1545
	/**
1546
	* Gets all the spotter information based on the airline
1547
	*
1548
	* @return Array the spotter information
1549
	*
1550
	*/
1551
	public function getSpotterDataByAirline($airline = '', $limit = '', $sort = '',$filters = array())
1552
	{
1553
		global $global_query;
1554
		
1555
		date_default_timezone_set('UTC');
1556
1557
		$query_values = array();
1558
		$limit_query = '';
1559
		$additional_query = '';
1560
		$filter_query = $this->getFilter($filters,true,true);
1561
		
1562
		if ($airline != "")
1563
		{
1564
			if (!is_string($airline))
1565
			{
1566
				return false;
1567
			} else {
1568
				$additional_query = " AND (spotter_output.airline_icao = :airline)";
1569
				$query_values = array(':airline' => $airline);
1570
			}
1571
		}
1572
		
1573
		if ($limit != "")
1574
		{
1575
			$limit_array = explode(",", $limit);
1576
			
1577
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1578
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1579
			
1580
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1581
			{
1582
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1583
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1584
			}
1585
		}
1586
		
1587
		if ($sort != "")
1588
		{
1589
			$search_orderby_array = $this->getOrderBy();
1590
			$orderby_query = $search_orderby_array[$sort]['sql'];
1591
		} else {
1592
			$orderby_query = " ORDER BY spotter_output.date DESC";
1593
		}
1594
1595
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1596
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1597
1598
		return $spotter_array;
1599
	}
1600
	
1601
	
1602
	/**
1603
	* Gets all the spotter information based on the airport
1604
	*
1605
	* @return Array the spotter information
1606
	*
1607
	*/
1608
	public function getSpotterDataByAirport($airport = '', $limit = '', $sort = '',$filters = array())
1609
	{
1610
		global $global_query;
1611
		
1612
		date_default_timezone_set('UTC');
1613
		$query_values = array();
1614
		$limit_query = '';
1615
		$additional_query = '';
1616
		$filter_query = $this->getFilter($filters,true,true);
1617
		
1618
		if ($airport != "")
1619
		{
1620
			if (!is_string($airport))
1621
			{
1622
				return false;
1623
			} else {
1624
				$additional_query .= " AND ((spotter_output.departure_airport_icao = :airport) OR (spotter_output.arrival_airport_icao = :airport))";
1625
				$query_values = array(':airport' => $airport);
1626
			}
1627
		}
1628
		
1629
		if ($limit != "")
1630
		{
1631
			$limit_array = explode(",", $limit);
1632
			
1633
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1634
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1635
			
1636
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1637
			{
1638
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1639
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1640
			}
1641
		}
1642
		
1643
		if ($sort != "")
1644
		{
1645
			$search_orderby_array = $this->getOrderBy();
1646
			$orderby_query = $search_orderby_array[$sort]['sql'];
1647
		} else {
1648
			$orderby_query = " ORDER BY spotter_output.date DESC";
1649
		}
1650
1651
		$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;
1652
1653
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1654
1655
		return $spotter_array;
1656
	}
1657
1658
1659
1660
	/**
1661
	* Gets all the spotter information based on the date
1662
	*
1663
	* @return Array the spotter information
1664
	*
1665
	*/
1666
	public function getSpotterDataByDate($date = '', $limit = '', $sort = '',$filter = array())
1667
	{
1668
		global $global_query, $globalTimezone, $globalDBdriver;
1669
		
1670
		$query_values = array();
1671
		$limit_query = '';
1672
		$additional_query = '';
1673
1674
		$filter_query = $this->getFilter($filter,true,true);
1675
		
1676
		if ($date != "")
1677
		{
1678
			if ($globalTimezone != '') {
1679
				date_default_timezone_set($globalTimezone);
1680
				$datetime = new DateTime($date);
1681
				$offset = $datetime->format('P');
1682
			} else {
1683
				date_default_timezone_set('UTC');
1684
				$datetime = new DateTime($date);
1685
				$offset = '+00:00';
1686
			}
1687
			if ($globalDBdriver == 'mysql') {
1688
				$additional_query = " AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date ";
1689
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':offset' => $offset);
1690
			} elseif ($globalDBdriver == 'pgsql') {
1691
				//$globalTimezone = 'UTC';
1692
				$additional_query = " AND to_char(spotter_output.date AT TIME ZONE :timezone,'YYYY-mm-dd') = :date ";
1693
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':timezone' => $globalTimezone);
1694
				//$additional_query = " AND to_char(spotter_output.date,'YYYY-mm-dd') = :date ";
1695
				//$query_values = array(':date' => $datetime->format('Y-m-d'));
1696
			}
1697
		}
1698
		
1699
		if ($limit != "")
1700
		{
1701
			$limit_array = explode(",", $limit);
1702
			
1703
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1704
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1705
			
1706
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1707
			{
1708
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1709
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1710
			}
1711
		}
1712
1713
		if ($sort != "")
1714
		{
1715
			$search_orderby_array = $this->getOrderBy();
1716
			$orderby_query = $search_orderby_array[$sort]['sql'];
1717
		} else {
1718
			$orderby_query = " ORDER BY spotter_output.date DESC";
1719
		}
1720
1721
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query.$orderby_query;
1722
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1723
		return $spotter_array;
1724
	}
1725
1726
1727
1728
	/**
1729
	* Gets all the spotter information based on the country name
1730
	*
1731
	* @return Array the spotter information
1732
	*
1733
	*/
1734
	public function getSpotterDataByCountry($country = '', $limit = '', $sort = '',$filters = array())
1735
	{
1736
		global $global_query;
1737
		
1738
		date_default_timezone_set('UTC');
1739
		
1740
		$query_values = array();
1741
		$limit_query = '';
1742
		$additional_query = '';
1743
		$filter_query = $this->getFilter($filters,true,true);
1744
		if ($country != "")
1745
		{
1746
			if (!is_string($country))
1747
			{
1748
				return false;
1749
			} else {
1750
				$additional_query .= " AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country))";
1751
				$additional_query .= " OR spotter_output.airline_country = :country";
1752
				$query_values = array(':country' => $country);
1753
			}
1754
		}
1755
		
1756
		if ($limit != "")
1757
		{
1758
			$limit_array = explode(",", $limit);
1759
			
1760
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1761
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1762
			
1763
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1764
			{
1765
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1766
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1767
			}
1768
		}
1769
					
1770
		if ($sort != "")
1771
		{
1772
			$search_orderby_array = $this->getOrderBy();
1773
			$orderby_query = $search_orderby_array[$sort]['sql'];
1774
		} else {
1775
			$orderby_query = " ORDER BY spotter_output.date DESC";
1776
		}
1777
1778
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1779
1780
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1781
1782
		return $spotter_array;
1783
	}	
1784
	
1785
	
1786
	/**
1787
	* Gets all the spotter information based on the manufacturer name
1788
	*
1789
	* @return Array the spotter information
1790
	*
1791
	*/
1792
	public function getSpotterDataByManufacturer($aircraft_manufacturer = '', $limit = '', $sort = '', $filters = array())
1793
	{
1794
		global $global_query;
1795
		
1796
		date_default_timezone_set('UTC');
1797
		
1798
		$query_values = array();
1799
		$additional_query = '';
1800
		$limit_query = '';
1801
		$filter_query = $this->getFilter($filters,true,true);
1802
		
1803
		if ($aircraft_manufacturer != "")
1804
		{
1805
			if (!is_string($aircraft_manufacturer))
1806
			{
1807
				return false;
1808
			} else {
1809
				$additional_query .= " AND (spotter_output.aircraft_manufacturer = :aircraft_manufacturer)";
1810
				$query_values = array(':aircraft_manufacturer' => $aircraft_manufacturer);
1811
			}
1812
		}
1813
		
1814
		if ($limit != "")
1815
		{
1816
			$limit_array = explode(",", $limit);
1817
			
1818
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1819
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1820
			
1821
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1822
			{
1823
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1824
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1825
			}
1826
		}
1827
1828
		if ($sort != "")
1829
		{
1830
			$search_orderby_array = $this->getOrderBy();
1831
			$orderby_query = $search_orderby_array[$sort]['sql'];
1832
		} else {
1833
			$orderby_query = " ORDER BY spotter_output.date DESC";
1834
		}
1835
1836
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1837
1838
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1839
1840
		return $spotter_array;
1841
	}
1842
1843
1844
  
1845
  
1846
	/**
1847
	* Gets a list of all aircraft that take a route
1848
	*
1849
	* @param String $departure_airport_icao ICAO code of departure airport
1850
	* @param String $arrival_airport_icao ICAO code of arrival airport
1851
	* @return Array the spotter information
1852
	*
1853
	*/
1854
	public function getSpotterDataByRoute($departure_airport_icao = '', $arrival_airport_icao = '', $limit = '', $sort = '', $filters = array())
1855
	{
1856
		global $global_query;
1857
		
1858
		$query_values = array();
1859
		$additional_query = '';
1860
		$limit_query = '';
1861
		$filter_query = $this->getFilter($filters,true,true);
1862
		if ($departure_airport_icao != "")
1863
		{
1864
			if (!is_string($departure_airport_icao))
1865
			{
1866
				return false;
1867
			} else {
1868
				$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
1869
				$additional_query .= " AND (spotter_output.departure_airport_icao = :departure_airport_icao)";
1870
				//$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";
1871
				$query_values = array(':departure_airport_icao' => $departure_airport_icao);
1872
			}
1873
		}
1874
		
1875
		if ($arrival_airport_icao != "")
1876
		{
1877
			if (!is_string($arrival_airport_icao))
1878
			{
1879
				return false;
1880
			} else {
1881
				$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
1882
				$additional_query .= " AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)";
1883
				//$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)";
1884
				$query_values = array_merge($query_values,array(':arrival_airport_icao' => $arrival_airport_icao));
1885
			}
1886
		}
1887
		
1888
		if ($limit != "")
1889
		{
1890
			$limit_array = explode(",", $limit);
1891
			
1892
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1893
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1894
			
1895
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1896
			{
1897
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1898
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1899
			}
1900
		}
1901
	
1902
		if ($sort != "")
1903
		{
1904
			$search_orderby_array = $this->getOrderBy();
1905
			$orderby_query = $search_orderby_array[$sort]['sql'];
1906
		} else {
1907
			$orderby_query = " ORDER BY spotter_output.date DESC";
1908
		}
1909
1910
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1911
          
1912
		//$result = mysqli_query($GLOBALS["___mysqli_ston"], $query);
1913
1914
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1915
1916
		return $spotter_array;
1917
	}
1918
	
1919
	
1920
	
1921
	/**
1922
	* Gets all the spotter information based on the special column in the table
1923
	*
1924
	* @return Array the spotter information
1925
	*
1926
	*/
1927
	public function getSpotterDataByHighlight($limit = '', $sort = '', $filter = array())
1928
	{
1929
		global $global_query;
1930
		
1931
		date_default_timezone_set('UTC');
1932
		$filter_query = $this->getFilter($filter,true,true);
1933
		$limit_query = '';
1934
		
1935
		if ($limit != "")
1936
		{
1937
			$limit_array = explode(",", $limit);
1938
			
1939
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1940
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1941
			
1942
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1943
			{
1944
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1945
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1946
			}
1947
		}
1948
		
1949
		if ($sort != "")
1950
		{
1951
			$search_orderby_array = $this->getOrderBy();
1952
			$orderby_query = $search_orderby_array[$sort]['sql'];
1953
		} else {
1954
			$orderby_query = " ORDER BY spotter_output.date DESC";
1955
		}
1956
1957
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' ".$orderby_query;
1958
1959
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1960
1961
		return $spotter_array;
1962
	}
1963
1964
	/**
1965
	* Gets all the highlight based on a aircraft registration
1966
	*
1967
	* @return String the highlight text
1968
	*
1969
	*/
1970
	public function getHighlightByRegistration($registration,$filter = array())
1971
	{
1972
		global $global_query;
1973
		
1974
		date_default_timezone_set('UTC');
1975
		$filter_query = $this->getFilter($filter,true,true);
1976
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
1977
		
1978
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' AND spotter_output.registration = :registration";
1979
		$sth = $this->db->prepare($query);
1980
		$sth->execute(array(':registration' => $registration));
1981
1982
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1983
		{
1984
			$highlight = $row['highlight'];
1985
		}
1986
		if (isset($highlight)) return $highlight;
1987
	}
1988
1989
	
1990
	/**
1991
	* Gets the squawk usage from squawk code
1992
	*
1993
	* @param String $squawk squawk code
1994
	* @param String $country country
1995
	* @return String usage
1996
	*
1997
	*/
1998
	public function getSquawkUsage($squawk = '',$country = 'FR')
1999
	{
2000
		
2001
		$squawk = filter_var($squawk,FILTER_SANITIZE_STRING);
2002
		$country = filter_var($country,FILTER_SANITIZE_STRING);
2003
2004
		$query  = "SELECT squawk.* FROM squawk WHERE squawk.code = :squawk AND squawk.country = :country LIMIT 1";
2005
		$query_values = array(':squawk' => ltrim($squawk,'0'), ':country' => $country);
2006
		
2007
		$sth = $this->db->prepare($query);
2008
		$sth->execute($query_values);
2009
    
2010
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2011
		$sth->closeCursor();
2012
		if (count($row) > 0) {
2013
			return $row['usage'];
2014
		} else return '';
2015
	}
2016
2017
	/**
2018
	* Gets the airport icao from the iata
2019
	*
2020
	* @param String $airport_iata the iata code of the airport
2021
	* @return String airport iata
2022
	*
2023
	*/
2024
	public function getAirportIcao($airport_iata = '')
2025
	{
2026
		
2027
		$airport_iata = filter_var($airport_iata,FILTER_SANITIZE_STRING);
2028
2029
		$query  = "SELECT airport.* FROM airport WHERE airport.iata = :airport LIMIT 1";
2030
		$query_values = array(':airport' => $airport_iata);
2031
		
2032
		$sth = $this->db->prepare($query);
2033
		$sth->execute($query_values);
2034
		
2035
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2036
		$sth->closeCursor();
2037
		if (count($row) > 0) {
2038
			return $row['icao'];
2039
		} else return '';
2040
	}
2041
2042
	/**
2043
	* Gets the airport distance
2044
	*
2045
	* @param String $airport_icao the icao code of the airport
2046
	* @param Float $latitude the latitude
2047
	* @param Float $longitude the longitude
2048
	* @return Float distance to the airport
2049
	*
2050
	*/
2051
	public function getAirportDistance($airport_icao,$latitude,$longitude)
2052
	{
2053
		
2054
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
2055
2056
		$query  = "SELECT airport.latitude, airport.longitude FROM airport WHERE airport.icao = :airport LIMIT 1";
2057
		$query_values = array(':airport' => $airport_icao);
2058
		$sth = $this->db->prepare($query);
2059
		$sth->execute($query_values);
2060
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2061
		$sth->closeCursor();
2062
		if (count($row) > 0) {
2063
			$airport_latitude = $row['latitude'];
2064
			$airport_longitude = $row['longitude'];
2065
			$Common = new Common();
2066
			return $Common->distance($latitude,$longitude,$airport_latitude,$airport_longitude);
2067
		} else return '';
2068
	}
2069
	
2070
	/**
2071
	* Gets the airport info based on the icao
2072
	*
2073
	* @param String $airport the icao code of the airport
2074
	* @return Array airport information
2075
	*
2076
	*/
2077
	public function getAllAirportInfo($airport = '')
2078
	{
2079
		
2080
		$airport = filter_var($airport,FILTER_SANITIZE_STRING);
2081
2082
		$query_values = array();
2083
		if ($airport == 'NA') {
2084
			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' => ''));
2085
		} elseif ($airport == '') {
2086
			$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";
2087
		} else {
2088
			$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";
2089
			$query_values = array(':airport' => $airport);
2090
		}
2091
		
2092
		$sth = $this->db->prepare($query);
2093
		$sth->execute($query_values);
2094
		/*
2095
		$airport_array = array();
2096
		$temp_array = array();
2097
		
2098
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2099
		{
2100
			$temp_array['name'] = $row['name'];
2101
			$temp_array['city'] = $row['city'];
2102
			$temp_array['country'] = $row['country'];
2103
			$temp_array['iata'] = $row['iata'];
2104
			$temp_array['icao'] = $row['icao'];
2105
			$temp_array['latitude'] = $row['latitude'];
2106
			$temp_array['longitude'] = $row['longitude'];
2107
			$temp_array['altitude'] = $row['altitude'];
2108
			$temp_array['home_link'] = $row['home_link'];
2109
			$temp_array['wikipedia_link'] = $row['wikipedia_link'];
2110
			$temp_array['image'] = $row['image'];
2111
			$temp_array['image_thumb'] = $row['image_thumb'];
2112
2113
			$airport_array[] = $temp_array;
2114
		}
2115
2116
		return $airport_array;
2117
		*/
2118
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2119
	}
2120
	
2121
	/**
2122
	* Gets the airport info based on the country
2123
	*
2124
	* @param Array $countries Airports countries
2125
	* @return Array airport information
2126
	*
2127
	*/
2128
	public function getAllAirportInfobyCountry($countries)
2129
	{
2130
		$lst_countries = '';
2131
		foreach ($countries as $country) {
2132
			$country = filter_var($country,FILTER_SANITIZE_STRING);
2133
			if ($lst_countries == '') {
2134
				$lst_countries = "'".$country."'";
2135
			} else {
2136
				$lst_countries .= ",'".$country."'";
2137
			}
2138
		}
2139
		$query  = "SELECT airport.* FROM airport WHERE airport.country IN (".$lst_countries.")";
2140
		
2141
		$sth = $this->db->prepare($query);
2142
		$sth->execute();
2143
    
2144
		$airport_array = array();
2145
		$temp_array = array();
2146
		
2147
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2148
		{
2149
			$temp_array['name'] = $row['name'];
2150
			$temp_array['city'] = $row['city'];
2151
			$temp_array['country'] = $row['country'];
2152
			$temp_array['iata'] = $row['iata'];
2153
			$temp_array['icao'] = $row['icao'];
2154
			$temp_array['latitude'] = $row['latitude'];
2155
			$temp_array['longitude'] = $row['longitude'];
2156
			$temp_array['altitude'] = $row['altitude'];
2157
2158
			$airport_array[] = $temp_array;
2159
		}
2160
2161
		return $airport_array;
2162
	}
2163
	
2164
	/**
2165
	* Gets airports info based on the coord
2166
	*
2167
	* @param Array $coord Airports longitude min,latitude min, longitude max, latitude max
2168
	* @return Array airport information
2169
	*
2170
	*/
2171
	public function getAllAirportInfobyCoord($coord)
2172
	{
2173
		global $globalDBdriver;
2174
		if (is_array($coord)) {
2175
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2176
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2177
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2178
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2179
		} else return array();
2180
		if ($globalDBdriver == 'mysql') {
2181
			$query  = "SELECT airport.* FROM airport WHERE airport.latitude BETWEEN ".$minlat." AND ".$maxlat." AND airport.longitude BETWEEN ".$minlong." AND ".$maxlong." AND airport.type != 'closed'";
2182
		} else {
2183
			$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'";
2184
		}
2185
		$sth = $this->db->prepare($query);
2186
		$sth->execute();
2187
    
2188
		$airport_array = array();
2189
		
2190
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2191
		{
2192
			$temp_array = $row;
2193
2194
			$airport_array[] = $temp_array;
2195
		}
2196
2197
		return $airport_array;
2198
	}
2199
2200
	/**
2201
	* Gets waypoints info based on the coord
2202
	*
2203
	* @param Array $coord waypoints coord
2204
	* @return Array airport information
2205
	*
2206
	*/
2207
	public function getAllWaypointsInfobyCoord($coord)
2208
	{
2209
		if (is_array($coord)) {
2210
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2211
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2212
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2213
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2214
		} else return array();
2215
		//$query  = "SELECT waypoints.* FROM waypoints WHERE waypoints.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_begin BETWEEN ".$minlong." AND ".$maxlong;
2216
		$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.")";
2217
		//$query  = "SELECT waypoints.* FROM waypoints";
2218
		//$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";
2219
		//$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;
2220
		//$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;
2221
		//echo $query;
2222
		
2223
		$sth = $this->db->prepare($query);
2224
		$sth->execute();
2225
    
2226
		$waypoints_array = array();
2227
		
2228
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2229
		{
2230
			$temp_array = $row;
2231
2232
			$waypoints_array[] = $temp_array;
2233
		}
2234
2235
		return $waypoints_array;
2236
	}
2237
	
2238
	
2239
	/**
2240
	* Gets the airline info based on the icao code or iata code
2241
	*
2242
	* @param String $airline_icao the iata code of the airport
2243
	* @return Array airport information
2244
	*
2245
	*/
2246
	public function getAllAirlineInfo($airline_icao, $fromsource = NULL)
2247
	{
2248
		global $globalUseRealAirlines;
2249
		if (isset($globalUseRealAirlines) && $globalUseRealAirlines) $fromsource = NULL;
2250
		$airline_icao = strtoupper(filter_var($airline_icao,FILTER_SANITIZE_STRING));
2251
		if ($airline_icao == 'NA') {
2252
			$airline_array = array();
2253
			$airline_array[] = array('name' => 'Not Available','iata' => 'NA', 'icao' => 'NA', 'callsign' => '', 'country' => 'NA', 'type' =>'');
2254
			return $airline_array;
2255
		} else {
2256
			if (strlen($airline_icao) == 2) {
2257
				if ($fromsource === NULL) {
2258
					$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";
2259
				} else {
2260
					$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";
2261
				}
2262
			} else {
2263
				if ($fromsource === NULL) {
2264
					$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";
2265
				} else {
2266
					$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";
2267
				}
2268
			}
2269
			
2270
			$sth = $this->db->prepare($query);
2271
			if ($fromsource === NULL) {
2272
				$sth->execute(array(':airline_icao' => $airline_icao));
2273
			} else {
2274
				$sth->execute(array(':airline_icao' => $airline_icao,':fromsource' => $fromsource));
2275
			}
2276
                        /*
2277
			$airline_array = array();
2278
			$temp_array = array();
2279
		
2280
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2281
			{
2282
				$temp_array['name'] = $row['name'];
2283
				$temp_array['iata'] = $row['iata'];
2284
				$temp_array['icao'] = $row['icao'];
2285
				$temp_array['callsign'] = $row['callsign'];
2286
				$temp_array['country'] = $row['country'];
2287
				$temp_array['type'] = $row['type'];
2288
				$airline_array[] = $temp_array;
2289
			}
2290
			return $airline_array;
2291
			*/
2292
			$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2293
			if (empty($result) && $fromsource !== NULL) {
2294
				/*
2295
				$query = 'SELECT COUNT(*) AS nb FROM airlines WHERE forsource = :fromsource';
2296
				$sth = $this->db->prepare($query);
2297
				$sth->execute(array(':fromsource' => $fromsource));
2298
				$row = $sth->fetch(PDO::FETCH_ASSOC);
2299
				$sth->closeCursor();
2300
				if ($row['nb'] == 0) $result = $this->getAllAirlineInfo($airline_icao);
2301
				*/
2302
				$result = $this->getAllAirlineInfo($airline_icao);
2303
			}
2304
			return $result;
2305
		}
2306
	}
2307
	
2308
	/**
2309
	* Gets the airline info based on the airline name
2310
	*
2311
	* @param String $airline_name the name of the airline
2312
	* @return Array airline information
2313
	*
2314
	*/
2315
	public function getAllAirlineInfoByName($airline_name, $fromsource = NULL)
2316
	{
2317
		global $globalUseRealAirlines;
2318
		if (isset($globalUseRealAirlines) && $globalUseRealAirlines) $fromsource = NULL;
2319
		$airline_name = strtolower(filter_var($airline_name,FILTER_SANITIZE_STRING));
2320
		$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";
2321
		$sth = $this->db->prepare($query);
2322
		if ($fromsource === NULL) {
2323
			$sth->execute(array(':airline_name' => $airline_name));
2324
		} else {
2325
			$sth->execute(array(':airline_name' => $airline_name,':fromsource' => $fromsource));
2326
		}
2327
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2328
		if (empty($result) && $fromsource !== NULL) {
2329
			$query = 'SELECT COUNT(*) AS nb FROM airlines WHERE forsource = :fromsource';
2330
			$sth = $this->db->prepare($query);
2331
			$sth->execute(array(':fromsource' => $fromsource));
2332
			$row = $sth->fetch(PDO::FETCH_ASSOC);
2333
			$sth->closeCursor();
2334
			if ($row['nb'] == 0) $result = $this->getAllAirlineInfoByName($airline_name);
2335
		}
2336
		return $result;
2337
	}
2338
	
2339
	
2340
	
2341
	/**
2342
	* Gets the aircraft info based on the aircraft type
2343
	*
2344
	* @param String $aircraft_type the aircraft type
2345
	* @return Array aircraft information
2346
	*
2347
	*/
2348
	public function getAllAircraftInfo($aircraft_type)
2349
	{
2350
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2351
2352
		if ($aircraft_type == 'NA') {
2353
			return array(array('icao' => 'NA','type' => 'Not Available', 'manufacturer' => 'Not Available', 'aircraft_shadow' => NULL));
2354
		}
2355
		$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";
2356
		
2357
		$sth = $this->db->prepare($query);
2358
		$sth->execute(array(':aircraft_type' => $aircraft_type));
2359
		/*
2360
		$aircraft_array = array();
2361
		$temp_array = array();
2362
		
2363
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2364
		{
2365
			$temp_array = array();
2366
			$temp_array['icao'] = $row['icao'];
2367
			$temp_array['type'] = $row['type'];
2368
			$temp_array['manufacturer'] = $row['manufacturer'];
2369
			$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
2370
2371
			$aircraft_array[] = $temp_array;
2372
		}
2373
		return $aircraft_array;
2374
		*/
2375
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2376
	}
2377
2378
	/**
2379
	* Gets the aircraft icao based on the aircraft name/type
2380
	*
2381
	* @param String $aircraft_type the aircraft type
2382
	* @return String aircraft information
2383
	*
2384
	*/
2385
	public function getAircraftIcao($aircraft_type)
2386
	{
2387
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2388
		$all_aircraft = array('737-300' => 'B733',
2389
				'777-200' => 'B772',
2390
				'777-200ER' => 'B772',
2391
				'777-300ER' => 'B77W',
2392
				'c172p' => 'C172',
2393
				'aerostar' => 'AEST',
2394
				'A320-211' => 'A320',
2395
				'747-8i' => 'B748',
2396
				'A380' => 'A388');
2397
		if (isset($all_aircraft[$aircraft_type])) return $all_aircraft[$aircraft_type];
2398
2399
		$query  = "SELECT aircraft.icao FROM aircraft WHERE aircraft.type LIKE :saircraft_type OR aircraft.type = :aircraft_type OR aircraft.icao = :aircraft_type LIMIT 1";
2400
		$aircraft_type = strtoupper($aircraft_type);
2401
		$sth = $this->db->prepare($query);
2402
		$sth->execute(array(':saircraft_type' => '%'.$aircraft_type.'%',':aircraft_type' => $aircraft_type,));
2403
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2404
		if (isset($result[0]['icao'])) return $result[0]['icao'];
2405
		else return '';
2406
	}
2407
	
2408
	/**
2409
	* Gets the aircraft info based on the aircraft modes
2410
	*
2411
	* @param String $aircraft_modes the aircraft ident (hex)
2412
	* @return String aircraft type
2413
	*
2414
	*/
2415
	public function getAllAircraftType($aircraft_modes,$source_type = '')
2416
	{
2417
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
2418
		$source_type = filter_var($source_type,FILTER_SANITIZE_STRING);
2419
2420
		if ($source_type == '' || $source_type == 'modes') {
2421
			$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";
2422
		} else {
2423
			$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";
2424
		}
2425
		
2426
		$sth = $this->db->prepare($query);
2427
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
2428
2429
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2430
		$sth->closeCursor();
2431
		if (isset($row['icaotypecode'])) {
2432
			$icao = $row['icaotypecode'];
2433
			if (isset($this->aircraft_correct_icaotype[$icao])) $icao = $this->aircraft_correct_icaotype[$icao];
2434
			return $icao;
2435
		} elseif ($source_type == 'flarm') {
2436
			return $this->getAllAircraftType($aircraft_modes);
2437
		} else  return '';
2438
	}
2439
2440
	/**
2441
	* Gets the aircraft info based on the aircraft registration
2442
	*
2443
	* @param String $registration the aircraft registration
2444
	* @return String aircraft type
2445
	*
2446
	*/
2447
	public function getAllAircraftTypeByRegistration($registration)
2448
	{
2449
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2450
2451
		$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.registration = :registration ORDER BY FirstCreated DESC LIMIT 1";
2452
		
2453
		$sth = $this->db->prepare($query);
2454
		$sth->execute(array(':registration' => $registration));
2455
2456
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2457
		$sth->closeCursor();
2458
		if (isset($row['icaotypecode'])) {
2459
			return $row['icaotypecode'];
2460
		} else return '';
2461
	}
2462
2463
	/**
2464
	* Gets the spotter_id and flightaware_id based on the aircraft registration
2465
	*
2466
	* @param String $registration the aircraft registration
2467
	* @return Array spotter_id and flightaware_id
2468
	*
2469
	*/
2470
	public function getAllIDByRegistration($registration)
2471
	{
2472
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2473
2474
		$query  = "SELECT spotter_id,flightaware_id, date FROM spotter_output WHERE spotter_output.registration = :registration";
2475
		
2476
		$sth = $this->db->prepare($query);
2477
		$sth->execute(array(':registration' => $registration));
2478
2479
		$idarray = array();
2480
		while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
2481
			$date = $row['date'];
2482
			$idarray[$date] = array('flightaware_id' => $row['flightaware_id'],'spotter_id' => $row['spotter_id']);
2483
		}
2484
		return $idarray;
2485
	}
2486
2487
	/**
2488
	* Gets correct aircraft operator code
2489
	*
2490
	* @param String $operator the aircraft operator code (callsign)
2491
	* @return String aircraft operator code
2492
	*
2493
	*/
2494
	public function getOperator($operator)
2495
	{
2496
		$operator = filter_var($operator,FILTER_SANITIZE_STRING);
2497
		$query  = "SELECT translation.operator_correct FROM translation WHERE translation.operator = :operator LIMIT 1";
2498
		
2499
		$sth = $this->db->prepare($query);
2500
		$sth->execute(array(':operator' => $operator));
2501
2502
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2503
		$sth->closeCursor();
2504
		if (isset($row['operator_correct'])) {
2505
			return $row['operator_correct'];
2506
		} else return $operator;
2507
	}
2508
2509
	/**
2510
	* Gets the aircraft route based on the aircraft callsign
2511
	*
2512
	* @param String $callsign the aircraft callsign
2513
	* @return Array aircraft type
2514
	*
2515
	*/
2516
	public function getRouteInfo($callsign)
2517
	{
2518
		$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
2519
                if ($callsign == '') return array();
2520
		$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";
2521
		
2522
		$sth = $this->db->prepare($query);
2523
		$sth->execute(array(':callsign' => $callsign));
2524
2525
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2526
		$sth->closeCursor();
2527
		if (count($row) > 0) {
2528
			return $row;
2529
		} else return array();
2530
	}
2531
	
2532
	/**
2533
	* Gets the aircraft info based on the aircraft registration
2534
	*
2535
	* @param String $registration the aircraft registration
2536
	* @return Array aircraft information
2537
	*
2538
	*/
2539
	public function getAircraftInfoByRegistration($registration)
2540
	{
2541
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2542
2543
		$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";
2544
		
2545
		$sth = $this->db->prepare($query);
2546
		$sth->execute(array(':registration' => $registration));
2547
2548
		$aircraft_array = array();
2549
		$temp_array = array();
2550
		
2551
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2552
		{
2553
			$temp_array['airline_icao'] = $row['airline_icao'];
2554
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2555
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2556
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2557
2558
			$aircraft_array[] = $temp_array;
2559
		}
2560
2561
		return $aircraft_array;
2562
	}
2563
	
2564
	/**
2565
	* Gets the aircraft owner & base based on the aircraft registration
2566
	*
2567
	* @param String $registration the aircraft registration
2568
	* @return Array aircraft information
2569
	*
2570
	*/
2571
	public function getAircraftOwnerByRegistration($registration)
2572
	{
2573
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2574
		$Connection = new Connection($this->db);
2575
		if ($Connection->tableExists('aircraft_owner')) {
2576
			$query  = "SELECT aircraft_owner.base, aircraft_owner.owner, aircraft_owner.date_first_reg FROM aircraft_owner WHERE registration = :registration LIMIT 1";
2577
			$sth = $this->db->prepare($query);
2578
			$sth->execute(array(':registration' => $registration));
2579
			$result = $sth->fetch(PDO::FETCH_ASSOC);
2580
			$sth->closeCursor();
2581
			return $result;
2582
		} else return array();
2583
	}
2584
	
2585
  
2586
  /**
2587
	* Gets all flights (but with only little info)
2588
	*
2589
	* @return Array basic flight information
2590
	*
2591
	*/
2592
	public function getAllFlightsforSitemap()
2593
	{
2594
		//$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 ";
2595
		$query  = "SELECT spotter_output.spotter_id FROM spotter_output ORDER BY spotter_id DESC LIMIT 200 OFFSET 0";
2596
		
2597
		$sth = $this->db->prepare($query);
2598
		$sth->execute();
2599
                  /*
2600
		$flight_array = array();
2601
		$temp_array = array();
2602
		
2603
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2604
		{
2605
			$temp_array['spotter_id'] = $row['spotter_id'];
2606
//			$temp_array['ident'] = $row['ident'];
2607
//			$temp_array['airline_name'] = $row['airline_name'];
2608
//			$temp_array['aircraft_type'] = $row['aircraft_icao'];
2609
//			$temp_array['aircraft_name'] = $row['aircraft_name'];
2610
			//$temp_array['image'] = $row['image'];
2611
2612
			$flight_array[] = $temp_array;
2613
		}
2614
2615
		return $flight_array;
2616
		*/
2617
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2618
	}
2619
  
2620
	/**
2621
	* Gets a list of all aircraft manufacturers
2622
	*
2623
	* @return Array list of aircraft types
2624
	*
2625
	*/
2626
	public function getAllManufacturers()
2627
	{
2628
		/*
2629
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer AS aircraft_manufacturer
2630
								FROM spotter_output
2631
								WHERE spotter_output.aircraft_manufacturer <> '' 
2632
								ORDER BY spotter_output.aircraft_manufacturer ASC";
2633
		  */
2634
		
2635
		$query = "SELECT DISTINCT manufacturer AS aircraft_manufacturer FROM aircraft WHERE manufacturer <> '' ORDER BY manufacturer ASC";
2636
		$sth = $this->db->prepare($query);
2637
		$sth->execute();
2638
2639
		$manufacturer_array = array();
2640
		$temp_array = array();
2641
		
2642
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2643
		{
2644
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2645
2646
			$manufacturer_array[] = $temp_array;
2647
		}
2648
2649
		return $manufacturer_array;
2650
	}
2651
  
2652
  
2653
  /**
2654
	* Gets a list of all aircraft types
2655
	*
2656
	* @return Array list of aircraft types
2657
	*
2658
	*/
2659
	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...
2660
	{
2661
		/*
2662
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao AS aircraft_icao, spotter_output.aircraft_name AS aircraft_name
2663
								FROM spotter_output  
2664
								WHERE spotter_output.aircraft_icao <> '' 
2665
								ORDER BY spotter_output.aircraft_name ASC";
2666
								
2667
		*/
2668
		//$filter_query = $this->getFilter($filters,true,true);
2669
		//$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";
2670
2671
		$query = "SELECT DISTINCT icao AS aircraft_icao, type AS aircraft_name, manufacturer AS aircraft_manufacturer FROM aircraft WHERE icao <> '' ORDER BY aircraft_manufacturer ASC";
2672
		
2673
		$sth = $this->db->prepare($query);
2674
		$sth->execute();
2675
2676
		$aircraft_array = array();
2677
		$temp_array = array();
2678
		
2679
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2680
		{
2681
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2682
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2683
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2684
2685
			$aircraft_array[] = $temp_array;
2686
		}
2687
2688
		return $aircraft_array;
2689
	}
2690
	
2691
	
2692
	/**
2693
	* Gets a list of all aircraft registrations
2694
	*
2695
	* @return Array list of aircraft registrations
2696
	*
2697
	*/
2698
	public function getAllAircraftRegistrations($filters = array())
2699
	{
2700
		$filter_query = $this->getFilter($filters,true,true);
2701
		$query  = "SELECT DISTINCT spotter_output.registration 
2702
				FROM spotter_output".$filter_query." spotter_output.registration <> '' 
2703
				ORDER BY spotter_output.registration ASC";
2704
2705
		$sth = $this->db->prepare($query);
2706
		$sth->execute();
2707
2708
		$aircraft_array = array();
2709
		$temp_array = array();
2710
		
2711
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2712
		{
2713
			$temp_array['registration'] = $row['registration'];
2714
2715
			$aircraft_array[] = $temp_array;
2716
		}
2717
2718
		return $aircraft_array;
2719
	}
2720
2721
	/**
2722
	* Gets all source name
2723
	*
2724
	* @param String type format of source
2725
	* @return Array list of source name
2726
	*
2727
	*/
2728
	public function getAllSourceName($type = '',$filters = array())
2729
	{
2730
		$filter_query = $this->getFilter($filters,true,true);
2731
		$query_values = array();
2732
		$query  = "SELECT DISTINCT spotter_output.source_name 
2733
				FROM spotter_output".$filter_query." spotter_output.source_name <> ''";
2734
		if ($type != '') {
2735
			$query_values = array(':type' => $type);
2736
			$query .= " AND format_source = :type";
2737
		}
2738
		$query .= " ORDER BY spotter_output.source_name ASC";
2739
2740
		$sth = $this->db->prepare($query);
2741
		if (!empty($query_values)) $sth->execute($query_values);
2742
		else $sth->execute();
2743
2744
		$source_array = array();
2745
		$temp_array = array();
2746
		
2747
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2748
		{
2749
			$temp_array['source_name'] = $row['source_name'];
2750
			$source_array[] = $temp_array;
2751
		}
2752
		return $source_array;
2753
	}
2754
2755
2756
2757
	/**
2758
	* Gets a list of all airline names
2759
	*
2760
	* @return Array list of airline names
2761
	*
2762
	*/
2763
	public function getAllAirlineNames($airline_type = '',$forsource = NULL,$filters = array())
2764
	{
2765
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2766
		$filter_query = $this->getFilter($filters,true,true);
2767
		$airline_type = filter_var($airline_type,FILTER_SANITIZE_STRING);
2768
		if ($airline_type == '' || $airline_type == 'all') {
2769
			/*
2770
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2771
								FROM spotter_output
2772
								WHERE spotter_output.airline_icao <> '' 
2773
								ORDER BY spotter_output.airline_name ASC";
2774
			*/
2775
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2776
			elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2777
			elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2778
			if ($forsource === NULL) {
2779
				$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";
2780
				$query_data = array();
2781
			} else {
2782
				$query = "SELECT DISTINCT icao AS airline_icao, name AS airline_name, type AS airline_type FROM airlines WHERE forsource = :forsource ORDER BY name ASC";
2783
				$query_data = array(':forsource' => $forsource);
2784
			}
2785
		} else {
2786
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2787
					FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
2788
					AND spotter_output.airline_type = :airline_type 
2789
					ORDER BY spotter_output.airline_icao ASC";
2790
			$query_data = array(':airline_type' => $airline_type);
2791
		}
2792
		
2793
		$sth = $this->db->prepare($query);
2794
		$sth->execute($query_data);
2795
    
2796
		$airline_array = array();
2797
		$temp_array = array();
2798
		
2799
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2800
		{
2801
			$temp_array['airline_icao'] = $row['airline_icao'];
2802
			$temp_array['airline_name'] = $row['airline_name'];
2803
			$temp_array['airline_type'] = $row['airline_type'];
2804
2805
			$airline_array[] = $temp_array;
2806
		}
2807
		return $airline_array;
2808
	}
2809
	
2810
	/**
2811
	* Gets a list of all alliance names
2812
	*
2813
	* @return Array list of alliance names
2814
	*
2815
	*/
2816
	public function getAllAllianceNames($forsource = NULL,$filters = array())
2817
	{
2818
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2819
		$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...
2820
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2821
		elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2822
		elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2823
		if ($forsource === NULL) {
2824
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND forsource IS NULL ORDER BY alliance ASC";
2825
			$query_data = array();
2826
		} else {
2827
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND  forsource = :forsource ORDER BY alliance ASC";
2828
			$query_data = array(':forsource' => $forsource);
2829
		}
2830
		
2831
		$sth = $this->db->prepare($query);
2832
		$sth->execute($query_data);
2833
    
2834
		$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...
2835
		$alliance_array = $sth->fetchAll(PDO::FETCH_ASSOC);
2836
		return $alliance_array;
2837
	}
2838
	
2839
	/**
2840
	* Gets a list of all airline countries
2841
	*
2842
	* @return Array list of airline countries
2843
	*
2844
	*/
2845
	public function getAllAirlineCountries($filters = array())
2846
	{
2847
		$filter_query = $this->getFilter($filters,true,true);
2848
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
2849
				FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
2850
				ORDER BY spotter_output.airline_country ASC";
2851
		
2852
		//$query = "SELECT DISTINCT country AS airline_country FROM airlines WHERE country <> '' AND active = 'Y' ORDER BY country ASC";
2853
		$sth = $this->db->prepare($query);
2854
		$sth->execute();
2855
2856
		$airline_array = array();
2857
		$temp_array = array();
2858
		
2859
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2860
		{
2861
			$temp_array['airline_country'] = $row['airline_country'];
2862
2863
			$airline_array[] = $temp_array;
2864
		}
2865
2866
		return $airline_array;
2867
	}
2868
2869
	
2870
	
2871
	/**
2872
	* Gets a list of all departure & arrival names
2873
	*
2874
	* @return Array list of airport names
2875
	*
2876
	*/
2877
	public function getAllAirportNames($filters = array())
2878
	{
2879
		$filter_query = $this->getFilter($filters,true,true);
2880
		$airport_array = array();
2881
		$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
2882
				FROM spotter_output".$filter_query." spotter_output.departure_airport_icao <> '' AND spotter_output.departure_airport_icao <> 'NA' 
2883
				ORDER BY spotter_output.departure_airport_city ASC";
2884
		
2885
		//$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";
2886
		$sth = $this->db->prepare($query);
2887
		$sth->execute();
2888
2889
		$temp_array = array();
2890
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2891
		{
2892
			$temp_array['airport_icao'] = $row['airport_icao'];
2893
			$temp_array['airport_name'] = $row['airport_name'];
2894
			$temp_array['airport_city'] = $row['airport_city'];
2895
			$temp_array['airport_country'] = $row['airport_country'];
2896
2897
			$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2898
		}
2899
2900
		$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
2901
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> '' AND spotter_output.arrival_airport_icao <> 'NA' 
2902
								ORDER BY spotter_output.arrival_airport_city ASC";
2903
					
2904
		$sth = $this->db->prepare($query);
2905
		$sth->execute();
2906
2907
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2908
			{
2909
		//	if ($airport_array[$row['airport_city'].",".$row['airport_name']]['airport_icao'] != $row['airport_icao'])
2910
		//	{
2911
				$temp_array['airport_icao'] = $row['airport_icao'];
2912
				$temp_array['airport_name'] = $row['airport_name'];
2913
				$temp_array['airport_city'] = $row['airport_city'];
2914
				$temp_array['airport_country'] = $row['airport_country'];
2915
				
2916
				$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2917
		//	}
2918
		}
2919
2920
		return $airport_array;
2921
	} 
2922
2923
	/**
2924
	* Gets a list of all owner names
2925
	*
2926
	* @return Array list of owner names
2927
	*
2928
	*/
2929
	public function getAllOwnerNames($filters = array())
2930
	{
2931
		$filter_query = $this->getFilter($filters,true,true);
2932
		$query  = "SELECT DISTINCT spotter_output.owner_name
2933
				FROM spotter_output".$filter_query." spotter_output.owner_name <> '' 
2934
				ORDER BY spotter_output.owner_name ASC";
2935
		
2936
		$sth = $this->db->prepare($query);
2937
		$sth->execute();
2938
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2939
	} 
2940
2941
	/**
2942
	* Gets a list of all pilot names and pilot ids
2943
	*
2944
	* @return Array list of pilot names and pilot ids
2945
	*
2946
	*/
2947
	public function getAllPilotNames($filters = array())
2948
	{
2949
		$filter_query = $this->getFilter($filters,true,true);
2950
		$query  = "SELECT DISTINCT spotter_output.pilot_name, spotter_output.pilot_id
2951
				FROM spotter_output".$filter_query." spotter_output.pilot_name <> '' 
2952
				ORDER BY spotter_output.pilot_name ASC";
2953
		
2954
		$sth = $this->db->prepare($query);
2955
		$sth->execute();
2956
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2957
	} 
2958
	
2959
	
2960
	/**
2961
	* Gets a list of all departure & arrival airport countries
2962
	*
2963
	* @return Array list of airport countries
2964
	*
2965
	*/
2966
	public function getAllAirportCountries($filters = array())
2967
	{
2968
		$airport_array = array();
2969
					
2970
		  /*
2971
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
2972
								FROM spotter_output
2973
								WHERE spotter_output.departure_airport_country <> '' 
2974
								ORDER BY spotter_output.departure_airport_country ASC";
2975
		*/
2976
		$query = "SELECT DISTINCT country AS airport_country FROM airport ORDER BY country ASC";
2977
		
2978
		$sth = $this->db->prepare($query);
2979
		$sth->execute();
2980
   
2981
		$temp_array = array();
2982
		
2983
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2984
		{
2985
			$temp_array['airport_country'] = $row['airport_country'];
2986
2987
			$airport_array[$row['airport_country']] = $temp_array;
2988
		}
2989
		$filter_query = $this->getFilter($filters,true,true);
2990
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
2991
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
2992
								ORDER BY spotter_output.arrival_airport_country ASC";
2993
					
2994
		$sth = $this->db->prepare($query);
2995
		$sth->execute();
2996
		
2997
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2998
		{
2999
			if (isset($airport_array[$row['airport_country']]['airport_country']) && $airport_array[$row['airport_country']]['airport_country'] != $row['airport_country'])
3000
			{
3001
				$temp_array['airport_country'] = $row['airport_country'];
3002
				$airport_array[$row['airport_country']] = $temp_array;
3003
			}
3004
		}
3005
3006
		return $airport_array;
3007
	} 
3008
	
3009
	
3010
	
3011
	
3012
	/**
3013
	* Gets a list of all countries (airline, departure airport & arrival airport)
3014
	*
3015
	* @return Array list of countries
3016
	*
3017
	*/
3018
	public function getAllCountries($filters = array())
3019
	{
3020
		$Connection= new Connection($this->db);
3021
		if ($Connection->tableExists('countries')) {
3022
			$query  = "SELECT countries.name AS airport_country
3023
				FROM countries
3024
				ORDER BY countries.name ASC";
3025
			$sth = $this->db->prepare($query);
3026
			$sth->execute();
3027
   
3028
			$temp_array = array();
3029
			$country_array = array();
3030
		
3031
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
3032
			{
3033
				$temp_array['country'] = $row['airport_country'];
3034
				$country_array[$row['airport_country']] = $temp_array;
3035
			}
3036
		} else {
3037
			$filter_query = $this->getFilter($filters,true,true);
3038
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
3039
								FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' 
3040
								ORDER BY spotter_output.departure_airport_country ASC";
3041
3042
			$sth = $this->db->prepare($query);
3043
			$sth->execute();
3044
   
3045
			$temp_array = array();
3046
			$country_array = array();
3047
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
3048
			{
3049
				$temp_array['country'] = $row['airport_country'];
3050
				$country_array[$row['airport_country']] = $temp_array;
3051
			}
3052
3053
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
3054
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
3055
								ORDER BY spotter_output.arrival_airport_country ASC";
3056
					
3057
		$sth = $this->db->prepare($query);
3058
		$sth->execute();
3059
		
3060
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3061
		{
3062
			if ($country_array[$row['airport_country']]['country'] != $row['airport_country'])
3063
			{
3064
				$temp_array['country'] = $row['airport_country'];
3065
				
3066
				$country_array[$row['country']] = $temp_array;
3067
			}
3068
		}
3069
		
3070
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
3071
								FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
3072
								ORDER BY spotter_output.airline_country ASC";
3073
					
3074
		$sth = $this->db->prepare($query);
3075
		$sth->execute();
3076
		
3077
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3078
		{
3079
			if (isset($country_array[$row['airline_country']]['country']) && $country_array[$row['airline_country']]['country'] != $row['airline_country'])
3080
			{
3081
				$temp_array['country'] = $row['airline_country'];
3082
				
3083
				$country_array[$row['country']] = $temp_array;
3084
			}
3085
		}
3086
		}  
3087
		return $country_array;
3088
	} 
3089
	
3090
	
3091
	
3092
	
3093
	/**
3094
	* Gets a list of all idents/callsigns
3095
	*
3096
	* @return Array list of ident/callsign names
3097
	*
3098
	*/
3099
	public function getAllIdents($filters = array())
3100
	{
3101
		$filter_query = $this->getFilter($filters,true,true);
3102
		$query  = "SELECT DISTINCT spotter_output.ident
3103
								FROM spotter_output".$filter_query." spotter_output.ident <> '' 
3104
								ORDER BY spotter_output.date ASC LIMIT 700 OFFSET 0";
3105
3106
		$sth = $this->db->prepare($query);
3107
		$sth->execute();
3108
    
3109
		$ident_array = array();
3110
		$temp_array = array();
3111
		
3112
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3113
		{
3114
			$temp_array['ident'] = $row['ident'];
3115
			$ident_array[] = $temp_array;
3116
		}
3117
3118
		return $ident_array;
3119
	}
3120
3121
	/**
3122
	* Get a list of flights from airport since 7 days
3123
	* @return Array number, icao, name and city of airports
3124
	*/
3125
3126
	public function getLast7DaysAirportsDeparture($airport_icao = '',$filters = array()) {
3127
		global $globalTimezone, $globalDBdriver;
3128
		$filter_query = $this->getFilter($filters,true,true);
3129
		if ($globalTimezone != '') {
3130
			date_default_timezone_set($globalTimezone);
3131
			$datetime = new DateTime();
3132
			$offset = $datetime->format('P');
3133
		} else $offset = '+00:00';
3134
		if ($airport_icao == '') {
3135
			if ($globalDBdriver == 'mysql') {
3136
				$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";
3137
			} else {
3138
				$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";
3139
			}
3140
			$sth = $this->db->prepare($query);
3141
			$sth->execute(array(':offset' => $offset));
3142
		} else {
3143
			if ($globalDBdriver == 'mysql') {
3144
				$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";
3145
			} else {
3146
				$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";
3147
			}
3148
			$sth = $this->db->prepare($query);
3149
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3150
		}
3151
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3152
	}
3153
3154
	/**
3155
	* Get a list of flights from airport since 7 days
3156
	* @return Array number, icao, name and city of airports
3157
	*/
3158
3159
	public function getLast7DaysAirportsDepartureByAirlines($airport_icao = '') {
3160
		global $globalTimezone, $globalDBdriver;
3161
		if ($globalTimezone != '') {
3162
			date_default_timezone_set($globalTimezone);
3163
			$datetime = new DateTime();
3164
			$offset = $datetime->format('P');
3165
		} else $offset = '+00:00';
3166
		if ($airport_icao == '') {
3167
			if ($globalDBdriver == 'mysql') {
3168
				$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";
3169
			} else {
3170
				$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";
3171
			}
3172
			$sth = $this->db->prepare($query);
3173
			$sth->execute(array(':offset' => $offset));
3174
		} else {
3175
			if ($globalDBdriver == 'mysql') {
3176
				$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";
3177
			} else {
3178
				$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";
3179
			}
3180
			$sth = $this->db->prepare($query);
3181
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3182
		}
3183
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3184
	}
3185
3186
	/**
3187
	* Get a list of flights from detected airport since 7 days
3188
	* @return Array number, icao, name and city of airports
3189
	*/
3190
3191
	public function getLast7DaysDetectedAirportsDeparture($airport_icao = '', $filters = array()) {
3192
		global $globalTimezone, $globalDBdriver;
3193
		$filter_query = $this->getFilter($filters,true,true);
3194
		if ($globalTimezone != '') {
3195
			date_default_timezone_set($globalTimezone);
3196
			$datetime = new DateTime();
3197
			$offset = $datetime->format('P');
3198
		} else $offset = '+00:00';
3199
		if ($airport_icao == '') {
3200
			if ($globalDBdriver == 'mysql') {
3201
				$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 
3202
				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 <> '' 
3203
				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";
3204
			} else {
3205
				$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 
3206
				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 <> '' 
3207
				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";
3208
			}
3209
			$sth = $this->db->prepare($query);
3210
			$sth->execute(array(':offset' => $offset));
3211
		} else {
3212
			if ($globalDBdriver == 'mysql') {
3213
				$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 
3214
				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 
3215
				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";
3216
			} else {
3217
				$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 
3218
				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";
3219
			}
3220
			$sth = $this->db->prepare($query);
3221
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3222
		}
3223
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3224
	}
3225
3226
	/**
3227
	* Get a list of flights from detected airport since 7 days
3228
	* @return Array number, icao, name and city of airports
3229
	*/
3230
3231
	public function getLast7DaysDetectedAirportsDepartureByAirlines($airport_icao = '') {
3232
		global $globalTimezone, $globalDBdriver;
3233
		if ($globalTimezone != '') {
3234
			date_default_timezone_set($globalTimezone);
3235
			$datetime = new DateTime();
3236
			$offset = $datetime->format('P');
3237
		} else $offset = '+00:00';
3238
		if ($airport_icao == '') {
3239
			if ($globalDBdriver == 'mysql') {
3240
				$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 
3241
				FROM `spotter_output`, airport 
3242
				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 <> '' 
3243
				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";
3244
			} else {
3245
				$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 
3246
				FROM spotter_output, airport 
3247
				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 <> '' 
3248
				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";
3249
			}
3250
			$sth = $this->db->prepare($query);
3251
			$sth->execute(array(':offset' => $offset));
3252
		} else {
3253
			if ($globalDBdriver == 'mysql') {
3254
				$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 
3255
				FROM `spotter_output`, airport 
3256
				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 
3257
				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";
3258
			} else {
3259
				$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 
3260
				FROM spotter_output, airport 
3261
				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";
3262
			}
3263
			$sth = $this->db->prepare($query);
3264
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3265
		}
3266
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3267
	}
3268
3269
3270
	/**
3271
	* Get a list of flights to airport since 7 days
3272
	* @return Array number, icao, name and city of airports
3273
	*/
3274
3275
	public function getLast7DaysAirportsArrival($airport_icao = '', $filters = array()) {
3276
		global $globalTimezone, $globalDBdriver;
3277
		$filter_query = $this->getFilter($filters,true,true);
3278
		if ($globalTimezone != '') {
3279
			date_default_timezone_set($globalTimezone);
3280
			$datetime = new DateTime();
3281
			$offset = $datetime->format('P');
3282
		} else $offset = '+00:00';
3283
		if ($airport_icao == '') {
3284
			if ($globalDBdriver == 'mysql') {
3285
				$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";
3286
			} else {
3287
				$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";
3288
			}
3289
			$sth = $this->db->prepare($query);
3290
			$sth->execute(array(':offset' => $offset));
3291
		} else {
3292
			if ($globalDBdriver == 'mysql') {
3293
				$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";
3294
			} else {
3295
				$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";
3296
			}
3297
			$sth = $this->db->prepare($query);
3298
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3299
		}
3300
		
3301
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3302
	}
3303
3304
3305
	/**
3306
	* Get a list of flights detected to airport since 7 days
3307
	* @return Array number, icao, name and city of airports
3308
	*/
3309
3310
	public function getLast7DaysDetectedAirportsArrival($airport_icao = '',$filters = array()) {
3311
		global $globalTimezone, $globalDBdriver;
3312
		$filter_query = $this->getFilter($filters,true,true);
3313
		if ($globalTimezone != '') {
3314
			date_default_timezone_set($globalTimezone);
3315
			$datetime = new DateTime();
3316
			$offset = $datetime->format('P');
3317
		} else $offset = '+00:00';
3318
		if ($airport_icao == '') {
3319
			if ($globalDBdriver == 'mysql') {
3320
				$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 
3321
				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 <> '' 
3322
				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";
3323
			} else {
3324
				$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 
3325
				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 <> '' 
3326
				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";
3327
			}
3328
			$sth = $this->db->prepare($query);
3329
			$sth->execute(array(':offset' => $offset));
3330
		} else {
3331
			if ($globalDBdriver == 'mysql') {
3332
				$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 
3333
				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 
3334
				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";
3335
			} else {
3336
				$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 
3337
				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 
3338
				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";
3339
			}
3340
			$sth = $this->db->prepare($query);
3341
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3342
		}
3343
		
3344
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3345
	}
3346
3347
3348
	/**
3349
	* Get a list of flights to airport since 7 days
3350
	* @return Array number, icao, name and city of airports
3351
	*/
3352
3353
	public function getLast7DaysAirportsArrivalByAirlines($airport_icao = '') {
3354
		global $globalTimezone, $globalDBdriver;
3355
		if ($globalTimezone != '') {
3356
			date_default_timezone_set($globalTimezone);
3357
			$datetime = new DateTime();
3358
			$offset = $datetime->format('P');
3359
		} else $offset = '+00:00';
3360
		if ($airport_icao == '') {
3361
			if ($globalDBdriver == 'mysql') {
3362
				$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";
3363
			} else {
3364
				$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";
3365
			}
3366
			$sth = $this->db->prepare($query);
3367
			$sth->execute(array(':offset' => $offset));
3368
		} else {
3369
			if ($globalDBdriver == 'mysql') {
3370
				$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";
3371
			} else {
3372
				$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";
3373
			}
3374
			$sth = $this->db->prepare($query);
3375
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3376
		}
3377
		
3378
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3379
	}
3380
3381
3382
	/**
3383
	* Get a list of flights detected to airport since 7 days
3384
	* @return Array number, icao, name and city of airports
3385
	*/
3386
3387
	public function getLast7DaysDetectedAirportsArrivalByAirlines($airport_icao = '') {
3388
		global $globalTimezone, $globalDBdriver;
3389
		if ($globalTimezone != '') {
3390
			date_default_timezone_set($globalTimezone);
3391
			$datetime = new DateTime();
3392
			$offset = $datetime->format('P');
3393
		} else $offset = '+00:00';
3394
		if ($airport_icao == '') {
3395
			if ($globalDBdriver == 'mysql') {
3396
				$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 
3397
				FROM `spotter_output`, airport 
3398
				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 <> '' 
3399
				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";
3400
			} else {
3401
				$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 
3402
				FROM spotter_output, airport 
3403
				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 <> '' 
3404
				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";
3405
			}
3406
			$sth = $this->db->prepare($query);
3407
			$sth->execute(array(':offset' => $offset));
3408
		} else {
3409
			if ($globalDBdriver == 'mysql') {
3410
				$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 
3411
				FROM `spotter_output`, airport 
3412
				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 
3413
				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";
3414
			} else {
3415
				$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 
3416
				FROM spotter_output, airport 
3417
				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 
3418
				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";
3419
			}
3420
			$sth = $this->db->prepare($query);
3421
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3422
		}
3423
		
3424
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3425
	}
3426
3427
3428
	/**
3429
	* Gets a list of all dates
3430
	*
3431
	* @return Array list of date names
3432
	*
3433
	*/
3434
	public function getAllDates()
3435
	{
3436
		global $globalTimezone, $globalDBdriver;
3437
		if ($globalTimezone != '') {
3438
			date_default_timezone_set($globalTimezone);
3439
			$datetime = new DateTime();
3440
			$offset = $datetime->format('P');
3441
		} else $offset = '+00:00';
3442
3443
		if ($globalDBdriver == 'mysql') {
3444
			$query  = "SELECT DISTINCT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) as date
3445
								FROM spotter_output
3446
								WHERE spotter_output.date <> '' 
3447
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3448
		} else {
3449
			$query  = "SELECT DISTINCT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date
3450
								FROM spotter_output
3451
								WHERE spotter_output.date <> '' 
3452
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3453
		}
3454
		
3455
		$sth = $this->db->prepare($query);
3456
		$sth->execute(array(':offset' => $offset));
3457
    
3458
		$date_array = array();
3459
		$temp_array = array();
3460
		
3461
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3462
		{
3463
			$temp_array['date'] = $row['date'];
3464
3465
			$date_array[] = $temp_array;
3466
		}
3467
3468
		return $date_array;
3469
	}
3470
	
3471
	
3472
	
3473
	/**
3474
	* Gets all route combinations
3475
	*
3476
	* @return Array the route list
3477
	*
3478
	*/
3479
	public function getAllRoutes()
3480
	{
3481
		$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 
3482
				FROM spotter_output
3483
				WHERE spotter_output.ident <> '' 
3484
				GROUP BY route
3485
				ORDER BY route ASC";
3486
3487
		$sth = $this->db->prepare($query);
3488
		$sth->execute();
3489
3490
		$routes_array = array();
3491
		$temp_array = array();
3492
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3493
		{
3494
			$temp_array['route'] = $row['route'];
3495
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
3496
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
3497
3498
			$routes_array[] = $temp_array;
3499
		}
3500
		return $routes_array;
3501
	}
3502
3503
	/**
3504
	* Update ident spotter data
3505
	*
3506
	* @param String $flightaware_id the ID from flightaware
3507
	* @param String $ident the flight ident
3508
	* @return String success or false
3509
	*
3510
	*/	
3511
	public function updateIdentSpotterData($flightaware_id = '', $ident = '',$fromsource = NULL)
3512
	{
3513
		if (!is_numeric(substr($ident, 0, 3)))
3514
		{
3515
			if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3516
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3517
			} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3518
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3519
			} else {
3520
				$airline_array = $this->getAllAirlineInfo("NA");
3521
			}
3522
			if (count($airline_array) == 0) {
3523
				$airline_array = $this->getAllAirlineInfo("NA");
3524
			}
3525
			if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3526
				$airline_array = $this->getAllAirlineInfo("NA");
3527
			}
3528
		} else {
3529
			$airline_array = $this->getAllAirlineInfo("NA");
3530
		}
3531
                $airline_name = $airline_array[0]['name'];
3532
                $airline_icao = $airline_array[0]['icao'];
3533
                $airline_country = $airline_array[0]['country'];
3534
                $airline_type = $airline_array[0]['type'];
3535
3536
3537
		$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';
3538
                $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);
3539
3540
		try {
3541
			$sth = $this->db->prepare($query);
3542
			$sth->execute($query_values);
3543
		} catch (PDOException $e) {
3544
			return "error : ".$e->getMessage();
3545
		}
3546
		
3547
		return "success";
3548
3549
	}
3550
	/**
3551
	* Update latest spotter data
3552
	*
3553
	* @param String $flightaware_id the ID from flightaware
3554
	* @param String $ident the flight ident
3555
	* @param String $arrival_airport_icao the arrival airport
3556
	* @return String success or false
3557
	*
3558
	*/	
3559
	public function updateLatestSpotterData($flightaware_id = '', $ident = '', $latitude = '', $longitude = '', $altitude = '', $ground = false, $groundspeed = NULL, $date = '', $arrival_airport_icao = '',$arrival_airport_time = '')
3560
	{
3561
		if ($groundspeed == '') $groundspeed = NULL;
3562
		$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';
3563
                $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);
3564
3565
		try {
3566
			$sth = $this->db->prepare($query);
3567
			$sth->execute($query_values);
3568
		} catch (PDOException $e) {
3569
			return "error : ".$e->getMessage();
3570
		}
3571
		
3572
		return "success";
3573
3574
	}
3575
3576
	/**
3577
	* Adds a new spotter data
3578
	*
3579
	* @param String $flightaware_id the ID from flightaware
3580
	* @param String $ident the flight ident
3581
	* @param String $aircraft_icao the aircraft type
3582
	* @param String $departure_airport_icao the departure airport
3583
	* @param String $arrival_airport_icao the arrival airport
3584
	* @param String $latitude latitude of flight
3585
	* @param String $longitude latitude of flight
3586
	* @param String $waypoints waypoints of flight
3587
	* @param String $altitude altitude of flight
3588
	* @param String $heading heading of flight
3589
	* @param String $groundspeed speed of flight
3590
	* @param String $date date of flight
3591
	* @param String $departure_airport_time departure time of flight
3592
	* @param String $arrival_airport_time arrival time of flight
3593
	* @param String $squawk squawk code of flight
3594
	* @param String $route_stop route stop of flight
3595
	* @param String $highlight highlight or not
3596
	* @param String $ModeS ModesS code of flight
3597
	* @param String $registration registration code of flight
3598
	* @param String $pilot_id pilot id of flight (for virtual airlines)
3599
	* @param String $pilot_name pilot name of flight (for virtual airlines)
3600
	* @param String $verticalrate vertival rate of flight
3601
	* @return String success or false
3602
	*/
3603
	public function addSpotterData($flightaware_id = '', $ident = '', $aircraft_icao = '', $departure_airport_icao = '', $arrival_airport_icao = '', $latitude = '', $longitude = '', $waypoints = '', $altitude = '', $heading = '', $groundspeed = '', $date = '', $departure_airport_time = '', $arrival_airport_time = '',$squawk = '', $route_stop = '', $highlight = '', $ModeS = '', $registration = '',$pilot_id = '', $pilot_name = '', $verticalrate = '', $ground = false,$format_source = '', $source_name = '',$source_type = '')
3604
	{
3605
		global $globalURL, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalDebugTimeElapsed, $globalAirlinesSource, $globalVAM;
3606
		
3607
		//if (isset($globalDebugTimeElapsed) || $globalDebugTimeElapsed == '') $globalDebugTimeElapsed = FALSE;
3608
		$Image = new Image($this->db);
3609
		$Common = new Common();
3610
		
3611
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
3612
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
3613
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
3614
		if (!isset($globalVAM)) $globalVAM = FALSE;
3615
		date_default_timezone_set('UTC');
3616
		
3617
		//getting the registration
3618
		if ($flightaware_id != "" && $registration == '')
3619
		{
3620
			if (!is_string($flightaware_id))
3621
			{
3622
				return false;
3623
			} else {
3624
				if ($ModeS != '') {
3625
					$timeelapsed = microtime(true);
3626
					$registration = $this->getAircraftRegistrationBymodeS($ModeS,$source_type);
3627
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3628
				} else {
3629
					$myhex = explode('-',$flightaware_id);
3630
					if (count($myhex) > 0) {
3631
						$timeelapsed = microtime(true);
3632
						$registration = $this->getAircraftRegistrationBymodeS($myhex[0],$source_type);
3633
						if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3634
					}
3635
				}
3636
			}
3637
		}
3638
		$fromsource = NULL;
3639
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
3640
		elseif ($format_source == 'vatsimtxt') $fromsource = 'vatsim';
3641
		elseif ($format_source == 'whazzup') $fromsource = 'ivao';
3642
		elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
3643
		elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
3644
		//getting the airline information
3645
		if ($ident != "")
3646
		{
3647
			if (!is_string($ident))
3648
			{
3649
				return false;
3650
			} else {
3651
				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'))
3652
				{
3653
					$timeelapsed = microtime(true);
3654
					if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3655
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3656
					} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3657
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3658
					} else {
3659
						$airline_array = $this->getAllAirlineInfo("NA");
3660
					}
3661
					if (count($airline_array) == 0) {
3662
						$airline_array = $this->getAllAirlineInfo("NA");
3663
					}
3664
					if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3665
						$airline_array = $this->getAllAirlineInfo("NA");
3666
					}
3667
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3668
3669
				} else {
3670
					$timeelapsed = microtime(true);
3671
					$airline_array = $this->getAllAirlineInfo("NA");
3672
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3673
				}
3674
			}
3675
		} else $airline_array = array();
3676
		
3677
		//getting the aircraft information
3678
		$aircraft_array = array();
3679
		if ($aircraft_icao != '')
3680
		{
3681
			if (!is_string($aircraft_icao))
3682
			{
3683
				return false;
3684
			} else {
3685
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3686
				{
3687
					$timeelapsed = microtime(true);
3688
					$aircraft_array = $this->getAllAircraftInfo("NA");
3689
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3690
				} else {
3691
					$timeelapsed = microtime(true);
3692
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3693
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3694
				}
3695
			}
3696
		} else {
3697
			if ($ModeS != '') {
3698
				$timeelapsed = microtime(true);
3699
				$aircraft_icao = $this->getAllAircraftType($ModeS,$source_type);
3700
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAircraftType : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3701
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3702
				{
3703
					$timeelapsed = microtime(true);
3704
					$aircraft_array = $this->getAllAircraftInfo("NA");
3705
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3706
				} else {
3707
					$timeelapsed = microtime(true);
3708
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3709
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3710
				}
3711
			}
3712
		}
3713
		
3714
		//getting the departure airport information
3715
		$departure_airport_array = array();
3716
		$departure_airport_icao = trim($departure_airport_icao);
3717
		if ($departure_airport_icao != '')
3718
		{
3719
			if (!is_string($departure_airport_icao))
3720
			{
3721
				return false;
3722
			} else {
3723
				$timeelapsed = microtime(true);
3724
				$departure_airport_array = $this->getAllAirportInfo($departure_airport_icao);
3725
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3726
			}
3727
		}
3728
		
3729
		//getting the arrival airport information
3730
		$arrival_airport_array = array();
3731
		$arrival_airport_icao = trim($arrival_airport_icao);
3732
		if ($arrival_airport_icao != '')
3733
		{
3734
			if (!is_string($arrival_airport_icao))
3735
			{
3736
				return false;
3737
			} else {
3738
				$timeelapsed = microtime(true);
3739
				$arrival_airport_array = $this->getAllAirportInfo($arrival_airport_icao);
3740
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3741
			}
3742
		}
3743
3744
		if ($latitude != "")
3745
		{
3746
			if (!is_numeric($latitude))
3747
			{
3748
				return false;
3749
			}
3750
		}
3751
		
3752
		if ($longitude != "")
3753
		{
3754
			if (!is_numeric($longitude))
3755
			{
3756
				return false;
3757
			}
3758
		}
3759
		
3760
		if ($waypoints != "")
3761
		{
3762
			if (!is_string($waypoints))
3763
			{
3764
				return false;
3765
			}
3766
		}
3767
		
3768
		if ($altitude != "")
3769
		{
3770
			if (!is_numeric($altitude))
3771
			{
3772
				return false;
3773
			}
3774
		} else $altitude = 0;
3775
		
3776
		if ($heading != "")
3777
		{
3778
			if (!is_numeric($heading))
3779
			{
3780
				return false;
3781
			}
3782
		}
3783
		
3784
		if ($groundspeed != "")
3785
		{
3786
			if (!is_numeric($groundspeed))
3787
			{
3788
				return false;
3789
			}
3790
		}
3791
3792
    
3793
		if ($date == "" || strtotime($date) < time()-20*60)
3794
		{
3795
			$date = date("Y-m-d H:i:s", time());
3796
		}
3797
3798
		//getting the aircraft image
3799
		if (($registration != "" || $registration != 'NA') && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM)
3800
		{
3801
			$timeelapsed = microtime(true);
3802
			$image_array = $Image->getSpotterImage($registration);
3803
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getSpotterImage : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3804
			if (!isset($image_array[0]['registration']))
3805
			{
3806
				//echo "Add image !!!! \n";
3807
				$Image->addSpotterImage($registration);
3808
			}
3809
			$timeelapsed = microtime(true);
3810
			$owner_info = $this->getAircraftOwnerByRegistration($registration);
3811
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftOwnerByRegistration : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3812
			if ($owner_info['owner'] != '') $aircraft_owner = ucwords(strtolower($owner_info['owner']));
3813
		}
3814
    
3815
		if ($globalIVAO && $aircraft_icao != '')
3816
		{
3817
            		if (isset($airline_array[0]['icao'])) $airline_icao = $airline_array[0]['icao'];
3818
            		else $airline_icao = '';
3819
			$image_array = $Image->getSpotterImage('',$aircraft_icao,$airline_icao);
3820
			if (!isset($image_array[0]['registration']))
3821
			{
3822
				//echo "Add image !!!! \n";
3823
				$Image->addSpotterImage('',$aircraft_icao,$airline_icao);
3824
			}
3825
		}
3826
    
3827
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
3828
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
3829
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
3830
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
3831
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
3832
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
3833
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3834
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3835
		$waypoints = filter_var($waypoints,FILTER_SANITIZE_STRING);
3836
		$altitude = filter_var($altitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3837
		$heading = filter_var($heading,FILTER_SANITIZE_NUMBER_INT);
3838
		$groundspeed = filter_var($groundspeed,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3839
		$squawk = filter_var($squawk,FILTER_SANITIZE_NUMBER_INT);
3840
		$route_stop = filter_var($route_stop,FILTER_SANITIZE_STRING);
3841
		$ModeS = filter_var($ModeS,FILTER_SANITIZE_STRING);
3842
		$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_STRING);
3843
		$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
3844
		$format_source = filter_var($format_source,FILTER_SANITIZE_STRING);
3845
		$verticalrate = filter_var($verticalrate,FILTER_SANITIZE_NUMBER_INT);
3846
	
3847
		if (count($airline_array) == 0) 
3848
		{
3849
                        $airline_array = $this->getAllAirlineInfo('NA');
3850
                }
3851
                if (count($aircraft_array) == 0) 
3852
                {
3853
                        $aircraft_array = $this->getAllAircraftInfo('NA');
3854
                }
3855
                if (count($departure_airport_array) == 0 || $departure_airport_array[0]['icao'] == '' || $departure_airport_icao == '') 
3856
                {
3857
                        $departure_airport_array = $this->getAllAirportInfo('NA');
3858
                }
3859
                if (count($arrival_airport_array) == 0 || $arrival_airport_array[0]['icao'] == '' || $arrival_airport_icao == '') 
3860
                {
3861
                        $arrival_airport_array = $this->getAllAirportInfo('NA');
3862
                }
3863
                if ($registration == '') $registration = 'NA';
3864
                if ($latitude == '' && $longitude == '') {
3865
            		$latitude = 0;
3866
            		$longitude = 0;
3867
            	}
3868
                if ($squawk == '' || $Common->isInteger($squawk) === false) $squawk = NULL;
3869
                if ($verticalrate == '' || $Common->isInteger($verticalrate) === false) $verticalrate = NULL;
3870
                if ($heading == '' || $Common->isInteger($heading) === false) $heading = 0;
3871
                if ($groundspeed == '' || $Common->isInteger($groundspeed) === false) $groundspeed = 0;
3872
                if (!isset($aircraft_owner)) $aircraft_owner = NULL;
3873
                $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) 
3874
                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)";
3875
3876
                $airline_name = $airline_array[0]['name'];
3877
                $airline_icao = $airline_array[0]['icao'];
3878
                $airline_country = $airline_array[0]['country'];
3879
                $airline_type = $airline_array[0]['type'];
3880
		if ($airline_type == '') {
3881
			$timeelapsed = microtime(true);
3882
			$airline_type = $this->getAircraftTypeBymodeS($ModeS);
3883
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftTypeBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3884
		}
3885
		if ($airline_type == null) $airline_type = '';
3886
                $aircraft_type = $aircraft_array[0]['type'];
3887
                $aircraft_manufacturer = $aircraft_array[0]['manufacturer'];
3888
                $departure_airport_name = $departure_airport_array[0]['name'];
3889
	        $departure_airport_city = $departure_airport_array[0]['city'];
3890
            	$departure_airport_country = $departure_airport_array[0]['country'];
3891
                
3892
                $arrival_airport_name = $arrival_airport_array[0]['name'];
3893
                $arrival_airport_city = $arrival_airport_array[0]['city'];
3894
                $arrival_airport_country = $arrival_airport_array[0]['country'];
3895
                $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);
3896
3897
		try {
3898
		        
3899
			$sth = $this->db->prepare($query);
3900
			$sth->execute($query_values);
3901
			$this->db = null;
3902
		} catch (PDOException $e) {
3903
		    return "error : ".$e->getMessage();
3904
		}
3905
		
3906
		return "success";
3907
3908
	}
3909
	
3910
  
3911
	/**
3912
	* Gets the aircraft ident within the last hour
3913
	*
3914
	* @return String the ident
3915
	*
3916
	*/
3917
	public function getIdentFromLastHour($ident)
3918
	{
3919
		global $globalDBdriver, $globalTimezone;
3920
		if ($globalDBdriver == 'mysql') {
3921
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3922
								WHERE spotter_output.ident = :ident 
3923
								AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) 
3924
								AND spotter_output.date < UTC_TIMESTAMP()";
3925
			$query_data = array(':ident' => $ident);
3926
		} else {
3927
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3928
								WHERE spotter_output.ident = :ident 
3929
								AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INTERVAL '1 HOURS'
3930
								AND spotter_output.date < now() AT TIME ZONE 'UTC'";
3931
			$query_data = array(':ident' => $ident);
3932
    		}
3933
		
3934
		$sth = $this->db->prepare($query);
3935
		$sth->execute($query_data);
3936
    		$ident_result='';
3937
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3938
		{
3939
			$ident_result = $row['ident'];
3940
		}
3941
3942
		return $ident_result;
3943
	}
3944
	
3945
	
3946
	/**
3947
	* Gets the aircraft data from the last 20 seconds
3948
	*
3949
	* @return Array the spotter data
3950
	*
3951
	*/
3952
	public function getRealTimeData($q = '')
3953
	{
3954
		global $globalDBdriver;
3955
		$additional_query = '';
3956
		if ($q != "")
3957
		{
3958
			if (!is_string($q))
3959
			{
3960
				return false;
3961
			} else {
3962
				$q_array = explode(" ", $q);
3963
				foreach ($q_array as $q_item){
3964
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
3965
					$additional_query .= " AND (";
3966
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
3967
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
3968
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
3969
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
3970
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
3971
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
3972
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
3973
					$additional_query .= "(spotter_output.ident like '%".$q_item."%')";
3974
					$additional_query .= ")";
3975
				}
3976
			}
3977
		}
3978
		if ($globalDBdriver == 'mysql') {
3979
			$query  = "SELECT spotter_output.* FROM spotter_output 
3980
				WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 20 SECOND) ".$additional_query." 
3981
				AND spotter_output.date < UTC_TIMESTAMP()";
3982
		} else {
3983
			$query  = "SELECT spotter_output.* FROM spotter_output 
3984
				WHERE spotter_output.date::timestamp >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '20 SECONDS' ".$additional_query." 
3985
				AND spotter_output.date::timestamp < CURRENT_TIMESTAMP AT TIME ZONE 'UTC'";
3986
		}
3987
		$spotter_array = $this->getDataFromDB($query, array());
3988
3989
		return $spotter_array;
3990
	}
3991
	
3992
	
3993
	
3994
	 /**
3995
	* Gets all airlines that have flown over
3996
	*
3997
	* @return Array the airline list
3998
	*
3999
	*/
4000
	public function countAllAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(), $year = '', $month = '', $day = '')
4001
	{
4002
		global $globalDBdriver;
4003
		$filter_query = $this->getFilter($filters,true,true);
4004
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4005
		 			FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.airline_icao <> 'NA'";
4006
		if ($olderthanmonths > 0) {
4007
			if ($globalDBdriver == 'mysql') {
4008
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4009
			} else {
4010
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4011
			}
4012
		}
4013
                if ($sincedate != '') {
4014
			if ($globalDBdriver == 'mysql') {
4015
				$query .= " AND spotter_output.date > '".$sincedate."'";
4016
			} else {
4017
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4018
			}
4019
		}
4020
		$query_values = array();
4021
		if ($year != '') {
4022
			if ($globalDBdriver == 'mysql') {
4023
				$query .= " AND YEAR(spotter_output.date) = :year";
4024
				$query_values = array_merge($query_values,array(':year' => $year));
4025
			} else {
4026
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4027
				$query_values = array_merge($query_values,array(':year' => $year));
4028
			}
4029
		}
4030
		if ($month != '') {
4031
			if ($globalDBdriver == 'mysql') {
4032
				$query .= " AND MONTH(spotter_output.date) = :month";
4033
				$query_values = array_merge($query_values,array(':month' => $month));
4034
			} else {
4035
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4036
				$query_values = array_merge($query_values,array(':month' => $month));
4037
			}
4038
		}
4039
		if ($day != '') {
4040
			if ($globalDBdriver == 'mysql') {
4041
				$query .= " AND DAY(spotter_output.date) = :day";
4042
				$query_values = array_merge($query_values,array(':day' => $day));
4043
			} else {
4044
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4045
				$query_values = array_merge($query_values,array(':day' => $day));
4046
			}
4047
		}
4048
		$query .= " GROUP BY spotter_output.airline_name,spotter_output.airline_icao, spotter_output.airline_country ORDER BY airline_count DESC";
4049
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4050
4051
		$sth = $this->db->prepare($query);
4052
		$sth->execute($query_values);
4053
		$airline_array = array();
4054
		$temp_array = array();
4055
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4056
		{
4057
			$temp_array['airline_name'] = $row['airline_name'];
4058
			$temp_array['airline_icao'] = $row['airline_icao'];
4059
			$temp_array['airline_count'] = $row['airline_count'];
4060
			$temp_array['airline_country'] = $row['airline_country'];
4061
			$airline_array[] = $temp_array;
4062
		}
4063
		return $airline_array;
4064
	}
4065
4066
	 /**
4067
	* Gets all pilots that have flown over
4068
	*
4069
	* @return Array the pilots list
4070
	*
4071
	*/
4072
	public function countAllPilots($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '', $month = '',$day = '')
4073
	{
4074
		global $globalDBdriver;
4075
		$filter_query = $this->getFilter($filters,true,true);
4076
		$query  = "SELECT DISTINCT spotter_output.pilot_id, s.pilot_name, COUNT(spotter_output.pilot_id) AS pilot_count, spotter_output.format_source
4077
			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 <> ''";
4078
                if ($olderthanmonths > 0) {
4079
            		if ($globalDBdriver == 'mysql') {
4080
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4081
			} else {
4082
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4083
			}
4084
		}
4085
                if ($sincedate != '') {
4086
            		if ($globalDBdriver == 'mysql') {
4087
				$query .= " AND spotter_output.date > '".$sincedate."'";
4088
			} else {
4089
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4090
			}
4091
		}
4092
		$query_values = array();
4093
		if ($year != '') {
4094
			if ($globalDBdriver == 'mysql') {
4095
				$query .= " AND YEAR(spotter_output.date) = :year";
4096
				$query_values = array_merge($query_values,array(':year' => $year));
4097
			} else {
4098
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4099
				$query_values = array_merge($query_values,array(':year' => $year));
4100
			}
4101
		}
4102
		if ($month != '') {
4103
			if ($globalDBdriver == 'mysql') {
4104
				$query .= " AND MONTH(spotter_output.date) = :month";
4105
				$query_values = array_merge($query_values,array(':month' => $month));
4106
			} else {
4107
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4108
				$query_values = array_merge($query_values,array(':month' => $month));
4109
			}
4110
		}
4111
		if ($day != '') {
4112
			if ($globalDBdriver == 'mysql') {
4113
				$query .= " AND DAY(spotter_output.date) = :day";
4114
				$query_values = array_merge($query_values,array(':day' => $day));
4115
			} else {
4116
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4117
				$query_values = array_merge($query_values,array(':day' => $day));
4118
			}
4119
		}
4120
		
4121
		$query .= " GROUP BY spotter_output.pilot_id,s.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
4122
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4123
      
4124
		
4125
		$sth = $this->db->prepare($query);
4126
		$sth->execute($query_values);
4127
		$airline_array = array();
4128
		$temp_array = array();
4129
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4130
		{
4131
			$temp_array['pilot_name'] = $row['pilot_name'];
4132
			$temp_array['pilot_id'] = $row['pilot_id'];
4133
			$temp_array['pilot_count'] = $row['pilot_count'];
4134
			$temp_array['format_source'] = $row['format_source'];
4135
			$airline_array[] = $temp_array;
4136
		}
4137
		return $airline_array;
4138
	}
4139
	
4140
	/**
4141
	* Gets all pilots that have flown over
4142
	*
4143
	* @return Array the pilots list
4144
	*
4145
	*/
4146
	public function countAllPilotsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '')
4147
	{
4148
		global $globalDBdriver;
4149
		$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
4150
		 			FROM spotter_output WHERE spotter_output.pilot_id <> '' ";
4151
                if ($olderthanmonths > 0) {
4152
            		if ($globalDBdriver == 'mysql') {
4153
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4154
			} else {
4155
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4156
			}
4157
		}
4158
                if ($sincedate != '') {
4159
            		if ($globalDBdriver == 'mysql') {
4160
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4161
			} else {
4162
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4163
			}
4164
		}
4165
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
4166
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4167
      
4168
		
4169
		$sth = $this->db->prepare($query);
4170
		$sth->execute();
4171
      
4172
		$airline_array = array();
4173
		$temp_array = array();
4174
        
4175
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4176
		{
4177
			$temp_array['pilot_name'] = $row['pilot_name'];
4178
			$temp_array['pilot_id'] = $row['pilot_id'];
4179
			$temp_array['pilot_count'] = $row['pilot_count'];
4180
			$temp_array['airline_icao'] = $row['airline_icao'];
4181
			$temp_array['format_source'] = $row['format_source'];
4182
			$airline_array[] = $temp_array;
4183
		}
4184
		return $airline_array;
4185
	}
4186
	
4187
	 /**
4188
	* Gets all owner that have flown over
4189
	*
4190
	* @return Array the pilots list
4191
	*
4192
	*/
4193
	public function countAllOwners($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
4194
	{
4195
		global $globalDBdriver;
4196
		$filter_query = $this->getFilter($filters,true,true);
4197
		$query  = "SELECT DISTINCT spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
4198
					FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL";
4199
                if ($olderthanmonths > 0) {
4200
            		if ($globalDBdriver == 'mysql') {
4201
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4202
			} else {
4203
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4204
			}
4205
		}
4206
                if ($sincedate != '') {
4207
            		if ($globalDBdriver == 'mysql') {
4208
				$query .= " AND spotter_output.date > '".$sincedate."' ";
4209
			} else {
4210
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4211
			}
4212
		}
4213
		$query_values = array();
4214
		if ($year != '') {
4215
			if ($globalDBdriver == 'mysql') {
4216
				$query .= " AND YEAR(spotter_output.date) = :year";
4217
				$query_values = array_merge($query_values,array(':year' => $year));
4218
			} else {
4219
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4220
				$query_values = array_merge($query_values,array(':year' => $year));
4221
			}
4222
		}
4223
		if ($month != '') {
4224
			if ($globalDBdriver == 'mysql') {
4225
				$query .= " AND MONTH(spotter_output.date) = :month";
4226
				$query_values = array_merge($query_values,array(':month' => $month));
4227
			} else {
4228
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4229
				$query_values = array_merge($query_values,array(':month' => $month));
4230
			}
4231
		}
4232
		if ($day != '') {
4233
			if ($globalDBdriver == 'mysql') {
4234
				$query .= " AND DAY(spotter_output.date) = :day";
4235
				$query_values = array_merge($query_values,array(':day' => $day));
4236
			} else {
4237
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4238
				$query_values = array_merge($query_values,array(':day' => $day));
4239
			}
4240
		}
4241
		$query .= " GROUP BY spotter_output.owner_name ORDER BY owner_count DESC";
4242
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4243
		
4244
		$sth = $this->db->prepare($query);
4245
		$sth->execute($query_values);
4246
		$airline_array = array();
4247
		$temp_array = array();
4248
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4249
		{
4250
			$temp_array['owner_name'] = $row['owner_name'];
4251
			$temp_array['owner_count'] = $row['owner_count'];
4252
			$airline_array[] = $temp_array;
4253
		}
4254
		return $airline_array;
4255
	}
4256
	
4257
	 /**
4258
	* Gets all owner that have flown over
4259
	*
4260
	* @return Array the pilots list
4261
	*
4262
	*/
4263
	public function countAllOwnersByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
4264
	{
4265
		global $globalDBdriver;
4266
		$filter_query = $this->getFilter($filters,true,true);
4267
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
4268
		 			FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL ";
4269
                if ($olderthanmonths > 0) {
4270
            		if ($globalDBdriver == 'mysql') {
4271
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4272
			} else {
4273
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4274
			}
4275
		}
4276
                if ($sincedate != '') {
4277
            		if ($globalDBdriver == 'mysql') {
4278
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4279
			} else {
4280
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4281
			}
4282
		}
4283
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.owner_name ORDER BY owner_count DESC";
4284
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4285
      
4286
		
4287
		$sth = $this->db->prepare($query);
4288
		$sth->execute();
4289
      
4290
		$airline_array = array();
4291
		$temp_array = array();
4292
        
4293
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4294
		{
4295
			$temp_array['owner_name'] = $row['owner_name'];
4296
			$temp_array['owner_count'] = $row['owner_count'];
4297
			$temp_array['airline_icao'] = $row['airline_icao'];
4298
			$airline_array[] = $temp_array;
4299
		}
4300
		return $airline_array;
4301
	}
4302
4303
	/**
4304
	* Gets all airlines that have flown over by aircraft
4305
	*
4306
	* @return Array the airline list
4307
	*
4308
	*/
4309
	public function countAllAirlinesByAircraft($aircraft_icao,$filters = array())
4310
	{
4311
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4312
		$filter_query = $this->getFilter($filters,true,true);
4313
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4314
		 	    FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
4315
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
4316
			    ORDER BY airline_count DESC";
4317
      
4318
		
4319
		$sth = $this->db->prepare($query);
4320
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4321
      
4322
		$airline_array = array();
4323
		$temp_array = array();
4324
        
4325
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4326
		{
4327
			$temp_array['airline_name'] = $row['airline_name'];
4328
			$temp_array['airline_icao'] = $row['airline_icao'];
4329
			$temp_array['airline_count'] = $row['airline_count'];
4330
			$temp_array['airline_country'] = $row['airline_country'];
4331
4332
			$airline_array[] = $temp_array;
4333
		}
4334
4335
		return $airline_array;
4336
	}
4337
4338
4339
	/**
4340
	* Gets all airline countries that have flown over by aircraft
4341
	*
4342
	* @return Array the airline country list
4343
	*
4344
	*/
4345
	public function countAllAirlineCountriesByAircraft($aircraft_icao,$filters = array())
4346
	{
4347
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4348
		$filter_query = $this->getFilter($filters,true,true);
4349
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4350
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
4351
                    GROUP BY spotter_output.airline_country
4352
					ORDER BY airline_country_count DESC
4353
					LIMIT 10 OFFSET 0";
4354
      
4355
		
4356
		$sth = $this->db->prepare($query);
4357
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4358
      
4359
		$airline_country_array = array();
4360
		$temp_array = array();
4361
        
4362
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4363
		{
4364
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4365
			$temp_array['airline_country'] = $row['airline_country'];
4366
 
4367
			$airline_country_array[] = $temp_array;
4368
		}
4369
		return $airline_country_array;
4370
	}
4371
4372
4373
	
4374
	
4375
	/**
4376
	* Gets all airlines that have flown over by airport
4377
	*
4378
	* @return Array the airline list
4379
	*
4380
	*/
4381
	public function countAllAirlinesByAirport($airport_icao,$filters = array())
4382
	{
4383
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4384
		$filter_query = $this->getFilter($filters,true,true);
4385
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4386
		    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 ) 
4387
                    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country
4388
		    ORDER BY airline_count DESC";
4389
      
4390
		
4391
		$sth = $this->db->prepare($query);
4392
		$sth->execute(array(':airport_icao' => $airport_icao));
4393
      
4394
		$airline_array = array();
4395
		$temp_array = array();
4396
        
4397
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4398
		{
4399
			$temp_array['airline_name'] = $row['airline_name'];
4400
			$temp_array['airline_icao'] = $row['airline_icao'];
4401
			$temp_array['airline_count'] = $row['airline_count'];
4402
			$temp_array['airline_country'] = $row['airline_country'];
4403
4404
			$airline_array[] = $temp_array;
4405
		}
4406
		return $airline_array;
4407
	}
4408
4409
4410
	/**
4411
	* Gets all airline countries that have flown over by airport icao
4412
	*
4413
	* @return Array the airline country list
4414
	*
4415
	*/
4416
	public function countAllAirlineCountriesByAirport($airport_icao,$filters = array())
4417
	{
4418
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4419
		$filter_query = $this->getFilter($filters,true,true);
4420
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4421
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao )
4422
					GROUP BY spotter_output.airline_country
4423
					ORDER BY airline_country_count DESC
4424
					LIMIT 10 OFFSET 0";
4425
4426
		
4427
		$sth = $this->db->prepare($query);
4428
		$sth->execute(array(':airport_icao' => $airport_icao));
4429
4430
		$airline_country_array = array();
4431
		$temp_array = array();
4432
        
4433
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4434
		{
4435
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4436
			$temp_array['airline_country'] = $row['airline_country'];
4437
 
4438
			$airline_country_array[] = $temp_array;
4439
		}
4440
		return $airline_country_array;
4441
	}
4442
4443
4444
	/**
4445
	* Gets all airlines that have flown over by aircraft manufacturer
4446
	*
4447
	* @return Array the airline list
4448
	*
4449
	*/
4450
	public function countAllAirlinesByManufacturer($aircraft_manufacturer,$filters = array())
4451
	{
4452
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4453
		$filter_query = $this->getFilter($filters,true,true);
4454
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4455
		 			FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4456
					GROUP BY spotter_output.airline_name
4457
					ORDER BY airline_count DESC";
4458
 
4459
		$sth = $this->db->prepare($query);
4460
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4461
 
4462
		$airline_array = array();
4463
		$temp_array = array();
4464
        
4465
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4466
		{
4467
			$temp_array['airline_name'] = $row['airline_name'];
4468
			$temp_array['airline_icao'] = $row['airline_icao'];
4469
			$temp_array['airline_count'] = $row['airline_count'];
4470
			$temp_array['airline_country'] = $row['airline_country'];
4471
4472
			$airline_array[] = $temp_array;
4473
		}
4474
		return $airline_array;
4475
	}
4476
4477
4478
4479
	/**
4480
	* Gets all airline countries that have flown over by aircraft manufacturer
4481
	*
4482
	* @return Array the airline country list
4483
	*
4484
	*/
4485
	public function countAllAirlineCountriesByManufacturer($aircraft_manufacturer,$filters = array())
4486
	{
4487
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4488
		$filter_query = $this->getFilter($filters,true,true);
4489
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4490
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4491
					GROUP BY spotter_output.airline_country
4492
					ORDER BY airline_country_count DESC
4493
					LIMIT 10 OFFSET 0";
4494
      
4495
		
4496
		$sth = $this->db->prepare($query);
4497
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4498
4499
		$airline_country_array = array();
4500
		$temp_array = array();
4501
        
4502
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4503
		{
4504
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4505
			$temp_array['airline_country'] = $row['airline_country'];
4506
			$airline_country_array[] = $temp_array;
4507
		}
4508
		return $airline_country_array;
4509
	}
4510
4511
4512
	/**
4513
	* Gets all airlines that have flown over by date
4514
	*
4515
	* @return Array the airline list
4516
	*
4517
	*/
4518
	public function countAllAirlinesByDate($date,$filters = array())
4519
	{
4520
		global $globalTimezone, $globalDBdriver;
4521
		$filter_query = $this->getFilter($filters,true,true);
4522
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4523
		if ($globalTimezone != '') {
4524
			date_default_timezone_set($globalTimezone);
4525
			$datetime = new DateTime($date);
4526
			$offset = $datetime->format('P');
4527
		} else $offset = '+00:00';
4528
4529
		if ($globalDBdriver == 'mysql') {
4530
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4531
		 			FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4532
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country 
4533
					ORDER BY airline_count DESC";
4534
		} else {
4535
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4536
		 			FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4537
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country
4538
					ORDER BY airline_count DESC";
4539
		}
4540
		
4541
		$sth = $this->db->prepare($query);
4542
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4543
4544
		$airline_array = array();
4545
		$temp_array = array();
4546
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4547
		{
4548
			$temp_array['airline_name'] = $row['airline_name'];
4549
			$temp_array['airline_icao'] = $row['airline_icao'];
4550
			$temp_array['airline_count'] = $row['airline_count'];
4551
			$temp_array['airline_country'] = $row['airline_country'];
4552
 
4553
			$airline_array[] = $temp_array;
4554
		}
4555
4556
		return $airline_array;
4557
	}	
4558
	
4559
	
4560
	/**
4561
	* Gets all airline countries that have flown over by date
4562
	*
4563
	* @return Array the airline country list
4564
	*
4565
	*/
4566
	public function countAllAirlineCountriesByDate($date,$filters = array())
4567
	{
4568
		global $globalTimezone, $globalDBdriver;
4569
		$filter_query = $this->getFilter($filters,true,true);
4570
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4571
		if ($globalTimezone != '') {
4572
			date_default_timezone_set($globalTimezone);
4573
			$datetime = new DateTime($date);
4574
			$offset = $datetime->format('P');
4575
		} else $offset = '+00:00';
4576
		
4577
		if ($globalDBdriver == 'mysql') {
4578
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4579
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4580
					GROUP BY spotter_output.airline_country
4581
					ORDER BY airline_country_count DESC
4582
					LIMIT 10 OFFSET 0";
4583
		} else {
4584
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4585
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4586
					GROUP BY spotter_output.airline_country
4587
					ORDER BY airline_country_count DESC
4588
					LIMIT 10 OFFSET 0";
4589
		}
4590
4591
		$sth = $this->db->prepare($query);
4592
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4593
 
4594
		$airline_country_array = array();
4595
		$temp_array = array();
4596
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4597
		{
4598
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4599
			$temp_array['airline_country'] = $row['airline_country'];
4600
4601
			$airline_country_array[] = $temp_array;
4602
		}
4603
		return $airline_country_array;
4604
	}
4605
4606
4607
	/**
4608
	* Gets all airlines that have flown over by ident/callsign
4609
	*
4610
	* @return Array the airline list
4611
	*
4612
	*/
4613
	public function countAllAirlinesByIdent($ident,$filters = array())
4614
	{
4615
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
4616
		$filter_query = $this->getFilter($filters,true,true);
4617
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4618
		 		FROM spotter_output".$filter_query." spotter_output.ident = :ident  
4619
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4620
				ORDER BY airline_count DESC";
4621
      
4622
		
4623
		$sth = $this->db->prepare($query);
4624
		$sth->execute(array(':ident' => $ident));
4625
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4626
	}
4627
4628
	/**
4629
	* Gets all airlines by owner
4630
	*
4631
	* @return Array the airline list
4632
	*
4633
	*/
4634
	public function countAllAirlinesByOwner($owner,$filters = array())
4635
	{
4636
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
4637
		$filter_query = $this->getFilter($filters,true,true);
4638
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4639
		 		FROM spotter_output".$filter_query." spotter_output.owner_name = :owner  
4640
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4641
				ORDER BY airline_count DESC";
4642
      
4643
		
4644
		$sth = $this->db->prepare($query);
4645
		$sth->execute(array(':owner' => $owner));
4646
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4647
	}
4648
4649
	/**
4650
	* Gets flight duration by owner
4651
	*
4652
	* @return String Duration of all flights
4653
	*
4654
	*/
4655
	public function getFlightDurationByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
4656
	{
4657
		global $globalDBdriver;
4658
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
4659
		$filter_query = $this->getFilter($filters,true,true);
4660
		$query  = "SELECT SUM(last_seen - date) AS duration 
4661
				FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
4662
				AND last_seen > date";
4663
		$query_values = array();
4664
		if ($year != '') {
4665
			if ($globalDBdriver == 'mysql') {
4666
				$query .= " AND YEAR(spotter_output.date) = :year";
4667
				$query_values = array_merge($query_values,array(':year' => $year));
4668
			} else {
4669
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4670
				$query_values = array_merge($query_values,array(':year' => $year));
4671
			}
4672
		}
4673
		if ($month != '') {
4674
			if ($globalDBdriver == 'mysql') {
4675
				$query .= " AND MONTH(spotter_output.date) = :month";
4676
				$query_values = array_merge($query_values,array(':month' => $month));
4677
			} else {
4678
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4679
				$query_values = array_merge($query_values,array(':month' => $month));
4680
			}
4681
		}
4682
		if ($day != '') {
4683
			if ($globalDBdriver == 'mysql') {
4684
				$query .= " AND DAY(spotter_output.date) = :day";
4685
				$query_values = array_merge($query_values,array(':day' => $day));
4686
			} else {
4687
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4688
				$query_values = array_merge($query_values,array(':day' => $day));
4689
			}
4690
		}
4691
		$query_values = array_merge($query_values,array(':owner' => $owner));
4692
		$sth = $this->db->prepare($query);
4693
		$sth->execute($query_values);
4694
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4695
		if (is_numeric($result[0]['duration'])) return gmdate('H:i:s',$result[0]['duration']);
4696
		elseif ($result[0]['duration'] == '') return 0;
4697
		else return $result[0]['duration'];
4698
	}
4699
4700
	/**
4701
	* Count flights by owner
4702
	*
4703
	* @return String Duration of all flights
4704
	*
4705
	*/
4706
	public function countFlightsByOwner($owner,$filters = array())
4707
	{
4708
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
4709
		$filter_query = $this->getFilter($filters,true,true);
4710
		$query  = "SELECT COUNT(*) AS nb 
4711
				FROM spotter_output".$filter_query." spotter_output.owner_name = :owner";
4712
		$query_values = array();
4713
		$query_values = array_merge($query_values,array(':owner' => $owner));
4714
		$sth = $this->db->prepare($query);
4715
		$sth->execute($query_values);
4716
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4717
		return $result[0]['nb'];
4718
	}
4719
4720
	/**
4721
	* Count flights by pilot
4722
	*
4723
	* @return String Duration of all flights
4724
	*
4725
	*/
4726
	public function countFlightsByPilot($pilot,$filters = array())
4727
	{
4728
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
4729
		$filter_query = $this->getFilter($filters,true,true);
4730
		$query  = "SELECT COUNT(*) AS nb 
4731
				FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilod_id = :pilot)";
4732
		$query_values = array();
4733
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
4734
		$sth = $this->db->prepare($query);
4735
		$sth->execute($query_values);
4736
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4737
		return $result[0]['nb'];
4738
	}
4739
4740
	/**
4741
	* Gets flight duration by pilot
4742
	*
4743
	* @return String Duration of all flights
4744
	*
4745
	*/
4746
	public function getFlightDurationByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
4747
	{
4748
		global $globalDBdriver;
4749
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
4750
		$filter_query = $this->getFilter($filters,true,true);
4751
		$query  = "SELECT SUM(last_seen - date) AS duration 
4752
		 		FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
4753
		 		AND last_seen > date";
4754
		$query_values = array();
4755
		if ($year != '') {
4756
			if ($globalDBdriver == 'mysql') {
4757
				$query .= " AND YEAR(spotter_output.date) = :year";
4758
				$query_values = array_merge($query_values,array(':year' => $year));
4759
			} else {
4760
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4761
				$query_values = array_merge($query_values,array(':year' => $year));
4762
			}
4763
		}
4764
		if ($month != '') {
4765
			if ($globalDBdriver == 'mysql') {
4766
				$query .= " AND MONTH(spotter_output.date) = :month";
4767
				$query_values = array_merge($query_values,array(':month' => $month));
4768
			} else {
4769
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4770
				$query_values = array_merge($query_values,array(':month' => $month));
4771
			}
4772
		}
4773
		if ($day != '') {
4774
			if ($globalDBdriver == 'mysql') {
4775
				$query .= " AND DAY(spotter_output.date) = :day";
4776
				$query_values = array_merge($query_values,array(':day' => $day));
4777
			} else {
4778
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4779
				$query_values = array_merge($query_values,array(':day' => $day));
4780
			}
4781
		}
4782
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
4783
		$sth = $this->db->prepare($query);
4784
		$sth->execute($query_values);
4785
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4786
		if (is_int($result[0]['duration'])) return gmdate('H:i:s',$result[0]['duration']);
4787
		else return $result[0]['duration'];
4788
	}
4789
4790
	/**
4791
	* Gets all airlines used by pilot
4792
	*
4793
	* @return Array the airline list
4794
	*
4795
	*/
4796
	public function countAllAirlinesByPilot($pilot,$filters = array())
4797
	{
4798
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
4799
		$filter_query = $this->getFilter($filters,true,true);
4800
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4801
		 		FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
4802
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4803
				ORDER BY airline_count DESC";
4804
      
4805
		
4806
		$sth = $this->db->prepare($query);
4807
		$sth->execute(array(':pilot' => $pilot));
4808
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4809
	}
4810
4811
	/**
4812
	* Gets all airlines that have flown over by route
4813
	*
4814
	* @return Array the airline list
4815
	*
4816
	*/
4817
	public function countAllAirlinesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
4818
	{
4819
		$filter_query = $this->getFilter($filters,true,true);
4820
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4821
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4822
4823
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4824
		 			FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
4825
					GROUP BY spotter_output.airline_name
4826
					ORDER BY airline_count DESC";
4827
      
4828
		
4829
		$sth = $this->db->prepare($query);
4830
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4831
      
4832
		$airline_array = array();
4833
		$temp_array = array();
4834
        
4835
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4836
		{
4837
			$temp_array['airline_name'] = $row['airline_name'];
4838
			$temp_array['airline_icao'] = $row['airline_icao'];
4839
			$temp_array['airline_count'] = $row['airline_count'];
4840
			$temp_array['airline_country'] = $row['airline_country'];
4841
4842
			$airline_array[] = $temp_array;
4843
		}
4844
		return $airline_array;
4845
	}
4846
4847
	/**
4848
	* Gets all airline countries that have flown over by route
4849
	*
4850
	* @return Array the airline country list
4851
	*
4852
	*/
4853
	public function countAllAirlineCountriesByRoute($departure_airport_icao, $arrival_airport_icao,$filters= array())
4854
	{
4855
		$filter_query = $this->getFilter($filters,true,true);
4856
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4857
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4858
      
4859
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4860
		 		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) 
4861
				GROUP BY spotter_output.airline_country
4862
				ORDER BY airline_country_count DESC
4863
				LIMIT 10 OFFSET 0";
4864
      
4865
		
4866
		$sth = $this->db->prepare($query);
4867
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4868
      
4869
		$airline_country_array = array();
4870
		$temp_array = array();
4871
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4872
		{
4873
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4874
			$temp_array['airline_country'] = $row['airline_country'];
4875
4876
			$airline_country_array[] = $temp_array;
4877
		}
4878
4879
		return $airline_country_array;
4880
	}
4881
4882
4883
	/**
4884
	* Gets all airlines that have flown over by country
4885
	*
4886
	* @return Array the airline list
4887
	*
4888
	*/
4889
	public function countAllAirlinesByCountry($country,$filters = array())
4890
	{
4891
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4892
		$filter_query = $this->getFilter($filters,true,true);
4893
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4894
		 	    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
4895
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
4896
			    ORDER BY airline_count DESC";
4897
      
4898
		
4899
		$sth = $this->db->prepare($query);
4900
		$sth->execute(array(':country' => $country));
4901
4902
		$airline_array = array();
4903
		$temp_array = array();
4904
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4905
		{
4906
			$temp_array['airline_name'] = $row['airline_name'];
4907
			$temp_array['airline_icao'] = $row['airline_icao'];
4908
			$temp_array['airline_count'] = $row['airline_count'];
4909
			$temp_array['airline_country'] = $row['airline_country'];
4910
 
4911
			$airline_array[] = $temp_array;
4912
		}
4913
		return $airline_array;
4914
	}
4915
4916
4917
	/**
4918
	* Gets all airline countries that have flown over by country
4919
	*
4920
	* @return Array the airline country list
4921
	*
4922
	*/
4923
	public function countAllAirlineCountriesByCountry($country,$filters = array())
4924
	{
4925
		$filter_query = $this->getFilter($filters,true,true);
4926
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4927
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4928
		 		FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
4929
				GROUP BY spotter_output.airline_country
4930
				ORDER BY airline_country_count DESC
4931
				LIMIT 10 OFFSET 0";
4932
      
4933
		
4934
		$sth = $this->db->prepare($query);
4935
		$sth->execute(array(':country' => $country));
4936
4937
		$airline_country_array = array();
4938
		$temp_array = array();
4939
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4940
		{
4941
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4942
			$temp_array['airline_country'] = $row['airline_country'];
4943
4944
			$airline_country_array[] = $temp_array;
4945
		}
4946
		return $airline_country_array;
4947
	}
4948
4949
4950
	/**
4951
	* Gets all airlines countries
4952
	*
4953
	* @return Array the airline country list
4954
	*
4955
	*/
4956
	public function countAllAirlineCountries($limit = true, $filters = array(), $year = '', $month = '', $day = '')
4957
	{
4958
		global $globalDBdriver;
4959
		$filter_query = $this->getFilter($filters,true,true);
4960
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4961
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.airline_country <> 'NA'";
4962
		$query_values = array();
4963
		if ($year != '') {
4964
			if ($globalDBdriver == 'mysql') {
4965
				$query .= " AND YEAR(spotter_output.date) = :year";
4966
				$query_values = array_merge($query_values,array(':year' => $year));
4967
			} else {
4968
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4969
				$query_values = array_merge($query_values,array(':year' => $year));
4970
			}
4971
		}
4972
		if ($month != '') {
4973
			if ($globalDBdriver == 'mysql') {
4974
				$query .= " AND MONTH(spotter_output.date) = :month";
4975
				$query_values = array_merge($query_values,array(':month' => $month));
4976
			} else {
4977
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4978
				$query_values = array_merge($query_values,array(':month' => $month));
4979
			}
4980
		}
4981
		if ($day != '') {
4982
			if ($globalDBdriver == 'mysql') {
4983
				$query .= " AND DAY(spotter_output.date) = :day";
4984
				$query_values = array_merge($query_values,array(':day' => $day));
4985
			} else {
4986
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4987
				$query_values = array_merge($query_values,array(':day' => $day));
4988
			}
4989
		}
4990
		$query .= " GROUP BY spotter_output.airline_country
4991
					ORDER BY airline_country_count DESC";
4992
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4993
      
4994
		$sth = $this->db->prepare($query);
4995
		$sth->execute($query_values);
4996
4997
		$airline_array = array();
4998
		$temp_array = array();
4999
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5000
		{
5001
			$temp_array['airline_country_count'] = $row['airline_country_count'];
5002
			$temp_array['airline_country'] = $row['airline_country'];
5003
5004
			$airline_array[] = $temp_array;
5005
		}
5006
		return $airline_array;
5007
	}
5008
5009
	/**
5010
	* Gets all number of flight over countries
5011
	*
5012
	* @return Array the airline country list
5013
	*
5014
	*/
5015
	public function countAllFlightOverCountries($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
5016
	{
5017
		global $globalDBdriver;
5018
		//$filter_query = $this->getFilter($filters,true,true);
5019
		$Connection= new Connection($this->db);
5020
		if (!$Connection->tableExists('countries')) return array();
5021
		/*
5022
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
5023
					FROM countries c, spotter_output s
5024
					WHERE Within(GeomFromText(CONCAT('POINT(',s.longitude,' ',s.latitude,')')), ogc_geom) ";
5025
		*/
5026
/*
5027
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
5028
					FROM countries c, spotter_live s
5029
					WHERE c.iso2 = s.over_country ";
5030
		$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 ";
5031
*/
5032
		require_once('class.SpotterLive.php');
5033
		$SpotterLive = new SpotterLive();
5034
		$filter_query = $SpotterLive->getFilter($filters,true,true);
5035
		$filter_query .= ' over_country IS NOT NULL';
5036
                if ($olderthanmonths > 0) {
5037
			if ($globalDBdriver == 'mysql') {
5038
				$filter_query .= ' AND spotter_live.date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5039
			} else {
5040
				$filter_query .= " AND spotter_live.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5041
			}
5042
		}
5043
                if ($sincedate != '') {
5044
            		if ($globalDBdriver == 'mysql') {
5045
				$filter_query .= " AND spotter_live.date > '".$sincedate."' ";
5046
			} else {
5047
				$filter_query .= " AND spotter_live.date > CAST('".$sincedate."' AS TIMESTAMP)";
5048
			}
5049
		}
5050
		$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 ";
5051
		$query .= "GROUP BY c.name,c.iso3,c.iso2 ORDER BY nb DESC";
5052
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5053
      
5054
		
5055
		$sth = $this->db->prepare($query);
5056
		$sth->execute();
5057
 
5058
		$flight_array = array();
5059
		$temp_array = array();
5060
        
5061
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5062
		{
5063
			$temp_array['flight_count'] = $row['nb'];
5064
			$temp_array['flight_country'] = $row['name'];
5065
			$temp_array['flight_country_iso3'] = $row['iso3'];
5066
			$temp_array['flight_country_iso2'] = $row['iso2'];
5067
			$flight_array[] = $temp_array;
5068
		}
5069
		return $flight_array;
5070
	}
5071
	
5072
	
5073
	/**
5074
	* Gets all aircraft types that have flown over
5075
	*
5076
	* @return Array the aircraft list
5077
	*
5078
	*/
5079
	public function countAllAircraftTypes($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
5080
	{
5081
		global $globalDBdriver;
5082
		$filter_query = $this->getFilter($filters,true,true);
5083
		$query  = "SELECT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
5084
		    FROM spotter_output ".$filter_query." spotter_output.aircraft_name  <> '' AND spotter_output.aircraft_icao  <> ''";
5085
		if ($olderthanmonths > 0) {
5086
			if ($globalDBdriver == 'mysql') {
5087
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5088
			} else {
5089
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5090
			}
5091
		}
5092
		if ($sincedate != '') {
5093
			if ($globalDBdriver == 'mysql') {
5094
				$query .= " AND spotter_output.date > '".$sincedate."'";
5095
			} else {
5096
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5097
			}
5098
		}
5099
		$query_values = array();
5100
		if ($year != '') {
5101
			if ($globalDBdriver == 'mysql') {
5102
				$query .= " AND YEAR(spotter_output.date) = :year";
5103
				$query_values = array_merge($query_values,array(':year' => $year));
5104
			} else {
5105
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5106
				$query_values = array_merge($query_values,array(':year' => $year));
5107
			}
5108
		}
5109
		if ($month != '') {
5110
			if ($globalDBdriver == 'mysql') {
5111
				$query .= " AND MONTH(spotter_output.date) = :month";
5112
				$query_values = array_merge($query_values,array(':month' => $month));
5113
			} else {
5114
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5115
				$query_values = array_merge($query_values,array(':month' => $month));
5116
			}
5117
		}
5118
		if ($day != '') {
5119
			if ($globalDBdriver == 'mysql') {
5120
				$query .= " AND DAY(spotter_output.date) = :day";
5121
				$query_values = array_merge($query_values,array(':day' => $day));
5122
			} else {
5123
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5124
				$query_values = array_merge($query_values,array(':day' => $day));
5125
			}
5126
		}
5127
5128
		$query .= " GROUP BY spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer ORDER BY aircraft_icao_count DESC";
5129
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5130
 
5131
		$sth = $this->db->prepare($query);
5132
		$sth->execute($query_values);
5133
5134
		$aircraft_array = array();
5135
		$temp_array = array();
5136
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5137
		{
5138
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5139
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5140
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5141
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5142
			$aircraft_array[] = $temp_array;
5143
		}
5144
		return $aircraft_array;
5145
	}
5146
5147
	/**
5148
	* Gets all aircraft types that have flown over by airline
5149
	*
5150
	* @return Array the aircraft list
5151
	*
5152
	*/
5153
	public function countAllAircraftTypesByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '',$month = '', $day = '')
5154
	{
5155
		global $globalDBdriver;
5156
		$filter_query = $this->getFilter($filters,true,true);
5157
		$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 
5158
		    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'";
5159
		if ($olderthanmonths > 0) {
5160
			if ($globalDBdriver == 'mysql') {
5161
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5162
			} else {
5163
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5164
			}
5165
		}
5166
		if ($sincedate != '') {
5167
			if ($globalDBdriver == 'mysql') {
5168
				$query .= " AND spotter_output.date > '".$sincedate."'";
5169
			} else {
5170
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5171
			}
5172
		}
5173
		$query_values = array();
5174
		if ($year != '') {
5175
			if ($globalDBdriver == 'mysql') {
5176
				$query .= " AND YEAR(spotter_output.date) = :year";
5177
				$query_values = array_merge($query_values,array(':year' => $year));
5178
			} else {
5179
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5180
				$query_values = array_merge($query_values,array(':year' => $year));
5181
			}
5182
		}
5183
		if ($month != '') {
5184
			if ($globalDBdriver == 'mysql') {
5185
				$query .= " AND MONTH(spotter_output.date) = :month";
5186
				$query_values = array_merge($query_values,array(':month' => $month));
5187
			} else {
5188
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5189
				$query_values = array_merge($query_values,array(':month' => $month));
5190
			}
5191
		}
5192
		if ($day != '') {
5193
			if ($globalDBdriver == 'mysql') {
5194
				$query .= " AND DAY(spotter_output.date) = :day";
5195
				$query_values = array_merge($query_values,array(':day' => $day));
5196
			} else {
5197
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5198
				$query_values = array_merge($query_values,array(':day' => $day));
5199
			}
5200
		}
5201
5202
		$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";
5203
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5204
 
5205
		$sth = $this->db->prepare($query);
5206
		$sth->execute($query_values);
5207
5208
		$aircraft_array = array();
5209
		$temp_array = array();
5210
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5211
		{
5212
			$temp_array['airline_icao'] = $row['airline_icao'];
5213
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5214
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5215
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5216
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5217
			$aircraft_array[] = $temp_array;
5218
		}
5219
		return $aircraft_array;
5220
	}
5221
5222
	/**
5223
	* Gets all aircraft types that have flown over by months
5224
	*
5225
	* @return Array the aircraft list
5226
	*
5227
	*/
5228
	public function countAllAircraftTypesByMonths($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
5229
	{
5230
		global $globalDBdriver;
5231
		$filter_query = $this->getFilter($filters,true,true);
5232
		$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 
5233
		    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' ";
5234
		if ($olderthanmonths > 0) {
5235
			if ($globalDBdriver == 'mysql') {
5236
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5237
			} else {
5238
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5239
			}
5240
		}
5241
		if ($sincedate != '') {
5242
			if ($globalDBdriver == 'mysql') {
5243
				$query .= "AND spotter_output.date > '".$sincedate."' ";
5244
			} else {
5245
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5246
			}
5247
		}
5248
5249
		$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";
5250
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5251
 
5252
		$sth = $this->db->prepare($query);
5253
		$sth->execute();
5254
5255
		$aircraft_array = array();
5256
		$temp_array = array();
5257
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5258
		{
5259
			//$temp_array['airline_icao'] = $row['airline_icao'];
5260
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5261
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5262
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5263
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5264
			$aircraft_array[] = $temp_array;
5265
		}
5266
		return $aircraft_array;
5267
	}
5268
5269
5270
	/**
5271
	* Gets all aircraft registration that have flown over by aircaft icao
5272
	*
5273
	* @return Array the aircraft list
5274
	*
5275
	*/
5276
	public function countAllAircraftRegistrationByAircraft($aircraft_icao,$filters = array())
5277
	{
5278
		$Image = new Image($this->db);
5279
		$filter_query = $this->getFilter($filters,true,true);
5280
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
5281
5282
		$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  
5283
				FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_icao = :aircraft_icao  
5284
				GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name  
5285
				ORDER BY registration_count DESC";
5286
5287
		$sth = $this->db->prepare($query);
5288
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
5289
5290
		$aircraft_array = array();
5291
		$temp_array = array();
5292
        
5293
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5294
		{
5295
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5296
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5297
			$temp_array['registration'] = $row['registration'];
5298
			$temp_array['airline_name'] = $row['airline_name'];
5299
			$temp_array['image_thumbnail'] = "";
5300
			if($row['registration'] != "")
5301
			{
5302
				$image_array = $Image->getSpotterImage($row['registration']);
5303
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5304
			}
5305
			$temp_array['registration_count'] = $row['registration_count'];
5306
5307
			$aircraft_array[] = $temp_array;
5308
		}
5309
		return $aircraft_array;
5310
	}
5311
5312
5313
	/**
5314
	* Gets all aircraft types that have flown over by airline icao
5315
	*
5316
	* @return Array the aircraft list
5317
	*
5318
	*/
5319
	public function countAllAircraftTypesByAirline($airline_icao,$filters = array())
5320
	{
5321
		$filter_query = $this->getFilter($filters,true,true);
5322
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5323
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5324
			    FROM spotter_output".$filter_query." spotter_output.aircraft_icao <> '' AND spotter_output.airline_icao = :airline_icao 
5325
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5326
			    ORDER BY aircraft_icao_count DESC";
5327
5328
		$sth = $this->db->prepare($query);
5329
		$sth->execute(array(':airline_icao' => $airline_icao));
5330
5331
		$aircraft_array = array();
5332
		$temp_array = array();
5333
5334
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5335
		{
5336
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5337
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5338
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5339
5340
			$aircraft_array[] = $temp_array;
5341
		}
5342
		return $aircraft_array;
5343
	}
5344
5345
5346
	/**
5347
	* Gets all aircraft registration that have flown over by airline icao
5348
	*
5349
	* @return Array the aircraft list
5350
	*
5351
	*/
5352
	public function countAllAircraftRegistrationByAirline($airline_icao,$filters = array())
5353
	{
5354
		$filter_query = $this->getFilter($filters,true,true);
5355
		$Image = new Image($this->db);
5356
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5357
5358
		$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 
5359
			    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.airline_icao = :airline_icao 
5360
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
5361
			    ORDER BY registration_count DESC";
5362
5363
		$sth = $this->db->prepare($query);
5364
		$sth->execute(array(':airline_icao' => $airline_icao));
5365
5366
		$aircraft_array = array();
5367
		$temp_array = array();
5368
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5369
		{
5370
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5371
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5372
			$temp_array['registration'] = $row['registration'];
5373
			$temp_array['airline_name'] = $row['airline_name'];
5374
			$temp_array['image_thumbnail'] = "";
5375
			if($row['registration'] != "")
5376
			{
5377
				$image_array = $Image->getSpotterImage($row['registration']);
5378
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5379
			}
5380
			$temp_array['registration_count'] = $row['registration_count'];
5381
5382
			$aircraft_array[] = $temp_array;
5383
		}
5384
		return $aircraft_array;
5385
	}
5386
5387
5388
	/**
5389
	* Gets all aircraft manufacturer that have flown over by airline icao
5390
	*
5391
	* @return Array the aircraft list
5392
	*
5393
	*/
5394
	public function countAllAircraftManufacturerByAirline($airline_icao,$filters = array())
5395
	{
5396
		$filter_query = $this->getFilter($filters,true,true);
5397
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5398
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5399
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.airline_icao = :airline_icao 
5400
				GROUP BY spotter_output.aircraft_manufacturer 
5401
				ORDER BY aircraft_manufacturer_count DESC";
5402
5403
		$sth = $this->db->prepare($query);
5404
		$sth->execute(array(':airline_icao' => $airline_icao));
5405
5406
		$aircraft_array = array();
5407
		$temp_array = array();
5408
5409
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5410
		{
5411
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5412
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5413
5414
			$aircraft_array[] = $temp_array;
5415
		}
5416
		return $aircraft_array;
5417
	}
5418
5419
5420
	/**
5421
	* Gets all aircraft types that have flown over by airline icao
5422
	*
5423
	* @return Array the aircraft list
5424
	*
5425
	*/
5426
	public function countAllAircraftTypesByAirport($airport_icao,$filters = array())
5427
	{
5428
		$filter_query = $this->getFilter($filters,true,true);
5429
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5430
5431
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5432
				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) 
5433
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5434
				ORDER BY aircraft_icao_count DESC";
5435
 
5436
		$sth = $this->db->prepare($query);
5437
		$sth->execute(array(':airport_icao' => $airport_icao));
5438
5439
		$aircraft_array = array();
5440
		$temp_array = array();
5441
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5442
		{
5443
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5444
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5445
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5446
5447
			$aircraft_array[] = $temp_array;
5448
		}
5449
		return $aircraft_array;
5450
	}
5451
5452
5453
	/**
5454
	* Gets all aircraft registration that have flown over by airport icao
5455
	*
5456
	* @return Array the aircraft list
5457
	*
5458
	*/
5459
	public function countAllAircraftRegistrationByAirport($airport_icao,$filters = array())
5460
	{
5461
		$filter_query = $this->getFilter($filters,true,true);
5462
		$Image = new Image($this->db);
5463
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5464
5465
		$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  
5466
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)   
5467
                    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5468
		    ORDER BY registration_count DESC";
5469
5470
		$sth = $this->db->prepare($query);
5471
		$sth->execute(array(':airport_icao' => $airport_icao));
5472
5473
		$aircraft_array = array();
5474
		$temp_array = array();
5475
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5476
		{
5477
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5478
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5479
			$temp_array['registration'] = $row['registration'];
5480
			$temp_array['airline_name'] = $row['airline_name'];
5481
			$temp_array['image_thumbnail'] = "";
5482
			if($row['registration'] != "")
5483
			{
5484
				$image_array = $Image->getSpotterImage($row['registration']);
5485
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5486
			}
5487
			$temp_array['registration_count'] = $row['registration_count'];
5488
			$aircraft_array[] = $temp_array;
5489
		}
5490
		return $aircraft_array;
5491
	}
5492
	
5493
	
5494
	/**
5495
	* Gets all aircraft manufacturer that have flown over by airport icao
5496
	*
5497
	* @return Array the aircraft list
5498
	*
5499
	*/
5500
	public function countAllAircraftManufacturerByAirport($airport_icao,$filters = array())
5501
	{
5502
		$filter_query = $this->getFilter($filters,true,true);
5503
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5504
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5505
                    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)  
5506
                    GROUP BY spotter_output.aircraft_manufacturer 
5507
					ORDER BY aircraft_manufacturer_count DESC";
5508
5509
		
5510
		$sth = $this->db->prepare($query);
5511
		$sth->execute(array(':airport_icao' => $airport_icao));
5512
5513
		$aircraft_array = array();
5514
		$temp_array = array();
5515
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5516
		{
5517
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5518
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5519
			$aircraft_array[] = $temp_array;
5520
		}
5521
		return $aircraft_array;
5522
	}
5523
5524
	/**
5525
	* Gets all aircraft types that have flown over by aircraft manufacturer
5526
	*
5527
	* @return Array the aircraft list
5528
	*
5529
	*/
5530
	public function countAllAircraftTypesByManufacturer($aircraft_manufacturer,$filters = array())
5531
	{
5532
		$filter_query = $this->getFilter($filters,true,true);
5533
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5534
5535
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5536
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
5537
                    GROUP BY spotter_output.aircraft_name 
5538
					ORDER BY aircraft_icao_count DESC";
5539
5540
		$sth = $this->db->prepare($query);
5541
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5542
		$aircraft_array = array();
5543
		$temp_array = array();
5544
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5545
		{
5546
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5547
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5548
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5549
			$aircraft_array[] = $temp_array;
5550
		}
5551
		return $aircraft_array;
5552
	}
5553
5554
5555
	/**
5556
	* Gets all aircraft registration that have flown over by aircaft manufacturer
5557
	*
5558
	* @return Array the aircraft list
5559
	*
5560
	*/
5561
	public function countAllAircraftRegistrationByManufacturer($aircraft_manufacturer, $filters = array())
5562
	{
5563
		$filter_query = $this->getFilter($filters,true,true);
5564
		$Image = new Image($this->db);
5565
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5566
5567
		$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   
5568
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
5569
                    GROUP BY spotter_output.registration 
5570
					ORDER BY registration_count DESC";
5571
5572
		
5573
		$sth = $this->db->prepare($query);
5574
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5575
		$aircraft_array = array();
5576
		$temp_array = array();
5577
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5578
		{
5579
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5580
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5581
			$temp_array['registration'] = $row['registration'];
5582
			$temp_array['airline_name'] = $row['airline_name'];
5583
			$temp_array['image_thumbnail'] = "";
5584
			if($row['registration'] != "")
5585
			{
5586
				$image_array = $Image->getSpotterImage($row['registration']);
5587
				$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5588
			}
5589
			$temp_array['registration_count'] = $row['registration_count'];
5590
			$aircraft_array[] = $temp_array;
5591
		}
5592
		return $aircraft_array;
5593
	}
5594
5595
	/**
5596
	* Gets all aircraft types that have flown over by date
5597
	*
5598
	* @return Array the aircraft list
5599
	*
5600
	*/
5601
	public function countAllAircraftTypesByDate($date,$filters = array())
5602
	{
5603
		global $globalTimezone, $globalDBdriver;
5604
		$filter_query = $this->getFilter($filters,true,true);
5605
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5606
		if ($globalTimezone != '') {
5607
			date_default_timezone_set($globalTimezone);
5608
			$datetime = new DateTime($date);
5609
			$offset = $datetime->format('P');
5610
		} else $offset = '+00:00';
5611
5612
		if ($globalDBdriver == 'mysql') {
5613
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5614
					FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
5615
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5616
					ORDER BY aircraft_icao_count DESC";
5617
		} else {
5618
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5619
					FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date
5620
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5621
					ORDER BY aircraft_icao_count DESC";
5622
		}
5623
		
5624
		$sth = $this->db->prepare($query);
5625
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5626
5627
		$aircraft_array = array();
5628
		$temp_array = array();
5629
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5630
		{
5631
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5632
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5633
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5634
5635
			$aircraft_array[] = $temp_array;
5636
		}
5637
		return $aircraft_array;
5638
	}
5639
5640
5641
	/**
5642
	* Gets all aircraft registration that have flown over by date
5643
	*
5644
	* @return Array the aircraft list
5645
	*
5646
	*/
5647
	public function countAllAircraftRegistrationByDate($date,$filters = array())
5648
	{
5649
		global $globalTimezone, $globalDBdriver;
5650
		$filter_query = $this->getFilter($filters,true,true);
5651
		$Image = new Image($this->db);
5652
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5653
		if ($globalTimezone != '') {
5654
			date_default_timezone_set($globalTimezone);
5655
			$datetime = new DateTime($date);
5656
			$offset = $datetime->format('P');
5657
		} else $offset = '+00:00';
5658
5659
		if ($globalDBdriver == 'mysql') {
5660
			$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 
5661
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5662
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5663
					ORDER BY registration_count DESC";
5664
		} else {
5665
			$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    
5666
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5667
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5668
					ORDER BY registration_count DESC";
5669
		}
5670
		
5671
		$sth = $this->db->prepare($query);
5672
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5673
5674
		$aircraft_array = array();
5675
		$temp_array = array();
5676
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5677
		{
5678
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5679
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5680
			$temp_array['registration'] = $row['registration'];
5681
			$temp_array['airline_name'] = $row['airline_name'];
5682
			$temp_array['image_thumbnail'] = "";
5683
			if($row['registration'] != "")
5684
			{
5685
				$image_array = $Image->getSpotterImage($row['registration']);
5686
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5687
			}
5688
			$temp_array['registration_count'] = $row['registration_count'];
5689
 
5690
			$aircraft_array[] = $temp_array;
5691
		}
5692
		return $aircraft_array;
5693
	}
5694
5695
5696
	/**
5697
	* Gets all aircraft manufacturer that have flown over by date
5698
	*
5699
	* @return Array the aircraft manufacturer list
5700
	*
5701
	*/
5702
	public function countAllAircraftManufacturerByDate($date,$filters = array())
5703
	{
5704
		global $globalTimezone, $globalDBdriver;
5705
		$filter_query = $this->getFilter($filters,true,true);
5706
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5707
		if ($globalTimezone != '') {
5708
			date_default_timezone_set($globalTimezone);
5709
			$datetime = new DateTime($date);
5710
			$offset = $datetime->format('P');
5711
		} else $offset = '+00:00';
5712
5713
		if ($globalDBdriver == 'mysql') {
5714
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5715
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5716
				GROUP BY spotter_output.aircraft_manufacturer 
5717
				ORDER BY aircraft_manufacturer_count DESC";
5718
		} else {
5719
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5720
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5721
				GROUP BY spotter_output.aircraft_manufacturer 
5722
				ORDER BY aircraft_manufacturer_count DESC";
5723
		}
5724
		
5725
		$sth = $this->db->prepare($query);
5726
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5727
5728
		$aircraft_array = array();
5729
		$temp_array = array();
5730
5731
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5732
		{
5733
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5734
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5735
5736
			$aircraft_array[] = $temp_array;
5737
		}
5738
		return $aircraft_array;
5739
	}
5740
5741
5742
	/**
5743
	* Gets all aircraft types that have flown over by ident/callsign
5744
	*
5745
	* @return Array the aircraft list
5746
	*
5747
	*/
5748
	public function countAllAircraftTypesByIdent($ident,$filters = array())
5749
	{
5750
		$filter_query = $this->getFilter($filters,true,true);
5751
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5752
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5753
				FROM spotter_output".$filter_query." spotter_output.ident = :ident 
5754
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao
5755
				ORDER BY aircraft_icao_count DESC";
5756
5757
		$sth = $this->db->prepare($query);
5758
		$sth->execute(array(':ident' => $ident));
5759
      
5760
		$aircraft_array = array();
5761
		$temp_array = array();
5762
5763
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5764
		{
5765
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5766
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5767
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5768
5769
			$aircraft_array[] = $temp_array;
5770
		}
5771
		return $aircraft_array;
5772
	}
5773
5774
	/**
5775
	* Gets all aircraft types that have flown over by pilot
5776
	*
5777
	* @return Array the aircraft list
5778
	*
5779
	*/
5780
	public function countAllAircraftTypesByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
5781
	{
5782
		global $globalDBdriver;
5783
		$filter_query = $this->getFilter($filters,true,true);
5784
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
5785
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5786
				FROM spotter_output".$filter_query." (spotter_output.pilot_id = :pilot OR spotter_output.pilot_name = :pilot)";
5787
		$query_values = array();
5788
		if ($year != '') {
5789
			if ($globalDBdriver == 'mysql') {
5790
				$query .= " AND YEAR(spotter_output.date) = :year";
5791
				$query_values = array_merge($query_values,array(':year' => $year));
5792
			} else {
5793
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5794
				$query_values = array_merge($query_values,array(':year' => $year));
5795
			}
5796
		}
5797
		if ($month != '') {
5798
			if ($globalDBdriver == 'mysql') {
5799
				$query .= " AND MONTH(spotter_output.date) = :month";
5800
				$query_values = array_merge($query_values,array(':month' => $month));
5801
			} else {
5802
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5803
				$query_values = array_merge($query_values,array(':month' => $month));
5804
			}
5805
		}
5806
		if ($day != '') {
5807
			if ($globalDBdriver == 'mysql') {
5808
				$query .= " AND DAY(spotter_output.date) = :day";
5809
				$query_values = array_merge($query_values,array(':day' => $day));
5810
			} else {
5811
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5812
				$query_values = array_merge($query_values,array(':day' => $day));
5813
			}
5814
		}
5815
5816
		$query .= " GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao
5817
				ORDER BY aircraft_icao_count DESC";
5818
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
5819
		$sth = $this->db->prepare($query);
5820
		$sth->execute($query_values);
5821
		return $sth->fetchAll(PDO::FETCH_ASSOC);
5822
	}
5823
5824
	/**
5825
	* Gets all aircraft types that have flown over by owner
5826
	*
5827
	* @return Array the aircraft list
5828
	*
5829
	*/
5830
	public function countAllAircraftTypesByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
5831
	{
5832
		global $globalDBdriver;
5833
		$filter_query = $this->getFilter($filters,true,true);
5834
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
5835
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
5836
				FROM spotter_output".$filter_query." spotter_output.owner_name = :owner";
5837
		$query_values = array();
5838
		if ($year != '') {
5839
			if ($globalDBdriver == 'mysql') {
5840
				$query .= " AND YEAR(spotter_output.date) = :year";
5841
				$query_values = array_merge($query_values,array(':year' => $year));
5842
			} else {
5843
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5844
				$query_values = array_merge($query_values,array(':year' => $year));
5845
			}
5846
		}
5847
		if ($month != '') {
5848
			if ($globalDBdriver == 'mysql') {
5849
				$query .= " AND MONTH(spotter_output.date) = :month";
5850
				$query_values = array_merge($query_values,array(':month' => $month));
5851
			} else {
5852
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5853
				$query_values = array_merge($query_values,array(':month' => $month));
5854
			}
5855
		}
5856
		if ($day != '') {
5857
			if ($globalDBdriver == 'mysql') {
5858
				$query .= " AND DAY(spotter_output.date) = :day";
5859
				$query_values = array_merge($query_values,array(':day' => $day));
5860
			} else {
5861
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5862
				$query_values = array_merge($query_values,array(':day' => $day));
5863
			}
5864
		}
5865
		$query .= " GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.aircraft_icao
5866
				ORDER BY aircraft_icao_count DESC";
5867
		$query_values = array_merge($query_values,array(':owner' => $owner));
5868
		$sth = $this->db->prepare($query);
5869
		$sth->execute($query_values);
5870
		return $sth->fetchAll(PDO::FETCH_ASSOC);
5871
	}
5872
5873
	/**
5874
	* Gets all aircraft registration that have flown over by ident/callsign
5875
	*
5876
	* @return Array the aircraft list
5877
	*
5878
	*/
5879
	public function countAllAircraftRegistrationByIdent($ident,$filters = array())
5880
	{
5881
		$filter_query = $this->getFilter($filters,true,true);
5882
		$Image = new Image($this->db);
5883
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5884
5885
		$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  
5886
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.ident = :ident   
5887
                    GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
5888
		    ORDER BY registration_count DESC";
5889
5890
		
5891
		$sth = $this->db->prepare($query);
5892
		$sth->execute(array(':ident' => $ident));
5893
      
5894
		$aircraft_array = array();
5895
		$temp_array = array();
5896
        
5897
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5898
		{
5899
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5900
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5901
			$temp_array['registration'] = $row['registration'];
5902
			$temp_array['airline_name'] = $row['airline_name'];
5903
			$temp_array['image_thumbnail'] = "";
5904
			if($row['registration'] != "")
5905
			{
5906
				$image_array = $Image->getSpotterImage($row['registration']);
5907
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5908
				else $temp_array['image_thumbnail'] = '';
5909
			}
5910
			$temp_array['registration_count'] = $row['registration_count'];
5911
			$aircraft_array[] = $temp_array;
5912
		}
5913
		return $aircraft_array;
5914
	}
5915
5916
	/**
5917
	* Gets all aircraft registration that have flown over by owner
5918
	*
5919
	* @return Array the aircraft list
5920
	*
5921
	*/
5922
	public function countAllAircraftRegistrationByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
5923
	{
5924
		global $globalDBdriver;
5925
		$filter_query = $this->getFilter($filters,true,true);
5926
		$Image = new Image($this->db);
5927
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
5928
5929
		$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  
5930
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.owner_name = :owner";
5931
		$query_values = array();
5932
		if ($year != '') {
5933
			if ($globalDBdriver == 'mysql') {
5934
				$query .= " AND YEAR(spotter_output.date) = :year";
5935
				$query_values = array_merge($query_values,array(':year' => $year));
5936
			} else {
5937
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5938
				$query_values = array_merge($query_values,array(':year' => $year));
5939
			}
5940
		}
5941
		if ($month != '') {
5942
			if ($globalDBdriver == 'mysql') {
5943
				$query .= " AND MONTH(spotter_output.date) = :month";
5944
				$query_values = array_merge($query_values,array(':month' => $month));
5945
			} else {
5946
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5947
				$query_values = array_merge($query_values,array(':month' => $month));
5948
			}
5949
		}
5950
		if ($day != '') {
5951
			if ($globalDBdriver == 'mysql') {
5952
				$query .= " AND DAY(spotter_output.date) = :day";
5953
				$query_values = array_merge($query_values,array(':day' => $day));
5954
			} else {
5955
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5956
				$query_values = array_merge($query_values,array(':day' => $day));
5957
			}
5958
		}
5959
		$query_values = array_merge($query_values,array(':owner' => $owner));
5960
5961
		$query .= " GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.airline_name
5962
		    ORDER BY registration_count DESC";
5963
5964
		
5965
		$sth = $this->db->prepare($query);
5966
		$sth->execute($query_values);
5967
      
5968
		$aircraft_array = array();
5969
		$temp_array = array();
5970
        
5971
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5972
		{
5973
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5974
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5975
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5976
			$temp_array['registration'] = $row['registration'];
5977
			$temp_array['airline_name'] = $row['airline_name'];
5978
			$temp_array['image_thumbnail'] = "";
5979
			if($row['registration'] != "")
5980
			{
5981
				$image_array = $Image->getSpotterImage($row['registration']);
5982
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5983
				else $temp_array['image_thumbnail'] = '';
5984
			}
5985
			$temp_array['registration_count'] = $row['registration_count'];
5986
			$aircraft_array[] = $temp_array;
5987
		}
5988
		return $aircraft_array;
5989
	}
5990
5991
	/**
5992
	* Gets all aircraft registration that have flown over by pilot
5993
	*
5994
	* @return Array the aircraft list
5995
	*
5996
	*/
5997
	public function countAllAircraftRegistrationByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
5998
	{
5999
		global $globalDBdriver;
6000
		$filter_query = $this->getFilter($filters,true,true);
6001
		$Image = new Image($this->db);
6002
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
6003
6004
		$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  
6005
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot)";
6006
		$query_values = array();
6007
		if ($year != '') {
6008
			if ($globalDBdriver == 'mysql') {
6009
				$query .= " AND YEAR(spotter_output.date) = :year";
6010
				$query_values = array_merge($query_values,array(':year' => $year));
6011
			} else {
6012
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6013
				$query_values = array_merge($query_values,array(':year' => $year));
6014
			}
6015
		}
6016
		if ($month != '') {
6017
			if ($globalDBdriver == 'mysql') {
6018
				$query .= " AND MONTH(spotter_output.date) = :month";
6019
				$query_values = array_merge($query_values,array(':month' => $month));
6020
			} else {
6021
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6022
				$query_values = array_merge($query_values,array(':month' => $month));
6023
			}
6024
		}
6025
		if ($day != '') {
6026
			if ($globalDBdriver == 'mysql') {
6027
				$query .= " AND DAY(spotter_output.date) = :day";
6028
				$query_values = array_merge($query_values,array(':day' => $day));
6029
			} else {
6030
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6031
				$query_values = array_merge($query_values,array(':day' => $day));
6032
			}
6033
		}
6034
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
6035
6036
		$query .= " GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.airline_name
6037
		    ORDER BY registration_count DESC";
6038
6039
		
6040
		$sth = $this->db->prepare($query);
6041
		$sth->execute($query_values);
6042
      
6043
		$aircraft_array = array();
6044
		$temp_array = array();
6045
        
6046
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6047
		{
6048
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6049
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6050
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6051
			$temp_array['registration'] = $row['registration'];
6052
			$temp_array['airline_name'] = $row['airline_name'];
6053
			$temp_array['image_thumbnail'] = "";
6054
			if($row['registration'] != "")
6055
			{
6056
				$image_array = $Image->getSpotterImage($row['registration']);
6057
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6058
				else $temp_array['image_thumbnail'] = '';
6059
			}
6060
			$temp_array['registration_count'] = $row['registration_count'];
6061
			$aircraft_array[] = $temp_array;
6062
		}
6063
		return $aircraft_array;
6064
	}
6065
6066
6067
	/**
6068
	* Gets all aircraft manufacturer that have flown over by ident/callsign
6069
	*
6070
	* @return Array the aircraft manufacturer list
6071
	*
6072
	*/
6073
	public function countAllAircraftManufacturerByIdent($ident,$filters = array())
6074
	{
6075
		$filter_query = $this->getFilter($filters,true,true);
6076
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
6077
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6078
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.ident = :ident  
6079
                    GROUP BY spotter_output.aircraft_manufacturer 
6080
					ORDER BY aircraft_manufacturer_count DESC";
6081
6082
		
6083
		$sth = $this->db->prepare($query);
6084
		$sth->execute(array(':ident' => $ident));
6085
		$aircraft_array = array();
6086
		$temp_array = array();
6087
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6088
		{
6089
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6090
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6091
			$aircraft_array[] = $temp_array;
6092
		}
6093
		return $aircraft_array;
6094
	}
6095
6096
	/**
6097
	* Gets all aircraft manufacturer that have flown over by owner
6098
	*
6099
	* @return Array the aircraft manufacturer list
6100
	*
6101
	*/
6102
	public function countAllAircraftManufacturerByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
6103
	{
6104
		global $globalDBdriver;
6105
		$filter_query = $this->getFilter($filters,true,true);
6106
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
6107
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6108
		    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.owner_name = :owner";
6109
		$query_values = array();
6110
		if ($year != '') {
6111
			if ($globalDBdriver == 'mysql') {
6112
				$query .= " AND YEAR(spotter_output.date) = :year";
6113
				$query_values = array_merge($query_values,array(':year' => $year));
6114
			} else {
6115
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6116
				$query_values = array_merge($query_values,array(':year' => $year));
6117
			}
6118
		}
6119
		if ($month != '') {
6120
			if ($globalDBdriver == 'mysql') {
6121
				$query .= " AND MONTH(spotter_output.date) = :month";
6122
				$query_values = array_merge($query_values,array(':month' => $month));
6123
			} else {
6124
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6125
				$query_values = array_merge($query_values,array(':month' => $month));
6126
			}
6127
		}
6128
		if ($day != '') {
6129
			if ($globalDBdriver == 'mysql') {
6130
				$query .= " AND DAY(spotter_output.date) = :day";
6131
				$query_values = array_merge($query_values,array(':day' => $day));
6132
			} else {
6133
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6134
				$query_values = array_merge($query_values,array(':day' => $day));
6135
			}
6136
		}
6137
		$query_values = array_merge($query_values,array(':owner' => $owner));
6138
6139
		$query .= " GROUP BY spotter_output.aircraft_manufacturer 
6140
		    ORDER BY aircraft_manufacturer_count DESC";
6141
6142
		
6143
		$sth = $this->db->prepare($query);
6144
		$sth->execute($query_values);
6145
		return $sth->fetchAll(PDO::FETCH_ASSOC);
6146
	}
6147
6148
	/**
6149
	* Gets all aircraft manufacturer that have flown over by pilot
6150
	*
6151
	* @return Array the aircraft manufacturer list
6152
	*
6153
	*/
6154
	public function countAllAircraftManufacturerByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
6155
	{
6156
		global $globalDBdriver;
6157
		$filter_query = $this->getFilter($filters,true,true);
6158
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
6159
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6160
		    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot)";
6161
		$query_values = array();
6162
		if ($year != '') {
6163
			if ($globalDBdriver == 'mysql') {
6164
				$query .= " AND YEAR(spotter_output.date) = :year";
6165
				$query_values = array_merge($query_values,array(':year' => $year));
6166
			} else {
6167
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6168
				$query_values = array_merge($query_values,array(':year' => $year));
6169
			}
6170
		}
6171
		if ($month != '') {
6172
			if ($globalDBdriver == 'mysql') {
6173
				$query .= " AND MONTH(spotter_output.date) = :month";
6174
				$query_values = array_merge($query_values,array(':month' => $month));
6175
			} else {
6176
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6177
				$query_values = array_merge($query_values,array(':month' => $month));
6178
			}
6179
		}
6180
		if ($day != '') {
6181
			if ($globalDBdriver == 'mysql') {
6182
				$query .= " AND DAY(spotter_output.date) = :day";
6183
				$query_values = array_merge($query_values,array(':day' => $day));
6184
			} else {
6185
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6186
				$query_values = array_merge($query_values,array(':day' => $day));
6187
			}
6188
		}
6189
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
6190
6191
		$query .= " GROUP BY spotter_output.aircraft_manufacturer 
6192
		    ORDER BY aircraft_manufacturer_count DESC";
6193
6194
		
6195
		$sth = $this->db->prepare($query);
6196
		$sth->execute($query_values);
6197
		return $sth->fetchAll(PDO::FETCH_ASSOC);
6198
	}
6199
6200
6201
	/**
6202
	* Gets all aircraft types that have flown over by route
6203
	*
6204
	* @return Array the aircraft list
6205
	*
6206
	*/
6207
	public function countAllAircraftTypesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
6208
	{
6209
		$filter_query = $this->getFilter($filters,true,true);
6210
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
6211
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
6212
		
6213
6214
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
6215
                    FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
6216
                    GROUP BY spotter_output.aircraft_name 
6217
					ORDER BY aircraft_icao_count DESC";
6218
 
6219
		
6220
		$sth = $this->db->prepare($query);
6221
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
6222
		$aircraft_array = array();
6223
		$temp_array = array();
6224
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6225
		{
6226
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6227
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6228
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
6229
			$aircraft_array[] = $temp_array;
6230
		}
6231
		return $aircraft_array;
6232
	}
6233
6234
	/**
6235
	* Gets all aircraft registration that have flown over by route
6236
	*
6237
	* @return Array the aircraft list
6238
	*
6239
	*/
6240
	public function countAllAircraftRegistrationByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
6241
	{
6242
		$filter_query = $this->getFilter($filters,true,true);
6243
		$Image = new Image($this->db);
6244
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
6245
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
6246
6247
		$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   
6248
                    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)   
6249
                    GROUP BY spotter_output.registration 
6250
					ORDER BY registration_count DESC";
6251
6252
		
6253
		$sth = $this->db->prepare($query);
6254
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
6255
      
6256
		$aircraft_array = array();
6257
		$temp_array = array();
6258
        
6259
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6260
		{
6261
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6262
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6263
			$temp_array['registration'] = $row['registration'];
6264
			$temp_array['airline_name'] = $row['airline_name'];
6265
			$temp_array['image_thumbnail'] = "";
6266
			if($row['registration'] != "")
6267
			{
6268
				$image_array = $Image->getSpotterImage($row['registration']);
6269
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6270
			}
6271
			$temp_array['registration_count'] = $row['registration_count'];
6272
          
6273
			$aircraft_array[] = $temp_array;
6274
		}
6275
6276
		return $aircraft_array;
6277
	}
6278
	
6279
	
6280
	/**
6281
	* Gets all aircraft manufacturer that have flown over by route
6282
	*
6283
	* @return Array the aircraft manufacturer list
6284
	*
6285
	*/
6286
	public function countAllAircraftManufacturerByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
6287
	{
6288
		$filter_query = $this->getFilter($filters,true,true);
6289
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
6290
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
6291
6292
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6293
                    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) 
6294
                    GROUP BY spotter_output.aircraft_manufacturer 
6295
					ORDER BY aircraft_manufacturer_count DESC";
6296
6297
		
6298
		$sth = $this->db->prepare($query);
6299
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
6300
      
6301
		$aircraft_array = array();
6302
		$temp_array = array();
6303
        
6304
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6305
		{
6306
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6307
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6308
          
6309
			$aircraft_array[] = $temp_array;
6310
		}
6311
6312
		return $aircraft_array;
6313
	}	
6314
6315
	
6316
	
6317
	
6318
	/**
6319
	* Gets all aircraft types that have flown over by country
6320
	*
6321
	* @return Array the aircraft list
6322
	*
6323
	*/
6324
	public function countAllAircraftTypesByCountry($country,$filters = array())
6325
	{
6326
		$filter_query = $this->getFilter($filters,true,true);
6327
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6328
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
6329
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
6330
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
6331
			    ORDER BY aircraft_icao_count DESC";
6332
 
6333
		
6334
		$sth = $this->db->prepare($query);
6335
		$sth->execute(array(':country' => $country));
6336
      
6337
		$aircraft_array = array();
6338
		$temp_array = array();
6339
        
6340
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6341
		{
6342
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6343
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6344
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
6345
          
6346
			$aircraft_array[] = $temp_array;
6347
		}
6348
6349
		return $aircraft_array;
6350
	}
6351
6352
6353
	/**
6354
	* Gets all aircraft registration that have flown over by country
6355
	*
6356
	* @return Array the aircraft list
6357
	*
6358
	*/
6359
	public function countAllAircraftRegistrationByCountry($country,$filters = array())
6360
	{
6361
		$filter_query = $this->getFilter($filters,true,true);
6362
		$Image = new Image($this->db);
6363
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6364
		$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 
6365
			    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)    
6366
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
6367
			    ORDER BY registration_count DESC";
6368
6369
		
6370
		$sth = $this->db->prepare($query);
6371
		$sth->execute(array(':country' => $country));
6372
      
6373
		$aircraft_array = array();
6374
		$temp_array = array();
6375
        
6376
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6377
		{
6378
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6379
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6380
			$temp_array['registration'] = $row['registration'];
6381
			$temp_array['airline_name'] = $row['airline_name'];
6382
			$temp_array['image_thumbnail'] = "";
6383
			if($row['registration'] != "")
6384
			{
6385
				$image_array = $Image->getSpotterImage($row['registration']);
6386
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6387
			}
6388
			$temp_array['registration_count'] = $row['registration_count'];
6389
          
6390
			$aircraft_array[] = $temp_array;
6391
		}
6392
6393
		return $aircraft_array;
6394
	}
6395
	
6396
	
6397
	/**
6398
	* Gets all aircraft manufacturer that have flown over by country
6399
	*
6400
	* @return Array the aircraft manufacturer list
6401
	*
6402
	*/
6403
	public function countAllAircraftManufacturerByCountry($country,$filters = array())
6404
	{
6405
		$filter_query = $this->getFilter($filters,true,true);
6406
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6407
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6408
                    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) 
6409
                    GROUP BY spotter_output.aircraft_manufacturer 
6410
					ORDER BY aircraft_manufacturer_count DESC";
6411
6412
		
6413
		$sth = $this->db->prepare($query);
6414
		$sth->execute(array(':country' => $country));
6415
      
6416
		$aircraft_array = array();
6417
		$temp_array = array();
6418
        
6419
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6420
		{
6421
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6422
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6423
          
6424
			$aircraft_array[] = $temp_array;
6425
		}
6426
6427
		return $aircraft_array;
6428
	}	
6429
	
6430
	
6431
	
6432
	/**
6433
	* Gets all aircraft manufacturers that have flown over
6434
	*
6435
	* @return Array the aircraft list
6436
	*
6437
	*/
6438
	public function countAllAircraftManufacturers($filters = array(),$year = '',$month = '',$day = '')
6439
	{
6440
		global $globalDBdriver;
6441
		$filter_query = $this->getFilter($filters,true,true);
6442
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6443
                    FROM spotter_output ".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.aircraft_manufacturer <> 'Not Available'";
6444
                $query_values = array();
6445
		if ($year != '') {
6446
			if ($globalDBdriver == 'mysql') {
6447
				$query .= " AND YEAR(spotter_output.date) = :year";
6448
				$query_values = array_merge($query_values,array(':year' => $year));
6449
			} else {
6450
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6451
				$query_values = array_merge($query_values,array(':year' => $year));
6452
			}
6453
		}
6454
		if ($month != '') {
6455
			if ($globalDBdriver == 'mysql') {
6456
				$query .= " AND MONTH(spotter_output.date) = :month";
6457
				$query_values = array_merge($query_values,array(':month' => $month));
6458
			} else {
6459
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6460
				$query_values = array_merge($query_values,array(':month' => $month));
6461
			}
6462
		}
6463
		if ($day != '') {
6464
			if ($globalDBdriver == 'mysql') {
6465
				$query .= " AND DAY(spotter_output.date) = :day";
6466
				$query_values = array_merge($query_values,array(':day' => $day));
6467
			} else {
6468
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6469
				$query_values = array_merge($query_values,array(':day' => $day));
6470
			}
6471
		}
6472
		$query .= " GROUP BY spotter_output.aircraft_manufacturer
6473
					ORDER BY aircraft_manufacturer_count DESC
6474
					LIMIT 10";
6475
      
6476
		
6477
		$sth = $this->db->prepare($query);
6478
		$sth->execute($query_values);
6479
      
6480
		$manufacturer_array = array();
6481
		$temp_array = array();
6482
        
6483
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6484
		{
6485
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6486
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6487
          
6488
			$manufacturer_array[] = $temp_array;
6489
		}
6490
6491
		return $manufacturer_array;
6492
	}
6493
	
6494
	
6495
	
6496
	/**
6497
	* Gets all aircraft registrations that have flown over
6498
	*
6499
	* @return Array the aircraft list
6500
	*
6501
	*/
6502
	public function countAllAircraftRegistrations($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '', $month = '', $day = '')
6503
	{
6504
		global $globalDBdriver;
6505
		$Image = new Image($this->db);
6506
		$filter_query = $this->getFilter($filters,true,true);
6507
		$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    
6508
                    FROM spotter_output ".$filter_query." spotter_output.registration <> '' AND spotter_output.registration <> 'NA'";
6509
                if ($olderthanmonths > 0) {
6510
            		if ($globalDBdriver == 'mysql') {
6511
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6512
			} else {
6513
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6514
			}
6515
		}
6516
                if ($sincedate != '') {
6517
            		if ($globalDBdriver == 'mysql') {
6518
				$query .= " AND spotter_output.date > '".$sincedate."'";
6519
			} else {
6520
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6521
			}
6522
		}
6523
		$query_values = array();
6524
		if ($year != '') {
6525
			if ($globalDBdriver == 'mysql') {
6526
				$query .= " AND YEAR(spotter_output.date) = :year";
6527
				$query_values = array_merge($query_values,array(':year' => $year));
6528
			} else {
6529
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6530
				$query_values = array_merge($query_values,array(':year' => $year));
6531
			}
6532
		}
6533
		if ($month != '') {
6534
			if ($globalDBdriver == 'mysql') {
6535
				$query .= " AND MONTH(spotter_output.date) = :month";
6536
				$query_values = array_merge($query_values,array(':month' => $month));
6537
			} else {
6538
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6539
				$query_values = array_merge($query_values,array(':month' => $month));
6540
			}
6541
		}
6542
		if ($day != '') {
6543
			if ($globalDBdriver == 'mysql') {
6544
				$query .= " AND DAY(spotter_output.date) = :day";
6545
				$query_values = array_merge($query_values,array(':day' => $day));
6546
			} else {
6547
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6548
				$query_values = array_merge($query_values,array(':day' => $day));
6549
			}
6550
		}
6551
		$query .= " GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name ORDER BY aircraft_registration_count DESC";
6552
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6553
		
6554
		$sth = $this->db->prepare($query);
6555
		$sth->execute($query_values);
6556
      
6557
		$aircraft_array = array();
6558
		$temp_array = array();
6559
        
6560
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6561
		{
6562
			$temp_array['registration'] = $row['registration'];
6563
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
6564
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6565
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6566
			$temp_array['airline_name'] = $row['airline_name'];
6567
			$temp_array['image_thumbnail'] = "";
6568
			if($row['registration'] != "")
6569
			{
6570
				$image_array = $Image->getSpotterImage($row['registration']);
6571
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6572
			}
6573
          
6574
			$aircraft_array[] = $temp_array;
6575
		}
6576
6577
		return $aircraft_array;
6578
	}
6579
6580
6581
	/**
6582
	* Gets all aircraft registrations that have flown over
6583
	*
6584
	* @return Array the aircraft list
6585
	*
6586
	*/
6587
	public function countAllAircraftRegistrationsByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
6588
	{
6589
		global $globalDBdriver;
6590
		$filter_query = $this->getFilter($filters,true,true);
6591
		$Image = new Image($this->db);
6592
		$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    
6593
                    FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.registration <> '' AND spotter_output.registration <> 'NA' ";
6594
                if ($olderthanmonths > 0) {
6595
            		if ($globalDBdriver == 'mysql') {
6596
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6597
			} else {
6598
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6599
			}
6600
		}
6601
                if ($sincedate != '') {
6602
            		if ($globalDBdriver == 'mysql') {
6603
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6604
			} else {
6605
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6606
			}
6607
		}
6608
6609
		// if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6610
		//if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6611
                $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";
6612
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6613
		
6614
		$sth = $this->db->prepare($query);
6615
		$sth->execute();
6616
      
6617
		$aircraft_array = array();
6618
		$temp_array = array();
6619
        
6620
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6621
		{
6622
			$temp_array['registration'] = $row['registration'];
6623
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
6624
			$temp_array['airline_icao'] = $row['airline_icao'];
6625
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6626
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6627
			$temp_array['airline_name'] = $row['airline_name'];
6628
			$temp_array['image_thumbnail'] = "";
6629
			if($row['registration'] != "")
6630
			{
6631
				$image_array = $Image->getSpotterImage($row['registration']);
6632
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6633
			}
6634
          
6635
			$aircraft_array[] = $temp_array;
6636
		}
6637
6638
		return $aircraft_array;
6639
	}
6640
	
6641
	
6642
	/**
6643
	* Gets all departure airports of the airplanes that have flown over
6644
	*
6645
	* @return Array the airport list
6646
	*
6647
	*/
6648
	public function countAllDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
6649
	{
6650
		global $globalDBdriver;
6651
		$filter_query = $this->getFilter($filters,true,true);
6652
		$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 
6653
				FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> ''";
6654
                if ($olderthanmonths > 0) {
6655
            		if ($globalDBdriver == 'mysql') {
6656
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6657
			} else {
6658
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6659
			}
6660
                }
6661
                if ($sincedate != '') {
6662
            		if ($globalDBdriver == 'mysql') {
6663
				$query .= " AND spotter_output.date > '".$sincedate."'";
6664
			} else {
6665
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6666
			}
6667
		}
6668
		$query_values = array();
6669
		if ($year != '') {
6670
			if ($globalDBdriver == 'mysql') {
6671
				$query .= " AND YEAR(spotter_output.date) = :year";
6672
				$query_values = array_merge($query_values,array(':year' => $year));
6673
			} else {
6674
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6675
				$query_values = array_merge($query_values,array(':year' => $year));
6676
			}
6677
		}
6678
		if ($month != '') {
6679
			if ($globalDBdriver == 'mysql') {
6680
				$query .= " AND MONTH(spotter_output.date) = :month";
6681
				$query_values = array_merge($query_values,array(':month' => $month));
6682
			} else {
6683
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6684
				$query_values = array_merge($query_values,array(':month' => $month));
6685
			}
6686
		}
6687
		if ($day != '') {
6688
			if ($globalDBdriver == 'mysql') {
6689
				$query .= " AND DAY(spotter_output.date) = :day";
6690
				$query_values = array_merge($query_values,array(':day' => $day));
6691
			} else {
6692
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6693
				$query_values = array_merge($query_values,array(':day' => $day));
6694
			}
6695
		}
6696
                $query .= " GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6697
				ORDER BY airport_departure_icao_count DESC";
6698
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6699
6700
		$sth = $this->db->prepare($query);
6701
		$sth->execute($query_values);
6702
6703
		$airport_array = array();
6704
		$temp_array = array();
6705
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6706
		{
6707
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6708
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6709
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6710
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6711
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6712
          
6713
			$airport_array[] = $temp_array;
6714
		}
6715
		return $airport_array;
6716
	}
6717
6718
	/**
6719
	* Gets all departure airports of the airplanes that have flown over
6720
	*
6721
	* @return Array the airport list
6722
	*
6723
	*/
6724
	public function countAllDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
6725
	{
6726
		global $globalDBdriver;
6727
		$filter_query = $this->getFilter($filters,true,true);
6728
		$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 
6729
			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 <> '' ";
6730
                if ($olderthanmonths > 0) {
6731
            		if ($globalDBdriver == 'mysql') {
6732
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6733
			} else {
6734
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6735
			}
6736
                }
6737
                if ($sincedate != '') {
6738
            		if ($globalDBdriver == 'mysql') {
6739
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6740
			} else {
6741
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6742
			}
6743
		}
6744
6745
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6746
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6747
                $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
6748
				ORDER BY airport_departure_icao_count DESC";
6749
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6750
      
6751
		$sth = $this->db->prepare($query);
6752
		$sth->execute();
6753
      
6754
		$airport_array = array();
6755
		$temp_array = array();
6756
        
6757
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6758
		{
6759
			$temp_array['airline_icao'] = $row['airline_icao'];
6760
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6761
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6762
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6763
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6764
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6765
          
6766
			$airport_array[] = $temp_array;
6767
		}
6768
		return $airport_array;
6769
	}
6770
6771
	/**
6772
	* Gets all detected departure airports of the airplanes that have flown over
6773
	*
6774
	* @return Array the airport list
6775
	*
6776
	*/
6777
	public function countAllDetectedDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
6778
	{
6779
		global $globalDBdriver;
6780
		$filter_query = $this->getFilter($filters,true,true);
6781
		$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
6782
				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";
6783
                if ($olderthanmonths > 0) {
6784
            		if ($globalDBdriver == 'mysql') {
6785
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6786
			} else {
6787
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6788
			}
6789
                }
6790
                if ($sincedate != '') {
6791
            		if ($globalDBdriver == 'mysql') {
6792
				$query .= " AND spotter_output.date > '".$sincedate."'";
6793
			} else {
6794
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6795
			}
6796
		}
6797
		$query_values = array();
6798
		if ($year != '') {
6799
			if ($globalDBdriver == 'mysql') {
6800
				$query .= " AND YEAR(spotter_output.date) = :year";
6801
				$query_values = array_merge($query_values,array(':year' => $year));
6802
			} else {
6803
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6804
				$query_values = array_merge($query_values,array(':year' => $year));
6805
			}
6806
		}
6807
		if ($month != '') {
6808
			if ($globalDBdriver == 'mysql') {
6809
				$query .= " AND MONTH(spotter_output.date) = :month";
6810
				$query_values = array_merge($query_values,array(':month' => $month));
6811
			} else {
6812
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6813
				$query_values = array_merge($query_values,array(':month' => $month));
6814
			}
6815
		}
6816
		if ($day != '') {
6817
			if ($globalDBdriver == 'mysql') {
6818
				$query .= " AND DAY(spotter_output.date) = :day";
6819
				$query_values = array_merge($query_values,array(':day' => $day));
6820
			} else {
6821
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6822
				$query_values = array_merge($query_values,array(':day' => $day));
6823
			}
6824
		}
6825
                $query .= " GROUP BY spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
6826
				ORDER BY airport_departure_icao_count DESC";
6827
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6828
    		//echo $query;
6829
		$sth = $this->db->prepare($query);
6830
		$sth->execute($query_values);
6831
      
6832
		$airport_array = array();
6833
		$temp_array = array();
6834
        
6835
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6836
		{
6837
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6838
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6839
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6840
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6841
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6842
          
6843
			$airport_array[] = $temp_array;
6844
		}
6845
		return $airport_array;
6846
	}
6847
	
6848
	/**
6849
	* Gets all detected departure airports of the airplanes that have flown over
6850
	*
6851
	* @return Array the airport list
6852
	*
6853
	*/
6854
	public function countAllDetectedDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
6855
	{
6856
		global $globalDBdriver;
6857
		$filter_query = $this->getFilter($filters,true,true);
6858
		$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
6859
				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 ";
6860
                if ($olderthanmonths > 0) {
6861
            		if ($globalDBdriver == 'mysql') {
6862
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6863
			} else {
6864
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6865
			}
6866
                }
6867
                if ($sincedate != '') {
6868
            		if ($globalDBdriver == 'mysql') {
6869
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6870
			} else {
6871
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
6872
			}
6873
		}
6874
6875
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6876
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6877
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
6878
				ORDER BY airport_departure_icao_count DESC";
6879
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6880
      
6881
		$sth = $this->db->prepare($query);
6882
		$sth->execute();
6883
      
6884
		$airport_array = array();
6885
		$temp_array = array();
6886
        
6887
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6888
		{
6889
			$temp_array['airline_icao'] = $row['airline_icao'];
6890
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6891
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6892
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6893
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6894
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6895
          
6896
			$airport_array[] = $temp_array;
6897
		}
6898
		return $airport_array;
6899
	}	
6900
	
6901
	/**
6902
	* Gets all departure airports of the airplanes that have flown over based on an airline icao
6903
	*
6904
	* @return Array the airport list
6905
	*
6906
	*/
6907
	public function countAllDepartureAirportsByAirline($airline_icao,$filters = array())
6908
	{
6909
		$filter_query = $this->getFilter($filters,true,true);
6910
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6911
		$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 
6912
			    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 <> '' 
6913
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6914
			    ORDER BY airport_departure_icao_count DESC";
6915
      
6916
		
6917
		$sth = $this->db->prepare($query);
6918
		$sth->execute(array(':airline_icao' => $airline_icao));
6919
      
6920
		$airport_array = array();
6921
		$temp_array = array();
6922
        
6923
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6924
		{
6925
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6926
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6927
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6928
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6929
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6930
          
6931
			$airport_array[] = $temp_array;
6932
		}
6933
6934
		return $airport_array;
6935
	}
6936
	
6937
	
6938
	
6939
	/**
6940
	* Gets all departure airports by country of the airplanes that have flown over based on an airline icao
6941
	*
6942
	* @return Array the airport list
6943
	*
6944
	*/
6945
	public function countAllDepartureAirportCountriesByAirline($airline_icao,$filters = array())
6946
	{
6947
		$filter_query = $this->getFilter($filters,true,true);
6948
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6949
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6950
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
6951
                    GROUP BY spotter_output.departure_airport_country
6952
					ORDER BY airport_departure_country_count DESC";
6953
      
6954
		
6955
		$sth = $this->db->prepare($query);
6956
		$sth->execute(array(':airline_icao' => $airline_icao));
6957
      
6958
		$airport_array = array();
6959
		$temp_array = array();
6960
        
6961
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6962
		{
6963
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6964
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6965
          
6966
			$airport_array[] = $temp_array;
6967
		}
6968
6969
		return $airport_array;
6970
	}
6971
	
6972
	
6973
	
6974
	/**
6975
	* Gets all departure airports of the airplanes that have flown over based on an aircraft icao
6976
	*
6977
	* @return Array the airport list
6978
	*
6979
	*/
6980
	public function countAllDepartureAirportsByAircraft($aircraft_icao,$filters = array())
6981
	{
6982
		$filter_query = $this->getFilter($filters,true,true);
6983
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
6984
		$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 
6985
			    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 <> '' 
6986
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6987
			    ORDER BY airport_departure_icao_count DESC";
6988
      
6989
		
6990
		$sth = $this->db->prepare($query);
6991
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
6992
      
6993
		$airport_array = array();
6994
		$temp_array = array();
6995
        
6996
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6997
		{
6998
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6999
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7000
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7001
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7002
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7003
          
7004
			$airport_array[] = $temp_array;
7005
		}
7006
7007
		return $airport_array;
7008
	}
7009
	
7010
	
7011
	/**
7012
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
7013
	*
7014
	* @return Array the airport list
7015
	*
7016
	*/
7017
	public function countAllDepartureAirportCountriesByAircraft($aircraft_icao,$filters = array())
7018
	{
7019
		$filter_query = $this->getFilter($filters,true,true);
7020
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7021
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7022
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
7023
                    GROUP BY spotter_output.departure_airport_country
7024
					ORDER BY airport_departure_country_count DESC";
7025
      
7026
		
7027
		$sth = $this->db->prepare($query);
7028
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7029
      
7030
		$airport_array = array();
7031
		$temp_array = array();
7032
        
7033
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7034
		{
7035
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7036
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7037
          
7038
			$airport_array[] = $temp_array;
7039
		}
7040
7041
		return $airport_array;
7042
	}
7043
	
7044
	
7045
	/**
7046
	* Gets all departure airports of the airplanes that have flown over based on an aircraft registration
7047
	*
7048
	* @return Array the airport list
7049
	*
7050
	*/
7051
	public function countAllDepartureAirportsByRegistration($registration,$filters = array())
7052
	{
7053
		$filter_query = $this->getFilter($filters,true,true);
7054
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
7055
		$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 
7056
			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 <> '' 
7057
                    GROUP BY spotter_output.departure_airport_icao
7058
					ORDER BY airport_departure_icao_count DESC";
7059
      
7060
		
7061
		$sth = $this->db->prepare($query);
7062
		$sth->execute(array(':registration' => $registration));
7063
      
7064
		$airport_array = array();
7065
		$temp_array = array();
7066
        
7067
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7068
		{
7069
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7070
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7071
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7072
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7073
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7074
          
7075
			$airport_array[] = $temp_array;
7076
		}
7077
7078
		return $airport_array;
7079
	}
7080
	
7081
	
7082
	/**
7083
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft registration
7084
	*
7085
	* @return Array the airport list
7086
	*
7087
	*/
7088
	public function countAllDepartureAirportCountriesByRegistration($registration,$filters = array())
7089
	{
7090
		$filter_query = $this->getFilter($filters,true,true);
7091
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
7092
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7093
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.registration = :registration 
7094
                    GROUP BY spotter_output.departure_airport_country
7095
					ORDER BY airport_departure_country_count DESC";
7096
      
7097
		
7098
		$sth = $this->db->prepare($query);
7099
		$sth->execute(array(':registration' => $registration));
7100
      
7101
		$airport_array = array();
7102
		$temp_array = array();
7103
        
7104
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7105
		{
7106
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7107
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7108
          
7109
			$airport_array[] = $temp_array;
7110
		}
7111
7112
		return $airport_array;
7113
	}
7114
	
7115
	
7116
	/**
7117
	* Gets all departure airports of the airplanes that have flown over based on an arrivl airport icao
7118
	*
7119
	* @return Array the airport list
7120
	*
7121
	*/
7122
	public function countAllDepartureAirportsByAirport($airport_icao,$filters = array())
7123
	{
7124
		$filter_query = $this->getFilter($filters,true,true);
7125
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7126
		$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 
7127
			    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 <> '' 
7128
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7129
			    ORDER BY airport_departure_icao_count DESC";
7130
      
7131
		
7132
		$sth = $this->db->prepare($query);
7133
		$sth->execute(array(':airport_icao' => $airport_icao));
7134
      
7135
		$airport_array = array();
7136
		$temp_array = array();
7137
        
7138
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7139
		{
7140
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7141
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7142
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7143
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7144
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7145
          
7146
			$airport_array[] = $temp_array;
7147
		}
7148
7149
		return $airport_array;
7150
	}
7151
	
7152
	
7153
	/**
7154
	* Gets all departure airports by country of the airplanes that have flown over based on an airport icao
7155
	*
7156
	* @return Array the airport list
7157
	*
7158
	*/
7159
	public function countAllDepartureAirportCountriesByAirport($airport_icao,$filters = array())
7160
	{
7161
		$filter_query = $this->getFilter($filters,true,true);
7162
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7163
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7164
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.arrival_airport_icao = :airport_icao 
7165
                    GROUP BY spotter_output.departure_airport_country
7166
					ORDER BY airport_departure_country_count DESC";
7167
      
7168
		
7169
		$sth = $this->db->prepare($query);
7170
		$sth->execute(array(':airport_icao' => $airport_icao));
7171
      
7172
		$airport_array = array();
7173
		$temp_array = array();
7174
        
7175
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7176
		{
7177
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7178
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7179
          
7180
			$airport_array[] = $temp_array;
7181
		}
7182
7183
		return $airport_array;
7184
	}
7185
	
7186
	
7187
	
7188
	/**
7189
	* Gets all departure airports of the airplanes that have flown over based on an aircraft manufacturer
7190
	*
7191
	* @return Array the airport list
7192
	*
7193
	*/
7194
	public function countAllDepartureAirportsByManufacturer($aircraft_manufacturer,$filters = array())
7195
	{
7196
		$filter_query = $this->getFilter($filters,true,true);
7197
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7198
		$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 
7199
			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 <> '' 
7200
                    GROUP BY spotter_output.departure_airport_icao
7201
					ORDER BY airport_departure_icao_count DESC";
7202
      
7203
		
7204
		$sth = $this->db->prepare($query);
7205
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7206
      
7207
		$airport_array = array();
7208
		$temp_array = array();
7209
        
7210
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7211
		{
7212
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7213
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7214
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7215
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7216
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7217
          
7218
			$airport_array[] = $temp_array;
7219
		}
7220
7221
		return $airport_array;
7222
	}
7223
	
7224
	
7225
	/**
7226
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft manufacturer
7227
	*
7228
	* @return Array the airport list
7229
	*
7230
	*/
7231
	public function countAllDepartureAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
7232
	{
7233
		$filter_query = $this->getFilter($filters,true,true);
7234
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7235
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7236
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
7237
                    GROUP BY spotter_output.departure_airport_country
7238
					ORDER BY airport_departure_country_count DESC";
7239
      
7240
		
7241
		$sth = $this->db->prepare($query);
7242
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7243
      
7244
		$airport_array = array();
7245
		$temp_array = array();
7246
        
7247
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7248
		{
7249
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7250
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7251
          
7252
			$airport_array[] = $temp_array;
7253
		}
7254
7255
		return $airport_array;
7256
	}
7257
	
7258
	
7259
	/**
7260
	* Gets all departure airports of the airplanes that have flown over based on a date
7261
	*
7262
	* @return Array the airport list
7263
	*
7264
	*/
7265
	public function countAllDepartureAirportsByDate($date,$filters = array())
7266
	{
7267
		global $globalTimezone, $globalDBdriver;
7268
		$filter_query = $this->getFilter($filters,true,true);
7269
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7270
		if ($globalTimezone != '') {
7271
			date_default_timezone_set($globalTimezone);
7272
			$datetime = new DateTime($date);
7273
			$offset = $datetime->format('P');
7274
		} else $offset = '+00:00';
7275
7276
		if ($globalDBdriver == 'mysql') {
7277
			$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 
7278
					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
7279
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7280
					ORDER BY airport_departure_icao_count DESC";
7281
		} else {
7282
			$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 
7283
					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
7284
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7285
					ORDER BY airport_departure_icao_count DESC";
7286
		}
7287
7288
		$sth = $this->db->prepare($query);
7289
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7290
      
7291
		$airport_array = array();
7292
		$temp_array = array();
7293
        
7294
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7295
		{
7296
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7297
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7298
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7299
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7300
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7301
          
7302
			$airport_array[] = $temp_array;
7303
		}
7304
		return $airport_array;
7305
	}
7306
	
7307
	
7308
	
7309
	/**
7310
	* Gets all departure airports by country of the airplanes that have flown over based on a date
7311
	*
7312
	* @return Array the airport list
7313
	*
7314
	*/
7315
	public function countAllDepartureAirportCountriesByDate($date,$filters = array())
7316
	{
7317
		global $globalTimezone, $globalDBdriver;
7318
		$filter_query = $this->getFilter($filters,true,true);
7319
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7320
		if ($globalTimezone != '') {
7321
			date_default_timezone_set($globalTimezone);
7322
			$datetime = new DateTime($date);
7323
			$offset = $datetime->format('P');
7324
		} else $offset = '+00:00';
7325
7326
		if ($globalDBdriver == 'mysql') {
7327
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7328
					FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
7329
					GROUP BY spotter_output.departure_airport_country
7330
					ORDER BY airport_departure_country_count DESC";
7331
		} else {
7332
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7333
					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 
7334
					GROUP BY spotter_output.departure_airport_country
7335
					ORDER BY airport_departure_country_count DESC";
7336
		}
7337
		
7338
		$sth = $this->db->prepare($query);
7339
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7340
      
7341
		$airport_array = array();
7342
		$temp_array = array();
7343
        
7344
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7345
		{
7346
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7347
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7348
          
7349
			$airport_array[] = $temp_array;
7350
		}
7351
		return $airport_array;
7352
	}
7353
	
7354
	
7355
	
7356
	/**
7357
	* Gets all departure airports of the airplanes that have flown over based on a ident/callsign
7358
	*
7359
	* @return Array the airport list
7360
	*
7361
	*/
7362
	public function countAllDepartureAirportsByIdent($ident,$filters = array())
7363
	{
7364
		$filter_query = $this->getFilter($filters,true,true);
7365
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7366
		$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 
7367
		    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 
7368
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7369
		    ORDER BY airport_departure_icao_count DESC";
7370
      
7371
		
7372
		$sth = $this->db->prepare($query);
7373
		$sth->execute(array(':ident' => $ident));
7374
      
7375
		$airport_array = array();
7376
		$temp_array = array();
7377
        
7378
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7379
		{
7380
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7381
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7382
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7383
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7384
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7385
          
7386
			$airport_array[] = $temp_array;
7387
		}
7388
7389
		return $airport_array;
7390
	}
7391
	
7392
	/**
7393
	* Gets all departure airports of the airplanes that have flown over based on a owner
7394
	*
7395
	* @return Array the airport list
7396
	*
7397
	*/
7398
	public function countAllDepartureAirportsByOwner($owner,$filters = array())
7399
	{
7400
		$filter_query = $this->getFilter($filters,true,true);
7401
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
7402
		$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 
7403
		    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 
7404
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7405
		    ORDER BY airport_departure_icao_count DESC";
7406
      
7407
		
7408
		$sth = $this->db->prepare($query);
7409
		$sth->execute(array(':owner' => $owner));
7410
      
7411
		$airport_array = array();
7412
		$temp_array = array();
7413
        
7414
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7415
		{
7416
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7417
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7418
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7419
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7420
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7421
          
7422
			$airport_array[] = $temp_array;
7423
		}
7424
7425
		return $airport_array;
7426
	}
7427
	
7428
	/**
7429
	* Gets all departure airports of the airplanes that have flown over based on a pilot
7430
	*
7431
	* @return Array the airport list
7432
	*
7433
	*/
7434
	public function countAllDepartureAirportsByPilot($pilot,$filters = array())
7435
	{
7436
		$filter_query = $this->getFilter($filters,true,true);
7437
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
7438
		$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 
7439
		    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) 
7440
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7441
		    ORDER BY airport_departure_icao_count DESC";
7442
		
7443
		$sth = $this->db->prepare($query);
7444
		$sth->execute(array(':pilot' => $pilot));
7445
      
7446
		$airport_array = array();
7447
		$temp_array = array();
7448
        
7449
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7450
		{
7451
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7452
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7453
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7454
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7455
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7456
          
7457
			$airport_array[] = $temp_array;
7458
		}
7459
7460
		return $airport_array;
7461
	}
7462
	
7463
	
7464
	
7465
	/**
7466
	* Gets all departure airports by country of the airplanes that have flown over based on a callsign/ident
7467
	*
7468
	* @return Array the airport list
7469
	*
7470
	*/
7471
	public function countAllDepartureAirportCountriesByIdent($ident,$filters = array())
7472
	{
7473
		$filter_query = $this->getFilter($filters,true,true);
7474
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7475
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7476
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.ident = :ident 
7477
                    GROUP BY spotter_output.departure_airport_country
7478
					ORDER BY airport_departure_country_count DESC";
7479
      
7480
		
7481
		$sth = $this->db->prepare($query);
7482
		$sth->execute(array(':ident' => $ident));
7483
      
7484
		$airport_array = array();
7485
		$temp_array = array();
7486
        
7487
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7488
		{
7489
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7490
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7491
          
7492
			$airport_array[] = $temp_array;
7493
		}
7494
7495
		return $airport_array;
7496
	}
7497
	
7498
	/**
7499
	* Gets all departure airports by country of the airplanes that have flown over based on owner
7500
	*
7501
	* @return Array the airport list
7502
	*
7503
	*/
7504
	public function countAllDepartureAirportCountriesByOwner($owner,$filters = array())
7505
	{
7506
		$filter_query = $this->getFilter($filters,true,true);
7507
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
7508
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7509
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.owner_name = :owner 
7510
			GROUP BY spotter_output.departure_airport_country
7511
			ORDER BY airport_departure_country_count DESC";
7512
		
7513
		$sth = $this->db->prepare($query);
7514
		$sth->execute(array(':owner' => $owner));
7515
		return $sth->fetchAll(PDO::FETCH_ASSOC);
7516
	}
7517
	
7518
	/**
7519
	* Gets all departure airports by country of the airplanes that have flown over based on pilot
7520
	*
7521
	* @return Array the airport list
7522
	*
7523
	*/
7524
	public function countAllDepartureAirportCountriesByPilot($pilot,$filters = array())
7525
	{
7526
		$filter_query = $this->getFilter($filters,true,true);
7527
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
7528
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7529
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
7530
			GROUP BY spotter_output.departure_airport_country
7531
			ORDER BY airport_departure_country_count DESC";
7532
		
7533
		$sth = $this->db->prepare($query);
7534
		$sth->execute(array(':pilot' => $pilot));
7535
		return $sth->fetchAll(PDO::FETCH_ASSOC);
7536
	}
7537
	
7538
	
7539
	
7540
	/**
7541
	* Gets all departure airports of the airplanes that have flown over based on a country
7542
	*
7543
	* @return Array the airport list
7544
	*
7545
	*/
7546
	public function countAllDepartureAirportsByCountry($country,$filters = array())
7547
	{
7548
		$filter_query = $this->getFilter($filters,true,true);
7549
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7550
7551
		$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 
7552
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
7553
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7554
			    ORDER BY airport_departure_icao_count DESC";
7555
      
7556
		
7557
		$sth = $this->db->prepare($query);
7558
		$sth->execute(array(':country' => $country));
7559
      
7560
		$airport_array = array();
7561
		$temp_array = array();
7562
        
7563
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7564
		{
7565
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7566
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7567
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7568
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7569
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7570
          
7571
			$airport_array[] = $temp_array;
7572
		}
7573
7574
		return $airport_array;
7575
	}
7576
7577
7578
	/**
7579
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
7580
	*
7581
	* @return Array the airport list
7582
	*
7583
	*/
7584
	public function countAllDepartureAirportCountriesByCountry($country,$filters = array())
7585
	{
7586
		$filter_query = $this->getFilter($filters,true,true);
7587
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7588
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7589
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
7590
                    GROUP BY spotter_output.departure_airport_country
7591
					ORDER BY airport_departure_country_count DESC";
7592
      
7593
		
7594
		$sth = $this->db->prepare($query);
7595
		$sth->execute(array(':country' => $country));
7596
      
7597
		$airport_array = array();
7598
		$temp_array = array();
7599
        
7600
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7601
		{
7602
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7603
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7604
          
7605
			$airport_array[] = $temp_array;
7606
		}
7607
7608
		return $airport_array;
7609
	}
7610
	
7611
7612
	/**
7613
	* Gets all arrival airports of the airplanes that have flown over
7614
	*
7615
	* @param Boolean $limit Limit result to 10 or not
7616
	* @param Integer $olderthanmonths Only show result older than x months
7617
	* @param String $sincedate Only show result since x date
7618
	* @param Boolean $icaoaskey Show result by ICAO
7619
	* @param Array $filters Filter used here
7620
	* @return Array the airport list
7621
	*
7622
	*/
7623
	public function countAllArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array(),$year = '',$month = '',$day = '')
7624
	{
7625
		global $globalDBdriver;
7626
		$filter_query = $this->getFilter($filters,true,true);
7627
		$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 
7628
				FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''";
7629
                if ($olderthanmonths > 0) {
7630
            		if ($globalDBdriver == 'mysql') {
7631
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
7632
			} else {
7633
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
7634
			}
7635
		}
7636
                if ($sincedate != '') {
7637
            		if ($globalDBdriver == 'mysql') {
7638
				$query .= " AND spotter_output.date > '".$sincedate."'";
7639
			} else {
7640
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7641
			}
7642
		}
7643
		$query_values = array();
7644
		if ($year != '') {
7645
			if ($globalDBdriver == 'mysql') {
7646
				$query .= " AND YEAR(spotter_output.date) = :year";
7647
				$query_values = array_merge($query_values,array(':year' => $year));
7648
			} else {
7649
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
7650
				$query_values = array_merge($query_values,array(':year' => $year));
7651
			}
7652
		}
7653
		if ($month != '') {
7654
			if ($globalDBdriver == 'mysql') {
7655
				$query .= " AND MONTH(spotter_output.date) = :month";
7656
				$query_values = array_merge($query_values,array(':month' => $month));
7657
			} else {
7658
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
7659
				$query_values = array_merge($query_values,array(':month' => $month));
7660
			}
7661
		}
7662
		if ($day != '') {
7663
			if ($globalDBdriver == 'mysql') {
7664
				$query .= " AND DAY(spotter_output.date) = :day";
7665
				$query_values = array_merge($query_values,array(':day' => $day));
7666
			} else {
7667
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
7668
				$query_values = array_merge($query_values,array(':day' => $day));
7669
			}
7670
		}
7671
                $query .= " GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7672
					ORDER BY airport_arrival_icao_count DESC";
7673
		if ($limit) $query .= " LIMIT 10";
7674
      
7675
		
7676
		$sth = $this->db->prepare($query);
7677
		$sth->execute($query_values);
7678
      
7679
		$airport_array = array();
7680
		$temp_array = array();
7681
        
7682
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7683
		{
7684
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7685
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7686
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7687
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7688
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
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 
7710
			FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' ";
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
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
          
7748
			if ($icaoaskey) {
7749
				$icao = $row['arrival_airport_icao'];
7750
				$airport_array[$icao] = $temp_array;
7751
			} else $airport_array[] = $temp_array;
7752
		}
7753
7754
		return $airport_array;
7755
	}
7756
7757
7758
	/**
7759
	* Gets all detected arrival airports of the airplanes that have flown over
7760
	*
7761
	* @return Array the airport list
7762
	*
7763
	*/
7764
	public function countAllDetectedArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array(),$year = '',$month = '',$day = '')
7765
	{
7766
		global $globalDBdriver;
7767
		$filter_query = $this->getFilter($filters,true,true);
7768
		$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 
7769
			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";
7770
                if ($olderthanmonths > 0) {
7771
            		if ($globalDBdriver == 'mysql') {
7772
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
7773
			} else {
7774
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
7775
			}
7776
		}
7777
                if ($sincedate != '') {
7778
            		if ($globalDBdriver == 'mysql') {
7779
				$query .= " AND spotter_output.date > '".$sincedate."'";
7780
			} else {
7781
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7782
			}
7783
		}
7784
		$query_values = array();
7785
		if ($year != '') {
7786
			if ($globalDBdriver == 'mysql') {
7787
				$query .= " AND YEAR(spotter_output.date) = :year";
7788
				$query_values = array_merge($query_values,array(':year' => $year));
7789
			} else {
7790
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
7791
				$query_values = array_merge($query_values,array(':year' => $year));
7792
			}
7793
		}
7794
		if ($month != '') {
7795
			if ($globalDBdriver == 'mysql') {
7796
				$query .= " AND MONTH(spotter_output.date) = :month";
7797
				$query_values = array_merge($query_values,array(':month' => $month));
7798
			} else {
7799
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
7800
				$query_values = array_merge($query_values,array(':month' => $month));
7801
			}
7802
		}
7803
		if ($day != '') {
7804
			if ($globalDBdriver == 'mysql') {
7805
				$query .= " AND DAY(spotter_output.date) = :day";
7806
				$query_values = array_merge($query_values,array(':day' => $day));
7807
			} else {
7808
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
7809
				$query_values = array_merge($query_values,array(':day' => $day));
7810
			}
7811
		}
7812
                $query .= " GROUP BY spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
7813
					ORDER BY airport_arrival_icao_count DESC";
7814
		if ($limit) $query .= " LIMIT 10";
7815
      
7816
		
7817
		$sth = $this->db->prepare($query);
7818
		$sth->execute($query_values);
7819
      
7820
		$airport_array = array();
7821
		$temp_array = array();
7822
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7823
		{
7824
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7825
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7826
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7827
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7828
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7829
          
7830
			if ($icaoaskey) {
7831
				$icao = $row['arrival_airport_icao'];
7832
				$airport_array[$icao] = $temp_array;
7833
			} else $airport_array[] = $temp_array;
7834
		}
7835
7836
		return $airport_array;
7837
	}
7838
	
7839
	/**
7840
	* Gets all detected arrival airports of the airplanes that have flown over
7841
	*
7842
	* @return Array the airport list
7843
	*
7844
	*/
7845
	public function countAllDetectedArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array())
7846
	{
7847
		global $globalDBdriver;
7848
		$filter_query = $this->getFilter($filters,true,true);
7849
		$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 
7850
			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 ";
7851
                if ($olderthanmonths > 0) {
7852
            		if ($globalDBdriver == 'mysql') {
7853
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
7854
			} else {
7855
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
7856
			}
7857
		}
7858
                if ($sincedate != '') {
7859
            		if ($globalDBdriver == 'mysql') {
7860
				$query .= "AND spotter_output.date > '".$sincedate."' ";
7861
			} else {
7862
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7863
			}
7864
		}
7865
7866
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
7867
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
7868
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
7869
					ORDER BY airport_arrival_icao_count DESC";
7870
		if ($limit) $query .= " LIMIT 10";
7871
      
7872
		
7873
		$sth = $this->db->prepare($query);
7874
		$sth->execute();
7875
      
7876
		$airport_array = array();
7877
		$temp_array = array();
7878
        
7879
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7880
		{
7881
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7882
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7883
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7884
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7885
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7886
			$temp_array['airline_icao'] = $row['airline_icao'];
7887
          
7888
			if ($icaoaskey) {
7889
				$icao = $row['arrival_airport_icao'];
7890
				$airport_array[$icao] = $temp_array;
7891
			} else $airport_array[] = $temp_array;
7892
		}
7893
7894
		return $airport_array;
7895
	}	
7896
	
7897
	/**
7898
	* Gets all arrival airports of the airplanes that have flown over based on an airline icao
7899
	*
7900
	* @return Array the airport list
7901
	*
7902
	*/
7903
	public function countAllArrivalAirportsByAirline($airline_icao, $filters = array())
7904
	{
7905
		$filter_query = $this->getFilter($filters,true,true);
7906
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7907
		$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 
7908
			    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 
7909
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7910
			    ORDER BY airport_arrival_icao_count DESC";
7911
		
7912
		$sth = $this->db->prepare($query);
7913
		$sth->execute(array(':airline_icao' => $airline_icao));
7914
      
7915
		$airport_array = array();
7916
		$temp_array = array();
7917
        
7918
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7919
		{
7920
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7921
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7922
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7923
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7924
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7925
          
7926
			$airport_array[] = $temp_array;
7927
		}
7928
7929
		return $airport_array;
7930
	}
7931
	
7932
	
7933
	/**
7934
	* Gets all arrival airports by country of the airplanes that have flown over based on an airline icao
7935
	*
7936
	* @return Array the airport list
7937
	*
7938
	*/
7939
	public function countAllArrivalAirportCountriesByAirline($airline_icao,$filters = array())
7940
	{
7941
		$filter_query = $this->getFilter($filters,true,true);
7942
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7943
					
7944
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7945
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
7946
                    GROUP BY spotter_output.arrival_airport_country
7947
					ORDER BY airport_arrival_country_count DESC";
7948
      
7949
		
7950
		$sth = $this->db->prepare($query);
7951
		$sth->execute(array(':airline_icao' => $airline_icao));
7952
      
7953
		$airport_array = array();
7954
		$temp_array = array();
7955
        
7956
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7957
		{
7958
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7959
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7960
          
7961
			$airport_array[] = $temp_array;
7962
		}
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 
8017
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
8018
                    GROUP BY spotter_output.arrival_airport_country
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
          
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 
8161
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.departure_airport_icao = :airport_icao 
8162
                    GROUP BY spotter_output.arrival_airport_country
8163
					ORDER BY airport_arrival_country_count DESC";
8164
      
8165
		
8166
		$sth = $this->db->prepare($query);
8167
		$sth->execute(array(':airport_icao' => $airport_icao));
8168
      
8169
		$airport_array = array();
8170
		$temp_array = array();
8171
        
8172
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8173
		{
8174
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8175
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8176
          
8177
			$airport_array[] = $temp_array;
8178
		}
8179
8180
		return $airport_array;
8181
	}
8182
	
8183
	
8184
	/**
8185
	* Gets all arrival airports of the airplanes that have flown over based on a aircraft manufacturer
8186
	*
8187
	* @return Array the airport list
8188
	*
8189
	*/
8190
	public function countAllArrivalAirportsByManufacturer($aircraft_manufacturer,$filters = array())
8191
	{
8192
		$filter_query = $this->getFilter($filters,true,true);
8193
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
8194
		$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 
8195
			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 
8196
                    GROUP BY spotter_output.arrival_airport_icao
8197
					ORDER BY airport_arrival_icao_count DESC";
8198
      
8199
		
8200
		$sth = $this->db->prepare($query);
8201
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
8202
      
8203
		$airport_array = array();
8204
		$temp_array = array();
8205
        
8206
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8207
		{
8208
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8209
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8210
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8211
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8212
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8213
          
8214
			$airport_array[] = $temp_array;
8215
		}
8216
8217
		return $airport_array;
8218
	}
8219
	
8220
	
8221
	
8222
	/**
8223
	* Gets all arrival airports by country of the airplanes that have flown over based on a aircraft manufacturer
8224
	*
8225
	* @return Array the airport list
8226
	*
8227
	*/
8228
	public function countAllArrivalAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
8229
	{
8230
		$filter_query = $this->getFilter($filters,true,true);
8231
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
8232
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8233
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
8234
                    GROUP BY spotter_output.arrival_airport_country
8235
					ORDER BY airport_arrival_country_count DESC";
8236
      
8237
		
8238
		$sth = $this->db->prepare($query);
8239
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
8240
      
8241
		$airport_array = array();
8242
		$temp_array = array();
8243
        
8244
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8245
		{
8246
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8247
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8248
          
8249
			$airport_array[] = $temp_array;
8250
		}
8251
8252
		return $airport_array;
8253
	}
8254
	
8255
	
8256
	
8257
	/**
8258
	* Gets all arrival airports of the airplanes that have flown over based on a date
8259
	*
8260
	* @return Array the airport list
8261
	*
8262
	*/
8263
	public function countAllArrivalAirportsByDate($date,$filters = array())
8264
	{
8265
		global $globalTimezone, $globalDBdriver;
8266
		$filter_query = $this->getFilter($filters,true,true);
8267
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8268
		if ($globalTimezone != '') {
8269
			date_default_timezone_set($globalTimezone);
8270
			$datetime = new DateTime($date);
8271
			$offset = $datetime->format('P');
8272
		} else $offset = '+00:00';
8273
8274
		if ($globalDBdriver == 'mysql') {
8275
			$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 
8276
					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  
8277
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8278
					ORDER BY airport_arrival_icao_count DESC";
8279
		} else {
8280
			$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 
8281
					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  
8282
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8283
					ORDER BY airport_arrival_icao_count DESC";
8284
		}
8285
		
8286
		$sth = $this->db->prepare($query);
8287
		$sth->execute(array(':date' => $date, ':offset' => $offset));
8288
      
8289
		$airport_array = array();
8290
		$temp_array = array();
8291
        
8292
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8293
		{
8294
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8295
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8296
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8297
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8298
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8299
          
8300
			$airport_array[] = $temp_array;
8301
		}
8302
		return $airport_array;
8303
	}
8304
	
8305
	
8306
	
8307
	/**
8308
	* Gets all arrival airports by country of the airplanes that have flown over based on a date
8309
	*
8310
	* @return Array the airport list
8311
	*
8312
	*/
8313
	public function countAllArrivalAirportCountriesByDate($date, $filters = array())
8314
	{
8315
		global $globalTimezone, $globalDBdriver;
8316
		$filter_query = $this->getFilter($filters,true,true);
8317
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8318
		if ($globalTimezone != '') {
8319
			date_default_timezone_set($globalTimezone);
8320
			$datetime = new DateTime($date);
8321
			$offset = $datetime->format('P');
8322
		} else $offset = '+00:00';
8323
8324
		if ($globalDBdriver == 'mysql') {
8325
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8326
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
8327
					GROUP BY spotter_output.arrival_airport_country
8328
					ORDER BY airport_arrival_country_count DESC";
8329
		} else {
8330
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8331
					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 
8332
					GROUP BY spotter_output.arrival_airport_country
8333
					ORDER BY airport_arrival_country_count DESC";
8334
		}
8335
		
8336
		$sth = $this->db->prepare($query);
8337
		$sth->execute(array(':date' => $date, ':offset' => $offset));
8338
      
8339
		$airport_array = array();
8340
		$temp_array = array();
8341
        
8342
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8343
		{
8344
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8345
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8346
          
8347
			$airport_array[] = $temp_array;
8348
		}
8349
		return $airport_array;
8350
	}
8351
	
8352
	
8353
	
8354
	/**
8355
	* Gets all arrival airports of the airplanes that have flown over based on a ident/callsign
8356
	*
8357
	* @return Array the airport list
8358
	*
8359
	*/
8360
	public function countAllArrivalAirportsByIdent($ident,$filters = array())
8361
	{
8362
		$filter_query = $this->getFilter($filters,true,true);
8363
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
8364
		$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 
8365
		    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  
8366
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8367
		    ORDER BY airport_arrival_icao_count DESC";
8368
      
8369
		
8370
		$sth = $this->db->prepare($query);
8371
		$sth->execute(array(':ident' => $ident));
8372
      
8373
		$airport_array = array();
8374
		$temp_array = array();
8375
        
8376
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8377
		{
8378
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8379
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8380
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8381
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8382
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8383
          
8384
			$airport_array[] = $temp_array;
8385
		}
8386
8387
		return $airport_array;
8388
	}
8389
	
8390
	/**
8391
	* Gets all arrival airports of the airplanes that have flown over based on a owner
8392
	*
8393
	* @return Array the airport list
8394
	*
8395
	*/
8396
	public function countAllArrivalAirportsByOwner($owner,$filters = array())
8397
	{
8398
		$filter_query = $this->getFilter($filters,true,true);
8399
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
8400
		$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 
8401
		    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 
8402
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8403
		    ORDER BY airport_arrival_icao_count DESC";
8404
      
8405
		
8406
		$sth = $this->db->prepare($query);
8407
		$sth->execute(array(':owner' => $owner));
8408
		$airport_array = array();
8409
		$temp_array = array();
8410
        
8411
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8412
		{
8413
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8414
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8415
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8416
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8417
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8418
          
8419
			$airport_array[] = $temp_array;
8420
		}
8421
8422
		return $airport_array;
8423
	}
8424
8425
	/**
8426
	* Gets all arrival airports of the airplanes that have flown over based on a pilot
8427
	*
8428
	* @return Array the airport list
8429
	*
8430
	*/
8431
	public function countAllArrivalAirportsByPilot($pilot,$filters = array())
8432
	{
8433
		$filter_query = $this->getFilter($filters,true,true);
8434
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
8435
		$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 
8436
		    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) 
8437
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8438
		    ORDER BY airport_arrival_icao_count DESC";
8439
      
8440
		
8441
		$sth = $this->db->prepare($query);
8442
		$sth->execute(array(':pilot' => $pilot));
8443
		$airport_array = array();
8444
		$temp_array = array();
8445
        
8446
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8447
		{
8448
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8449
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8450
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8451
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8452
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8453
          
8454
			$airport_array[] = $temp_array;
8455
		}
8456
8457
		return $airport_array;
8458
	}
8459
	
8460
	/**
8461
	* Gets all arrival airports by country of the airplanes that have flown over based on a callsign/ident
8462
	*
8463
	* @return Array the airport list
8464
	*
8465
	*/
8466
	public function countAllArrivalAirportCountriesByIdent($ident, $filters = array())
8467
	{
8468
		$filter_query = $this->getFilter($filters,true,true);
8469
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
8470
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8471
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.ident = :ident 
8472
                    GROUP BY spotter_output.arrival_airport_country
8473
					ORDER BY airport_arrival_country_count DESC";
8474
      
8475
		
8476
		$sth = $this->db->prepare($query);
8477
		$sth->execute(array(':ident' => $ident));
8478
      
8479
		$airport_array = array();
8480
		$temp_array = array();
8481
        
8482
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8483
		{
8484
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8485
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8486
          
8487
			$airport_array[] = $temp_array;
8488
		}
8489
8490
		return $airport_array;
8491
	}
8492
	
8493
	/**
8494
	* Gets all arrival airports by country of the airplanes that have flown over based on a owner
8495
	*
8496
	* @return Array the airport list
8497
	*
8498
	*/
8499
	public function countAllArrivalAirportCountriesByOwner($owner, $filters = array())
8500
	{
8501
		$filter_query = $this->getFilter($filters,true,true);
8502
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
8503
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8504
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.owner_name = :owner 
8505
                    GROUP BY spotter_output.arrival_airport_country
8506
		    ORDER BY airport_arrival_country_count DESC";
8507
8508
		$sth = $this->db->prepare($query);
8509
		$sth->execute(array(':owner' => $owner));
8510
		return $sth->fetchAll(PDO::FETCH_ASSOC);
8511
	}
8512
	
8513
	/**
8514
	* Gets all arrival airports by country of the airplanes that have flown over based on a pilot
8515
	*
8516
	* @return Array the airport list
8517
	*
8518
	*/
8519
	public function countAllArrivalAirportCountriesByPilot($pilot, $filters = array())
8520
	{
8521
		$filter_query = $this->getFilter($filters,true,true);
8522
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
8523
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8524
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
8525
                    GROUP BY spotter_output.arrival_airport_country
8526
		    ORDER BY airport_arrival_country_count DESC";
8527
8528
		$sth = $this->db->prepare($query);
8529
		$sth->execute(array(':pilot' => $pilot));
8530
		return $sth->fetchAll(PDO::FETCH_ASSOC);
8531
	}
8532
	
8533
	
8534
	
8535
	/**
8536
	* Gets all arrival airports of the airplanes that have flown over based on a country
8537
	*
8538
	* @return Array the airport list
8539
	*
8540
	*/
8541
	public function countAllArrivalAirportsByCountry($country,$filters = array())
8542
	{
8543
		$filter_query = $this->getFilter($filters,true,true);
8544
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8545
		$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 
8546
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
8547
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8548
			    ORDER BY airport_arrival_icao_count DESC";
8549
      
8550
		
8551
		$sth = $this->db->prepare($query);
8552
		$sth->execute(array(':country' => $country));
8553
      
8554
		$airport_array = array();
8555
		$temp_array = array();
8556
        
8557
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8558
		{
8559
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8560
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8561
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8562
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8563
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8564
          
8565
			$airport_array[] = $temp_array;
8566
		}
8567
8568
		return $airport_array;
8569
	}
8570
	
8571
	
8572
	/**
8573
	* Gets all arrival airports by country of the airplanes that have flown over based on a country
8574
	*
8575
	* @return Array the airport list
8576
	*
8577
	*/
8578
	public function countAllArrivalAirportCountriesByCountry($country,$filters = array())
8579
	{
8580
		global $globalDBdriver;
8581
		$filter_query = $this->getFilter($filters,true,true);
8582
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8583
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8584
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
8585
                    GROUP BY spotter_output.arrival_airport_country
8586
					ORDER BY airport_arrival_country_count DESC";
8587
      
8588
		
8589
		$sth = $this->db->prepare($query);
8590
		$sth->execute(array(':country' => $country));
8591
      
8592
		$airport_array = array();
8593
		$temp_array = array();
8594
        
8595
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8596
		{
8597
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8598
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8599
          
8600
			$airport_array[] = $temp_array;
8601
		}
8602
8603
		return $airport_array;
8604
	}
8605
8606
8607
8608
	/**
8609
	* Counts all airport departure countries
8610
	*
8611
	* @return Array the airport departure list
8612
	*
8613
	*/
8614
	public function countAllDepartureCountries($filters = array(),$year = '',$month = '', $day = '')
8615
	{
8616
		global $globalDBdriver;
8617
		$filter_query = $this->getFilter($filters,true,true);
8618
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
8619
				FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> ''";
8620
		$query_values = array();
8621
		if ($year != '') {
8622
			if ($globalDBdriver == 'mysql') {
8623
				$query .= " AND YEAR(spotter_output.date) = :year";
8624
				$query_values = array_merge($query_values,array(':year' => $year));
8625
			} else {
8626
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
8627
				$query_values = array_merge($query_values,array(':year' => $year));
8628
			}
8629
		}
8630
		if ($month != '') {
8631
			if ($globalDBdriver == 'mysql') {
8632
				$query .= " AND MONTH(spotter_output.date) = :month";
8633
				$query_values = array_merge($query_values,array(':month' => $month));
8634
			} else {
8635
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
8636
				$query_values = array_merge($query_values,array(':month' => $month));
8637
			}
8638
		}
8639
		if ($day != '') {
8640
			if ($globalDBdriver == 'mysql') {
8641
				$query .= " AND DAY(spotter_output.date) = :day";
8642
				$query_values = array_merge($query_values,array(':day' => $day));
8643
			} else {
8644
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
8645
				$query_values = array_merge($query_values,array(':day' => $day));
8646
			}
8647
		}
8648
		$query .= " GROUP BY spotter_output.departure_airport_country
8649
					ORDER BY airport_departure_country_count DESC
8650
					LIMIT 10 OFFSET 0";
8651
      
8652
		
8653
		$sth = $this->db->prepare($query);
8654
		$sth->execute($query_values);
8655
      
8656
		$airport_array = array();
8657
		$temp_array = array();
8658
        
8659
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8660
		{
8661
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
8662
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
8663
          
8664
			$airport_array[] = $temp_array;
8665
		}
8666
8667
		return $airport_array;
8668
	}
8669
	
8670
	
8671
	/**
8672
	* Counts all airport arrival countries
8673
	*
8674
	* @return Array the airport arrival list
8675
	*
8676
	*/
8677
	public function countAllArrivalCountries($limit = true,$filters = array(),$year = '',$month = '',$day = '')
8678
	{
8679
		global $globalDBdriver;
8680
		$filter_query = $this->getFilter($filters,true,true);
8681
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8682
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''";
8683
		$query_values = array();
8684
		if ($year != '') {
8685
			if ($globalDBdriver == 'mysql') {
8686
				$query .= " AND YEAR(spotter_output.date) = :year";
8687
				$query_values = array_merge($query_values,array(':year' => $year));
8688
			} else {
8689
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
8690
				$query_values = array_merge($query_values,array(':year' => $year));
8691
			}
8692
		}
8693
		if ($month != '') {
8694
			if ($globalDBdriver == 'mysql') {
8695
				$query .= " AND MONTH(spotter_output.date) = :month";
8696
				$query_values = array_merge($query_values,array(':month' => $month));
8697
			} else {
8698
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
8699
				$query_values = array_merge($query_values,array(':month' => $month));
8700
			}
8701
		}
8702
		if ($day != '') {
8703
			if ($globalDBdriver == 'mysql') {
8704
				$query .= " AND DAY(spotter_output.date) = :day";
8705
				$query_values = array_merge($query_values,array(':day' => $day));
8706
			} else {
8707
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
8708
				$query_values = array_merge($query_values,array(':day' => $day));
8709
			}
8710
		}
8711
		$query .= " GROUP BY spotter_output.arrival_airport_country
8712
					ORDER BY airport_arrival_country_count DESC";
8713
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
8714
      
8715
		
8716
		$sth = $this->db->prepare($query);
8717
		$sth->execute($query_values);
8718
      
8719
		$airport_array = array();
8720
		$temp_array = array();
8721
        
8722
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8723
		{
8724
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8725
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8726
          
8727
			$airport_array[] = $temp_array;
8728
		}
8729
8730
		return $airport_array;
8731
	}
8732
8733
8734
8735
8736
8737
	/**
8738
	* Gets all route combinations
8739
	*
8740
	* @return Array the route list
8741
	*
8742
	*/
8743
	public function countAllRoutes($filters = array())
8744
	{
8745
		$filter_query = $this->getFilter($filters,true,true);
8746
		$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
8747
		    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 <> ''
8748
                    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
8749
                    ORDER BY route_count DESC
8750
		    LIMIT 10 OFFSET 0";
8751
      
8752
		
8753
		$sth = $this->db->prepare($query);
8754
		$sth->execute();
8755
      
8756
		$routes_array = array();
8757
		$temp_array = array();
8758
        
8759
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8760
		{
8761
			$temp_array['route_count'] = $row['route_count'];
8762
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8763
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8764
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8765
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8766
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8767
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8768
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8769
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8770
          
8771
			$routes_array[] = $temp_array;
8772
		}
8773
8774
		return $routes_array;
8775
	}
8776
	
8777
	
8778
	
8779
	
8780
	/**
8781
	* Gets all route combinations based on an aircraft
8782
	*
8783
	* @return Array the route list
8784
	*
8785
	*/
8786
	public function countAllRoutesByAircraft($aircraft_icao,$filters = array())
8787
	{
8788
		$filter_query = $this->getFilter($filters,true,true);
8789
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
8790
		$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
8791
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
8792
			    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 
8793
			    ORDER BY route_count DESC";
8794
		
8795
		$sth = $this->db->prepare($query);
8796
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
8797
      
8798
		$routes_array = array();
8799
		$temp_array = array();
8800
        
8801
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8802
		{
8803
			$temp_array['route_count'] = $row['route_count'];
8804
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8805
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8806
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8807
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8808
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8809
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8810
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8811
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8812
          
8813
			$routes_array[] = $temp_array;
8814
		}
8815
8816
		return $routes_array;
8817
	}
8818
	
8819
	
8820
	/**
8821
	* Gets all route combinations based on an aircraft registration
8822
	*
8823
	* @return Array the route list
8824
	*
8825
	*/
8826
	public function countAllRoutesByRegistration($registration, $filters = array())
8827
	{
8828
		$filter_query = $this->getFilter($filters,true,true);
8829
		$registration = filter_var($registration, FILTER_SANITIZE_STRING);
8830
		$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
8831
			FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.registration = :registration 
8832
                    GROUP BY route
8833
                    ORDER BY route_count DESC";
8834
      
8835
		
8836
		$sth = $this->db->prepare($query);
8837
		$sth->execute(array(':registration' => $registration));
8838
      
8839
		$routes_array = array();
8840
		$temp_array = array();
8841
        
8842
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8843
		{
8844
			$temp_array['route_count'] = $row['route_count'];
8845
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8846
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8847
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8848
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8849
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8850
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8851
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8852
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8853
          
8854
			$routes_array[] = $temp_array;
8855
		}
8856
8857
		return $routes_array;
8858
	}
8859
	
8860
	
8861
	
8862
	/**
8863
	* Gets all route combinations based on an airline
8864
	*
8865
	* @return Array the route list
8866
	*
8867
	*/
8868
	public function countAllRoutesByAirline($airline_icao, $filters = array())
8869
	{
8870
		$filter_query = $this->getFilter($filters,true,true);
8871
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
8872
		$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
8873
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.airline_icao = :airline_icao 
8874
			    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 
8875
			    ORDER BY route_count DESC";
8876
      
8877
		
8878
		$sth = $this->db->prepare($query);
8879
		$sth->execute(array(':airline_icao' => $airline_icao));
8880
      
8881
		$routes_array = array();
8882
		$temp_array = array();
8883
        
8884
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8885
		{
8886
			$temp_array['route_count'] = $row['route_count'];
8887
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8888
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8889
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8890
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8891
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8892
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8893
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8894
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8895
          
8896
			$routes_array[] = $temp_array;
8897
		}
8898
8899
		return $routes_array;
8900
	}
8901
	
8902
	
8903
	
8904
	/**
8905
	* Gets all route combinations based on an airport
8906
	*
8907
	* @return Array the route list
8908
	*
8909
	*/
8910
	public function countAllRoutesByAirport($airport_icao, $filters = array())
8911
	{
8912
		$filter_query = $this->getFilter($filters,true,true);
8913
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8914
		$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
8915
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
8916
			    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 
8917
			    ORDER BY route_count DESC";
8918
		
8919
		$sth = $this->db->prepare($query);
8920
		$sth->execute(array(':airport_icao' => $airport_icao));
8921
      
8922
		$routes_array = array();
8923
		$temp_array = array();
8924
        
8925
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8926
		{
8927
			$temp_array['route_count'] = $row['route_count'];
8928
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8929
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8930
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8931
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8932
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8933
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8934
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8935
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8936
          
8937
			$routes_array[] = $temp_array;
8938
		}
8939
8940
		return $routes_array;
8941
	}
8942
	
8943
	
8944
	
8945
	/**
8946
	* Gets all route combinations based on an country
8947
	*
8948
	* @return Array the route list
8949
	*
8950
	*/
8951
	public function countAllRoutesByCountry($country, $filters = array())
8952
	{
8953
		$filter_query = $this->getFilter($filters,true,true);
8954
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8955
		$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
8956
			    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 
8957
			    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 
8958
			    ORDER BY route_count DESC";
8959
		
8960
		$sth = $this->db->prepare($query);
8961
		$sth->execute(array(':country' => $country));
8962
      
8963
		$routes_array = array();
8964
		$temp_array = array();
8965
        
8966
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8967
		{
8968
			$temp_array['route_count'] = $row['route_count'];
8969
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8970
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8971
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8972
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8973
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8974
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8975
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8976
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8977
          
8978
			$routes_array[] = $temp_array;
8979
		}
8980
8981
		return $routes_array;
8982
	}
8983
8984
8985
	/**
8986
	* Gets all route combinations based on an date
8987
	*
8988
	* @return Array the route list
8989
	*
8990
	*/
8991
	public function countAllRoutesByDate($date, $filters = array())
8992
	{
8993
		global $globalTimezone, $globalDBdriver;
8994
		$filter_query = $this->getFilter($filters,true,true);
8995
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8996
		if ($globalTimezone != '') {
8997
			date_default_timezone_set($globalTimezone);
8998
			$datetime = new DateTime($date);
8999
			$offset = $datetime->format('P');
9000
		} else $offset = '+00:00';
9001
		
9002
		if ($globalDBdriver == 'mysql') {
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 DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :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
		} else {
9008
			$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
9009
				    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date  
9010
				    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
9011
				    ORDER BY route_count DESC";
9012
		}
9013
		
9014
		$sth = $this->db->prepare($query);
9015
		$sth->execute(array(':date' => $date, ':offset' => $offset));
9016
      
9017
		$routes_array = array();
9018
		$temp_array = array();
9019
        
9020
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9021
		{
9022
			$temp_array['route_count'] = $row['route_count'];
9023
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9024
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9025
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9026
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9027
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9028
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9029
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9030
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9031
          
9032
			$routes_array[] = $temp_array;
9033
		}
9034
9035
		return $routes_array;
9036
	}
9037
	
9038
	
9039
	/**
9040
	* Gets all route combinations based on an ident/callsign
9041
	*
9042
	* @return Array the route list
9043
	*
9044
	*/
9045
	public function countAllRoutesByIdent($ident, $filters = array())
9046
	{
9047
		$filter_query = $this->getFilter($filters,true,true);
9048
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
9049
		$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
9050
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.ident = :ident   
9051
                    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
9052
                    ORDER BY route_count DESC";
9053
      
9054
		
9055
		$sth = $this->db->prepare($query);
9056
		$sth->execute(array(':ident' => $ident));
9057
      
9058
		$routes_array = array();
9059
		$temp_array = array();
9060
        
9061
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9062
		{
9063
			$temp_array['route_count'] = $row['route_count'];
9064
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9065
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9066
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9067
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9068
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9069
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9070
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9071
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9072
          
9073
			$routes_array[] = $temp_array;
9074
		}
9075
9076
		return $routes_array;
9077
	}
9078
	
9079
	/**
9080
	* Gets all route combinations based on an owner
9081
	*
9082
	* @return Array the route list
9083
	*
9084
	*/
9085
	public function countAllRoutesByOwner($owner,$filters = array())
9086
	{
9087
		$filter_query = $this->getFilter($filters,true,true);
9088
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
9089
		$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
9090
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.owner_name = :owner 
9091
                    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
9092
                    ORDER BY route_count DESC";
9093
      
9094
		
9095
		$sth = $this->db->prepare($query);
9096
		$sth->execute(array(':owner' => $owner));
9097
      
9098
		$routes_array = array();
9099
		$temp_array = array();
9100
        
9101
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9102
		{
9103
			$temp_array['route_count'] = $row['route_count'];
9104
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9105
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9106
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9107
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9108
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9109
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9110
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9111
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9112
          
9113
			$routes_array[] = $temp_array;
9114
		}
9115
9116
		return $routes_array;
9117
	}
9118
	
9119
	/**
9120
	* Gets all route combinations based on a pilot
9121
	*
9122
	* @return Array the route list
9123
	*
9124
	*/
9125
	public function countAllRoutesByPilot($pilot,$filters = array())
9126
	{
9127
		$filter_query = $this->getFilter($filters,true,true);
9128
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
9129
		$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
9130
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
9131
                    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
9132
                    ORDER BY route_count DESC";
9133
      
9134
		
9135
		$sth = $this->db->prepare($query);
9136
		$sth->execute(array(':pilot' => $pilot));
9137
      
9138
		$routes_array = array();
9139
		$temp_array = array();
9140
        
9141
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9142
		{
9143
			$temp_array['route_count'] = $row['route_count'];
9144
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9145
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9146
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9147
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9148
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9149
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9150
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9151
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9152
          
9153
			$routes_array[] = $temp_array;
9154
		}
9155
9156
		return $routes_array;
9157
	}
9158
	
9159
	
9160
	/**
9161
	* Gets all route combinations based on an manufacturer
9162
	*
9163
	* @return Array the route list
9164
	*
9165
	*/
9166
	public function countAllRoutesByManufacturer($aircraft_manufacturer, $filters = array())
9167
	{
9168
		$filter_query = $this->getFilter($filters,true,true);
9169
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
9170
		$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
9171
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
9172
                    GROUP BY route
9173
                    ORDER BY route_count DESC";
9174
      
9175
		
9176
		$sth = $this->db->prepare($query);
9177
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
9178
      
9179
		$routes_array = array();
9180
		$temp_array = array();
9181
        
9182
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9183
		{
9184
			$temp_array['route_count'] = $row['route_count'];
9185
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9186
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9187
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9188
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9189
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9190
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9191
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9192
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9193
          
9194
			$routes_array[] = $temp_array;
9195
		}
9196
9197
		return $routes_array;
9198
	}
9199
9200
	
9201
	
9202
	/**
9203
	* Gets all route combinations with waypoints
9204
	*
9205
	* @return Array the route list
9206
	*
9207
	*/
9208
	public function countAllRoutesWithWaypoints($filters = array())
9209
	{
9210
		$filter_query = $this->getFilter($filters,true,true);
9211
		$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
9212
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.waypoints <> '' 
9213
                    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
9214
                    ORDER BY route_count DESC
9215
		    LIMIT 10 OFFSET 0";
9216
      
9217
		
9218
		$sth = $this->db->prepare($query);
9219
		$sth->execute();
9220
      
9221
		$routes_array = array();
9222
		$temp_array = array();
9223
        
9224
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9225
		{
9226
			$temp_array['spotter_id'] = $row['spotter_id'];
9227
			$temp_array['route_count'] = $row['route_count'];
9228
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9229
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9230
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9231
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9232
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9233
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9234
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9235
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9236
          
9237
			$routes_array[] = $temp_array;
9238
		}
9239
9240
		return $routes_array;
9241
	}
9242
	
9243
	/**
9244
	* Gets all callsigns that have flown over
9245
	*
9246
	* @return Array the callsign list
9247
	*
9248
	*/
9249
	public function countAllCallsigns($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '', $month = '', $day = '')
9250
	{
9251
		global $globalDBdriver;
9252
		$filter_query = $this->getFilter($filters,true,true);
9253
		$query  = "SELECT DISTINCT spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name, spotter_output.airline_icao  
9254
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''";
9255
		 if ($olderthanmonths > 0) {
9256
			if ($globalDBdriver == 'mysql') $query .= ' AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH)';
9257
			else $query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
9258
		}
9259
		if ($sincedate != '') {
9260
			if ($globalDBdriver == 'mysql') $query .= " AND spotter_output.date > '".$sincedate."'";
9261
			else $query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
9262
		}
9263
		$query_values = array();
9264
		if ($year != '') {
9265
			if ($globalDBdriver == 'mysql') {
9266
				$query .= " AND YEAR(spotter_output.date) = :year";
9267
				$query_values = array_merge($query_values,array(':year' => $year));
9268
			} else {
9269
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
9270
				$query_values = array_merge($query_values,array(':year' => $year));
9271
			}
9272
		}
9273
		if ($month != '') {
9274
			if ($globalDBdriver == 'mysql') {
9275
				$query .= " AND MONTH(spotter_output.date) = :month";
9276
				$query_values = array_merge($query_values,array(':month' => $month));
9277
			} else {
9278
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
9279
				$query_values = array_merge($query_values,array(':month' => $month));
9280
			}
9281
		}
9282
		if ($day != '') {
9283
			if ($globalDBdriver == 'mysql') {
9284
				$query .= " AND DAY(spotter_output.date) = :day";
9285
				$query_values = array_merge($query_values,array(':day' => $day));
9286
			} else {
9287
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
9288
				$query_values = array_merge($query_values,array(':day' => $day));
9289
			}
9290
		}
9291
		$query .= " GROUP BY spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
9292
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
9293
      		
9294
		$sth = $this->db->prepare($query);
9295
		$sth->execute($query_values);
9296
      
9297
		$callsign_array = array();
9298
		$temp_array = array();
9299
        
9300
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9301
		{
9302
			$temp_array['callsign_icao'] = $row['ident'];
9303
			$temp_array['airline_name'] = $row['airline_name'];
9304
			$temp_array['airline_icao'] = $row['airline_icao'];
9305
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
9306
          
9307
			$callsign_array[] = $temp_array;
9308
		}
9309
9310
		return $callsign_array;
9311
	}
9312
9313
	/**
9314
	* Gets all callsigns that have flown over
9315
	*
9316
	* @return Array the callsign list
9317
	*
9318
	*/
9319
	public function countAllCallsignsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $filters = array())
9320
	{
9321
		global $globalDBdriver;
9322
		$filter_query = $this->getFilter($filters,true,true);
9323
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name  
9324
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''  AND spotter_output.airline_icao <> '' ";
9325
		 if ($olderthanmonths > 0) {
9326
			if ($globalDBdriver == 'mysql') $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
9327
			else $query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
9328
		}
9329
		if ($sincedate != '') {
9330
			if ($globalDBdriver == 'mysql') $query .= "AND spotter_output.date > '".$sincedate."' ";
9331
			else $query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
9332
		}
9333
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
9334
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
9335
      		
9336
		$sth = $this->db->prepare($query);
9337
		$sth->execute();
9338
      
9339
		$callsign_array = array();
9340
		$temp_array = array();
9341
        
9342
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9343
		{
9344
			$temp_array['callsign_icao'] = $row['ident'];
9345
			$temp_array['airline_name'] = $row['airline_name'];
9346
			$temp_array['airline_icao'] = $row['airline_icao'];
9347
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
9348
          
9349
			$callsign_array[] = $temp_array;
9350
		}
9351
9352
		return $callsign_array;
9353
	}
9354
9355
9356
9357
9358
	/**
9359
	* Counts all dates
9360
	*
9361
	* @return Array the date list
9362
	*
9363
	*/
9364
	public function countAllDates($filters = array())
9365
	{
9366
		global $globalTimezone, $globalDBdriver;
9367
		if ($globalTimezone != '') {
9368
			date_default_timezone_set($globalTimezone);
9369
			$datetime = new DateTime();
9370
			$offset = $datetime->format('P');
9371
		} else $offset = '+00:00';
9372
9373
		if ($globalDBdriver == 'mysql') {
9374
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9375
								FROM spotter_output";
9376
			$query .= $this->getFilter($filters);
9377
			$query .= " GROUP BY date_name 
9378
								ORDER BY date_count DESC
9379
								LIMIT 10 OFFSET 0";
9380
		} else {
9381
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9382
								FROM spotter_output";
9383
			$query .= $this->getFilter($filters);
9384
			$query .= " GROUP BY date_name 
9385
								ORDER BY date_count DESC
9386
								LIMIT 10 OFFSET 0";
9387
		}
9388
      
9389
		
9390
		$sth = $this->db->prepare($query);
9391
		$sth->execute(array(':offset' => $offset));
9392
      
9393
		$date_array = array();
9394
		$temp_array = array();
9395
        
9396
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9397
		{
9398
			$temp_array['date_name'] = $row['date_name'];
9399
			$temp_array['date_count'] = $row['date_count'];
9400
9401
			$date_array[] = $temp_array;
9402
		}
9403
9404
		return $date_array;
9405
	}
9406
	
9407
	/**
9408
	* Counts all dates
9409
	*
9410
	* @return Array the date list
9411
	*
9412
	*/
9413
	public function countAllDatesByAirlines($filters = array())
9414
	{
9415
		global $globalTimezone, $globalDBdriver;
9416
		if ($globalTimezone != '') {
9417
			date_default_timezone_set($globalTimezone);
9418
			$datetime = new DateTime();
9419
			$offset = $datetime->format('P');
9420
		} else $offset = '+00:00';
9421
		$filter_query = $this->getFilter($filters,true,true);
9422
		if ($globalDBdriver == 'mysql') {
9423
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9424
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9425
								GROUP BY spotter_output.airline_icao, date_name 
9426
								ORDER BY date_count DESC
9427
								LIMIT 10 OFFSET 0";
9428
		} else {
9429
			$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
9430
								FROM spotter_output 
9431
								WHERE spotter_output.airline_icao <> '' 
9432
								GROUP BY spotter_output.airline_icao, date_name 
9433
								ORDER BY date_count DESC
9434
								LIMIT 10 OFFSET 0";
9435
		}
9436
      
9437
		
9438
		$sth = $this->db->prepare($query);
9439
		$sth->execute(array(':offset' => $offset));
9440
      
9441
		$date_array = array();
9442
		$temp_array = array();
9443
        
9444
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9445
		{
9446
			$temp_array['date_name'] = $row['date_name'];
9447
			$temp_array['date_count'] = $row['date_count'];
9448
			$temp_array['airline_icao'] = $row['airline_icao'];
9449
9450
			$date_array[] = $temp_array;
9451
		}
9452
9453
		return $date_array;
9454
	}	
9455
	
9456
	/**
9457
	* Counts all dates during the last 7 days
9458
	*
9459
	* @return Array the date list
9460
	*
9461
	*/
9462
	public function countAllDatesLast7Days($filters = array())
9463
	{
9464
		global $globalTimezone, $globalDBdriver;
9465
		if ($globalTimezone != '') {
9466
			date_default_timezone_set($globalTimezone);
9467
			$datetime = new DateTime();
9468
			$offset = $datetime->format('P');
9469
		} else $offset = '+00:00';
9470
		$filter_query = $this->getFilter($filters,true,true);
9471
		if ($globalDBdriver == 'mysql') {
9472
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9473
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY)";
9474
			$query .= " GROUP BY date_name 
9475
								ORDER BY spotter_output.date ASC";
9476
			$query_data = array(':offset' => $offset);
9477
		} else {
9478
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9479
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '7 DAYS'";
9480
			$query .= " GROUP BY date_name 
9481
								ORDER BY date_name ASC";
9482
			$query_data = array(':offset' => $offset);
9483
    		}
9484
		
9485
		$sth = $this->db->prepare($query);
9486
		$sth->execute($query_data);
9487
      
9488
		$date_array = array();
9489
		$temp_array = array();
9490
        
9491
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9492
		{
9493
			$temp_array['date_name'] = $row['date_name'];
9494
			$temp_array['date_count'] = $row['date_count'];
9495
          
9496
			$date_array[] = $temp_array;
9497
		}
9498
9499
		return $date_array;
9500
	}
9501
9502
	/**
9503
	* Counts all dates during the last month
9504
	*
9505
	* @return Array the date list
9506
	*
9507
	*/
9508
	public function countAllDatesLastMonth($filters = array())
9509
	{
9510
		global $globalTimezone, $globalDBdriver;
9511
		if ($globalTimezone != '') {
9512
			date_default_timezone_set($globalTimezone);
9513
			$datetime = new DateTime();
9514
			$offset = $datetime->format('P');
9515
		} else $offset = '+00:00';
9516
		$filter_query = $this->getFilter($filters,true,true);
9517
		if ($globalDBdriver == 'mysql') {
9518
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9519
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)";
9520
			$query .= " GROUP BY date_name 
9521
								ORDER BY spotter_output.date ASC";
9522
			$query_data = array(':offset' => $offset);
9523
		} else {
9524
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9525
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'";
9526
			$query .= " GROUP BY date_name 
9527
								ORDER BY date_name ASC";
9528
			$query_data = array(':offset' => $offset);
9529
    		}
9530
		
9531
		$sth = $this->db->prepare($query);
9532
		$sth->execute($query_data);
9533
      
9534
		$date_array = array();
9535
		$temp_array = array();
9536
        
9537
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9538
		{
9539
			$temp_array['date_name'] = $row['date_name'];
9540
			$temp_array['date_count'] = $row['date_count'];
9541
          
9542
			$date_array[] = $temp_array;
9543
		}
9544
9545
		return $date_array;
9546
	}
9547
9548
9549
	/**
9550
	* Counts all dates during the last month
9551
	*
9552
	* @return Array the date list
9553
	*
9554
	*/
9555
	public function countAllDatesLastMonthByAirlines($filters = array())
9556
	{
9557
		global $globalTimezone, $globalDBdriver;
9558
		$filter_query = $this->getFilter($filters,true,true);
9559
		if ($globalTimezone != '') {
9560
			date_default_timezone_set($globalTimezone);
9561
			$datetime = new DateTime();
9562
			$offset = $datetime->format('P');
9563
		} else $offset = '+00:00';
9564
		
9565
		if ($globalDBdriver == 'mysql') {
9566
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9567
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)
9568
								GROUP BY spotter_output.airline_icao, date_name 
9569
								ORDER BY spotter_output.date ASC";
9570
			$query_data = array(':offset' => $offset);
9571
		} else {
9572
			$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
9573
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'
9574
								GROUP BY spotter_output.airline_icao, date_name 
9575
								ORDER BY date_name ASC";
9576
			$query_data = array(':offset' => $offset);
9577
    		}
9578
		
9579
		$sth = $this->db->prepare($query);
9580
		$sth->execute($query_data);
9581
      
9582
		$date_array = array();
9583
		$temp_array = array();
9584
        
9585
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9586
		{
9587
			$temp_array['date_name'] = $row['date_name'];
9588
			$temp_array['date_count'] = $row['date_count'];
9589
			$temp_array['airline_icao'] = $row['airline_icao'];
9590
          
9591
			$date_array[] = $temp_array;
9592
		}
9593
9594
		return $date_array;
9595
	}
9596
	
9597
9598
	/**
9599
	* Counts all month
9600
	*
9601
	* @return Array the month list
9602
	*
9603
	*/
9604
	public function countAllMonths($filters = array())
9605
	{
9606
		global $globalTimezone, $globalDBdriver;
9607
		if ($globalTimezone != '') {
9608
			date_default_timezone_set($globalTimezone);
9609
			$datetime = new DateTime();
9610
			$offset = $datetime->format('P');
9611
		} else $offset = '+00:00';
9612
9613
		if ($globalDBdriver == 'mysql') {
9614
			$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
9615
								FROM spotter_output";
9616
			$query .= $this->getFilter($filters);
9617
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
9618
		} else {
9619
			$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
9620
								FROM spotter_output";
9621
			$query .= $this->getFilter($filters);
9622
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
9623
		}
9624
      
9625
		
9626
		$sth = $this->db->prepare($query);
9627
		$sth->execute(array(':offset' => $offset));
9628
      
9629
		$date_array = array();
9630
		$temp_array = array();
9631
        
9632
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9633
		{
9634
			$temp_array['month_name'] = $row['month_name'];
9635
			$temp_array['year_name'] = $row['year_name'];
9636
			$temp_array['date_count'] = $row['date_count'];
9637
9638
			$date_array[] = $temp_array;
9639
		}
9640
9641
		return $date_array;
9642
	}
9643
9644
	/**
9645
	* Counts all month
9646
	*
9647
	* @return Array the month list
9648
	*
9649
	*/
9650
	public function countAllMonthsByAirlines($filters = array())
9651
	{
9652
		global $globalTimezone, $globalDBdriver;
9653
		$filter_query = $this->getFilter($filters,true,true);
9654
		if ($globalTimezone != '') {
9655
			date_default_timezone_set($globalTimezone);
9656
			$datetime = new DateTime();
9657
			$offset = $datetime->format('P');
9658
		} else $offset = '+00:00';
9659
9660
		if ($globalDBdriver == 'mysql') {
9661
			$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
9662
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9663
								GROUP BY spotter_output.airline_icao, year_name, month_name 
9664
								ORDER BY date_count DESC";
9665
		} else {
9666
			$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
9667
								FROM spotter_output 
9668
								WHERE spotter_output.airline_icao <> '' 
9669
								GROUP BY spotter_output.airline_icao, year_name, month_name 
9670
								ORDER BY date_count DESC";
9671
		}
9672
      
9673
		
9674
		$sth = $this->db->prepare($query);
9675
		$sth->execute(array(':offset' => $offset));
9676
      
9677
		$date_array = array();
9678
		$temp_array = array();
9679
        
9680
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9681
		{
9682
			$temp_array['month_name'] = $row['month_name'];
9683
			$temp_array['year_name'] = $row['year_name'];
9684
			$temp_array['date_count'] = $row['date_count'];
9685
			$temp_array['airline_icao'] = $row['airline_icao'];
9686
9687
			$date_array[] = $temp_array;
9688
		}
9689
9690
		return $date_array;
9691
	}
9692
9693
	/**
9694
	* Counts all military month
9695
	*
9696
	* @return Array the month list
9697
	*
9698
	*/
9699
	public function countAllMilitaryMonths($filters = array())
9700
	{
9701
		global $globalTimezone, $globalDBdriver;
9702
		if ($globalTimezone != '') {
9703
			date_default_timezone_set($globalTimezone);
9704
			$datetime = new DateTime();
9705
			$offset = $datetime->format('P');
9706
		} else $offset = '+00:00';
9707
		$filter_query = $this->getFilter($filters,true,true);
9708
		if ($globalDBdriver == 'mysql') {
9709
			$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
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
		} else {
9714
			$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
9715
								FROM spotter_output".$filter_query." spotter_output.airline_type = 'military'
9716
								GROUP BY year_name, month_name 
9717
								ORDER BY date_count DESC";
9718
		}
9719
		
9720
		$sth = $this->db->prepare($query);
9721
		$sth->execute(array(':offset' => $offset));
9722
      
9723
		$date_array = array();
9724
		$temp_array = array();
9725
        
9726
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9727
		{
9728
			$temp_array['month_name'] = $row['month_name'];
9729
			$temp_array['year_name'] = $row['year_name'];
9730
			$temp_array['date_count'] = $row['date_count'];
9731
9732
			$date_array[] = $temp_array;
9733
		}
9734
9735
		return $date_array;
9736
	}
9737
	
9738
	/**
9739
	* Counts all month owners
9740
	*
9741
	* @return Array the month list
9742
	*
9743
	*/
9744
	public function countAllMonthsOwners($filters = array())
9745
	{
9746
		global $globalTimezone, $globalDBdriver;
9747
		if ($globalTimezone != '') {
9748
			date_default_timezone_set($globalTimezone);
9749
			$datetime = new DateTime();
9750
			$offset = $datetime->format('P');
9751
		} else $offset = '+00:00';
9752
		$filter_query = $this->getFilter($filters,true,true);
9753
9754
		if ($globalDBdriver == 'mysql') {
9755
			$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
9756
								FROM spotter_output".$filter_query." owner_name <> ''
9757
								GROUP BY year_name, month_name
9758
								ORDER BY date_count DESC";
9759
		} else {
9760
			$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
9761
								FROM spotter_output".$filter_query." owner_name <> ''
9762
								GROUP BY year_name, month_name
9763
								ORDER BY date_count DESC";
9764
		}
9765
		
9766
		$sth = $this->db->prepare($query);
9767
		$sth->execute(array(':offset' => $offset));
9768
      
9769
		$date_array = array();
9770
		$temp_array = array();
9771
        
9772
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9773
		{
9774
			$temp_array['month_name'] = $row['month_name'];
9775
			$temp_array['year_name'] = $row['year_name'];
9776
			$temp_array['date_count'] = $row['date_count'];
9777
9778
			$date_array[] = $temp_array;
9779
		}
9780
9781
		return $date_array;
9782
	}
9783
	
9784
	/**
9785
	* Counts all month owners
9786
	*
9787
	* @return Array the month list
9788
	*
9789
	*/
9790
	public function countAllMonthsOwnersByAirlines($filters = array())
9791
	{
9792
		global $globalTimezone, $globalDBdriver;
9793
		$filter_query = $this->getFilter($filters,true,true);
9794
		if ($globalTimezone != '') {
9795
			date_default_timezone_set($globalTimezone);
9796
			$datetime = new DateTime();
9797
			$offset = $datetime->format('P');
9798
		} else $offset = '+00:00';
9799
9800
		if ($globalDBdriver == 'mysql') {
9801
			$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
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
		} else {
9806
			$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
9807
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
9808
								GROUP BY spotter_output.airline_icao, year_name, month_name
9809
								ORDER BY date_count DESC";
9810
		}
9811
		
9812
		$sth = $this->db->prepare($query);
9813
		$sth->execute(array(':offset' => $offset));
9814
      
9815
		$date_array = array();
9816
		$temp_array = array();
9817
        
9818
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9819
		{
9820
			$temp_array['month_name'] = $row['month_name'];
9821
			$temp_array['year_name'] = $row['year_name'];
9822
			$temp_array['date_count'] = $row['date_count'];
9823
			$temp_array['airline_icao'] = $row['airline_icao'];
9824
9825
			$date_array[] = $temp_array;
9826
		}
9827
9828
		return $date_array;
9829
	}
9830
9831
	/**
9832
	* Counts all month pilot
9833
	*
9834
	* @return Array the month list
9835
	*
9836
	*/
9837
	public function countAllMonthsPilots($filters = array())
9838
	{
9839
		global $globalTimezone, $globalDBdriver;
9840
		if ($globalTimezone != '') {
9841
			date_default_timezone_set($globalTimezone);
9842
			$datetime = new DateTime();
9843
			$offset = $datetime->format('P');
9844
		} else $offset = '+00:00';
9845
		$filter_query = $this->getFilter($filters,true,true);
9846
9847
		if ($globalDBdriver == 'mysql') {
9848
			$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
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
		} else {
9853
			$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
9854
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
9855
								GROUP BY year_name, month_name
9856
								ORDER BY date_count DESC";
9857
		}
9858
		
9859
		$sth = $this->db->prepare($query);
9860
		$sth->execute(array(':offset' => $offset));
9861
      
9862
		$date_array = array();
9863
		$temp_array = array();
9864
        
9865
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9866
		{
9867
			$temp_array['month_name'] = $row['month_name'];
9868
			$temp_array['year_name'] = $row['year_name'];
9869
			$temp_array['date_count'] = $row['date_count'];
9870
9871
			$date_array[] = $temp_array;
9872
		}
9873
9874
		return $date_array;
9875
	}
9876
	
9877
	/**
9878
	* Counts all month pilot
9879
	*
9880
	* @return Array the month list
9881
	*
9882
	*/
9883
	public function countAllMonthsPilotsByAirlines($filters = array())
9884
	{
9885
		global $globalTimezone, $globalDBdriver;
9886
		$filter_query = $this->getFilter($filters,true,true);
9887
		if ($globalTimezone != '') {
9888
			date_default_timezone_set($globalTimezone);
9889
			$datetime = new DateTime();
9890
			$offset = $datetime->format('P');
9891
		} else $offset = '+00:00';
9892
9893
		if ($globalDBdriver == 'mysql') {
9894
			$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
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
		} else {
9899
			$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
9900
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
9901
								GROUP BY spotter_output.airline_icao, year_name, month_name
9902
								ORDER BY date_count DESC";
9903
		}
9904
		
9905
		$sth = $this->db->prepare($query);
9906
		$sth->execute(array(':offset' => $offset));
9907
      
9908
		$date_array = array();
9909
		$temp_array = array();
9910
        
9911
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9912
		{
9913
			$temp_array['month_name'] = $row['month_name'];
9914
			$temp_array['year_name'] = $row['year_name'];
9915
			$temp_array['date_count'] = $row['date_count'];
9916
			$temp_array['airline_icao'] = $row['airline_icao'];
9917
9918
			$date_array[] = $temp_array;
9919
		}
9920
9921
		return $date_array;
9922
	}
9923
9924
	/**
9925
	* Counts all month airline
9926
	*
9927
	* @return Array the month list
9928
	*
9929
	*/
9930
	public function countAllMonthsAirlines($filters = array())
9931
	{
9932
		global $globalTimezone, $globalDBdriver;
9933
		$filter_query = $this->getFilter($filters,true,true);
9934
		if ($globalTimezone != '') {
9935
			date_default_timezone_set($globalTimezone);
9936
			$datetime = new DateTime();
9937
			$offset = $datetime->format('P');
9938
		} else $offset = '+00:00';
9939
9940
		if ($globalDBdriver == 'mysql') {
9941
			$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
9942
								FROM spotter_output".$filter_query." airline_icao <> '' 
9943
								GROUP BY year_name, month_name
9944
								ORDER BY date_count DESC";
9945
		} else {
9946
			$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
9947
								FROM spotter_output".$filter_query." airline_icao <> '' 
9948
								GROUP BY year_name, month_name
9949
								ORDER BY date_count DESC";
9950
		}
9951
		
9952
		$sth = $this->db->prepare($query);
9953
		$sth->execute(array(':offset' => $offset));
9954
      
9955
		$date_array = array();
9956
		$temp_array = array();
9957
        
9958
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9959
		{
9960
			$temp_array['month_name'] = $row['month_name'];
9961
			$temp_array['year_name'] = $row['year_name'];
9962
			$temp_array['date_count'] = $row['date_count'];
9963
9964
			$date_array[] = $temp_array;
9965
		}
9966
9967
		return $date_array;
9968
	}
9969
	
9970
	/**
9971
	* Counts all month aircraft
9972
	*
9973
	* @return Array the month list
9974
	*
9975
	*/
9976
	public function countAllMonthsAircrafts($filters = array())
9977
	{
9978
		global $globalTimezone, $globalDBdriver;
9979
		if ($globalTimezone != '') {
9980
			date_default_timezone_set($globalTimezone);
9981
			$datetime = new DateTime();
9982
			$offset = $datetime->format('P');
9983
		} else $offset = '+00:00';
9984
		$filter_query = $this->getFilter($filters,true,true);
9985
9986
		if ($globalDBdriver == 'mysql') {
9987
			$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
9988
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
9989
								GROUP BY year_name, month_name
9990
								ORDER BY date_count DESC";
9991
		} else {
9992
			$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
9993
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
9994
								GROUP BY year_name, month_name
9995
								ORDER BY date_count DESC";
9996
		}
9997
		
9998
		$sth = $this->db->prepare($query);
9999
		$sth->execute(array(':offset' => $offset));
10000
      
10001
		$date_array = array();
10002
		$temp_array = array();
10003
        
10004
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10005
		{
10006
			$temp_array['month_name'] = $row['month_name'];
10007
			$temp_array['year_name'] = $row['year_name'];
10008
			$temp_array['date_count'] = $row['date_count'];
10009
10010
			$date_array[] = $temp_array;
10011
		}
10012
10013
		return $date_array;
10014
	}
10015
	
10016
10017
	/**
10018
	* Counts all month aircraft
10019
	*
10020
	* @return Array the month list
10021
	*
10022
	*/
10023
	public function countAllMonthsAircraftsByAirlines($filters = array())
10024
	{
10025
		global $globalTimezone, $globalDBdriver;
10026
		$filter_query = $this->getFilter($filters,true,true);
10027
		if ($globalTimezone != '') {
10028
			date_default_timezone_set($globalTimezone);
10029
			$datetime = new DateTime();
10030
			$offset = $datetime->format('P');
10031
		} else $offset = '+00:00';
10032
10033
		if ($globalDBdriver == 'mysql') {
10034
			$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
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
		} else {
10039
			$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
10040
								FROM spotter_output".$filter_query." aircraft_icao <> '' AND spotter_output.airline_icao <> '' 
10041
								GROUP BY spotter_output.airline_icao, year_name, month_name
10042
								ORDER BY date_count DESC";
10043
		}
10044
		
10045
		$sth = $this->db->prepare($query);
10046
		$sth->execute(array(':offset' => $offset));
10047
      
10048
		$date_array = array();
10049
		$temp_array = array();
10050
        
10051
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10052
		{
10053
			$temp_array['month_name'] = $row['month_name'];
10054
			$temp_array['year_name'] = $row['year_name'];
10055
			$temp_array['date_count'] = $row['date_count'];
10056
			$temp_array['airline_icao'] = $row['airline_icao'];
10057
10058
			$date_array[] = $temp_array;
10059
		}
10060
10061
		return $date_array;
10062
	}
10063
10064
	/**
10065
	* Counts all month real arrival
10066
	*
10067
	* @return Array the month list
10068
	*
10069
	*/
10070
	public function countAllMonthsRealArrivals($filters = array())
10071
	{
10072
		global $globalTimezone, $globalDBdriver;
10073
		if ($globalTimezone != '') {
10074
			date_default_timezone_set($globalTimezone);
10075
			$datetime = new DateTime();
10076
			$offset = $datetime->format('P');
10077
		} else $offset = '+00:00';
10078
		$filter_query = $this->getFilter($filters,true,true);
10079
10080
		if ($globalDBdriver == 'mysql') {
10081
			$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
10082
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
10083
								GROUP BY year_name, month_name
10084
								ORDER BY date_count DESC";
10085
		} else {
10086
			$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
10087
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
10088
								GROUP BY year_name, month_name
10089
								ORDER BY date_count DESC";
10090
		}
10091
		
10092
		$sth = $this->db->prepare($query);
10093
		$sth->execute(array(':offset' => $offset));
10094
      
10095
		$date_array = array();
10096
		$temp_array = array();
10097
        
10098
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10099
		{
10100
			$temp_array['month_name'] = $row['month_name'];
10101
			$temp_array['year_name'] = $row['year_name'];
10102
			$temp_array['date_count'] = $row['date_count'];
10103
10104
			$date_array[] = $temp_array;
10105
		}
10106
10107
		return $date_array;
10108
	}
10109
	
10110
10111
	/**
10112
	* Counts all month real arrival
10113
	*
10114
	* @return Array the month list
10115
	*
10116
	*/
10117
	public function countAllMonthsRealArrivalsByAirlines($filters = array())
10118
	{
10119
		global $globalTimezone, $globalDBdriver;
10120
		$filter_query = $this->getFilter($filters,true,true);
10121
		if ($globalTimezone != '') {
10122
			date_default_timezone_set($globalTimezone);
10123
			$datetime = new DateTime();
10124
			$offset = $datetime->format('P');
10125
		} else $offset = '+00:00';
10126
10127
		if ($globalDBdriver == 'mysql') {
10128
			$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
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
		} else {
10133
			$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
10134
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
10135
								GROUP BY spotter_output.airline_icao, year_name, month_name
10136
								ORDER BY date_count DESC";
10137
		}
10138
		
10139
		$sth = $this->db->prepare($query);
10140
		$sth->execute(array(':offset' => $offset));
10141
      
10142
		$date_array = array();
10143
		$temp_array = array();
10144
        
10145
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10146
		{
10147
			$temp_array['month_name'] = $row['month_name'];
10148
			$temp_array['year_name'] = $row['year_name'];
10149
			$temp_array['date_count'] = $row['date_count'];
10150
			$temp_array['airline_icao'] = $row['airline_icao'];
10151
10152
			$date_array[] = $temp_array;
10153
		}
10154
10155
		return $date_array;
10156
	}
10157
	
10158
10159
	/**
10160
	* Counts all dates during the last year
10161
	*
10162
	* @return Array the date list
10163
	*
10164
	*/
10165
	public function countAllMonthsLastYear($filters)
10166
	{
10167
		global $globalTimezone, $globalDBdriver;
10168
		if ($globalTimezone != '') {
10169
			date_default_timezone_set($globalTimezone);
10170
			$datetime = new DateTime();
10171
			$offset = $datetime->format('P');
10172
		} else $offset = '+00:00';
10173
		$filter_query = $this->getFilter($filters,true,true);
10174
		if ($globalDBdriver == 'mysql') {
10175
			$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
10176
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 YEAR)";
10177
			$query .= " GROUP BY year_name, month_name
10178
								ORDER BY year_name, month_name ASC";
10179
			$query_data = array(':offset' => $offset);
10180
		} else {
10181
			$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
10182
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 YEARS'";
10183
			$query .= " GROUP BY year_name, month_name
10184
								ORDER BY year_name, month_name ASC";
10185
			$query_data = array(':offset' => $offset);
10186
    		}
10187
		
10188
		$sth = $this->db->prepare($query);
10189
		$sth->execute($query_data);
10190
      
10191
		$date_array = array();
10192
		$temp_array = array();
10193
        
10194
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10195
		{
10196
			$temp_array['year_name'] = $row['year_name'];
10197
			$temp_array['month_name'] = $row['month_name'];
10198
			$temp_array['date_count'] = $row['date_count'];
10199
          
10200
			$date_array[] = $temp_array;
10201
		}
10202
10203
		return $date_array;
10204
	}
10205
	
10206
	
10207
	
10208
	/**
10209
	* Counts all hours
10210
	*
10211
	* @return Array the hour list
10212
	*
10213
	*/
10214
	public function countAllHours($orderby,$filters = array())
10215
	{
10216
		global $globalTimezone, $globalDBdriver;
10217
		if ($globalTimezone != '') {
10218
			date_default_timezone_set($globalTimezone);
10219
			$datetime = new DateTime();
10220
			$offset = $datetime->format('P');
10221
		} else $offset = '+00:00';
10222
10223
		$orderby_sql = '';
10224
		if ($orderby == "hour")
10225
		{
10226
			$orderby_sql = "ORDER BY hour_name ASC";
10227
		}
10228
		if ($orderby == "count")
10229
		{
10230
			$orderby_sql = "ORDER BY hour_count DESC";
10231
		}
10232
		
10233
		if ($globalDBdriver == 'mysql') {
10234
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10235
								FROM spotter_output";
10236
			$query .= $this->getFilter($filters);
10237
			$query .= " GROUP BY hour_name 
10238
								".$orderby_sql;
10239
10240
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
10241
								FROM spotter_output 
10242
								GROUP BY hour_name 
10243
								".$orderby_sql."
10244
								LIMIT 10 OFFSET 00";
10245
  */    
10246
		$query_data = array(':offset' => $offset);
10247
		} else {
10248
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10249
								FROM spotter_output";
10250
			$query .= $this->getFilter($filters);
10251
			$query .= " GROUP BY hour_name 
10252
								".$orderby_sql;
10253
			$query_data = array(':offset' => $offset);
10254
		}
10255
		
10256
		$sth = $this->db->prepare($query);
10257
		$sth->execute($query_data);
10258
      
10259
		$hour_array = array();
10260
		$temp_array = array();
10261
        
10262
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10263
		{
10264
			$temp_array['hour_name'] = $row['hour_name'];
10265
			$temp_array['hour_count'] = $row['hour_count'];
10266
          
10267
			$hour_array[] = $temp_array;
10268
		}
10269
10270
		return $hour_array;
10271
	}
10272
	
10273
	/**
10274
	* Counts all hours
10275
	*
10276
	* @return Array the hour list
10277
	*
10278
	*/
10279
	public function countAllHoursByAirlines($orderby, $filters = array())
10280
	{
10281
		global $globalTimezone, $globalDBdriver;
10282
		$filter_query = $this->getFilter($filters,true,true);
10283
		if ($globalTimezone != '') {
10284
			date_default_timezone_set($globalTimezone);
10285
			$datetime = new DateTime();
10286
			$offset = $datetime->format('P');
10287
		} else $offset = '+00:00';
10288
10289
		$orderby_sql = '';
10290
		if ($orderby == "hour")
10291
		{
10292
			$orderby_sql = "ORDER BY hour_name ASC";
10293
		}
10294
		if ($orderby == "count")
10295
		{
10296
			$orderby_sql = "ORDER BY hour_count DESC";
10297
		}
10298
		
10299
		if ($globalDBdriver == 'mysql') {
10300
			$query  = "SELECT spotter_output.airline_icao, HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10301
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
10302
								GROUP BY spotter_output.airline_icao, hour_name 
10303
								".$orderby_sql;
10304
10305
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
10306
								FROM spotter_output 
10307
								GROUP BY hour_name 
10308
								".$orderby_sql."
10309
								LIMIT 10 OFFSET 00";
10310
  */    
10311
		$query_data = array(':offset' => $offset);
10312
		} else {
10313
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10314
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
10315
								GROUP BY spotter_output.airline_icao, hour_name 
10316
								".$orderby_sql;
10317
			$query_data = array(':offset' => $offset);
10318
		}
10319
		
10320
		$sth = $this->db->prepare($query);
10321
		$sth->execute($query_data);
10322
      
10323
		$hour_array = array();
10324
		$temp_array = array();
10325
        
10326
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10327
		{
10328
			$temp_array['hour_name'] = $row['hour_name'];
10329
			$temp_array['hour_count'] = $row['hour_count'];
10330
			$temp_array['airline_icao'] = $row['airline_icao'];
10331
          
10332
			$hour_array[] = $temp_array;
10333
		}
10334
10335
		return $hour_array;
10336
	}
10337
10338
10339
10340
	/**
10341
	* Counts all hours by airline
10342
	*
10343
	* @return Array the hour list
10344
	*
10345
	*/
10346
	public function countAllHoursByAirline($airline_icao, $filters = array())
10347
	{
10348
		global $globalTimezone, $globalDBdriver;
10349
		$filter_query = $this->getFilter($filters,true,true);
10350
		if ($globalTimezone != '') {
10351
			date_default_timezone_set($globalTimezone);
10352
			$datetime = new DateTime();
10353
			$offset = $datetime->format('P');
10354
		} else $offset = '+00:00';
10355
10356
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
10357
10358
		if ($globalDBdriver == 'mysql') {
10359
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :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
		} else {
10364
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10365
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
10366
								GROUP BY hour_name 
10367
								ORDER BY hour_name ASC";
10368
		}
10369
		
10370
		$sth = $this->db->prepare($query);
10371
		$sth->execute(array(':airline_icao' => $airline_icao,':offset' => $offset));
10372
      
10373
		$hour_array = array();
10374
		$temp_array = array();
10375
        
10376
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10377
		{
10378
			$temp_array['hour_name'] = $row['hour_name'];
10379
			$temp_array['hour_count'] = $row['hour_count'];
10380
          
10381
			$hour_array[] = $temp_array;
10382
		}
10383
10384
		return $hour_array;
10385
	}
10386
	
10387
	
10388
	
10389
	
10390
	/**
10391
	* Counts all hours by aircraft
10392
	*
10393
	* @return Array the hour list
10394
	*
10395
	*/
10396
	public function countAllHoursByAircraft($aircraft_icao, $filters = array())
10397
	{
10398
		global $globalTimezone, $globalDBdriver;
10399
		$filter_query = $this->getFilter($filters,true,true);
10400
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
10401
		if ($globalTimezone != '') {
10402
			date_default_timezone_set($globalTimezone);
10403
			$datetime = new DateTime();
10404
			$offset = $datetime->format('P');
10405
		} else $offset = '+00:00';
10406
10407
		if ($globalDBdriver == 'mysql') {
10408
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :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
		} else {
10413
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10414
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
10415
								GROUP BY hour_name 
10416
								ORDER BY hour_name ASC";
10417
		}
10418
		
10419
		$sth = $this->db->prepare($query);
10420
		$sth->execute(array(':aircraft_icao' => $aircraft_icao,':offset' => $offset));
10421
      
10422
		$hour_array = array();
10423
		$temp_array = array();
10424
        
10425
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10426
		{
10427
			$temp_array['hour_name'] = $row['hour_name'];
10428
			$temp_array['hour_count'] = $row['hour_count'];
10429
          
10430
			$hour_array[] = $temp_array;
10431
		}
10432
10433
		return $hour_array;
10434
	}
10435
	
10436
	
10437
	/**
10438
	* Counts all hours by aircraft registration
10439
	*
10440
	* @return Array the hour list
10441
	*
10442
	*/
10443
	public function countAllHoursByRegistration($registration, $filters = array())
10444
	{
10445
		global $globalTimezone, $globalDBdriver;
10446
		$filter_query = $this->getFilter($filters,true,true);
10447
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
10448
		if ($globalTimezone != '') {
10449
			date_default_timezone_set($globalTimezone);
10450
			$datetime = new DateTime();
10451
			$offset = $datetime->format('P');
10452
		} else $offset = '+00:00';
10453
10454
		if ($globalDBdriver == 'mysql') {
10455
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :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
		} else {
10460
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10461
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
10462
								GROUP BY hour_name 
10463
								ORDER BY hour_name ASC";
10464
		}
10465
		
10466
		$sth = $this->db->prepare($query);
10467
		$sth->execute(array(':registration' => $registration,':offset' => $offset));
10468
      
10469
		$hour_array = array();
10470
		$temp_array = array();
10471
        
10472
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10473
		{
10474
			$temp_array['hour_name'] = $row['hour_name'];
10475
			$temp_array['hour_count'] = $row['hour_count'];
10476
          
10477
			$hour_array[] = $temp_array;
10478
		}
10479
10480
		return $hour_array;
10481
	}
10482
	
10483
	
10484
	/**
10485
	* Counts all hours by airport
10486
	*
10487
	* @return Array the hour list
10488
	*
10489
	*/
10490
	public function countAllHoursByAirport($airport_icao, $filters = array())
10491
	{
10492
		global $globalTimezone, $globalDBdriver;
10493
		$filter_query = $this->getFilter($filters,true,true);
10494
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
10495
		if ($globalTimezone != '') {
10496
			date_default_timezone_set($globalTimezone);
10497
			$datetime = new DateTime();
10498
			$offset = $datetime->format('P');
10499
		} else $offset = '+00:00';
10500
10501
		if ($globalDBdriver == 'mysql') {
10502
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :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
		} else {
10507
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10508
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
10509
								GROUP BY hour_name 
10510
								ORDER BY hour_name ASC";
10511
		}
10512
		
10513
		$sth = $this->db->prepare($query);
10514
		$sth->execute(array(':airport_icao' => $airport_icao,':offset' => $offset));
10515
      
10516
		$hour_array = array();
10517
		$temp_array = array();
10518
        
10519
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10520
		{
10521
			$temp_array['hour_name'] = $row['hour_name'];
10522
			$temp_array['hour_count'] = $row['hour_count'];
10523
          
10524
			$hour_array[] = $temp_array;
10525
		}
10526
10527
		return $hour_array;
10528
	}
10529
	
10530
	
10531
	
10532
	/**
10533
	* Counts all hours by manufacturer
10534
	*
10535
	* @return Array the hour list
10536
	*
10537
	*/
10538
	public function countAllHoursByManufacturer($aircraft_manufacturer,$filters =array())
10539
	{
10540
		global $globalTimezone, $globalDBdriver;
10541
		$filter_query = $this->getFilter($filters,true,true);
10542
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
10543
		if ($globalTimezone != '') {
10544
			date_default_timezone_set($globalTimezone);
10545
			$datetime = new DateTime();
10546
			$offset = $datetime->format('P');
10547
		} else $offset = '+00:00';
10548
10549
		if ($globalDBdriver == 'mysql') {
10550
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :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
		} else {
10555
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10556
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
10557
								GROUP BY hour_name 
10558
								ORDER BY hour_name ASC";
10559
		}
10560
		
10561
		$sth = $this->db->prepare($query);
10562
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer,':offset' => $offset));
10563
      
10564
		$hour_array = array();
10565
		$temp_array = array();
10566
        
10567
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10568
		{
10569
			$temp_array['hour_name'] = $row['hour_name'];
10570
			$temp_array['hour_count'] = $row['hour_count'];
10571
          
10572
			$hour_array[] = $temp_array;
10573
		}
10574
10575
		return $hour_array;
10576
	}
10577
	
10578
	
10579
	
10580
	/**
10581
	* Counts all hours by date
10582
	*
10583
	* @return Array the hour list
10584
	*
10585
	*/
10586
	public function countAllHoursByDate($date, $filters = array())
10587
	{
10588
		global $globalTimezone, $globalDBdriver;
10589
		$filter_query = $this->getFilter($filters,true,true);
10590
		$date = filter_var($date,FILTER_SANITIZE_STRING);
10591
		if ($globalTimezone != '') {
10592
			date_default_timezone_set($globalTimezone);
10593
			$datetime = new DateTime($date);
10594
			$offset = $datetime->format('P');
10595
		} else $offset = '+00:00';
10596
10597
		if ($globalDBdriver == 'mysql') {
10598
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10599
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
10600
								GROUP BY hour_name 
10601
								ORDER BY hour_name ASC";
10602
		} else {
10603
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10604
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset, 'YYYY-mm-dd') = :date
10605
								GROUP BY hour_name 
10606
								ORDER BY hour_name ASC";
10607
		}
10608
		
10609
		$sth = $this->db->prepare($query);
10610
		$sth->execute(array(':date' => $date, ':offset' => $offset));
10611
      
10612
		$hour_array = array();
10613
		$temp_array = array();
10614
        
10615
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10616
		{
10617
			$temp_array['hour_name'] = $row['hour_name'];
10618
			$temp_array['hour_count'] = $row['hour_count'];
10619
          
10620
			$hour_array[] = $temp_array;
10621
		}
10622
10623
		return $hour_array;
10624
	}
10625
	
10626
	
10627
	
10628
	/**
10629
	* Counts all hours by a ident/callsign
10630
	*
10631
	* @return Array the hour list
10632
	*
10633
	*/
10634
	public function countAllHoursByIdent($ident, $filters = array())
10635
	{
10636
		global $globalTimezone, $globalDBdriver;
10637
		$filter_query = $this->getFilter($filters,true,true);
10638
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
10639
		if ($globalTimezone != '') {
10640
			date_default_timezone_set($globalTimezone);
10641
			$datetime = new DateTime();
10642
			$offset = $datetime->format('P');
10643
		} else $offset = '+00:00';
10644
10645
		if ($globalDBdriver == 'mysql') {
10646
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :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
		} else {
10651
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10652
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
10653
								GROUP BY hour_name 
10654
								ORDER BY hour_name ASC";
10655
		}
10656
      
10657
		
10658
		$sth = $this->db->prepare($query);
10659
		$sth->execute(array(':ident' => $ident,':offset' => $offset));
10660
      
10661
		$hour_array = array();
10662
		$temp_array = array();
10663
        
10664
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10665
		{
10666
			$temp_array['hour_name'] = $row['hour_name'];
10667
			$temp_array['hour_count'] = $row['hour_count'];
10668
          
10669
			$hour_array[] = $temp_array;
10670
		}
10671
10672
		return $hour_array;
10673
	}
10674
	
10675
	/**
10676
	* Counts all hours by a owner
10677
	*
10678
	* @return Array the hour list
10679
	*
10680
	*/
10681
	public function countAllHoursByOwner($owner, $filters = array())
10682
	{
10683
		global $globalTimezone, $globalDBdriver;
10684
		$filter_query = $this->getFilter($filters,true,true);
10685
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
10686
		if ($globalTimezone != '') {
10687
			date_default_timezone_set($globalTimezone);
10688
			$datetime = new DateTime();
10689
			$offset = $datetime->format('P');
10690
		} else $offset = '+00:00';
10691
10692
		if ($globalDBdriver == 'mysql') {
10693
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :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
		} else {
10698
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10699
								FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
10700
								GROUP BY hour_name 
10701
								ORDER BY hour_name ASC";
10702
		}
10703
      
10704
		
10705
		$sth = $this->db->prepare($query);
10706
		$sth->execute(array(':owner' => $owner,':offset' => $offset));
10707
      
10708
		$hour_array = array();
10709
		$temp_array = array();
10710
        
10711
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10712
		{
10713
			$temp_array['hour_name'] = $row['hour_name'];
10714
			$temp_array['hour_count'] = $row['hour_count'];
10715
          
10716
			$hour_array[] = $temp_array;
10717
		}
10718
10719
		return $hour_array;
10720
	}
10721
	
10722
	/**
10723
	* Counts all hours by a pilot
10724
	*
10725
	* @return Array the hour list
10726
	*
10727
	*/
10728
	public function countAllHoursByPilot($pilot, $filters = array())
10729
	{
10730
		global $globalTimezone, $globalDBdriver;
10731
		$filter_query = $this->getFilter($filters,true,true);
10732
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
10733
		if ($globalTimezone != '') {
10734
			date_default_timezone_set($globalTimezone);
10735
			$datetime = new DateTime();
10736
			$offset = $datetime->format('P');
10737
		} else $offset = '+00:00';
10738
10739
		if ($globalDBdriver == 'mysql') {
10740
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :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
		} else {
10745
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10746
								FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
10747
								GROUP BY hour_name 
10748
								ORDER BY hour_name ASC";
10749
		}
10750
      
10751
		
10752
		$sth = $this->db->prepare($query);
10753
		$sth->execute(array(':pilot' => $pilot,':offset' => $offset));
10754
      
10755
		$hour_array = array();
10756
		$temp_array = array();
10757
        
10758
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10759
		{
10760
			$temp_array['hour_name'] = $row['hour_name'];
10761
			$temp_array['hour_count'] = $row['hour_count'];
10762
          
10763
			$hour_array[] = $temp_array;
10764
		}
10765
10766
		return $hour_array;
10767
	}
10768
	
10769
	
10770
	
10771
	/**
10772
	* Counts all hours by route
10773
	*
10774
	* @return Array the hour list
10775
	*
10776
	*/
10777
	public function countAllHoursByRoute($departure_airport_icao, $arrival_airport_icao, $filters =array())
10778
	{
10779
		global $globalTimezone, $globalDBdriver;
10780
		$filter_query = $this->getFilter($filters,true,true);
10781
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
10782
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
10783
		if ($globalTimezone != '') {
10784
			date_default_timezone_set($globalTimezone);
10785
			$datetime = new DateTime();
10786
			$offset = $datetime->format('P');
10787
		} else $offset = '+00:00';
10788
10789
		if ($globalDBdriver == 'mysql') {
10790
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :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
		} else {
10795
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10796
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
10797
								GROUP BY hour_name 
10798
								ORDER BY hour_name ASC";
10799
		}
10800
		
10801
		$sth = $this->db->prepare($query);
10802
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao,':offset' => $offset));
10803
      
10804
		$hour_array = array();
10805
		$temp_array = array();
10806
        
10807
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10808
		{
10809
			$temp_array['hour_name'] = $row['hour_name'];
10810
			$temp_array['hour_count'] = $row['hour_count'];
10811
          
10812
			$hour_array[] = $temp_array;
10813
		}
10814
10815
		return $hour_array;
10816
	}
10817
	
10818
	
10819
	/**
10820
	* Counts all hours by country
10821
	*
10822
	* @return Array the hour list
10823
	*
10824
	*/
10825
	public function countAllHoursByCountry($country, $filters = array())
10826
	{
10827
		global $globalTimezone, $globalDBdriver;
10828
		$filter_query = $this->getFilter($filters,true,true);
10829
		$country = filter_var($country,FILTER_SANITIZE_STRING);
10830
		if ($globalTimezone != '') {
10831
			date_default_timezone_set($globalTimezone);
10832
			$datetime = new DateTime();
10833
			$offset = $datetime->format('P');
10834
		} else $offset = '+00:00';
10835
10836
		if ($globalDBdriver == 'mysql') {
10837
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :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
		} else {
10842
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10843
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
10844
								GROUP BY hour_name 
10845
								ORDER BY hour_name ASC";
10846
		}
10847
		
10848
		$sth = $this->db->prepare($query);
10849
		$sth->execute(array(':country' => $country,':offset' => $offset));
10850
      
10851
		$hour_array = array();
10852
		$temp_array = array();
10853
        
10854
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10855
		{
10856
			$temp_array['hour_name'] = $row['hour_name'];
10857
			$temp_array['hour_count'] = $row['hour_count'];
10858
          
10859
			$hour_array[] = $temp_array;
10860
		}
10861
10862
		return $hour_array;
10863
	}
10864
10865
10866
10867
10868
	/**
10869
	* Counts all aircraft that have flown over
10870
	*
10871
	* @return Integer the number of aircrafts
10872
	*
10873
	*/
10874
	public function countOverallAircrafts($filters = array(),$year = '',$month = '')
10875
	{
10876
		global $globalDBdriver;
10877
		$filter_query = $this->getFilter($filters,true,true);
10878
		$query  = "SELECT COUNT(DISTINCT spotter_output.aircraft_icao) AS aircraft_count  
10879
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''";
10880
		$query_values = array();
10881
		if ($year != '') {
10882
			if ($globalDBdriver == 'mysql') {
10883
				$query .= " AND YEAR(spotter_output.date) = :year";
10884
				$query_values = array_merge($query_values,array(':year' => $year));
10885
			} else {
10886
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10887
				$query_values = array_merge($query_values,array(':year' => $year));
10888
			}
10889
		}
10890
		if ($month != '') {
10891
			if ($globalDBdriver == 'mysql') {
10892
				$query .= " AND MONTH(spotter_output.date) = :month";
10893
				$query_values = array_merge($query_values,array(':month' => $month));
10894
			} else {
10895
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10896
				$query_values = array_merge($query_values,array(':month' => $month));
10897
			}
10898
		}
10899
10900
		$sth = $this->db->prepare($query);
10901
		$sth->execute($query_values);
10902
		return $sth->fetchColumn();
10903
	}
10904
10905
	/**
10906
	* Counts all flight that really arrival
10907
	*
10908
	* @return Integer the number of aircrafts
10909
	*
10910
	*/
10911
	public function countOverallArrival($filters = array(),$year = '',$month = '')
10912
	{
10913
		global $globalDBdriver;
10914
		$filter_query = $this->getFilter($filters,true,true);
10915
		$query  = "SELECT COUNT(spotter_output.real_arrival_airport_icao) AS arrival_count  
10916
                    FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> ''";
10917
		$query_values = array();
10918
		if ($year != '') {
10919
			if ($globalDBdriver == 'mysql') {
10920
				$query .= " AND YEAR(spotter_output.date) = :year";
10921
				$query_values = array_merge($query_values,array(':year' => $year));
10922
			} else {
10923
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10924
				$query_values = array_merge($query_values,array(':year' => $year));
10925
			}
10926
		}
10927
		if ($month != '') {
10928
			if ($globalDBdriver == 'mysql') {
10929
				$query .= " AND MONTH(spotter_output.date) = :month";
10930
				$query_values = array_merge($query_values,array(':month' => $month));
10931
			} else {
10932
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10933
				$query_values = array_merge($query_values,array(':month' => $month));
10934
			}
10935
		}
10936
		
10937
		$sth = $this->db->prepare($query);
10938
		$sth->execute($query_values);
10939
		return $sth->fetchColumn();
10940
	}
10941
10942
	/**
10943
	* Counts all pilots that have flown over
10944
	*
10945
	* @return Integer the number of pilots
10946
	*
10947
	*/
10948
	public function countOverallPilots($filters = array(),$year = '',$month = '')
10949
	{
10950
		global $globalDBdriver;
10951
		$filter_query = $this->getFilter($filters,true,true);
10952
		$query  = "SELECT COUNT(DISTINCT spotter_output.pilot_id) AS pilot_count  
10953
                    FROM spotter_output".$filter_query." spotter_output.pilot_id <> ''";
10954
		$query_values = array();
10955
		if ($year != '') {
10956
			if ($globalDBdriver == 'mysql') {
10957
				$query .= " AND YEAR(spotter_output.date) = :year";
10958
				$query_values = array_merge($query_values,array(':year' => $year));
10959
			} else {
10960
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10961
				$query_values = array_merge($query_values,array(':year' => $year));
10962
			}
10963
		}
10964
		if ($month != '') {
10965
			if ($globalDBdriver == 'mysql') {
10966
				$query .= " AND MONTH(spotter_output.date) = :month";
10967
				$query_values = array_merge($query_values,array(':month' => $month));
10968
			} else {
10969
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10970
				$query_values = array_merge($query_values,array(':month' => $month));
10971
			}
10972
		}
10973
		$sth = $this->db->prepare($query);
10974
		$sth->execute($query_values);
10975
		return $sth->fetchColumn();
10976
	}
10977
10978
	/**
10979
	* Counts all owners that have flown over
10980
	*
10981
	* @return Integer the number of owners
10982
	*
10983
	*/
10984
	public function countOverallOwners($filters = array(),$year = '',$month = '')
10985
	{
10986
		global $globalDBdriver;
10987
		$filter_query = $this->getFilter($filters,true,true);
10988
		$query  = "SELECT COUNT(DISTINCT spotter_output.owner_name) AS owner_count  
10989
                    FROM spotter_output".$filter_query." spotter_output.owner_name <> ''";
10990
		$query_values = array();
10991
		if ($year != '') {
10992
			if ($globalDBdriver == 'mysql') {
10993
				$query .= " AND YEAR(spotter_output.date) = :year";
10994
				$query_values = array_merge($query_values,array(':year' => $year));
10995
			} else {
10996
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10997
				$query_values = array_merge($query_values,array(':year' => $year));
10998
			}
10999
		}
11000
		if ($month != '') {
11001
			if ($globalDBdriver == 'mysql') {
11002
				$query .= " AND MONTH(spotter_output.date) = :month";
11003
				$query_values = array_merge($query_values,array(':month' => $month));
11004
			} else {
11005
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
11006
				$query_values = array_merge($query_values,array(':month' => $month));
11007
			}
11008
		}
11009
		$sth = $this->db->prepare($query);
11010
		$sth->execute($query_values);
11011
		return $sth->fetchColumn();
11012
	}
11013
	
11014
	
11015
	/**
11016
	* Counts all flights that have flown over
11017
	*
11018
	* @return Integer the number of flights
11019
	*
11020
	*/
11021
	public function countOverallFlights($filters = array(),$year = '',$month = '')
11022
	{
11023
		global $globalDBdriver;
11024
		$queryi  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count FROM spotter_output";
11025
		$query_values = array();
11026
		$query = '';
11027
		if ($year != '') {
11028
			if ($globalDBdriver == 'mysql') {
11029
				$query .= " AND YEAR(spotter_output.date) = :year";
11030
				$query_values = array_merge($query_values,array(':year' => $year));
11031
			} else {
11032
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
11033
				$query_values = array_merge($query_values,array(':year' => $year));
11034
			}
11035
		}
11036
		if ($month != '') {
11037
			if ($globalDBdriver == 'mysql') {
11038
				$query .= " AND MONTH(spotter_output.date) = :month";
11039
				$query_values = array_merge($query_values,array(':month' => $month));
11040
			} else {
11041
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
11042
				$query_values = array_merge($query_values,array(':month' => $month));
11043
			}
11044
		}
11045
		if (empty($query_values)) $queryi .= $this->getFilter($filters);
11046
		else $queryi .= $this->getFilter($filters,true,true).substr($query,4);
11047
		
11048
		$sth = $this->db->prepare($queryi);
11049
		$sth->execute($query_values);
11050
		return $sth->fetchColumn();
11051
	}
11052
	
11053
	/**
11054
	* Counts all military flights that have flown over
11055
	*
11056
	* @return Integer the number of flights
11057
	*
11058
	*/
11059
	public function countOverallMilitaryFlights($filters = array(),$year = '',$month = '')
11060
	{
11061
		global $globalDBdriver;
11062
		$filter_query = $this->getFilter($filters,true,true);
11063
		$query  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count  
11064
                    FROM airlines,spotter_output".$filter_query." spotter_output.airline_icao = airlines.icao AND airlines.type = 'military'";
11065
		$query_values = array();
11066
		if ($year != '') {
11067
			if ($globalDBdriver == 'mysql') {
11068
				$query .= " AND YEAR(spotter_output.date) = :year";
11069
				$query_values = array_merge($query_values,array(':year' => $year));
11070
			} else {
11071
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
11072
				$query_values = array_merge($query_values,array(':year' => $year));
11073
			}
11074
		}
11075
		if ($month != '') {
11076
			if ($globalDBdriver == 'mysql') {
11077
				$query .= " AND MONTH(spotter_output.date) = :month";
11078
				$query_values = array_merge($query_values,array(':month' => $month));
11079
			} else {
11080
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
11081
				$query_values = array_merge($query_values,array(':month' => $month));
11082
			}
11083
		}
11084
      
11085
		$sth = $this->db->prepare($query);
11086
		$sth->execute($query_values);
11087
		return $sth->fetchColumn();
11088
	}
11089
	
11090
	
11091
	
11092
	/**
11093
	* Counts all airlines that have flown over
11094
	*
11095
	* @return Integer the number of airlines
11096
	*
11097
	*/
11098
	public function countOverallAirlines($filters = array(),$year = '',$month = '')
11099
	{
11100
		global $globalDBdriver;
11101
		$queryi  = "SELECT COUNT(DISTINCT spotter_output.airline_name) AS airline_count 
11102
							FROM spotter_output";
11103
      
11104
		$query_values = array();
11105
		$query = '';
11106
		if ($year != '') {
11107
			if ($globalDBdriver == 'mysql') {
11108
				$query .= " AND YEAR(spotter_output.date) = :year";
11109
				$query_values = array_merge($query_values,array(':year' => $year));
11110
			} else {
11111
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
11112
				$query_values = array_merge($query_values,array(':year' => $year));
11113
			}
11114
		}
11115
		if ($month != '') {
11116
			if ($globalDBdriver == 'mysql') {
11117
				$query .= " AND MONTH(spotter_output.date) = :month";
11118
				$query_values = array_merge($query_values,array(':month' => $month));
11119
			} else {
11120
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
11121
				$query_values = array_merge($query_values,array(':month' => $month));
11122
			}
11123
		}
11124
                if ($query == '') $queryi .= $this->getFilter($filters);
11125
                else $queryi .= $this->getFilter($filters,true,true).substr($query,4);
11126
11127
11128
		$sth = $this->db->prepare($queryi);
11129
		$sth->execute($query_values);
11130
		return $sth->fetchColumn();
11131
	}
11132
11133
  
11134
	/**
11135
	* Counts all hours of today
11136
	*
11137
	* @return Array the hour list
11138
	*
11139
	*/
11140
	public function countAllHoursFromToday($filters = array())
11141
	{
11142
		global $globalTimezone, $globalDBdriver;
11143
		$filter_query = $this->getFilter($filters,true,true);
11144
		if ($globalTimezone != '') {
11145
			date_default_timezone_set($globalTimezone);
11146
			$datetime = new DateTime();
11147
			$offset = $datetime->format('P');
11148
		} else $offset = '+00:00';
11149
11150
		if ($globalDBdriver == 'mysql') {
11151
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
11152
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = CURDATE()
11153
								GROUP BY hour_name 
11154
								ORDER BY hour_name ASC";
11155
		} else {
11156
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
11157
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = CAST(NOW() AS date)
11158
								GROUP BY hour_name 
11159
								ORDER BY hour_name ASC";
11160
		}
11161
		
11162
		$sth = $this->db->prepare($query);
11163
		$sth->execute(array(':offset' => $offset));
11164
      
11165
		$hour_array = array();
11166
		$temp_array = array();
11167
        
11168
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11169
		{
11170
			$temp_array['hour_name'] = $row['hour_name'];
11171
			$temp_array['hour_count'] = $row['hour_count'];
11172
			$hour_array[] = $temp_array;
11173
		}
11174
11175
		return $hour_array;
11176
	}
11177
    
11178
	/**
11179
	* Gets all the spotter information based on calculated upcoming flights
11180
	*
11181
	* @return Array the spotter information
11182
	*
11183
	*/
11184
	public function getUpcomingFlights($limit = '', $sort = '', $filters = array())
11185
	{
11186
		global $global_query, $globalDBdriver, $globalTimezone;
11187
		$filter_query = $this->getFilter($filters,true,true);
11188
		date_default_timezone_set('UTC');
11189
		$limit_query = '';
11190
		if ($limit != "")
11191
		{
11192
			$limit_array = explode(",", $limit);
11193
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
11194
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
11195
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
11196
			{
11197
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
11198
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
11199
			}
11200
		}
11201
		$currentHour = date("G");
11202
		$next3Hours = date("G", strtotime("+3 hour"));
11203
		//if the next 3 hours is already equal to/past midnight, we limit it to stay there, otherwise the query will fail
11204
		if ($currentHour >= 21 && $next3Hours >= 00)
11205
		{
11206
			$next3Hours = 24;
11207
		}
11208
		$currentDayofWeek = date("l");
11209
		if ($globalDBdriver == 'mysql') {
11210
			if ($sort != "")
11211
			{
11212
				$search_orderby_array = $this->getOrderBy();
11213
				$orderby_query = $search_orderby_array[$sort]['sql'];
11214
			} else {
11215
				$orderby_query = " ORDER BY HOUR(spotter_output.date) ASC";
11216
			}
11217
/*
11218
			$query = "SELECT spotter_output.*, 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.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
11224
			    FROM spotter_output
11225
			    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'
11226
			    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";
11227
*/
11228
			$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 
11229
			    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'
11230
			    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
11231
			    HAVING count(spotter_output.ident) > 5$orderby_query";
11232
11233
			$spotter_array = $this->getDataFromDB($query.$limit_query);
11234
		} else {
11235
			if ($sort != "")
11236
			{
11237
				$search_orderby_array = $this->getOrderBy();
11238
				$orderby_query = $search_orderby_array[$sort]['sql'];
11239
			} else {
11240
				$orderby_query = " ORDER BY to_char(spotter_output.date,'HH') ASC";
11241
			}
11242
			$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') 
11243
			    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 <> '' 
11244
			    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')
11245
			    HAVING count(spotter_output.ident) > 5$orderby_query";
11246
			//echo $query;
11247
			$spotter_array = $this->getDataFromDB($query.$limit_query,array(':timezone' => $globalTimezone));
11248
			/*
11249
			$sth = $this->db->prepare($query);
11250
			$sth->execute(array(':timezone' => $globalTimezone));
11251
			return $sth->fetchAll(PDO::FETCH_ASSOC);
11252
			*/
11253
		}
11254
		return $spotter_array;
11255
	}
11256
    
11257
    
11258
     /**
11259
	* Gets the Barrie Spotter ID based on the FlightAware ID
11260
	*
11261
	* @return Integer the Barrie Spotter ID
11262
q	*
11263
	*/
11264
	public function getSpotterIDBasedOnFlightAwareID($flightaware_id)
11265
	{
11266
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
11267
11268
		$query  = "SELECT spotter_output.spotter_id
11269
								FROM spotter_output 
11270
								WHERE spotter_output.flightaware_id = '".$flightaware_id."'";
11271
        
11272
		
11273
		$sth = $this->db->prepare($query);
11274
		$sth->execute();
11275
11276
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11277
		{
11278
			return $row['spotter_id'];
11279
		}
11280
	}
11281
  
11282
 
11283
	/**
11284
	* Parses a date string
11285
	*
11286
	* @param String $dateString the date string
11287
	* @param String $timezone the timezone of a user
11288
	* @return Array the time information
11289
	*
11290
	*/
11291
	public function parseDateString($dateString, $timezone = '')
11292
	{
11293
		$time_array = array();
11294
	
11295
		if ($timezone != "")
11296
		{
11297
			date_default_timezone_set($timezone);
11298
		}
11299
		
11300
		$current_date = date("Y-m-d H:i:s");
11301
		$date = date("Y-m-d H:i:s",strtotime($dateString." UTC"));
11302
		
11303
		$diff = abs(strtotime($current_date) - strtotime($date));
11304
11305
		$time_array['years'] = floor($diff / (365*60*60*24)); 
11306
		$years = $time_array['years'];
11307
		
11308
		$time_array['months'] = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
11309
		$months = $time_array['months'];
11310
		
11311
		$time_array['days'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
11312
		$days = $time_array['days'];
11313
		$time_array['hours'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24)/ (60*60));
11314
		$hours = $time_array['hours'];
11315
		$time_array['minutes'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60)/ 60);
11316
		$minutes = $time_array['minutes'];
11317
		$time_array['seconds'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60 - $minutes*60));  
11318
		
11319
		return $time_array;	
11320
	}	
11321
	
11322
	
11323
	
11324
	
11325
	/**
11326
	* Parses the direction degrees to working
11327
	*
11328
	* @param Float $direction the direction in degrees
11329
	* @return Array the direction information
11330
	*
11331
	*/
11332
	public function parseDirection($direction = 0)
11333
	{
11334
		if ($direction == '') $direction = 0;
11335
		$direction_array = array();
11336
		$temp_array = array();
11337
11338
		if ($direction == 360 || ($direction >= 0 && $direction < 22.5))
11339
		{
11340
			$temp_array['direction_degree'] = $direction;
11341
			$temp_array['direction_shortname'] = "N";
11342
			$temp_array['direction_fullname'] = "North";
11343
		} elseif ($direction >= 22.5 && $direction < 45){
11344
			$temp_array['direction_degree'] = $direction;
11345
			$temp_array['direction_shortname'] = "NNE";
11346
			$temp_array['direction_fullname'] = "North-Northeast";
11347
		} elseif ($direction >= 45 && $direction < 67.5){
11348
			$temp_array['direction_degree'] = $direction;
11349
			$temp_array['direction_shortname'] = "NE";
11350
			$temp_array['direction_fullname'] = "Northeast";
11351
		} elseif ($direction >= 67.5 && $direction < 90){
11352
			$temp_array['direction_degree'] = $direction;
11353
			$temp_array['direction_shortname'] = "ENE";
11354
			$temp_array['direction_fullname'] = "East-Northeast";
11355
		} elseif ($direction >= 90 && $direction < 112.5){
11356
			$temp_array['direction_degree'] = $direction;
11357
			$temp_array['direction_shortname'] = "E";
11358
			$temp_array['direction_fullname'] = "East";
11359
		} elseif ($direction >= 112.5 && $direction < 135){
11360
			$temp_array['direction_degree'] = $direction;
11361
			$temp_array['direction_shortname'] = "ESE";
11362
			$temp_array['direction_fullname'] = "East-Southeast";
11363
		} elseif ($direction >= 135 && $direction < 157.5){
11364
			$temp_array['direction_degree'] = $direction;
11365
			$temp_array['direction_shortname'] = "SE";
11366
			$temp_array['direction_fullname'] = "Southeast";
11367
		} elseif ($direction >= 157.5 && $direction < 180){
11368
			$temp_array['direction_degree'] = $direction;
11369
			$temp_array['direction_shortname'] = "SSE";
11370
			$temp_array['direction_fullname'] = "South-Southeast";
11371
		} elseif ($direction >= 180 && $direction < 202.5){
11372
			$temp_array['direction_degree'] = $direction;
11373
			$temp_array['direction_shortname'] = "S";
11374
			$temp_array['direction_fullname'] = "South";
11375
		} elseif ($direction >= 202.5 && $direction < 225){
11376
			$temp_array['direction_degree'] = $direction;
11377
			$temp_array['direction_shortname'] = "SSW";
11378
			$temp_array['direction_fullname'] = "South-Southwest";
11379
		} elseif ($direction >= 225 && $direction < 247.5){
11380
			$temp_array['direction_degree'] = $direction;
11381
			$temp_array['direction_shortname'] = "SW";
11382
			$temp_array['direction_fullname'] = "Southwest";
11383
		} elseif ($direction >= 247.5 && $direction < 270){
11384
			$temp_array['direction_degree'] = $direction;
11385
			$temp_array['direction_shortname'] = "WSW";
11386
			$temp_array['direction_fullname'] = "West-Southwest";
11387
		} elseif ($direction >= 270 && $direction < 292.5){
11388
			$temp_array['direction_degree'] = $direction;
11389
			$temp_array['direction_shortname'] = "W";
11390
			$temp_array['direction_fullname'] = "West";
11391
		} elseif ($direction >= 292.5 && $direction < 315){
11392
			$temp_array['direction_degree'] = $direction;
11393
			$temp_array['direction_shortname'] = "WNW";
11394
			$temp_array['direction_fullname'] = "West-Northwest";
11395
		} elseif ($direction >= 315 && $direction < 337.5){
11396
			$temp_array['direction_degree'] = $direction;
11397
			$temp_array['direction_shortname'] = "NW";
11398
			$temp_array['direction_fullname'] = "Northwest";
11399
		} elseif ($direction >= 337.5 && $direction < 360){
11400
			$temp_array['direction_degree'] = $direction;
11401
			$temp_array['direction_shortname'] = "NNW";
11402
			$temp_array['direction_fullname'] = "North-Northwest";
11403
		}
11404
		$direction_array[] = $temp_array;
11405
		return $direction_array;
11406
	}
11407
	
11408
	
11409
	/**
11410
	* Gets the aircraft registration
11411
	*
11412
	* @param String $flightaware_id the flight aware id
11413
	* @return String the aircraft registration
11414
	*
11415
	*/
11416
	
11417
	public function getAircraftRegistration($flightaware_id)
11418
	{
11419
		global $globalFlightAwareUsername, $globalFlightAwarePassword;
11420
        
11421
		$options = array(
11422
			'trace' => true,
11423
			'exceptions' => 0,
11424
			'login' => $globalFlightAwareUsername,
11425
			'password' => $globalFlightAwarePassword,
11426
		);
11427
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
11428
		
11429
		$params = array('faFlightID' => $flightaware_id);
11430
		$result = $client->AirlineFlightInfo($params);
11431
		
11432
		if (isset($result->AirlineFlightInfoResult))
11433
		{
11434
			$registration = $result->AirlineFlightInfoResult->tailnumber;
11435
		} else return '';
11436
		
11437
		$registration = $this->convertAircraftRegistration($registration);
11438
		
11439
		return $registration;
11440
	}
11441
11442
11443
	/**
11444
	* Gets the aircraft registration from ModeS
11445
	*
11446
	* @param String $aircraft_modes the flight ModeS in hex
11447
	* @return String the aircraft registration
11448
	*
11449
	*/
11450
	public function getAircraftRegistrationBymodeS($aircraft_modes, $source_type = '')
11451
	{
11452
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
11453
		$source_type = filter_var($source_type,FILTER_SANITIZE_STRING);
11454
		if ($source_type == '' || $source_type == 'modes') {
11455
			$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";
11456
		} else {
11457
			$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";
11458
		}
11459
		$sth = $this->db->prepare($query);
11460
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
11461
    
11462
		$row = $sth->fetch(PDO::FETCH_ASSOC);
11463
		$sth->closeCursor();
11464
		if (count($row) > 0) {
11465
		    //return $row['Registration'];
11466
		    return $row['registration'];
11467
		} elseif ($source_type == 'flarm') {
11468
			return $this->getAircraftRegistrationBymodeS($aircraft_modes);
11469
		} else return '';
11470
	
11471
	}
11472
11473
	/**
11474
	* Gets the aircraft type from ModeS
11475
	*
11476
	* @param String $aircraft_modes the flight ModeS in hex
11477
	* @return String the aircraft type
11478
	*
11479
	*/
11480
	public function getAircraftTypeBymodeS($aircraft_modes,$source_type = '')
11481
	{
11482
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
11483
		$source_type = filter_var($source_type,FILTER_SANITIZE_STRING);
11484
		if ($source_type == '' || $source_type == 'modes') {
11485
			$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";
11486
		} else {
11487
			$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";
11488
		}
11489
		
11490
		$sth = $this->db->prepare($query);
11491
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
11492
    
11493
		$row = $sth->fetch(PDO::FETCH_ASSOC);
11494
		$sth->closeCursor();
11495
		if (count($row) > 0) {
11496
			if ($row['type_flight'] == null) return '';
11497
			else return $row['type_flight'];
11498
		} elseif ($source_type == 'flarm') {
11499
			return $this->getAircraftTypeBymodeS($aircraft_modes);
11500
		} else return '';
11501
	
11502
	}
11503
11504
	/**
11505
	* Gets Country from latitude/longitude
11506
	*
11507
	* @param Float $latitude latitute of the flight
11508
	* @param Float $longitude longitute of the flight
11509
	* @return String the countrie
11510
	*/
11511
	public function getCountryFromLatitudeLongitude($latitude,$longitude)
11512
	{
11513
		global $globalDBdriver, $globalDebug;
11514
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
11515
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
11516
	
11517
		$Connection = new Connection($this->db);
11518
		if (!$Connection->tableExists('countries')) return '';
11519
	
11520
		try {
11521
			/*
11522
			if ($globalDBdriver == 'mysql') {
11523
				//$query  = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(:latitude :longitude)'), ogc_geom) LIMIT 1";
11524
				$query = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(".$longitude.' '.$latitude.")'), ogc_geom) LIMIT 1";
11525
			}
11526
			*/
11527
			// This query seems to work both for MariaDB and PostgreSQL
11528
			$query = "SELECT name,iso2,iso3 FROM countries WHERE ST_Within(ST_GeomFromText('POINT(".$longitude." ".$latitude.")',4326), ogc_geom) LIMIT 1";
11529
		
11530
			$sth = $this->db->prepare($query);
11531
			//$sth->execute(array(':latitude' => $latitude,':longitude' => $longitude));
11532
			$sth->execute();
11533
    
11534
			$row = $sth->fetch(PDO::FETCH_ASSOC);
11535
			$sth->closeCursor();
11536
			if (count($row) > 0) {
11537
				return $row;
11538
			} else return '';
11539
		} catch (PDOException $e) {
11540
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
11541
			return '';
11542
		}
11543
	
11544
	}
11545
11546
	/**
11547
	* Gets Country from iso2
11548
	*
11549
	* @param String $iso2 ISO2 country code
11550
	* @return String the countrie
11551
	*/
11552
	public function getCountryFromISO2($iso2)
11553
	{
11554
		global $globalDBdriver, $globalDebug;
11555
		$iso2 = filter_var($iso2,FILTER_SANITIZE_STRING);
11556
	
11557
		$Connection = new Connection($this->db);
11558
		if (!$Connection->tableExists('countries')) return '';
11559
	
11560
		try {
11561
			$query = "SELECT name,iso2,iso3 FROM countries WHERE iso2 = :iso2 LIMIT 1";
11562
		
11563
			$sth = $this->db->prepare($query);
11564
			$sth->execute(array(':iso2' => $iso2));
11565
    
11566
			$row = $sth->fetch(PDO::FETCH_ASSOC);
11567
			$sth->closeCursor();
11568
			if (count($row) > 0) {
11569
				return $row;
11570
			} else return '';
11571
		} catch (PDOException $e) {
11572
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
11573
			return '';
11574
		}
11575
	
11576
	}
11577
11578
	/**
11579
	* converts the registration code using the country prefix
11580
	*
11581
	* @param String $registration the aircraft registration
11582
	* @return String the aircraft registration
11583
	*
11584
	*/
11585
	public function convertAircraftRegistration($registration)
11586
	{
11587
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11588
		$registration_prefix = '';
11589
		$registration_1 = substr($registration, 0, 1);
11590
		$registration_2 = substr($registration, 0, 2);
11591
11592
		//first get the prefix based on two characters
11593
		$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_2";
11594
      
11595
		
11596
		$sth = $this->db->prepare($query);
11597
		$sth->execute(array(':registration_2' => $registration_2));
11598
        
11599
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11600
		{
11601
			$registration_prefix = $row['registration_prefix'];
11602
		}
11603
11604
		//if we didn't find a two chracter prefix lets just search the one with one character
11605
		if ($registration_prefix == '')
11606
		{
11607
			$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_1";
11608
			$sth = $this->db->prepare($query);
11609
			$sth->execute(array(':registration_1' => $registration_1));
11610
	        
11611
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11612
			{
11613
				$registration_prefix = $row['registration_prefix'];
11614
			}
11615
		}
11616
11617
		//determine which characters are being used and convert the registration code appropiately
11618
		if (strlen($registration_prefix) == 1)
11619
		{
11620
			if (0 === strpos($registration, 'N')) {
11621
				$registration = preg_replace("/^(.{1})/", "$1", $registration);
11622
			} else {
11623
				$registration = preg_replace("/^(.{1})/", "$1-", $registration);
11624
			}
11625
		} else if(strlen($registration_prefix) == 2){
11626
			if (0 === strpos($registration, 'N')) {
11627
				$registration = preg_replace("/^(.{2})/", "$1", $registration);
11628
			} else {
11629
				$registration = preg_replace("/^(.{2})/", "$1-", $registration);
11630
			}
11631
		}
11632
		return $registration;
11633
	}
11634
11635
	/**
11636
	* Country from the registration code
11637
	*
11638
	* @param String $registration the aircraft registration
11639
	* @return String the country
11640
	*
11641
	*/
11642
	public function countryFromAircraftRegistration($registration)
11643
	{
11644
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11645
		
11646
		$registration_prefix = '';
11647
		$registration_test = explode('-',$registration);
11648
		$country = '';
11649
		if ($registration_test[0] != $registration) {
11650
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11651
	      
11652
			$sth = $this->db->prepare($query);
11653
			$sth->execute(array(':registration_1' => $registration_test[0]));
11654
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11655
			{
11656
				//$registration_prefix = $row['registration_prefix'];
11657
				$country = $row['country'];
11658
			}
11659
		} else {
11660
    			$registration_1 = substr($registration, 0, 1);
11661
		        $registration_2 = substr($registration, 0, 2);
11662
11663
			$country = '';
11664
			//first get the prefix based on two characters
11665
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
11666
      
11667
			
11668
			$sth = $this->db->prepare($query);
11669
			$sth->execute(array(':registration_2' => $registration_2));
11670
        
11671
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11672
			{
11673
				$registration_prefix = $row['registration_prefix'];
11674
				$country = $row['country'];
11675
			}
11676
11677
			//if we didn't find a two chracter prefix lets just search the one with one character
11678
			if ($registration_prefix == "")
11679
			{
11680
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11681
	      
11682
				$sth = $this->db->prepare($query);
11683
				$sth->execute(array(':registration_1' => $registration_1));
11684
	        
11685
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
11686
				{
11687
					//$registration_prefix = $row['registration_prefix'];
11688
					$country = $row['country'];
11689
				}
11690
			}
11691
		}
11692
    
11693
		return $country;
11694
	}
11695
11696
	/**
11697
	* Registration prefix from the registration code
11698
	*
11699
	* @param String $registration the aircraft registration
11700
	* @return String the registration prefix
11701
	*
11702
	*/
11703
	public function registrationPrefixFromAircraftRegistration($registration)
11704
	{
11705
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11706
		
11707
		$registration_prefix = '';
11708
		$registration_test = explode('-',$registration);
11709
		//$country = '';
11710
		if ($registration_test[0] != $registration) {
11711
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11712
	      
11713
			$sth = $this->db->prepare($query);
11714
			$sth->execute(array(':registration_1' => $registration_test[0]));
11715
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11716
			{
11717
				$registration_prefix = $row['registration_prefix'];
11718
				//$country = $row['country'];
11719
			}
11720
		} else {
11721
    			$registration_1 = substr($registration, 0, 1);
11722
		        $registration_2 = substr($registration, 0, 2);
11723
11724
			//first get the prefix based on two characters
11725
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
11726
      
11727
			
11728
			$sth = $this->db->prepare($query);
11729
			$sth->execute(array(':registration_2' => $registration_2));
11730
        
11731
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11732
			{
11733
				$registration_prefix = $row['registration_prefix'];
11734
				//$country = $row['country'];
11735
			}
11736
11737
			//if we didn't find a two chracter prefix lets just search the one with one character
11738
			if ($registration_prefix == "")
11739
			{
11740
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11741
	      
11742
				$sth = $this->db->prepare($query);
11743
				$sth->execute(array(':registration_1' => $registration_1));
11744
	        
11745
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
11746
				{
11747
					$registration_prefix = $row['registration_prefix'];
11748
					//$country = $row['country'];
11749
				}
11750
			}
11751
		}
11752
    
11753
		return $registration_prefix;
11754
	}
11755
11756
11757
	/**
11758
	* Country from the registration code
11759
	*
11760
	* @param String $registration the aircraft registration
11761
	* @return String the country
11762
	*
11763
	*/
11764
	public function countryFromAircraftRegistrationCode($registration)
11765
	{
11766
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11767
		
11768
		$country = '';
11769
		$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration LIMIT 1";
11770
		$sth = $this->db->prepare($query);
11771
		$sth->execute(array(':registration' => $registration));
11772
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11773
		{
11774
			$country = $row['country'];
11775
		}
11776
		return $country;
11777
	}
11778
	
11779
	/**
11780
	* Set a new highlight value for a flight
11781
	*
11782
	* @param String $flightaware_id flightaware_id from spotter_output table
11783
	* @param String $highlight New highlight value
11784
	*/
11785
	public function setHighlightFlight($flightaware_id,$highlight) {
11786
		
11787
		$query  = "UPDATE spotter_output SET highlight = :highlight WHERE flightaware_id = :flightaware_id";
11788
		$sth = $this->db->prepare($query);
11789
		$sth->execute(array(':flightaware_id' => $flightaware_id, ':highlight' => $highlight));
11790
	}
11791
11792
	/**
11793
	* Set a new highlight value for a flight by Registration
11794
	*
11795
	* @param String $registration Registration of the aircraft
11796
	* @param String $date Date of spotted aircraft
11797
	* @param String $highlight New highlight value
11798
	*/
11799
	public function setHighlightFlightByRegistration($registration,$highlight, $date = '') {
11800
		if ($date == '') {
11801
			$query  = "UPDATE spotter_output SET highlight = :highlight WHERE spotter_id IN (SELECT MAX(spotter_id) FROM spotter_output WHERE registration = :registration)";
11802
			$query_values = array(':registration' => $registration, ':highlight' => $highlight);
11803
		} else {
11804
			$query  = "UPDATE spotter_output SET highlight = :highlight WHERE registration = :registration AND date(date) = :date";
11805
			$query_values = array(':registration' => $registration, ':highlight' => $highlight,':date' => $date);
11806
		}
11807
		$sth = $this->db->prepare($query);
11808
		$sth->execute($query_values);
11809
	}
11810
	
11811
	/**
11812
	* Gets the short url from bit.ly
11813
	*
11814
	* @param String $url the full url
11815
	* @return String the bit.ly url
11816
	*
11817
	*/
11818
	public function getBitlyURL($url)
11819
	{
11820
		global $globalBitlyAccessToken;
11821
		
11822
		if ($globalBitlyAccessToken == '') return $url;
11823
        
11824
		$google_url = 'https://api-ssl.bitly.com/v3/shorten?access_token='.$globalBitlyAccessToken.'&longUrl='.$url;
11825
		
11826
		$ch = curl_init();
11827
		curl_setopt($ch, CURLOPT_HEADER, 0);
11828
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
11829
		curl_setopt($ch, CURLOPT_URL, $google_url);
11830
		$bitly_data = curl_exec($ch);
11831
		curl_close($ch);
11832
		
11833
		$bitly_data = json_decode($bitly_data);
11834
		$bitly_url = '';
11835
		if ($bitly_data->status_txt = "OK"){
11836
			$bitly_url = $bitly_data->data->url;
11837
		}
11838
11839
		return $bitly_url;
11840
	}
11841
11842
11843
	public function getOrderBy()
11844
	{
11845
		$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"));
11846
		
11847
		return $orderby;
11848
		
11849
	}
11850
    
11851
/*
11852
	public function importFromFlightAware()
11853
	{
11854
		global $globalFlightAwareUsername, $globalFlightAwarePassword, $globalLatitudeMax, $globalLatitudeMin, $globalLongitudeMax, $globalLongitudeMin, $globalAirportIgnore;
11855
		$Spotter = new Spotter($this->db);
11856
		$SpotterLive = new SpotterLive($this->db);
11857
		$options = array(
11858
		            'trace' => true,
11859
		            'exceptions' => 0,
11860
		            'login' => $globalFlightAwareUsername,
11861
		            'password' => $globalFlightAwarePassword,
11862
		);
11863
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
11864
		$params = array('query' => '{range lat '.$globalLatitudeMin.' '.$globalLatitudeMax.'} {range lon '.$globalLongitudeMax.' '.$globalLongitudeMin.'} {true inAir}', 'howMany' => '15', 'offset' => '0');
11865
		$result = $client->SearchBirdseyeInFlight($params);
11866
		$dataFound = false;
11867
		$ignoreImport = false;
11868
		if (isset($result->SearchBirdseyeInFlightResult))
11869
		{
11870
			if (is_array($result->SearchBirdseyeInFlightResult->aircraft))
11871
			{
11872
				foreach($result->SearchBirdseyeInFlightResult->aircraft as $aircraft)
11873
				{
11874
					if (!strstr($aircraft->origin, 'L ') && !strstr($aircraft->destination, 'L '))
11875
					{
11876
						foreach($globalAirportIgnore as $airportIgnore)
11877
						{
11878
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
11879
							{
11880
								$ignoreImport = true; 
11881
							}
11882
						}
11883
						if ($ignoreImport == false)
11884
						{
11885
							$flightaware_id = $aircraft->faFlightID;
11886
							$ident = $aircraft->ident;
11887
							$aircraft_type = $aircraft->type;
11888
							$departure_airport = $aircraft->origin;
11889
							$arrival_airport = $aircraft->destination;
11890
							$latitude = $aircraft->latitude;
11891
							$longitude = $aircraft->longitude;
11892
							$waypoints = $aircraft->waypoints;
11893
							$altitude = $aircraft->altitude;
11894
							$heading = $aircraft->heading;
11895
							$groundspeed = $aircraft->groundspeed;
11896
							$dataFound = true;
11897
							//gets the callsign from the last hour
11898
							$last_hour_ident = $this->getIdentFromLastHour($ident);
11899
							//change the departure/arrival airport to NA if its not available
11900
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
11901
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
11902
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
11903
							if($last_hour_ident == "")
11904
							{
11905
								//adds the spotter data for the archive
11906
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11907
							}
11908
11909
							//adds the spotter LIVE data
11910
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11911
						}
11912
					}
11913
					$ignoreImport = false;
11914
				}
11915
			} else {
11916
				if (!strstr($result->SearchBirdseyeInFlightResult->aircraft->origin, 'L ') && !strstr($result->SearchBirdseyeInFlightResult->aircraft->destination, 'L '))
11917
				{
11918
					foreach($globalAirportIgnore as $airportIgnore)
11919
					{
11920
						foreach($globalAirportIgnore as $airportIgnore)
11921
						{
11922
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
11923
							{
11924
								$ignoreImport = true; 
11925
							}
11926
						}
11927
						if ($ignoreImport == false)
11928
						{
11929
							$flightaware_id = $result->SearchBirdseyeInFlightResult->aircraft->faFlightID;
11930
							$ident = $result->SearchBirdseyeInFlightResult->aircraft->ident;
11931
							$aircraft_type = $result->SearchBirdseyeInFlightResult->aircraft->type;
11932
							$departure_airport = $result->SearchBirdseyeInFlightResult->aircraft->origin;
11933
							$arrival_airport = $result->SearchBirdseyeInFlightResult->aircraft->destination;
11934
							$latitude = $result->SearchBirdseyeInFlightResult->aircraft->latitude;
11935
							$longitude = $result->SearchBirdseyeInFlightResult->aircraft->longitude;
11936
							$waypoints = $result->SearchBirdseyeInFlightResult->aircraft->waypoints;
11937
							$altitude = $result->SearchBirdseyeInFlightResult->aircraft->altitude;
11938
							$heading = $result->SearchBirdseyeInFlightResult->aircraft->heading;
11939
							$groundspeed = $result->SearchBirdseyeInFlightResult->aircraft->groundspeed;
11940
							$dataFound = true;
11941
							//gets the callsign from the last hour
11942
							$last_hour_ident = $this->getIdentFromLastHour($ident);
11943
							//change the departure/arrival airport to NA if its not available
11944
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
11945
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
11946
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
11947
							if($last_hour_ident == "")
11948
							{
11949
								//adds the spotter data for the archive
11950
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11951
							}
11952
							//adds the spotter LIVE data
11953
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11954
						}
11955
						$ignoreImport = false;
11956
					}
11957
				}
11958
			}
11959
		} 
11960
	}
11961
*/
11962
11963
	// Update flights data when new data in DB
11964
	public function updateFieldsFromOtherTables()
11965
	{
11966
		global $globalDebug, $globalDBdriver;
11967
		$Image = new Image($this->db);
11968
		
11969
11970
		// routes
11971
		if ($globalDebug) print "Routes...\n";
11972
		if ($globalDBdriver == 'mysql') {
11973
			$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)";
11974
		} else {
11975
			$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'";
11976
		}
11977
		$sth = $this->db->prepare($query);
11978
		$sth->execute();
11979
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11980
		{
11981
			$departure_airport_array = $this->getAllAirportInfo($row['fromairport_icao']);
11982
			$arrival_airport_array = $this->getAllAirportInfo($row['toairport_icao']);
11983
			if (count($departure_airport_array) > 0 && count($arrival_airport_array) > 0) {
11984
				$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";
11985
				$sthu = $this->db->prepare($update_query);
11986
				$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']));
11987
			}
11988
		}
11989
		
11990
		if ($globalDebug) print "Airlines...\n";
11991
		//airlines
11992
		if ($globalDBdriver == 'mysql') {
11993
			$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)";
11994
		} elseif ($globalDBdriver == 'pgsql') {
11995
			$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'";
11996
		}
11997
		$sth = $this->db->prepare($query);
11998
		$sth->execute();
11999
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
12000
		{
12001
			if (is_numeric(substr($row['ident'], -1, 1)))
12002
			{
12003
				$fromsource = NULL;
12004
				if (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
12005
				elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
12006
				elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
12007
				elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
12008
				$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
12009
				if (isset($airline_array[0]['name'])) {
12010
					$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";
12011
					$sthu = $this->db->prepare($update_query);
12012
					$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']));
12013
				}
12014
			}
12015
		}
12016
12017
		if ($globalDebug) print "Remove Duplicate in aircraft_modes...\n";
12018
		//duplicate modes
12019
		$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";
12020
		$sth = $this->db->prepare($query);
12021
		$sth->execute();
12022
		
12023
		if ($globalDebug) print "Aircraft...\n";
12024
		//aircraft
12025
		if ($globalDBdriver == 'mysql') {
12026
			$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)";
12027
		} elseif ($globalDBdriver == 'pgsql') {
12028
			$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'";
12029
		}
12030
		$sth = $this->db->prepare($query);
12031
		$sth->execute();
12032
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
12033
		{
12034
			if ($row['aircraft_icao'] != '') {
12035
				$aircraft_name = $this->getAllAircraftInfo($row['aircraft_icao']);
12036
				if ($row['registration'] != ""){
12037
					$image_array = $Image->getSpotterImage($row['registration']);
12038
					if (!isset($image_array[0]['registration'])) {
12039
						$Image->addSpotterImage($row['registration']);
12040
					}
12041
				}
12042
				if (count($aircraft_name) > 0) {
12043
					$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";
12044
					$sthu = $this->db->prepare($update_query);
12045
					$sthu->execute(array(':aircraft_name' => $aircraft_name[0]['type'], ':aircraft_manufacturer' => $aircraft_name[0]['manufacturer'], ':spotter_id' => $row['spotter_id']));
12046
				}
12047
			}
12048
		}
12049
	}	
12050
12051
	// Update arrival airports for data already in DB
12052
	public function updateArrivalAirports()
12053
	{
12054
		global $globalDebug, $globalDBdriver, $globalClosestMinDist;
12055
		$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";
12056
		$sth = $this->db->prepare($query);
12057
		$sth->execute();
12058
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
12059
		{
12060
			if ($row['last_latitude'] != '' && $row['last_longitude'] != '') {
12061
				$closestAirports = $this->closestAirports($row['last_latitude'],$row['last_longitude'],$globalClosestMinDist);
12062
				$airport_icao = '';
12063
				 if (isset($closestAirports[0])) {
12064
					if ($row['arrival_airport_icao'] == $closestAirports[0]['icao']) {
12065
						$airport_icao = $closestAirports[0]['icao'];
12066
						if ($globalDebug) echo "\o/ 1st ---++ Find arrival airport. airport_icao : ".$airport_icao."\n";
12067
					} elseif (count($closestAirports > 1) && $row['arrival_airport_icao'] != '' && $row['arrival_airport_icao'] != 'NA') {
12068
						foreach ($closestAirports as $airport) {
12069
							if ($row['arrival_airport_icao'] == $airport['icao']) {
12070
								$airport_icao = $airport['icao'];
12071
								if ($globalDebug) echo "\o/ try --++ Find arrival airport. airport_icao : ".$airport_icao."\n";
12072
								break;
12073
							}
12074
						}
12075
					} elseif ($row['last_altitude'] == 0 || ($row['last_altitude'] != '' && ($closestAirports[0]['altitude'] <= $row['last_altitude']*100+1000 && $row['last_altitude']*100 < $closestAirports[0]['altitude']+5000))) {
12076
						$airport_icao = $closestAirports[0]['icao'];
12077
						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";
12078
					} else {
12079
						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";
12080
					}
12081
				} else {
12082
					if ($globalDebug) echo "----- No Airport near last coord. Latitude : ".$row['last_latitude'].' - Longitude : '.$row['last_longitude'].' - MinDist : '.$globalClosestMinDist."\n";
12083
				}
12084
				if ($row['real_arrival_airport_icao'] != $airport_icao) {
12085
					if ($globalDebug) echo "Updating airport to ".$airport_icao."...\n";
12086
					$update_query="UPDATE spotter_output SET real_arrival_airport_icao = :airport_icao WHERE spotter_id = :spotter_id";
12087
					$sthu = $this->db->prepare($update_query);
12088
					$sthu->execute(array(':airport_icao' => $airport_icao,':spotter_id' => $row['spotter_id']));
12089
				}
12090
			}
12091
		}
12092
	}
12093
	
12094
	public function closestAirports($origLat,$origLon,$dist = 10) {
12095
		global $globalDBdriver;
12096
		$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
12097
/*
12098
		$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 
12099
                      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)) 
12100
                      having distance < $dist ORDER BY distance limit 100;";
12101
*/
12102
		if ($globalDBdriver == 'mysql') {
12103
			$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 
12104
	                      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)) 
12105
	                      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;";
12106
                } else {
12107
			$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 
12108
	                      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)) 
12109
	                      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;";
12110
    		}
12111
		$sth = $this->db->prepare($query);
12112
		$sth->execute();
12113
		return $sth->fetchAll(PDO::FETCH_ASSOC);
12114
	}
12115
}
12116
/*
12117
$Spotter = new Spotter();
12118
print_r($Spotter->closestAirports('-19.9813','-47.8286',10));
12119
*/
12120
/*
12121
$Spotter = new Spotter();
12122
$da = $Spotter->countAllDetectedArrivalAirports(true,0,'',true);
12123
$aa = $Spotter->countAllArrivalAirports(true,0,'',true);
12124
print_r($da);
12125
print_r($aa);
12126
print_r(array_merge($da,$aa));
12127
*/
12128
?>