Completed
Push — master ( c0c7e7...9f35ba )
by Yannick
08:38
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
					'B777F' => 'B77W',
31
					'BAE' => 'B461',
32
					'BEECHCRAFT' => 'B190',
33
					'C172R' => 'C172',
34
					'CESSNA' => 'C550',
35
					'CONCORDE' => 'CONC',
36
					'CRJ200' => 'CRJ2',
37
					'CRJ700' => 'CRJ7',
38
					'A300B4' => 'A30B',
39
					'MD' => 'MD11',
40
					'DHC' => 'DH8A',
41
					'EMB' => 'E550',
42
					'A225' => 'AN225',
43
					'A140' => 'AN124',
44
					'F406GC' => 'F406',
45
					'RW500' => 'AC50',
46
					'S340A' => 'SF34',
47
					'F2LX' => 'F2TH',
48
					'CL65' => 'CL60',
49
					'A380' => 'A388',
50
					'G550' => 'GLF5',
51
					'F9EX' => 'F900',
52
					'E195' => 'E190',
53
					'H750' => 'H25B',
54
					'777' => 'B772',
55
					'747' => 'B748',
56
					'B747' => 'B744',
57
					'B757' => 'B753',
58
					'B767' => 'B763',
59
					'PA39' => 'PA30',
60
					'H900' => 'H25B',
61
					'AN74' => 'AN72',
62
					'CL85' => 'CRJ2',
63
					'G400' => 'GLF4',
64
					'CL61' => 'CL60',
65
					'F2TS' => 'F2TH',
66
					'Z602' => 'CH60',
67
					'G100' => 'ASTR');
68
69
70
	public $db;
71
	
72
	public function __construct($dbc = null) {
73
		$Connection = new Connection($dbc);
74
		$this->db = $Connection->db();
75
	}
76
77
	/**
78
	* Get SQL query part for filter used
79
	* @param Array $filter the filter
80
	* @return Array the SQL part
81
	*/
82
	public function getFilter($filter = array(),$where = false,$and = false) {
83
		global $globalFilter, $globalStatsFilters, $globalFilterName, $globalDBdriver;
84
		$filters = array();
85
		if (is_array($globalStatsFilters) && isset($globalStatsFilters[$globalFilterName])) {
86
			if (isset($globalStatsFilters[$globalFilterName][0]['source'])) {
87
				$filters = $globalStatsFilters[$globalFilterName];
88
			} else {
89
				$filter = array_merge($filter,$globalStatsFilters[$globalFilterName]);
90
			}
91
		}
92
		if (isset($filter[0]['source'])) {
93
			$filters = array_merge($filters,$filter);
94
		}
95
		if (is_array($globalFilter)) $filter = array_merge($filter,$globalFilter);
96
		$filter_query_join = '';
97
		$filter_query_where = '';
98
		foreach($filters as $flt) {
99
			if (isset($flt['airlines']) && !empty($flt['airlines'])) {
100
				if ($flt['airlines'][0] != '') {
101
					if (isset($flt['source'])) {
102
						$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";
103
					} else {
104
						$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";
105
					}
106
				}
107
			}
108
			if (isset($flt['pilots_id']) && !empty($flt['pilots_id'])) {
109
				if (isset($flt['source'])) {
110
					$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";
111
				} else {
112
					$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";
113
				}
114
			}
115
			if (isset($flt['idents']) && !empty($flt['idents'])) {
116
				if (isset($flt['source'])) {
117
					$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";
118
				} else {
119
					$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";
120
				}
121
			}
122
			if (isset($flt['registrations']) && !empty($flt['registrations'])) {
123
				if (isset($flt['source'])) {
124
					$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";
125
				} else {
126
					$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";
127
				}
128
			}
129
			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']))) {
130
				if (isset($flt['source'])) {
131
					$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";
132
				}
133
			}
134
		}
135
		if (isset($filter['airlines']) && !empty($filter['airlines'])) {
136
			if ($filter['airlines'][0] != '') {
137
					$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";
138
			}
139
		}
140
		if (isset($filter['airlinestype']) && !empty($filter['airlinestype'])) {
141
			$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 ";
142
		}
143
		if (isset($filter['alliance']) && !empty($filter['alliance'])) {
144
			$filter_query_join .= " INNER JOIN (SELECT icao FROM airlines WHERE alliance = '".$filter['alliance']."') sal ON sal.icao = spotter_output.airline_icao ";
145
		}
146
		if (isset($filter['pilots_id']) && !empty($filter['pilots_id'])) {
147
				$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";
148
			}
149
		if (isset($filter['source']) && !empty($filter['source'])) {
150
			$filter_query_where .= " AND format_source IN ('".implode("','",$filter['source'])."')";
151
		}
152
		if (isset($filter['ident']) && !empty($filter['ident'])) {
153
			$filter_query_where .= " AND ident = '".$filter['ident']."'";
154
		}
155
		if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
156
			$filter_query_where .= " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
157
		}
158
		if (isset($filter['year']) && $filter['year'] != '') {
159
			if ($globalDBdriver == 'mysql') {
160
				$filter_query_where .= " AND YEAR(spotter_output.date) = '".$filter['year']."'";
161
			} else {
162
				$filter_query_where .= " AND EXTRACT(YEAR FROM spotter_output.date) = '".$filter['year']."'";
163
			}
164
		}
165
		if (isset($filter['month']) && $filter['month'] != '') {
166
			if ($globalDBdriver == 'mysql') {
167
				$filter_query_where .= " AND MONTH(spotter_output.date) = '".$filter['month']."'";
168
			} else {
169
				$filter_query_where .= " AND EXTRACT(MONTH FROM spotter_output.date) = '".$filter['month']."'";
170
			}
171
		}
172
		if (isset($filter['day']) && $filter['day'] != '') {
173
			if ($globalDBdriver == 'mysql') {
174
				$filter_query_where .= " AND DAY(spotter_output.date) = '".$filter['day']."'";
175
			} else {
176
				$filter_query_where .= " AND EXTRACT(DAY FROM spotter_output.date) = '".$filter['day']."'";
177
			}
178
		}
179
		if ($filter_query_where == '' && $where) $filter_query_where = ' WHERE';
180
		elseif ($filter_query_where != '' && $and) $filter_query_where .= ' AND';
181
		if ($filter_query_where != '') {
182
			$filter_query_where = preg_replace('/^ AND/',' WHERE',$filter_query_where);
183
		}
184
		$filter_query = $filter_query_join.$filter_query_where;
185
		return $filter_query;
186
	}
187
188
	/**
189
	* Executes the SQL statements to get the spotter information
190
	*
191
	* @param String $query the SQL query
192
	* @param Array $params parameter of the query
193
	* @param String $limitQuery the limit query
194
	* @return Array the spotter information
195
	*
196
	*/
197
	public function getDataFromDB($query, $params = array(), $limitQuery = '',$schedules = false)
198
	{
199
		global $globalSquawkCountry, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalAirlinesSource, $globalVAM;
200
		$Image = new Image($this->db);
201
		$Schedule = new Schedule($this->db);
202
		$ACARS = new ACARS($this->db);
203
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
204
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
205
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
206
		if (!isset($globalVAM)) $globalVAM = FALSE;
207
		date_default_timezone_set('UTC');
208
		
209
		if (!is_string($query))
210
		{
211
			return false;
212
		}
213
		
214
		if ($limitQuery != "")
215
		{
216
			if (!is_string($limitQuery))
217
			{
218
				return false;
219
			}
220
		}
221
222
		
223
		try {
224
			$sth = $this->db->prepare($query.$limitQuery);
225
			$sth->execute($params);
226
		} catch (PDOException $e) {
227
			printf("Invalid query : %s\nWhole query: %s\n",$e->getMessage(), $query.$limitQuery);
228
			exit();
229
		}
230
		
231
	//	$num_rows = count($sth->fetchAll());
232
		$num_rows = 0;
233
234
		$spotter_array = array();
235
236
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
237
		{
238
			$num_rows++;
239
			$temp_array = array();
240
			if (isset($row['spotter_live_id'])) {
241
				//$temp_array['spotter_id'] = $row['spotter_live_id'];
242
				$temp_array['spotter_id'] = $this->getSpotterIDBasedOnFlightAwareID($row['flightaware_id']);
243
			} elseif (isset($row['spotter_archive_id'])) {
244
				$temp_array['spotter_id'] = $row['spotter_archive_id'];
245
			} elseif (isset($row['spotter_archive_output_id'])) {
246
				$temp_array['spotter_id'] = $row['spotter_archive_output_id'];
247
			} elseif (isset($row['spotter_id'])) {
248
				$temp_array['spotter_id'] = $row['spotter_id'];
249
			} else {
250
				$temp_array['spotter_id'] = '';
251
			}
252
			if (isset($row['flightaware_id'])) $temp_array['flightaware_id'] = $row['flightaware_id'];
253
			if (isset($row['modes'])) $temp_array['modes'] = $row['modes'];
254
			$temp_array['ident'] = $row['ident'];
255
			if (isset($row['registration']) && $row['registration'] != '') {
256
				$temp_array['registration'] = $row['registration'];
257
			} elseif (isset($temp_array['modes'])) {
258
				$temp_array['registration'] = $this->getAircraftRegistrationBymodeS($temp_array['modes']);
259
			} else $temp_array['registration'] = '';
260
			if (isset($row['aircraft_icao'])) $temp_array['aircraft_type'] = $row['aircraft_icao'];
261
			
262
			$temp_array['departure_airport'] = $row['departure_airport_icao'];
263
			$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
264
			if (isset($row['real_arrival_airport_icao']) && $row['real_arrival_airport_icao'] != NULL) $temp_array['real_arrival_airport'] = $row['real_arrival_airport_icao'];
265
			if (isset($row['latitude'])) $temp_array['latitude'] = $row['latitude'];
266
			if (isset($row['longitude'])) $temp_array['longitude'] = $row['longitude'];
267
			/*
268
			if (Connection->tableExists('countries')) {
269
				$country_info = $this->getCountryFromLatitudeLongitude($temp_array['latitude'],$temp_array['longitude']);
270
				if (is_array($country_info) && isset($country_info['name']) && isset($country_info['iso2'])) {
271
				    $temp_array['country'] = $country_info['name'];
272
				    $temp_array['country_iso2'] = $country_info['iso2'];
273
				}
274
			}
275
			*/
276
			if (isset($row['waypoints'])) $temp_array['waypoints'] = $row['waypoints'];
277
			if (isset($row['format_source'])) $temp_array['format_source'] = $row['format_source'];
278
			if (isset($row['route_stop']) && $row['route_stop'] != '') {
279
				$temp_array['route_stop'] = $row['route_stop'];
280
				$allroute = explode(' ',$row['route_stop']);
281
				foreach ($allroute as $route) {
282
					$route_airport_array = $this->getAllAirportInfo($route);
283
					if (isset($route_airport_array[0]['name'])) {
284
						$route_stop_details = array();
285
						$route_stop_details['airport_name'] = $route_airport_array[0]['name'];
286
						$route_stop_details['airport_city'] = $route_airport_array[0]['city'];
287
						$route_stop_details['airport_country'] = $route_airport_array[0]['country'];
288
						$route_stop_details['airport_icao'] = $route_airport_array[0]['icao'];
289
						$temp_array['route_stop_details'][] = $route_stop_details;
290
					}
291
				}
292
			}
293
			if (isset($row['altitude'])) $temp_array['altitude'] = $row['altitude'];
294
			if (isset($row['heading'])) {
295
				$temp_array['heading'] = $row['heading'];
296
				$heading_direction = $this->parseDirection($row['heading']);
297
				if (isset($heading_direction[0]['direction_fullname'])) $temp_array['heading_name'] = $heading_direction[0]['direction_fullname'];
298
			}
299
			if (isset($row['ground_speed'])) $temp_array['ground_speed'] = $row['ground_speed'];
300
			$temp_array['image'] = "";
301
			$temp_array['image_thumbnail'] = "";
302
			$temp_array['image_source'] = "";
303
			$temp_array['image_copyright'] = "";
304
 
305
			if (isset($row['highlight'])) {
306
				$temp_array['highlight'] = $row['highlight'];
307
			} else $temp_array['highlight'] = '';
308
			
309
			if (isset($row['date'])) {
310
				$dateArray = $this->parseDateString($row['date']);
311
				if ($dateArray['seconds'] < 10)
312
				{
313
					$temp_array['date'] = "a few seconds ago";
314
				} elseif ($dateArray['seconds'] >= 5 && $dateArray['seconds'] < 30)
315
				{
316
					$temp_array['date'] = "half a minute ago";
317
				} elseif ($dateArray['seconds'] >= 30 && $dateArray['seconds'] < 60)
318
				{
319
					$temp_array['date'] = "about a minute ago";
320
				} elseif ($dateArray['minutes'] < 5)
321
				{
322
					$temp_array['date'] = "a few minutes ago";
323
				} elseif ($dateArray['minutes'] >= 5 && $dateArray['minutes'] < 60)
324
				{
325
					$temp_array['date'] = "about ".$dateArray['minutes']." minutes ago";
326
				} elseif ($dateArray['hours'] < 2)
327
				{
328
					$temp_array['date'] = "about an hour ago";
329
				} elseif ($dateArray['hours'] >= 2 && $dateArray['hours'] < 24)
330
				{
331
					$temp_array['date'] = "about ".$dateArray['hours']." hours ago";
332
				} else {
333
					$temp_array['date'] = date("M j Y, g:i a",strtotime($row['date']." UTC"));
334
				}
335
				$temp_array['date_minutes_past'] = $dateArray['minutes'];
336
				$temp_array['date_iso_8601'] = date("c",strtotime($row['date']." UTC"));
337
				$temp_array['date_rfc_2822'] = date("r",strtotime($row['date']." UTC"));
338
				$temp_array['date_unix'] = strtotime($row['date']." UTC");
339
				if (isset($row['last_seen']) && $row['last_seen'] != '') {
340
					if (strtotime($row['last_seen']) > strtotime($row['date'])) {
341
						$temp_array['duration'] = strtotime($row['last_seen']) - strtotime($row['date']);
342
						$temp_array['last_seen_date_iso_8601'] = date("c",strtotime($row['last_seen']." UTC"));
343
						$temp_array['last_seen_date_rfc_2822'] = date("r",strtotime($row['last_seen']." UTC"));
344
						$temp_array['last_seen_date_unix'] = strtotime($row['last_seen']." UTC");
345
					}
346
				}
347
			}
348
			
349
			if (isset($row['aircraft_name']) && $row['aircraft_name'] != '' && isset($row['aircraft_shadow']) && $row['aircraft_shadow'] != '') {
350
				$temp_array['aircraft_name'] = $row['aircraft_name'];
351
				$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
352
				if (isset($row['aircraft_shadow'])) {
353
					$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
354
				}
355
			} elseif (isset($row['aircraft_icao'])) {
356
				$aircraft_array = $this->getAllAircraftInfo($row['aircraft_icao']);
357
				if (count($aircraft_array) > 0) {
358
					$temp_array['aircraft_name'] = $aircraft_array[0]['type'];
359
					$temp_array['aircraft_manufacturer'] = $aircraft_array[0]['manufacturer'];
360
				
361
					if ($aircraft_array[0]['aircraft_shadow'] != NULL) {
362
						$temp_array['aircraft_shadow'] = $aircraft_array[0]['aircraft_shadow'];
363
					} else $temp_array['aircraft_shadow'] = 'default.png';
364
                                } else {
365
                            		$temp_array['aircraft_shadow'] = 'default.png';
366
					$temp_array['aircraft_name'] = 'N/A';
367
					$temp_array['aircraft_manufacturer'] = 'N/A';
368
                            	}
369
			}
370
			$fromsource = NULL;
371
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
372
			elseif (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
373
			elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
374
			elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
375
			elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
376
			if (!isset($row['airline_name']) || $row['airline_name'] == '') {
377
				if (!is_numeric(substr($row['ident'], 0, 3))) {
378
					if (is_numeric(substr($row['ident'], 2, 1))) {
379
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 2),$fromsource);
380
					} elseif (is_numeric(substr($row['ident'], 3, 1))) {
381
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
382
					} else {
383
						$airline_array = $this->getAllAirlineInfo('NA');
384
					}
385
				} else {
386
					$airline_array = $this->getAllAirlineInfo('NA');
387
				}
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
			} else {
397
				$temp_array['airline_icao'] = $row['airline_icao'];
398
				if (isset($row['airline_iata'])) $temp_array['airline_iata'] = $row['airline_iata'];
399
				else $temp_array['airline_iata'] = 'N/A';
400
				$temp_array['airline_name'] = $row['airline_name'];
401
				$temp_array['airline_country'] = $row['airline_country'];
402
				if (isset($row['airline_callsign'])) $temp_array['airline_callsign'] = $row['airline_callsign'];
403
				else $temp_array['airline_callsign'] = 'N/A';
404
				$temp_array['airline_type'] = $row['airline_type'];
405
				if ($temp_array['airline_icao'] != '' && $temp_array['airline_iata'] == 'N/A') {
406
					$airline_array = $this->getAllAirlineInfo($temp_array['airline_icao']);
407
					if (count($airline_array) > 0) {
408
						$temp_array['airline_icao'] = $airline_array[0]['icao'];
409
						$temp_array['airline_iata'] = $airline_array[0]['iata'];
410
						$temp_array['airline_name'] = $airline_array[0]['name'];
411
						$temp_array['airline_country'] = $airline_array[0]['country'];
412
						$temp_array['airline_callsign'] = $airline_array[0]['callsign'];
413
						$temp_array['airline_type'] = $airline_array[0]['type'];
414
					}
415
				}
416
			}
417
			if (isset($temp_array['airline_iata']) && $temp_array['airline_iata'] != '') {
418
				$acars_array = $ACARS->getLiveAcarsData($temp_array['airline_iata'].substr($temp_array['ident'],3));
419
				//$acars_array = ACARS->getLiveAcarsData('BA40YL');
420
				if (count($acars_array) > 0) {
421
					$temp_array['acars'] = $acars_array;
422
					//print_r($acars_array);
423
				}
424
			}
425
			if (isset($row['owner_name']) && $row['owner_name'] != '' && $row['owner_name'] != NULL) {
426
				$temp_array['aircraft_owner'] = $row['owner_name'];
427
			}
428
			if ($temp_array['registration'] != "" && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM && !isset($temp_array['aircraft_owner'])) {
429
				$owner_info = $this->getAircraftOwnerByRegistration($temp_array['registration']);
430
				if ($owner_info['owner'] != '') $temp_array['aircraft_owner'] = ucwords(strtolower($owner_info['owner']));
431
				$temp_array['aircraft_base'] = $owner_info['base'];
432
				$temp_array['aircraft_date_first_reg'] = $owner_info['date_first_reg'];
433
			}
434
435
			if($temp_array['registration'] != "" || (($globalIVAO || $globalVATSIM || $globalphpVMS || $globalVAM) && isset($temp_array['aircraft_type']) && $temp_array['aircraft_type'] != ''))
436
			{
437
				if ($globalIVAO) {
438
					if (isset($temp_array['airline_icao']))	$image_array = $Image->getSpotterImage('',$temp_array['aircraft_type'],$temp_array['airline_icao']);
439
					else $image_array = $Image->getSpotterImage('',$temp_array['aircraft_type']);
440
				} elseif (isset($temp_array['aircraft_type']) && isset($temp_array['airline_icao'])) $image_array = $Image->getSpotterImage($temp_array['registration'],$temp_array['aircraft_type'],$temp_array['airline_icao']);
441
				elseif (isset($temp_array['aircraft_type'])) $image_array = $Image->getSpotterImage($temp_array['registration'],$temp_array['aircraft_type']);
442
				else $image_array = $Image->getSpotterImage($temp_array['registration']);
443
				if (count($image_array) > 0) {
444
					$temp_array['image'] = $image_array[0]['image'];
445
					$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
446
					$temp_array['image_source'] = $image_array[0]['image_source'];
447
					$temp_array['image_source_website'] = $image_array[0]['image_source_website'];
448
					if ($temp_array['image_source_website'] == '' && $temp_array['image_source'] == 'planespotters') {
449
						$planespotter_url_array = explode("_", $temp_array['image']);
450
						$planespotter_id = str_replace(".jpg", "", $planespotter_url_array[1]);
451
						$temp_array['image_source_website'] = 'http://www.planespotters.net/Aviation_Photos/photo.show?id='.$planespotter_id;
452
					 }
453
					$temp_array['image_copyright'] = $image_array[0]['image_copyright'];
454
				}
455
			}
456
457
458
			if (isset($row['departure_airport_time']) && $row['departure_airport_time'] != '') {
459
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
460
			}
461
			if (isset($row['arrival_airport_time']) && $row['arrival_airport_time'] != '') {
462
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
463
			}
464
			
465
			if ((!isset($globalIVAO) || ! $globalIVAO) && (!isset($globalVATSIM) || !$globalVATSIM) && (!isset($globalphpVMS) || !$globalphpVMS) && (!isset($globalVAM) || !$globalVAM)) {
466
				if ($schedules === true) {
467
					$schedule_array = $Schedule->getSchedule($temp_array['ident']);
468
					//print_r($schedule_array);
469
					if (count($schedule_array) > 0) {
470
						if ($schedule_array['departure_airport_icao'] != '') {
471
							$row['departure_airport_icao'] = $schedule_array['departure_airport_icao'];
472
							$temp_array['departure_airport'] = $row['departure_airport_icao'];
473
						}
474
						if ($schedule_array['arrival_airport_icao'] != '') {
475
							$row['arrival_airport_icao'] = $schedule_array['arrival_airport_icao'];
476
							$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
477
						}
478
						$temp_array['departure_airport_time'] = $schedule_array['departure_airport_time'];
479
						$temp_array['arrival_airport_time'] = $schedule_array['arrival_airport_time'];
480
					}
481
				}
482
			} else {
483
				if (isset($row['real_departure_airport_time']) && $row['real_departure_airport_time'] != '') {
484
					$temp_array['departure_airport_time'] = $row['real_departure_airport_time'];
485
				}
486
				if (isset($row['real_arrival_airport_time']) && $row['real_arrival_airport_time'] != '') {
487
					$temp_array['real_arrival_airport_time'] = $row['real_arrival_airport_time'];
488
				}
489
			}
490
			
491
			//if ($row['departure_airport_icao'] != '' && $row['departure_airport_name'] == '') {
492
			if ($row['departure_airport_icao'] != '') {
493
				$departure_airport_array = $this->getAllAirportInfo($row['departure_airport_icao']);
494
				if (!isset($departure_airport_array[0]['name'])) $departure_airport_array = $this->getAllAirportInfo('NA');
495
			/*
496
			} elseif ($row['departure_airport_name'] != '') {
497
				$temp_array['departure_airport_name'] = $row['departure_airport_name'];
498
				$temp_array['departure_airport_city'] = $row['departure_airport_city'];
499
				$temp_array['departure_airport_country'] = $row['departure_airport_country'];
500
				$temp_array['departure_airport_icao'] = $row['departure_airport_icao'];
501
			*/
502
			} else $departure_airport_array = $this->getAllAirportInfo('NA');
503
			if (isset($departure_airport_array[0]['name'])) {
504
				$temp_array['departure_airport_name'] = $departure_airport_array[0]['name'];
505
				$temp_array['departure_airport_city'] = $departure_airport_array[0]['city'];
506
				$temp_array['departure_airport_country'] = $departure_airport_array[0]['country'];
507
				$temp_array['departure_airport_iata'] = $departure_airport_array[0]['iata'];
508
				$temp_array['departure_airport_icao'] = $departure_airport_array[0]['icao'];
509
				$temp_array['departure_airport_latitude'] = $departure_airport_array[0]['latitude'];
510
				$temp_array['departure_airport_longitude'] = $departure_airport_array[0]['longitude'];
511
				$temp_array['departure_airport_altitude'] = $departure_airport_array[0]['altitude'];
512
			}
513
514
			/*
515
			if (isset($row['departure_airport_time'])) {
516
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
517
			}
518
			*/
519
			
520
			if ($row['arrival_airport_icao'] != '') {
521
				$arrival_airport_array = $this->getAllAirportInfo($row['arrival_airport_icao']);
522
				if (count($arrival_airport_array) == 0) $arrival_airport_array = $this->getAllAirportInfo('NA');
523
			} else $arrival_airport_array = $this->getAllAirportInfo('NA');
524
			if (isset($arrival_airport_array[0]['name'])) {
525
				$temp_array['arrival_airport_name'] = $arrival_airport_array[0]['name'];
526
				$temp_array['arrival_airport_city'] = $arrival_airport_array[0]['city'];
527
				$temp_array['arrival_airport_country'] = $arrival_airport_array[0]['country'];
528
				$temp_array['arrival_airport_iata'] = $arrival_airport_array[0]['iata'];
529
				$temp_array['arrival_airport_icao'] = $arrival_airport_array[0]['icao'];
530
				$temp_array['arrival_airport_latitude'] = $arrival_airport_array[0]['latitude'];
531
				$temp_array['arrival_airport_longitude'] = $arrival_airport_array[0]['longitude'];
532
				$temp_array['arrival_airport_altitude'] = $arrival_airport_array[0]['altitude'];
533
			}
534
			/*
535
			if (isset($row['arrival_airport_time'])) {
536
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
537
			}
538
			*/
539
			if (isset($row['pilot_id']) && $row['pilot_id'] != '') $temp_array['pilot_id'] = $row['pilot_id'];
540
			if (isset($row['pilot_name']) && $row['pilot_name'] != '') $temp_array['pilot_name'] = $row['pilot_name'];
541
			if (isset($row['source_name']) && $row['source_name'] != '') $temp_array['source_name'] = $row['source_name'];
542
			if (isset($row['over_country']) && $row['over_country'] != '') $temp_array['over_country'] = $row['over_country'];
543
			if (isset($row['distance']) && $row['distance'] != '') $temp_array['distance'] = $row['distance'];
544
			if (isset($row['squawk'])) {
545
				$temp_array['squawk'] = $row['squawk'];
546
				if ($row['squawk'] != '' && isset($temp_array['country_iso2'])) {
547
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['country_iso2']);
548
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
549
				} elseif ($row['squawk'] != '' && isset($temp_array['over_country'])) {
550
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['over_country']);
551
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
552
				} elseif ($row['squawk'] != '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
553
			}
554
    			
555
			$temp_array['query_number_rows'] = $num_rows;
556
			
557
			$spotter_array[] = $temp_array;
558
		}
559
		if ($num_rows == 0) return array();
560
		$spotter_array[0]['query_number_rows'] = $num_rows;
561
		return $spotter_array;
562
	}	
563
	
564
	
565
	/**
566
	* Gets all the spotter information
567
	*
568
	* @return Array the spotter information
569
	*
570
	*/
571
	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())
572
	{
573
		global $globalTimezone, $globalDBdriver;
574
		require_once(dirname(__FILE__).'/class.Translation.php');
575
		$Translation = new Translation();
576
577
		date_default_timezone_set('UTC');
578
579
		$query_values = array();
580
		$additional_query = '';
581
		$filter_query = $this->getFilter($filters,true,true);
582
		if ($q != "")
583
		{
584
			if (!is_string($q))
585
			{
586
				return false;
587
			} else {
588
				$q_array = explode(" ", $q);
589
				foreach ($q_array as $q_item){
590
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
591
					$additional_query .= " AND (";
592
					if (is_int($q_item)) $additional_query .= "(spotter_output.spotter_id like '%".$q_item."%') OR ";
593
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
594
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
595
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
596
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
597
					$additional_query .= "(spotter_output.airline_name like '%".$q_item."%') OR ";
598
					$additional_query .= "(spotter_output.airline_country like '%".$q_item."%') OR ";
599
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
600
					$additional_query .= "(spotter_output.departure_airport_name like '%".$q_item."%') OR ";
601
					$additional_query .= "(spotter_output.departure_airport_city like '%".$q_item."%') OR ";
602
					$additional_query .= "(spotter_output.departure_airport_country like '%".$q_item."%') OR ";
603
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
604
					$additional_query .= "(spotter_output.arrival_airport_name like '%".$q_item."%') OR ";
605
					$additional_query .= "(spotter_output.arrival_airport_city like '%".$q_item."%') OR ";
606
					$additional_query .= "(spotter_output.arrival_airport_country like '%".$q_item."%') OR ";
607
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
608
					$additional_query .= "(spotter_output.owner_name like '%".$q_item."%') OR ";
609
					$additional_query .= "(spotter_output.pilot_id like '%".$q_item."%') OR ";
610
					$additional_query .= "(spotter_output.pilot_name like '%".$q_item."%') OR ";
611
					$additional_query .= "(spotter_output.ident like '%".$q_item."%') OR ";
612
					$translate = $Translation->ident2icao($q_item);
613
					if ($translate != $q_item) $additional_query .= "(spotter_output.ident like '%".$translate."%') OR ";
614
					$additional_query .= "(spotter_output.highlight like '%".$q_item."%')";
615
					$additional_query .= ")";
616
				}
617
			}
618
		}
619
620
		if ($registration != "")
621
		{
622
			$registration = filter_var($registration,FILTER_SANITIZE_STRING);
623
			if (!is_string($registration))
624
			{
625
				return false;
626
			} else {
627
				$additional_query .= " AND spotter_output.registration = :registration";
628
				$query_values = array_merge($query_values,array(':registration' => $registration));
629
			}
630
		}
631
632
		if ($aircraft_icao != "")
633
		{
634
			$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
635
			if (!is_string($aircraft_icao))
636
			{
637
				return false;
638
			} else {
639
				$additional_query .= " AND spotter_output.aircraft_icao = :aircraft_icao";
640
				$query_values = array_merge($query_values,array(':aircraft_icao' => $aircraft_icao));
641
			}
642
		}
643
644
		if ($aircraft_manufacturer != "")
645
		{
646
			$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
647
			if (!is_string($aircraft_manufacturer))
648
			{
649
				return false;
650
			} else {
651
				$additional_query .= " AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer";
652
				$query_values = array_merge($query_values,array(':aircraft_manufacturer' => $aircraft_manufacturer));
653
			}
654
		}
655
656
		if ($highlights == "true")
657
		{
658
			if (!is_string($highlights))
659
			{
660
				return false;
661
			} else {
662
				$additional_query .= " AND (spotter_output.highlight <> '')";
663
			}
664
		}
665
666
		if ($airline_icao != "")
667
		{
668
			$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
669
			if (!is_string($airline_icao))
670
			{
671
				return false;
672
			} else {
673
				$additional_query .= " AND spotter_output.airline_icao = :airline_icao";
674
				$query_values = array_merge($query_values,array(':airline_icao' => $airline_icao));
675
			}
676
		}
677
678
		if ($airline_country != "")
679
		{
680
			$airline_country = filter_var($airline_country,FILTER_SANITIZE_STRING);
681
			if (!is_string($airline_country))
682
			{
683
				return false;
684
			} else {
685
				$additional_query .= " AND spotter_output.airline_country = :airline_country";
686
				$query_values = array_merge($query_values,array(':airline_country' => $airline_country));
687
			}
688
		}
689
690
		if ($airline_type != "")
691
		{
692
			if (!is_string($airline_type))
693
			{
694
				return false;
695
			} else {
696
				if ($airline_type == "passenger")
697
				{
698
					$additional_query .= " AND (spotter_output.airline_type = 'passenger')";
699
				}
700
				if ($airline_type == "cargo")
701
				{
702
					$additional_query .= " AND (spotter_output.airline_type = 'cargo')";
703
				}
704
				if ($airline_type == "military")
705
				{
706
					$additional_query .= " AND (spotter_output.airline_type = 'military')";
707
				}
708
			}
709
		}
710
711
		if ($airport != "")
712
		{
713
			$airport = filter_var($airport,FILTER_SANITIZE_STRING);
714
			if (!is_string($airport))
715
			{
716
				return false;
717
			} else {
718
				$additional_query .= " AND (spotter_output.departure_airport_icao = :airport OR spotter_output.arrival_airport_icao = :airport)";
719
				$query_values = array_merge($query_values,array(':airport' => $airport));
720
			}
721
		}
722
723
		if ($airport_country != "")
724
		{
725
			$airport_country = filter_var($airport_country,FILTER_SANITIZE_STRING);
726
			if (!is_string($airport_country))
727
			{
728
				return false;
729
			} else {
730
				$additional_query .= " AND (spotter_output.departure_airport_country = :airport_country OR spotter_output.arrival_airport_country = :airport_country)";
731
				$query_values = array_merge($query_values,array(':airport_country' => $airport_country));
732
			}
733
		}
734
    
735
		if ($callsign != "")
736
		{
737
			$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
738
			if (!is_string($callsign))
739
			{
740
				return false;
741
			} else {
742
				$translate = $Translation->ident2icao($callsign);
743
				if ($translate != $callsign) {
744
					$additional_query .= " AND (spotter_output.ident = :callsign OR spotter_output.ident = :translate)";
745
					$query_values = array_merge($query_values,array(':callsign' => $callsign,':translate' => $translate));
746
				} else {
747
					$additional_query .= " AND spotter_output.ident = :callsign";
748
					$query_values = array_merge($query_values,array(':callsign' => $callsign));
749
				}
750
			}
751
		}
752
753
		if ($owner != "")
754
		{
755
			$owner = filter_var($owner,FILTER_SANITIZE_STRING);
756
			if (!is_string($owner))
757
			{
758
				return false;
759
			} else {
760
				$additional_query .= " AND spotter_output.owner_name = :owner";
761
				$query_values = array_merge($query_values,array(':owner' => $owner));
762
			}
763
		}
764
765
		if ($pilot_name != "")
766
		{
767
			$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
768
			if (!is_string($pilot_name))
769
			{
770
				return false;
771
			} else {
772
				$additional_query .= " AND spotter_output.pilot_name = :pilot_name";
773
				$query_values = array_merge($query_values,array(':pilot_name' => $pilot_name));
774
			}
775
		}
776
777
		if ($pilot_id != "")
778
		{
779
			$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_STRING);
780
			if (!is_string($pilot_id))
781
			{
782
				return false;
783
			} else {
784
				$additional_query .= " AND spotter_output.pilot_id = :pilot_id";
785
				$query_values = array_merge($query_values,array(':pilot_id' => $pilot_id));
786
			}
787
		}
788
789
		if ($departure_airport_route != "")
790
		{
791
			$departure_airport_route = filter_var($departure_airport_route,FILTER_SANITIZE_STRING);
792
			if (!is_string($departure_airport_route))
793
			{
794
				return false;
795
			} else {
796
				$additional_query .= " AND spotter_output.departure_airport_icao = :departure_airport_route";
797
				$query_values = array_merge($query_values,array(':departure_airport_route' => $departure_airport_route));
798
			}
799
		}
800
801
		if ($arrival_airport_route != "")
802
		{
803
			$arrival_airport_route = filter_var($arrival_airport_route,FILTER_SANITIZE_STRING);
804
			if (!is_string($arrival_airport_route))
805
			{
806
				return false;
807
			} else {
808
				$additional_query .= " AND spotter_output.arrival_airport_icao = :arrival_airport_route";
809
				$query_values = array_merge($query_values,array(':arrival_airport_route' => $arrival_airport_route));
810
			}
811
		}
812
813
		if ($altitude != "")
814
		{
815
			$altitude_array = explode(",", $altitude);
816
			$altitude_array[0] = filter_var($altitude_array[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
817
			$altitude_array[1] = filter_var($altitude_array[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
818
819
			if ($altitude_array[1] != "")
820
			{                
821
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
822
				$altitude_array[1] = substr($altitude_array[1], 0, -2);
823
				$additional_query .= " AND altitude BETWEEN '".$altitude_array[0]."' AND '".$altitude_array[1]."' ";
824
			} else {
825
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
826
				$additional_query .= " AND altitude <= '".$altitude_array[0]."' ";
827
			}
828
		}
829
830
		if ($date_posted != "")
831
		{
832
			$date_array = explode(",", $date_posted);
833
			$date_array[0] = filter_var($date_array[0],FILTER_SANITIZE_STRING);
834
			$date_array[1] = filter_var($date_array[1],FILTER_SANITIZE_STRING);
835
836
			if ($globalTimezone != '') {
837
				date_default_timezone_set($globalTimezone);
838
				$datetime = new DateTime();
839
				$offset = $datetime->format('P');
840
			} else $offset = '+00:00';
841
842
			if ($date_array[1] != "")
843
			{
844
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
845
				$date_array[1] = date("Y-m-d H:i:s", strtotime($date_array[1]));
846
				if ($globalDBdriver == 'mysql') {
847
					$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]."' ";
848
				} else {
849
					$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]."' ";
850
				}
851
			} else {
852
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
853
				if ($globalDBdriver == 'mysql') {
854
					$additional_query .= " AND TIMESTAMP(CONVERT_TZ(spotter_output.date,'+00:00', '".$offset."')) >= '".$date_array[0]."' ";
855
				} else {
856
					$additional_query .= " AND CAST(spotter_output.date AT TIME ZONE INTERVAL ".$offset." AS TIMESTAMP) >= '".$date_array[0]."' ";
857
				}
858
			}
859
		}
860
861
		if ($limit != "")
862
		{
863
			$limit_array = explode(",", $limit);
864
			
865
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
866
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
867
			
868
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
869
			{
870
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
871
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
872
			} else $limit_query = "";
873
		} else $limit_query = "";
874
875
876
		if ($sort != "")
877
		{
878
			$search_orderby_array = $this->getOrderBy();
879
			$orderby_query = $search_orderby_array[$sort]['sql'];
880
		} else {
881
			if ($origLat != "" && $origLon != "" && $dist != "") {
882
				$orderby_query = " ORDER BY distance ASC";
883
			} else {
884
				$orderby_query = " ORDER BY spotter_output.date DESC";
885
			}
886
		}
887
888
		if ($includegeodata == "true")
889
		{
890
			$additional_query .= " AND spotter_output.waypoints <> ''";
891
		}
892
893
894
		if ($origLat != "" && $origLon != "" && $dist != "") {
895
			$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
896
897
			if ($globalDBdriver == 'mysql') {
898
				$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 
899
						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)) 
900
						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;
901
			} else {
902
				$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 
903
						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)) 
904
						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;
905
			}
906
		} else {		
907
			$query  = "SELECT spotter_output.* FROM spotter_output".$filter_query." spotter_output.ident <> '' 
908
					".$additional_query."
909
					".$orderby_query;
910
		}
911
		$spotter_array = $this->getDataFromDB($query, $query_values,$limit_query);
912
		return $spotter_array;
913
	}
914
	
915
	
916
	/**
917
	* Gets all the spotter information based on the latest data entry
918
	*
919
	* @return Array the spotter information
920
	*
921
	*/
922
	public function getLatestSpotterData($limit = '', $sort = '', $filter = array())
923
	{
924
		global $global_query;
925
		
926
		date_default_timezone_set('UTC');
927
928
		$filter_query = $this->getFilter($filter);
929
		
930
		if ($limit != "")
931
		{
932
			$limit_array = explode(",", $limit);
933
			
934
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
935
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
936
			
937
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
938
			{
939
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
940
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
941
			} else $limit_query = "";
942
		} else $limit_query = "";
943
		
944
		if ($sort != "")
945
		{
946
			$search_orderby_array = $this->getOrderBy();
947
			$orderby_query = $search_orderby_array[$sort]['sql'];
948
		} else {
949
			$orderby_query = " ORDER BY spotter_output.date DESC";
950
		}
951
952
		$query  = $global_query.$filter_query." ".$orderby_query;
953
954
		$spotter_array = $this->getDataFromDB($query, array(),$limit_query,true);
955
956
		return $spotter_array;
957
	}
958
    
959
    
960
    /**
961
	* Gets all the spotter information based on a user's latitude and longitude
962
	*
963
	* @return Array the spotter information
964
	*
965
	*/
966
	public function getLatestSpotterForLayar($lat, $lng, $radius, $interval)
967
	{
968
		date_default_timezone_set('UTC');
969
		$limit_query = '';
970
		if ($lat != "")
971
		{
972
			if (!is_numeric($lat))
973
			{
974
				return false;
975
			}
976
		}
977
        
978
		if ($lng != "")
979
		{
980
			if (!is_numeric($lng))
981
			{
982
				return false;
983
			}
984
		}
985
		
986
		if ($radius != "")
987
		{
988
			if (!is_numeric($radius))
989
			{
990
				return false;
991
			}
992
		}
993
    		$additional_query = '';
994
		if ($interval != "")
995
		{
996
			if (!is_string($interval))
997
			{
998
				return false;
999
			} else {
1000
				if ($interval == "30m"){
1001
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 MINUTE) <= $this_output.date ';
1002
				} else if ($interval == "1h"){
1003
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) <= $this_output.date ';
1004
				} else if ($interval == "3h"){
1005
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 3 HOUR) <= $this_output.date ';
1006
				} else if ($interval == "6h"){
1007
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 6 HOUR) <= $this_output.date ';
1008
				} else if ($interval == "12h"){
1009
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 12 HOUR) <= $this_output.date ';
1010
				} else if ($interval == "24h"){
1011
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 24 HOUR) <= $this_output.date ';
1012
				} else if ($interval == "7d"){
1013
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY) <= $this_output.date ';
1014
				} else if ($interval == "30d"){
1015
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 DAY) <= $this_output.date ';
1016
				} 
1017
			}
1018
		}
1019
1020
		$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 
1021
                   WHERE spotter_output.latitude <> '' 
1022
				   AND spotter_output.longitude <> '' 
1023
                   ".$additional_query."
1024
                   HAVING distance < :radius  
1025
				   ORDER BY distance";
1026
1027
		$spotter_array = $this->getDataFromDB($query, array(':radius' => $radius),$limit_query);
1028
1029
		return $spotter_array;
1030
	}
1031
    
1032
    
1033
    /**
1034
	* Gets all the spotter information sorted by the newest aircraft type
1035
	*
1036
	* @return Array the spotter information
1037
	*
1038
	*/
1039
	public function getNewestSpotterDataSortedByAircraftType($limit = '', $sort = '',$filter = array())
1040
	{
1041
		global $global_query;
1042
		
1043
		date_default_timezone_set('UTC');
1044
1045
		$filter_query = $this->getFilter($filter,true,true);
1046
1047
		$limit_query = '';
1048
		if ($limit != "")
1049
		{
1050
			$limit_array = explode(",", $limit);
1051
			
1052
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1053
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1054
			
1055
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1056
			{
1057
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1058
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1059
			}
1060
		}
1061
		
1062
		if ($sort != "")
1063
		{
1064
			$search_orderby_array = $this->getOrderBy();
1065
			$orderby_query = $search_orderby_array[$sort]['sql'];
1066
		} else {
1067
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1068
		}
1069
1070
		$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;
1071
1072
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1073
1074
		return $spotter_array;
1075
	}
1076
    
1077
    
1078
	/**
1079
	* Gets all the spotter information sorted by the newest aircraft registration
1080
	*
1081
	* @return Array the spotter information
1082
	*
1083
	*/
1084
	public function getNewestSpotterDataSortedByAircraftRegistration($limit = '', $sort = '', $filter = array())
1085
	{
1086
		global $global_query;
1087
		
1088
		date_default_timezone_set('UTC');
1089
		$filter_query = $this->getFilter($filter,true,true);
1090
1091
		$limit_query = '';
1092
		if ($limit != "")
1093
		{
1094
			$limit_array = explode(",", $limit);
1095
			
1096
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1097
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1098
			
1099
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1100
			{
1101
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1102
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1103
			}
1104
		}
1105
		
1106
		if ($sort != "")
1107
		{
1108
			$search_orderby_array = $this->getOrderBy();
1109
			$orderby_query = $search_orderby_array[$sort]['sql'];
1110
		} else {
1111
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1112
		}
1113
1114
		$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;
1115
1116
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1117
1118
		return $spotter_array;
1119
	}
1120
1121
1122
	/**
1123
	* Gets all the spotter information sorted by the newest airline
1124
	*
1125
	* @return Array the spotter information
1126
	*
1127
	*/
1128
	public function getNewestSpotterDataSortedByAirline($limit = '', $sort = '',$filter = array())
1129
	{
1130
		global $global_query;
1131
		
1132
		date_default_timezone_set('UTC');
1133
		$filter_query = $this->getFilter($filter,true,true);
1134
		
1135
		$limit_query = '';
1136
		if ($limit != "")
1137
		{
1138
			$limit_array = explode(",", $limit);
1139
			
1140
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1141
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1142
			
1143
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1144
			{
1145
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1146
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1147
			}
1148
		}
1149
		
1150
		if ($sort != "")
1151
		{
1152
			$search_orderby_array = $this->getOrderBy();
1153
			$orderby_query = $search_orderby_array[$sort]['sql'];
1154
		} else {
1155
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1156
		}
1157
1158
		$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;
1159
1160
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1161
1162
		return $spotter_array;
1163
	}
1164
    
1165
    
1166
    /**
1167
	* Gets all the spotter information sorted by the newest departure airport
1168
	*
1169
	* @return Array the spotter information
1170
	*
1171
	*/
1172
	public function getNewestSpotterDataSortedByDepartureAirport($limit = '', $sort = '', $filter = array())
1173
	{
1174
		global $global_query;
1175
		
1176
		date_default_timezone_set('UTC');
1177
		
1178
		$filter_query = $this->getFilter($filter,true,true);
1179
		
1180
		$limit_query = '';
1181
		
1182
		if ($limit != "")
1183
		{
1184
			$limit_array = explode(",", $limit);
1185
			
1186
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1187
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1188
			
1189
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1190
			{
1191
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1192
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1193
			}
1194
		}
1195
		
1196
		if ($sort != "")
1197
		{
1198
			$search_orderby_array = $this->getOrderBy();
1199
			$orderby_query = $search_orderby_array[$sort]['sql'];
1200
		} else {
1201
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1202
		}
1203
1204
		$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;
1205
1206
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1207
1208
		return $spotter_array;
1209
	}
1210
1211
1212
	/**
1213
	* Gets all the spotter information sorted by the newest arrival airport
1214
	*
1215
	* @return Array the spotter information
1216
	*
1217
	*/
1218
	public function getNewestSpotterDataSortedByArrivalAirport($limit = '', $sort = '', $filter = array())
1219
	{
1220
		global $global_query;
1221
		
1222
		date_default_timezone_set('UTC');
1223
		$filter_query = $this->getFilter($filter,true,true);
1224
		$limit_query = '';
1225
		if ($limit != "")
1226
		{
1227
			$limit_array = explode(",", $limit);
1228
			
1229
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1230
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1231
			
1232
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1233
			{
1234
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1235
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1236
			}
1237
		}
1238
		
1239
		if ($sort != "")
1240
		{
1241
			$search_orderby_array = $this->getOrderBy();
1242
			$orderby_query = $search_orderby_array[$sort]['sql'];
1243
		} else {
1244
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1245
		}
1246
1247
		$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;
1248
1249
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1250
1251
		return $spotter_array;
1252
	}
1253
	
1254
1255
	/**
1256
	* Gets all the spotter information based on the spotter id
1257
	*
1258
	* @return Array the spotter information
1259
	*
1260
	*/
1261
	public function getSpotterDataByID($id = '')
1262
	{
1263
		global $global_query;
1264
		
1265
		date_default_timezone_set('UTC');
1266
		if ($id == '') return array();
1267
		$additional_query = "spotter_output.spotter_id = :id";
1268
		$query_values = array(':id' => $id);
1269
1270
		//$query  = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ";
1271
		$query  = $global_query." WHERE ".$additional_query." ";
1272
1273
		$spotter_array = $this->getDataFromDB($query,$query_values);
1274
1275
		return $spotter_array;
1276
	}
1277
1278
	
1279
	
1280
	
1281
	/**
1282
	* Gets all the spotter information based on the callsign
1283
	*
1284
	* @return Array the spotter information
1285
	*
1286
	*/
1287
	public function getSpotterDataByIdent($ident = '', $limit = '', $sort = '', $filter = array())
1288
	{
1289
		global $global_query;
1290
		
1291
		date_default_timezone_set('UTC');
1292
		
1293
		$query_values = array();
1294
		$limit_query = '';
1295
		$additional_query = '';
1296
		$filter_query = $this->getFilter($filter,true,true);
1297
		if ($ident != "")
1298
		{
1299
			if (!is_string($ident))
1300
			{
1301
				return false;
1302
			} else {
1303
				$additional_query = " AND (spotter_output.ident = :ident)";
1304
				$query_values = array(':ident' => $ident);
1305
			}
1306
		}
1307
		
1308
		if ($limit != "")
1309
		{
1310
			$limit_array = explode(",", $limit);
1311
			
1312
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1313
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1314
			
1315
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1316
			{
1317
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1318
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1319
			}
1320
		}
1321
1322
		if ($sort != "")
1323
		{
1324
			$search_orderby_array = $this->getOrderBy();
1325
			$orderby_query = $search_orderby_array[$sort]['sql'];
1326
		} else {
1327
			$orderby_query = " ORDER BY spotter_output.date DESC";
1328
		}
1329
1330
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1331
1332
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1333
1334
		return $spotter_array;
1335
	}
1336
	
1337
	/**
1338
	* Gets all the spotter information based on the owner
1339
	*
1340
	* @return Array the spotter information
1341
	*
1342
	*/
1343
	public function getSpotterDataByOwner($owner = '', $limit = '', $sort = '', $filter = array())
1344
	{
1345
		global $global_query;
1346
		
1347
		date_default_timezone_set('UTC');
1348
		
1349
		$query_values = array();
1350
		$limit_query = '';
1351
		$additional_query = '';
1352
		$filter_query = $this->getFilter($filter,true,true);
1353
		if ($owner != "")
1354
		{
1355
			if (!is_string($owner))
1356
			{
1357
				return false;
1358
			} else {
1359
				$additional_query = " AND (spotter_output.owner_name = :owner)";
1360
				$query_values = array(':owner' => $owner);
1361
			}
1362
		}
1363
		
1364
		if ($limit != "")
1365
		{
1366
			$limit_array = explode(",", $limit);
1367
			
1368
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1369
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1370
			
1371
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1372
			{
1373
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1374
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1375
			}
1376
		}
1377
1378
		if ($sort != "")
1379
		{
1380
			$search_orderby_array = $this->getOrderBy();
1381
			if (isset($search_orderby_array[$sort]['sql'])) $orderby_query = $search_orderby_array[$sort]['sql'];
1382
			else $orderby_query = " ORDER BY spotter_output.date DESC";
1383
		} else {
1384
			$orderby_query = " ORDER BY spotter_output.date DESC";
1385
		}
1386
1387
		$query = $global_query.$filter_query." spotter_output.owner_name <> '' ".$additional_query." ".$orderby_query;
1388
1389
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1390
1391
		return $spotter_array;
1392
	}
1393
	
1394
	/**
1395
	* Gets all the spotter information based on the pilot
1396
	*
1397
	* @return Array the spotter information
1398
	*
1399
	*/
1400
	public function getSpotterDataByPilot($pilot = '', $limit = '', $sort = '', $filter = array())
1401
	{
1402
		global $global_query;
1403
		
1404
		date_default_timezone_set('UTC');
1405
		
1406
		$query_values = array();
1407
		$limit_query = '';
1408
		$additional_query = '';
1409
		$filter_query = $this->getFilter($filter,true,true);
1410
		if ($pilot != "")
1411
		{
1412
			$additional_query = " AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot)";
1413
			$query_values = array(':pilot' => $pilot);
1414
		}
1415
		
1416
		if ($limit != "")
1417
		{
1418
			$limit_array = explode(",", $limit);
1419
			
1420
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1421
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1422
			
1423
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1424
			{
1425
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1426
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1427
			}
1428
		}
1429
1430
		if ($sort != "")
1431
		{
1432
			$search_orderby_array = $this->getOrderBy();
1433
			$orderby_query = $search_orderby_array[$sort]['sql'];
1434
		} else {
1435
			$orderby_query = " ORDER BY spotter_output.date DESC";
1436
		}
1437
1438
		$query = $global_query.$filter_query." spotter_output.pilot_name <> '' ".$additional_query." ".$orderby_query;
1439
1440
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1441
1442
		return $spotter_array;
1443
	}
1444
	
1445
	
1446
	
1447
	/**
1448
	* Gets all the spotter information based on the aircraft type
1449
	*
1450
	* @return Array the spotter information
1451
	*
1452
	*/
1453
	public function getSpotterDataByAircraft($aircraft_type = '', $limit = '', $sort = '', $filter = array())
1454
	{
1455
		global $global_query;
1456
		
1457
		date_default_timezone_set('UTC');
1458
		
1459
		$query_values = array();
1460
		$limit_query = '';
1461
		$additional_query = '';
1462
		$filter_query = $this->getFilter($filter,true,true);
1463
		
1464
		if ($aircraft_type != "")
1465
		{
1466
			if (!is_string($aircraft_type))
1467
			{
1468
				return false;
1469
			} else {
1470
				$additional_query = " AND (spotter_output.aircraft_icao = :aircraft_type)";
1471
				$query_values = array(':aircraft_type' => $aircraft_type);
1472
			}
1473
		}
1474
		
1475
		if ($limit != "")
1476
		{
1477
			$limit_array = explode(",", $limit);
1478
			
1479
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1480
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1481
			
1482
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1483
			{
1484
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1485
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1486
			}
1487
		}
1488
1489
		if ($sort != "")
1490
		{
1491
			$search_orderby_array = $this->getOrderBy();
1492
			$orderby_query = $search_orderby_array[$sort]['sql'];
1493
		} else {
1494
			$orderby_query = " ORDER BY spotter_output.date DESC";
1495
		}
1496
1497
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1498
1499
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1500
1501
		return $spotter_array;
1502
	}
1503
	
1504
	
1505
	/**
1506
	* Gets all the spotter information based on the aircraft registration
1507
	*
1508
	* @return Array the spotter information
1509
	*
1510
	*/
1511
	public function getSpotterDataByRegistration($registration = '', $limit = '', $sort = '', $filter = array())
1512
	{
1513
		global $global_query;
1514
		
1515
		date_default_timezone_set('UTC');
1516
		
1517
		$query_values = array();
1518
		$limit_query = '';
1519
		$additional_query = '';
1520
		
1521
		if ($registration != "")
1522
		{
1523
			if (!is_string($registration))
1524
			{
1525
				return false;
1526
			} else {
1527
				$additional_query = " (spotter_output.registration = :registration)";
1528
				$query_values = array(':registration' => $registration);
1529
			}
1530
		}
1531
		
1532
		if ($limit != "")
1533
		{
1534
			$limit_array = explode(",", $limit);
1535
			
1536
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1537
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1538
			
1539
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1540
			{
1541
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1542
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1543
			}
1544
		}
1545
1546
		if ($sort != "")
1547
		{
1548
			$search_orderby_array = $this->getOrderBy();
1549
			$orderby_query = $search_orderby_array[$sort]['sql'];
1550
		} else {
1551
			$orderby_query = " ORDER BY spotter_output.date DESC";
1552
		}
1553
		$filter_query = $this->getFilter($filter,true,true);
1554
1555
		//$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1556
		$query = $global_query.$filter_query." ".$additional_query." ".$orderby_query;
1557
1558
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1559
1560
		return $spotter_array;
1561
	}
1562
1563
	
1564
	
1565
	
1566
	/**
1567
	* Gets all the spotter information based on the airline
1568
	*
1569
	* @return Array the spotter information
1570
	*
1571
	*/
1572
	public function getSpotterDataByAirline($airline = '', $limit = '', $sort = '',$filters = array())
1573
	{
1574
		global $global_query;
1575
		
1576
		date_default_timezone_set('UTC');
1577
1578
		$query_values = array();
1579
		$limit_query = '';
1580
		$additional_query = '';
1581
		$filter_query = $this->getFilter($filters,true,true);
1582
		
1583
		if ($airline != "")
1584
		{
1585
			if (!is_string($airline))
1586
			{
1587
				return false;
1588
			} else {
1589
				$additional_query = " AND (spotter_output.airline_icao = :airline)";
1590
				$query_values = array(':airline' => $airline);
1591
			}
1592
		}
1593
		
1594
		if ($limit != "")
1595
		{
1596
			$limit_array = explode(",", $limit);
1597
			
1598
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1599
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1600
			
1601
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1602
			{
1603
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1604
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1605
			}
1606
		}
1607
		
1608
		if ($sort != "")
1609
		{
1610
			$search_orderby_array = $this->getOrderBy();
1611
			$orderby_query = $search_orderby_array[$sort]['sql'];
1612
		} else {
1613
			$orderby_query = " ORDER BY spotter_output.date DESC";
1614
		}
1615
1616
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1617
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1618
1619
		return $spotter_array;
1620
	}
1621
	
1622
	
1623
	/**
1624
	* Gets all the spotter information based on the airport
1625
	*
1626
	* @return Array the spotter information
1627
	*
1628
	*/
1629
	public function getSpotterDataByAirport($airport = '', $limit = '', $sort = '',$filters = array())
1630
	{
1631
		global $global_query;
1632
		
1633
		date_default_timezone_set('UTC');
1634
		$query_values = array();
1635
		$limit_query = '';
1636
		$additional_query = '';
1637
		$filter_query = $this->getFilter($filters,true,true);
1638
		
1639
		if ($airport != "")
1640
		{
1641
			if (!is_string($airport))
1642
			{
1643
				return false;
1644
			} else {
1645
				$additional_query .= " AND ((spotter_output.departure_airport_icao = :airport) OR (spotter_output.arrival_airport_icao = :airport))";
1646
				$query_values = array(':airport' => $airport);
1647
			}
1648
		}
1649
		
1650
		if ($limit != "")
1651
		{
1652
			$limit_array = explode(",", $limit);
1653
			
1654
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1655
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1656
			
1657
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1658
			{
1659
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1660
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1661
			}
1662
		}
1663
		
1664
		if ($sort != "")
1665
		{
1666
			$search_orderby_array = $this->getOrderBy();
1667
			$orderby_query = $search_orderby_array[$sort]['sql'];
1668
		} else {
1669
			$orderby_query = " ORDER BY spotter_output.date DESC";
1670
		}
1671
1672
		$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;
1673
1674
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1675
1676
		return $spotter_array;
1677
	}
1678
1679
1680
1681
	/**
1682
	* Gets all the spotter information based on the date
1683
	*
1684
	* @return Array the spotter information
1685
	*
1686
	*/
1687
	public function getSpotterDataByDate($date = '', $limit = '', $sort = '',$filter = array())
1688
	{
1689
		global $global_query, $globalTimezone, $globalDBdriver;
1690
		
1691
		$query_values = array();
1692
		$limit_query = '';
1693
		$additional_query = '';
1694
1695
		$filter_query = $this->getFilter($filter,true,true);
1696
		
1697
		if ($date != "")
1698
		{
1699
			if ($globalTimezone != '') {
1700
				date_default_timezone_set($globalTimezone);
1701
				$datetime = new DateTime($date);
1702
				$offset = $datetime->format('P');
1703
			} else {
1704
				date_default_timezone_set('UTC');
1705
				$datetime = new DateTime($date);
1706
				$offset = '+00:00';
1707
			}
1708
			if ($globalDBdriver == 'mysql') {
1709
				$additional_query = " AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date ";
1710
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':offset' => $offset);
1711
			} elseif ($globalDBdriver == 'pgsql') {
1712
				//$globalTimezone = 'UTC';
1713
				$additional_query = " AND to_char(spotter_output.date AT TIME ZONE :timezone,'YYYY-mm-dd') = :date ";
1714
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':timezone' => $globalTimezone);
1715
				//$additional_query = " AND to_char(spotter_output.date,'YYYY-mm-dd') = :date ";
1716
				//$query_values = array(':date' => $datetime->format('Y-m-d'));
1717
			}
1718
		}
1719
		
1720
		if ($limit != "")
1721
		{
1722
			$limit_array = explode(",", $limit);
1723
			
1724
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1725
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1726
			
1727
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1728
			{
1729
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1730
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1731
			}
1732
		}
1733
1734
		if ($sort != "")
1735
		{
1736
			$search_orderby_array = $this->getOrderBy();
1737
			$orderby_query = $search_orderby_array[$sort]['sql'];
1738
		} else {
1739
			$orderby_query = " ORDER BY spotter_output.date DESC";
1740
		}
1741
1742
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query.$orderby_query;
1743
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1744
		return $spotter_array;
1745
	}
1746
1747
1748
1749
	/**
1750
	* Gets all the spotter information based on the country name
1751
	*
1752
	* @return Array the spotter information
1753
	*
1754
	*/
1755
	public function getSpotterDataByCountry($country = '', $limit = '', $sort = '',$filters = array())
1756
	{
1757
		global $global_query;
1758
		
1759
		date_default_timezone_set('UTC');
1760
		
1761
		$query_values = array();
1762
		$limit_query = '';
1763
		$additional_query = '';
1764
		$filter_query = $this->getFilter($filters,true,true);
1765
		if ($country != "")
1766
		{
1767
			if (!is_string($country))
1768
			{
1769
				return false;
1770
			} else {
1771
				$additional_query .= " AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country))";
1772
				$additional_query .= " OR spotter_output.airline_country = :country";
1773
				$query_values = array(':country' => $country);
1774
			}
1775
		}
1776
		
1777
		if ($limit != "")
1778
		{
1779
			$limit_array = explode(",", $limit);
1780
			
1781
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1782
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1783
			
1784
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1785
			{
1786
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1787
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1788
			}
1789
		}
1790
					
1791
		if ($sort != "")
1792
		{
1793
			$search_orderby_array = $this->getOrderBy();
1794
			$orderby_query = $search_orderby_array[$sort]['sql'];
1795
		} else {
1796
			$orderby_query = " ORDER BY spotter_output.date DESC";
1797
		}
1798
1799
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1800
1801
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1802
1803
		return $spotter_array;
1804
	}	
1805
	
1806
	
1807
	/**
1808
	* Gets all the spotter information based on the manufacturer name
1809
	*
1810
	* @return Array the spotter information
1811
	*
1812
	*/
1813
	public function getSpotterDataByManufacturer($aircraft_manufacturer = '', $limit = '', $sort = '', $filters = array())
1814
	{
1815
		global $global_query;
1816
		
1817
		date_default_timezone_set('UTC');
1818
		
1819
		$query_values = array();
1820
		$additional_query = '';
1821
		$limit_query = '';
1822
		$filter_query = $this->getFilter($filters,true,true);
1823
		
1824
		if ($aircraft_manufacturer != "")
1825
		{
1826
			if (!is_string($aircraft_manufacturer))
1827
			{
1828
				return false;
1829
			} else {
1830
				$additional_query .= " AND (spotter_output.aircraft_manufacturer = :aircraft_manufacturer)";
1831
				$query_values = array(':aircraft_manufacturer' => $aircraft_manufacturer);
1832
			}
1833
		}
1834
		
1835
		if ($limit != "")
1836
		{
1837
			$limit_array = explode(",", $limit);
1838
			
1839
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1840
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1841
			
1842
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1843
			{
1844
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1845
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1846
			}
1847
		}
1848
1849
		if ($sort != "")
1850
		{
1851
			$search_orderby_array = $this->getOrderBy();
1852
			$orderby_query = $search_orderby_array[$sort]['sql'];
1853
		} else {
1854
			$orderby_query = " ORDER BY spotter_output.date DESC";
1855
		}
1856
1857
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1858
1859
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1860
1861
		return $spotter_array;
1862
	}
1863
1864
1865
  
1866
  
1867
	/**
1868
	* Gets a list of all aircraft that take a route
1869
	*
1870
	* @param String $departure_airport_icao ICAO code of departure airport
1871
	* @param String $arrival_airport_icao ICAO code of arrival airport
1872
	* @return Array the spotter information
1873
	*
1874
	*/
1875
	public function getSpotterDataByRoute($departure_airport_icao = '', $arrival_airport_icao = '', $limit = '', $sort = '', $filters = array())
1876
	{
1877
		global $global_query;
1878
		
1879
		$query_values = array();
1880
		$additional_query = '';
1881
		$limit_query = '';
1882
		$filter_query = $this->getFilter($filters,true,true);
1883
		if ($departure_airport_icao != "")
1884
		{
1885
			if (!is_string($departure_airport_icao))
1886
			{
1887
				return false;
1888
			} else {
1889
				$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
1890
				$additional_query .= " AND (spotter_output.departure_airport_icao = :departure_airport_icao)";
1891
				//$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";
1892
				$query_values = array(':departure_airport_icao' => $departure_airport_icao);
1893
			}
1894
		}
1895
		
1896
		if ($arrival_airport_icao != "")
1897
		{
1898
			if (!is_string($arrival_airport_icao))
1899
			{
1900
				return false;
1901
			} else {
1902
				$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
1903
				$additional_query .= " AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)";
1904
				//$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)";
1905
				$query_values = array_merge($query_values,array(':arrival_airport_icao' => $arrival_airport_icao));
1906
			}
1907
		}
1908
		
1909
		if ($limit != "")
1910
		{
1911
			$limit_array = explode(",", $limit);
1912
			
1913
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1914
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1915
			
1916
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1917
			{
1918
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1919
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1920
			}
1921
		}
1922
	
1923
		if ($sort != "")
1924
		{
1925
			$search_orderby_array = $this->getOrderBy();
1926
			$orderby_query = $search_orderby_array[$sort]['sql'];
1927
		} else {
1928
			$orderby_query = " ORDER BY spotter_output.date DESC";
1929
		}
1930
1931
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1932
          
1933
		//$result = mysqli_query($GLOBALS["___mysqli_ston"], $query);
1934
1935
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1936
1937
		return $spotter_array;
1938
	}
1939
	
1940
	
1941
	
1942
	/**
1943
	* Gets all the spotter information based on the special column in the table
1944
	*
1945
	* @return Array the spotter information
1946
	*
1947
	*/
1948
	public function getSpotterDataByHighlight($limit = '', $sort = '', $filter = array())
1949
	{
1950
		global $global_query;
1951
		
1952
		date_default_timezone_set('UTC');
1953
		$filter_query = $this->getFilter($filter,true,true);
1954
		$limit_query = '';
1955
		
1956
		if ($limit != "")
1957
		{
1958
			$limit_array = explode(",", $limit);
1959
			
1960
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1961
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1962
			
1963
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1964
			{
1965
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1966
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1967
			}
1968
		}
1969
		
1970
		if ($sort != "")
1971
		{
1972
			$search_orderby_array = $this->getOrderBy();
1973
			$orderby_query = $search_orderby_array[$sort]['sql'];
1974
		} else {
1975
			$orderby_query = " ORDER BY spotter_output.date DESC";
1976
		}
1977
1978
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' ".$orderby_query;
1979
1980
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1981
1982
		return $spotter_array;
1983
	}
1984
1985
	/**
1986
	* Gets all the highlight based on a aircraft registration
1987
	*
1988
	* @return String the highlight text
1989
	*
1990
	*/
1991
	public function getHighlightByRegistration($registration,$filter = array())
1992
	{
1993
		global $global_query;
1994
		
1995
		date_default_timezone_set('UTC');
1996
		$filter_query = $this->getFilter($filter,true,true);
1997
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
1998
		
1999
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' AND spotter_output.registration = :registration";
2000
		$sth = $this->db->prepare($query);
2001
		$sth->execute(array(':registration' => $registration));
2002
2003
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2004
		{
2005
			$highlight = $row['highlight'];
2006
		}
2007
		if (isset($highlight)) return $highlight;
2008
	}
2009
2010
	
2011
	/**
2012
	* Gets the squawk usage from squawk code
2013
	*
2014
	* @param String $squawk squawk code
2015
	* @param String $country country
2016
	* @return String usage
2017
	*
2018
	*/
2019
	public function getSquawkUsage($squawk = '',$country = 'FR')
2020
	{
2021
		
2022
		$squawk = filter_var($squawk,FILTER_SANITIZE_STRING);
2023
		$country = filter_var($country,FILTER_SANITIZE_STRING);
2024
2025
		$query  = "SELECT squawk.* FROM squawk WHERE squawk.code = :squawk AND squawk.country = :country LIMIT 1";
2026
		$query_values = array(':squawk' => ltrim($squawk,'0'), ':country' => $country);
2027
		
2028
		$sth = $this->db->prepare($query);
2029
		$sth->execute($query_values);
2030
    
2031
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2032
		$sth->closeCursor();
2033
		if (count($row) > 0) {
2034
			return $row['usage'];
2035
		} else return '';
2036
	}
2037
2038
	/**
2039
	* Gets the airport icao from the iata
2040
	*
2041
	* @param String $airport_iata the iata code of the airport
2042
	* @return String airport iata
2043
	*
2044
	*/
2045
	public function getAirportIcao($airport_iata = '')
2046
	{
2047
		
2048
		$airport_iata = filter_var($airport_iata,FILTER_SANITIZE_STRING);
2049
2050
		$query  = "SELECT airport.* FROM airport WHERE airport.iata = :airport LIMIT 1";
2051
		$query_values = array(':airport' => $airport_iata);
2052
		
2053
		$sth = $this->db->prepare($query);
2054
		$sth->execute($query_values);
2055
		
2056
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2057
		$sth->closeCursor();
2058
		if (count($row) > 0) {
2059
			return $row['icao'];
2060
		} else return '';
2061
	}
2062
2063
	/**
2064
	* Gets the airport distance
2065
	*
2066
	* @param String $airport_icao the icao code of the airport
2067
	* @param Float $latitude the latitude
2068
	* @param Float $longitude the longitude
2069
	* @return Float distance to the airport
2070
	*
2071
	*/
2072
	public function getAirportDistance($airport_icao,$latitude,$longitude)
2073
	{
2074
		
2075
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
2076
2077
		$query  = "SELECT airport.latitude, airport.longitude FROM airport WHERE airport.icao = :airport LIMIT 1";
2078
		$query_values = array(':airport' => $airport_icao);
2079
		$sth = $this->db->prepare($query);
2080
		$sth->execute($query_values);
2081
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2082
		$sth->closeCursor();
2083
		if (count($row) > 0) {
2084
			$airport_latitude = $row['latitude'];
2085
			$airport_longitude = $row['longitude'];
2086
			$Common = new Common();
2087
			return $Common->distance($latitude,$longitude,$airport_latitude,$airport_longitude);
2088
		} else return '';
2089
	}
2090
	
2091
	/**
2092
	* Gets the airport info based on the icao
2093
	*
2094
	* @param String $airport the icao code of the airport
2095
	* @return Array airport information
2096
	*
2097
	*/
2098
	public function getAllAirportInfo($airport = '')
2099
	{
2100
		
2101
		$airport = filter_var($airport,FILTER_SANITIZE_STRING);
2102
2103
		$query_values = array();
2104
		if ($airport == 'NA') {
2105
			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' => ''));
2106
		} elseif ($airport == '') {
2107
			$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";
2108
		} else {
2109
			$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";
2110
			$query_values = array(':airport' => $airport);
2111
		}
2112
		
2113
		$sth = $this->db->prepare($query);
2114
		$sth->execute($query_values);
2115
		/*
2116
		$airport_array = array();
2117
		$temp_array = array();
2118
		
2119
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2120
		{
2121
			$temp_array['name'] = $row['name'];
2122
			$temp_array['city'] = $row['city'];
2123
			$temp_array['country'] = $row['country'];
2124
			$temp_array['iata'] = $row['iata'];
2125
			$temp_array['icao'] = $row['icao'];
2126
			$temp_array['latitude'] = $row['latitude'];
2127
			$temp_array['longitude'] = $row['longitude'];
2128
			$temp_array['altitude'] = $row['altitude'];
2129
			$temp_array['home_link'] = $row['home_link'];
2130
			$temp_array['wikipedia_link'] = $row['wikipedia_link'];
2131
			$temp_array['image'] = $row['image'];
2132
			$temp_array['image_thumb'] = $row['image_thumb'];
2133
2134
			$airport_array[] = $temp_array;
2135
		}
2136
2137
		return $airport_array;
2138
		*/
2139
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2140
	}
2141
	
2142
	/**
2143
	* Gets the airport info based on the country
2144
	*
2145
	* @param Array $countries Airports countries
2146
	* @return Array airport information
2147
	*
2148
	*/
2149
	public function getAllAirportInfobyCountry($countries)
2150
	{
2151
		$lst_countries = '';
2152
		foreach ($countries as $country) {
2153
			$country = filter_var($country,FILTER_SANITIZE_STRING);
2154
			if ($lst_countries == '') {
2155
				$lst_countries = "'".$country."'";
2156
			} else {
2157
				$lst_countries .= ",'".$country."'";
2158
			}
2159
		}
2160
		$query  = "SELECT airport.* FROM airport WHERE airport.country IN (".$lst_countries.")";
2161
		
2162
		$sth = $this->db->prepare($query);
2163
		$sth->execute();
2164
    
2165
		$airport_array = array();
2166
		$temp_array = array();
2167
		
2168
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2169
		{
2170
			$temp_array['name'] = $row['name'];
2171
			$temp_array['city'] = $row['city'];
2172
			$temp_array['country'] = $row['country'];
2173
			$temp_array['iata'] = $row['iata'];
2174
			$temp_array['icao'] = $row['icao'];
2175
			$temp_array['latitude'] = $row['latitude'];
2176
			$temp_array['longitude'] = $row['longitude'];
2177
			$temp_array['altitude'] = $row['altitude'];
2178
2179
			$airport_array[] = $temp_array;
2180
		}
2181
2182
		return $airport_array;
2183
	}
2184
	
2185
	/**
2186
	* Gets airports info based on the coord
2187
	*
2188
	* @param Array $coord Airports longitude min,latitude min, longitude max, latitude max
2189
	* @return Array airport information
2190
	*
2191
	*/
2192
	public function getAllAirportInfobyCoord($coord)
2193
	{
2194
		global $globalDBdriver;
2195
		if (is_array($coord)) {
2196
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2197
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2198
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2199
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2200
		} else return array();
2201
		if ($globalDBdriver == 'mysql') {
2202
			$query  = "SELECT airport.* FROM airport WHERE airport.latitude BETWEEN ".$minlat." AND ".$maxlat." AND airport.longitude BETWEEN ".$minlong." AND ".$maxlong." AND airport.type != 'closed'";
2203
		} else {
2204
			$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'";
2205
		}
2206
		$sth = $this->db->prepare($query);
2207
		$sth->execute();
2208
    
2209
		$airport_array = array();
2210
		
2211
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2212
		{
2213
			$temp_array = $row;
2214
2215
			$airport_array[] = $temp_array;
2216
		}
2217
2218
		return $airport_array;
2219
	}
2220
2221
	/**
2222
	* Gets waypoints info based on the coord
2223
	*
2224
	* @param Array $coord waypoints coord
2225
	* @return Array airport information
2226
	*
2227
	*/
2228
	public function getAllWaypointsInfobyCoord($coord)
2229
	{
2230
		if (is_array($coord)) {
2231
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2232
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2233
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2234
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2235
		} else return array();
2236
		//$query  = "SELECT waypoints.* FROM waypoints WHERE waypoints.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_begin BETWEEN ".$minlong." AND ".$maxlong;
2237
		$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.")";
2238
		//$query  = "SELECT waypoints.* FROM waypoints";
2239
		//$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";
2240
		//$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;
2241
		//$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;
2242
		//echo $query;
2243
		
2244
		$sth = $this->db->prepare($query);
2245
		$sth->execute();
2246
    
2247
		$waypoints_array = array();
2248
		
2249
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2250
		{
2251
			$temp_array = $row;
2252
2253
			$waypoints_array[] = $temp_array;
2254
		}
2255
2256
		return $waypoints_array;
2257
	}
2258
	
2259
	
2260
	/**
2261
	* Gets the airline info based on the icao code or iata code
2262
	*
2263
	* @param String $airline_icao the iata code of the airport
2264
	* @return Array airport information
2265
	*
2266
	*/
2267
	public function getAllAirlineInfo($airline_icao, $fromsource = NULL)
2268
	{
2269
		global $globalUseRealAirlines;
2270
		if (isset($globalUseRealAirlines) && $globalUseRealAirlines) $fromsource = NULL;
2271
		$airline_icao = strtoupper(filter_var($airline_icao,FILTER_SANITIZE_STRING));
2272
		if ($airline_icao == 'NA') {
2273
			$airline_array = array();
2274
			$airline_array[] = array('name' => 'Not Available','iata' => 'NA', 'icao' => 'NA', 'callsign' => '', 'country' => 'NA', 'type' =>'');
2275
			return $airline_array;
2276
		} else {
2277
			if (strlen($airline_icao) == 2) {
2278
				if ($fromsource === NULL) {
2279
					$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";
2280
				} else {
2281
					$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";
2282
				}
2283
			} else {
2284
				if ($fromsource === NULL) {
2285
					$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";
2286
				} else {
2287
					$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";
2288
				}
2289
			}
2290
			
2291
			$sth = $this->db->prepare($query);
2292
			if ($fromsource === NULL) {
2293
				$sth->execute(array(':airline_icao' => $airline_icao));
2294
			} else {
2295
				$sth->execute(array(':airline_icao' => $airline_icao,':fromsource' => $fromsource));
2296
			}
2297
                        /*
2298
			$airline_array = array();
2299
			$temp_array = array();
2300
		
2301
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2302
			{
2303
				$temp_array['name'] = $row['name'];
2304
				$temp_array['iata'] = $row['iata'];
2305
				$temp_array['icao'] = $row['icao'];
2306
				$temp_array['callsign'] = $row['callsign'];
2307
				$temp_array['country'] = $row['country'];
2308
				$temp_array['type'] = $row['type'];
2309
				$airline_array[] = $temp_array;
2310
			}
2311
			return $airline_array;
2312
			*/
2313
			$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2314
			if (empty($result) && $fromsource !== NULL) {
2315
				/*
2316
				$query = 'SELECT COUNT(*) AS nb FROM airlines WHERE forsource = :fromsource';
2317
				$sth = $this->db->prepare($query);
2318
				$sth->execute(array(':fromsource' => $fromsource));
2319
				$row = $sth->fetch(PDO::FETCH_ASSOC);
2320
				$sth->closeCursor();
2321
				if ($row['nb'] == 0) $result = $this->getAllAirlineInfo($airline_icao);
2322
				*/
2323
				$result = $this->getAllAirlineInfo($airline_icao);
2324
			}
2325
			return $result;
2326
		}
2327
	}
2328
	
2329
	/**
2330
	* Gets the airline info based on the airline name
2331
	*
2332
	* @param String $airline_name the name of the airline
2333
	* @return Array airline information
2334
	*
2335
	*/
2336
	public function getAllAirlineInfoByName($airline_name, $fromsource = NULL)
2337
	{
2338
		global $globalUseRealAirlines;
2339
		if (isset($globalUseRealAirlines) && $globalUseRealAirlines) $fromsource = NULL;
2340
		$airline_name = strtolower(filter_var($airline_name,FILTER_SANITIZE_STRING));
2341
		$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";
2342
		$sth = $this->db->prepare($query);
2343
		if ($fromsource === NULL) {
2344
			$sth->execute(array(':airline_name' => $airline_name));
2345
		} else {
2346
			$sth->execute(array(':airline_name' => $airline_name,':fromsource' => $fromsource));
2347
		}
2348
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2349
		if (empty($result) && $fromsource !== NULL) {
2350
			$query = 'SELECT COUNT(*) AS nb FROM airlines WHERE forsource = :fromsource';
2351
			$sth = $this->db->prepare($query);
2352
			$sth->execute(array(':fromsource' => $fromsource));
2353
			$row = $sth->fetch(PDO::FETCH_ASSOC);
2354
			$sth->closeCursor();
2355
			if ($row['nb'] == 0) $result = $this->getAllAirlineInfoByName($airline_name);
2356
		}
2357
		return $result;
2358
	}
2359
	
2360
	
2361
	
2362
	/**
2363
	* Gets the aircraft info based on the aircraft type
2364
	*
2365
	* @param String $aircraft_type the aircraft type
2366
	* @return Array aircraft information
2367
	*
2368
	*/
2369
	public function getAllAircraftInfo($aircraft_type)
2370
	{
2371
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2372
2373
		if ($aircraft_type == 'NA') {
2374
			return array(array('icao' => 'NA','type' => 'Not Available', 'manufacturer' => 'Not Available', 'aircraft_shadow' => NULL));
2375
		}
2376
		$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";
2377
		
2378
		$sth = $this->db->prepare($query);
2379
		$sth->execute(array(':aircraft_type' => $aircraft_type));
2380
		/*
2381
		$aircraft_array = array();
2382
		$temp_array = array();
2383
		
2384
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2385
		{
2386
			$temp_array = array();
2387
			$temp_array['icao'] = $row['icao'];
2388
			$temp_array['type'] = $row['type'];
2389
			$temp_array['manufacturer'] = $row['manufacturer'];
2390
			$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
2391
2392
			$aircraft_array[] = $temp_array;
2393
		}
2394
		return $aircraft_array;
2395
		*/
2396
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2397
	}
2398
2399
	/**
2400
	* Gets the aircraft icao based on the aircraft name/type
2401
	*
2402
	* @param String $aircraft_type the aircraft type
2403
	* @return String aircraft information
2404
	*
2405
	*/
2406
	public function getAircraftIcao($aircraft_type)
2407
	{
2408
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2409
		$all_aircraft = array('737-300' => 'B733',
2410
				'777-200' => 'B772',
2411
				'777-200ER' => 'B772',
2412
				'777-300ER' => 'B77W',
2413
				'c172p' => 'C172',
2414
				'aerostar' => 'AEST',
2415
				'A320-211' => 'A320',
2416
				'747-8i' => 'B748',
2417
				'A380' => 'A388');
2418
		if (isset($all_aircraft[$aircraft_type])) return $all_aircraft[$aircraft_type];
2419
2420
		$query  = "SELECT aircraft.icao FROM aircraft WHERE aircraft.type LIKE :saircraft_type OR aircraft.type = :aircraft_type OR aircraft.icao = :aircraft_type LIMIT 1";
2421
		$aircraft_type = strtoupper($aircraft_type);
2422
		$sth = $this->db->prepare($query);
2423
		$sth->execute(array(':saircraft_type' => '%'.$aircraft_type.'%',':aircraft_type' => $aircraft_type,));
2424
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2425
		if (isset($result[0]['icao'])) return $result[0]['icao'];
2426
		else return '';
2427
	}
2428
	
2429
	/**
2430
	* Gets the aircraft info based on the aircraft modes
2431
	*
2432
	* @param String $aircraft_modes the aircraft ident (hex)
2433
	* @return String aircraft type
2434
	*
2435
	*/
2436
	public function getAllAircraftType($aircraft_modes,$source_type = '')
2437
	{
2438
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
2439
		$source_type = filter_var($source_type,FILTER_SANITIZE_STRING);
2440
2441
		if ($source_type == '' || $source_type == 'modes') {
2442
			$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";
2443
		} else {
2444
			$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";
2445
		}
2446
		
2447
		$sth = $this->db->prepare($query);
2448
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
2449
2450
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2451
		$sth->closeCursor();
2452
		if (isset($row['icaotypecode'])) {
2453
			$icao = $row['icaotypecode'];
2454
			if (isset($this->aircraft_correct_icaotype[$icao])) $icao = $this->aircraft_correct_icaotype[$icao];
2455
			return $icao;
2456
		} elseif ($source_type == 'flarm') {
2457
			return $this->getAllAircraftType($aircraft_modes);
2458
		} else  return '';
2459
	}
2460
2461
	/**
2462
	* Gets the aircraft info based on the aircraft registration
2463
	*
2464
	* @param String $registration the aircraft registration
2465
	* @return String aircraft type
2466
	*
2467
	*/
2468
	public function getAllAircraftTypeByRegistration($registration)
2469
	{
2470
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2471
2472
		$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.registration = :registration ORDER BY FirstCreated DESC LIMIT 1";
2473
		
2474
		$sth = $this->db->prepare($query);
2475
		$sth->execute(array(':registration' => $registration));
2476
2477
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2478
		$sth->closeCursor();
2479
		if (isset($row['icaotypecode'])) {
2480
			return $row['icaotypecode'];
2481
		} else return '';
2482
	}
2483
2484
	/**
2485
	* Gets the spotter_id and flightaware_id based on the aircraft registration
2486
	*
2487
	* @param String $registration the aircraft registration
2488
	* @return Array spotter_id and flightaware_id
2489
	*
2490
	*/
2491
	public function getAllIDByRegistration($registration)
2492
	{
2493
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2494
2495
		$query  = "SELECT spotter_id,flightaware_id, date FROM spotter_output WHERE spotter_output.registration = :registration";
2496
		
2497
		$sth = $this->db->prepare($query);
2498
		$sth->execute(array(':registration' => $registration));
2499
2500
		$idarray = array();
2501
		while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
2502
			$date = $row['date'];
2503
			$idarray[$date] = array('flightaware_id' => $row['flightaware_id'],'spotter_id' => $row['spotter_id']);
2504
		}
2505
		return $idarray;
2506
	}
2507
2508
	/**
2509
	* Gets correct aircraft operator code
2510
	*
2511
	* @param String $operator the aircraft operator code (callsign)
2512
	* @return String aircraft operator code
2513
	*
2514
	*/
2515
	public function getOperator($operator)
2516
	{
2517
		$operator = filter_var($operator,FILTER_SANITIZE_STRING);
2518
		$query  = "SELECT translation.operator_correct FROM translation WHERE translation.operator = :operator LIMIT 1";
2519
		
2520
		$sth = $this->db->prepare($query);
2521
		$sth->execute(array(':operator' => $operator));
2522
2523
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2524
		$sth->closeCursor();
2525
		if (isset($row['operator_correct'])) {
2526
			return $row['operator_correct'];
2527
		} else return $operator;
2528
	}
2529
2530
	/**
2531
	* Gets the aircraft route based on the aircraft callsign
2532
	*
2533
	* @param String $callsign the aircraft callsign
2534
	* @return Array aircraft type
2535
	*
2536
	*/
2537
	public function getRouteInfo($callsign)
2538
	{
2539
		$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
2540
                if ($callsign == '') return array();
2541
		$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";
2542
		
2543
		$sth = $this->db->prepare($query);
2544
		$sth->execute(array(':callsign' => $callsign));
2545
2546
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2547
		$sth->closeCursor();
2548
		if (count($row) > 0) {
2549
			return $row;
2550
		} else return array();
2551
	}
2552
	
2553
	/**
2554
	* Gets the aircraft info based on the aircraft registration
2555
	*
2556
	* @param String $registration the aircraft registration
2557
	* @return Array aircraft information
2558
	*
2559
	*/
2560
	public function getAircraftInfoByRegistration($registration)
2561
	{
2562
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2563
2564
		$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";
2565
		
2566
		$sth = $this->db->prepare($query);
2567
		$sth->execute(array(':registration' => $registration));
2568
2569
		$aircraft_array = array();
2570
		$temp_array = array();
2571
		
2572
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2573
		{
2574
			$temp_array['airline_icao'] = $row['airline_icao'];
2575
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2576
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2577
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2578
2579
			$aircraft_array[] = $temp_array;
2580
		}
2581
2582
		return $aircraft_array;
2583
	}
2584
	
2585
	/**
2586
	* Gets the aircraft owner & base based on the aircraft registration
2587
	*
2588
	* @param String $registration the aircraft registration
2589
	* @return Array aircraft information
2590
	*
2591
	*/
2592
	public function getAircraftOwnerByRegistration($registration)
2593
	{
2594
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2595
		$Connection = new Connection($this->db);
2596
		if ($Connection->tableExists('aircraft_owner')) {
2597
			$query  = "SELECT aircraft_owner.base, aircraft_owner.owner, aircraft_owner.date_first_reg FROM aircraft_owner WHERE registration = :registration LIMIT 1";
2598
			$sth = $this->db->prepare($query);
2599
			$sth->execute(array(':registration' => $registration));
2600
			$result = $sth->fetch(PDO::FETCH_ASSOC);
2601
			$sth->closeCursor();
2602
			return $result;
2603
		} else return array();
2604
	}
2605
	
2606
  
2607
  /**
2608
	* Gets all flights (but with only little info)
2609
	*
2610
	* @return Array basic flight information
2611
	*
2612
	*/
2613
	public function getAllFlightsforSitemap()
2614
	{
2615
		//$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 ";
2616
		$query  = "SELECT spotter_output.spotter_id FROM spotter_output ORDER BY spotter_id DESC LIMIT 200 OFFSET 0";
2617
		
2618
		$sth = $this->db->prepare($query);
2619
		$sth->execute();
2620
                  /*
2621
		$flight_array = array();
2622
		$temp_array = array();
2623
		
2624
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2625
		{
2626
			$temp_array['spotter_id'] = $row['spotter_id'];
2627
//			$temp_array['ident'] = $row['ident'];
2628
//			$temp_array['airline_name'] = $row['airline_name'];
2629
//			$temp_array['aircraft_type'] = $row['aircraft_icao'];
2630
//			$temp_array['aircraft_name'] = $row['aircraft_name'];
2631
			//$temp_array['image'] = $row['image'];
2632
2633
			$flight_array[] = $temp_array;
2634
		}
2635
2636
		return $flight_array;
2637
		*/
2638
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2639
	}
2640
  
2641
	/**
2642
	* Gets a list of all aircraft manufacturers
2643
	*
2644
	* @return Array list of aircraft types
2645
	*
2646
	*/
2647
	public function getAllManufacturers()
2648
	{
2649
		/*
2650
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer AS aircraft_manufacturer
2651
								FROM spotter_output
2652
								WHERE spotter_output.aircraft_manufacturer <> '' 
2653
								ORDER BY spotter_output.aircraft_manufacturer ASC";
2654
		  */
2655
		
2656
		$query = "SELECT DISTINCT manufacturer AS aircraft_manufacturer FROM aircraft WHERE manufacturer <> '' ORDER BY manufacturer ASC";
2657
		$sth = $this->db->prepare($query);
2658
		$sth->execute();
2659
2660
		$manufacturer_array = array();
2661
		$temp_array = array();
2662
		
2663
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2664
		{
2665
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2666
2667
			$manufacturer_array[] = $temp_array;
2668
		}
2669
2670
		return $manufacturer_array;
2671
	}
2672
  
2673
  
2674
  /**
2675
	* Gets a list of all aircraft types
2676
	*
2677
	* @return Array list of aircraft types
2678
	*
2679
	*/
2680
	public function getAllAircraftTypes($filters = array())
2681
	{
2682
		/*
2683
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao AS aircraft_icao, spotter_output.aircraft_name AS aircraft_name
2684
								FROM spotter_output  
2685
								WHERE spotter_output.aircraft_icao <> '' 
2686
								ORDER BY spotter_output.aircraft_name ASC";
2687
								
2688
		*/
2689
		//$filter_query = $this->getFilter($filters,true,true);
2690
		//$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";
2691
2692
		$query = "SELECT DISTINCT icao AS aircraft_icao, type AS aircraft_name, manufacturer AS aircraft_manufacturer FROM aircraft WHERE icao <> '' ORDER BY aircraft_manufacturer ASC";
2693
		
2694
		$sth = $this->db->prepare($query);
2695
		$sth->execute();
2696
2697
		$aircraft_array = array();
2698
		$temp_array = array();
2699
		
2700
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2701
		{
2702
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2703
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2704
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2705
2706
			$aircraft_array[] = $temp_array;
2707
		}
2708
2709
		return $aircraft_array;
2710
	}
2711
	
2712
	
2713
	/**
2714
	* Gets a list of all aircraft registrations
2715
	*
2716
	* @return Array list of aircraft registrations
2717
	*
2718
	*/
2719
	public function getAllAircraftRegistrations($filters = array())
2720
	{
2721
		$filter_query = $this->getFilter($filters,true,true);
2722
		$query  = "SELECT DISTINCT spotter_output.registration 
2723
				FROM spotter_output".$filter_query." spotter_output.registration <> '' 
2724
				ORDER BY spotter_output.registration ASC";
2725
2726
		$sth = $this->db->prepare($query);
2727
		$sth->execute();
2728
2729
		$aircraft_array = array();
2730
		$temp_array = array();
2731
		
2732
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2733
		{
2734
			$temp_array['registration'] = $row['registration'];
2735
2736
			$aircraft_array[] = $temp_array;
2737
		}
2738
2739
		return $aircraft_array;
2740
	}
2741
2742
	/**
2743
	* Gets all source name
2744
	*
2745
	* @param String type format of source
2746
	* @return Array list of source name
2747
	*
2748
	*/
2749
	public function getAllSourceName($type = '',$filters = array())
2750
	{
2751
		$filter_query = $this->getFilter($filters,true,true);
2752
		$query_values = array();
2753
		$query  = "SELECT DISTINCT spotter_output.source_name 
2754
				FROM spotter_output".$filter_query." spotter_output.source_name <> ''";
2755
		if ($type != '') {
2756
			$query_values = array(':type' => $type);
2757
			$query .= " AND format_source = :type";
2758
		}
2759
		$query .= " ORDER BY spotter_output.source_name ASC";
2760
2761
		$sth = $this->db->prepare($query);
2762
		if (!empty($query_values)) $sth->execute($query_values);
2763
		else $sth->execute();
2764
2765
		$source_array = array();
2766
		$temp_array = array();
2767
		
2768
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2769
		{
2770
			$temp_array['source_name'] = $row['source_name'];
2771
			$source_array[] = $temp_array;
2772
		}
2773
		return $source_array;
2774
	}
2775
2776
2777
2778
	/**
2779
	* Gets a list of all airline names
2780
	*
2781
	* @return Array list of airline names
2782
	*
2783
	*/
2784
	public function getAllAirlineNames($airline_type = '',$forsource = NULL,$filters = array())
2785
	{
2786
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2787
		$filter_query = $this->getFilter($filters,true,true);
2788
		$airline_type = filter_var($airline_type,FILTER_SANITIZE_STRING);
2789
		if ($airline_type == '' || $airline_type == 'all') {
2790
			/*
2791
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2792
								FROM spotter_output
2793
								WHERE spotter_output.airline_icao <> '' 
2794
								ORDER BY spotter_output.airline_name ASC";
2795
			*/
2796
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2797
			elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2798
			elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2799
			if ($forsource === NULL) {
2800
				$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";
2801
				$query_data = array();
2802
			} else {
2803
				$query = "SELECT DISTINCT icao AS airline_icao, name AS airline_name, type AS airline_type FROM airlines WHERE forsource = :forsource ORDER BY name ASC";
2804
				$query_data = array(':forsource' => $forsource);
2805
			}
2806
		} else {
2807
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2808
					FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
2809
					AND spotter_output.airline_type = :airline_type 
2810
					ORDER BY spotter_output.airline_icao ASC";
2811
			$query_data = array(':airline_type' => $airline_type);
2812
		}
2813
		
2814
		$sth = $this->db->prepare($query);
2815
		$sth->execute($query_data);
2816
    
2817
		$airline_array = array();
2818
		$temp_array = array();
2819
		
2820
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2821
		{
2822
			$temp_array['airline_icao'] = $row['airline_icao'];
2823
			$temp_array['airline_name'] = $row['airline_name'];
2824
			$temp_array['airline_type'] = $row['airline_type'];
2825
2826
			$airline_array[] = $temp_array;
2827
		}
2828
		return $airline_array;
2829
	}
2830
	
2831
	/**
2832
	* Gets a list of all alliance names
2833
	*
2834
	* @return Array list of alliance names
2835
	*
2836
	*/
2837
	public function getAllAllianceNames($forsource = NULL,$filters = array())
2838
	{
2839
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2840
		$filter_query = $this->getFilter($filters,true,true);
2841
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2842
		elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2843
		elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2844
		if ($forsource === NULL) {
2845
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND forsource IS NULL ORDER BY alliance ASC";
2846
			$query_data = array();
2847
		} else {
2848
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND  forsource = :forsource ORDER BY alliance ASC";
2849
			$query_data = array(':forsource' => $forsource);
2850
		}
2851
		
2852
		$sth = $this->db->prepare($query);
2853
		$sth->execute($query_data);
2854
    
2855
		$alliance_array = array();
2856
		$alliance_array = $sth->fetchAll(PDO::FETCH_ASSOC);
2857
		return $alliance_array;
2858
	}
2859
	
2860
	/**
2861
	* Gets a list of all airline countries
2862
	*
2863
	* @return Array list of airline countries
2864
	*
2865
	*/
2866
	public function getAllAirlineCountries($filters = array())
2867
	{
2868
		$filter_query = $this->getFilter($filters,true,true);
2869
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
2870
				FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
2871
				ORDER BY spotter_output.airline_country ASC";
2872
		
2873
		//$query = "SELECT DISTINCT country AS airline_country FROM airlines WHERE country <> '' AND active = 'Y' ORDER BY country ASC";
2874
		$sth = $this->db->prepare($query);
2875
		$sth->execute();
2876
2877
		$airline_array = array();
2878
		$temp_array = array();
2879
		
2880
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2881
		{
2882
			$temp_array['airline_country'] = $row['airline_country'];
2883
2884
			$airline_array[] = $temp_array;
2885
		}
2886
2887
		return $airline_array;
2888
	}
2889
2890
	
2891
	
2892
	/**
2893
	* Gets a list of all departure & arrival names
2894
	*
2895
	* @return Array list of airport names
2896
	*
2897
	*/
2898
	public function getAllAirportNames($filters = array())
2899
	{
2900
		$filter_query = $this->getFilter($filters,true,true);
2901
		$airport_array = array();
2902
		$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
2903
				FROM spotter_output".$filter_query." spotter_output.departure_airport_icao <> '' AND spotter_output.departure_airport_icao <> 'NA' 
2904
				ORDER BY spotter_output.departure_airport_city ASC";
2905
		
2906
		//$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";
2907
		$sth = $this->db->prepare($query);
2908
		$sth->execute();
2909
2910
		$temp_array = array();
2911
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2912
		{
2913
			$temp_array['airport_icao'] = $row['airport_icao'];
2914
			$temp_array['airport_name'] = $row['airport_name'];
2915
			$temp_array['airport_city'] = $row['airport_city'];
2916
			$temp_array['airport_country'] = $row['airport_country'];
2917
2918
			$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2919
		}
2920
2921
		$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
2922
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> '' AND spotter_output.arrival_airport_icao <> 'NA' 
2923
								ORDER BY spotter_output.arrival_airport_city ASC";
2924
					
2925
		$sth = $this->db->prepare($query);
2926
		$sth->execute();
2927
2928
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2929
			{
2930
		//	if ($airport_array[$row['airport_city'].",".$row['airport_name']]['airport_icao'] != $row['airport_icao'])
2931
		//	{
2932
				$temp_array['airport_icao'] = $row['airport_icao'];
2933
				$temp_array['airport_name'] = $row['airport_name'];
2934
				$temp_array['airport_city'] = $row['airport_city'];
2935
				$temp_array['airport_country'] = $row['airport_country'];
2936
				
2937
				$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2938
		//	}
2939
		}
2940
2941
		return $airport_array;
2942
	} 
2943
2944
	/**
2945
	* Gets a list of all owner names
2946
	*
2947
	* @return Array list of owner names
2948
	*
2949
	*/
2950
	public function getAllOwnerNames($filters = array())
2951
	{
2952
		$filter_query = $this->getFilter($filters,true,true);
2953
		$query  = "SELECT DISTINCT spotter_output.owner_name
2954
				FROM spotter_output".$filter_query." spotter_output.owner_name <> '' 
2955
				ORDER BY spotter_output.owner_name ASC";
2956
		
2957
		$sth = $this->db->prepare($query);
2958
		$sth->execute();
2959
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2960
	} 
2961
2962
	/**
2963
	* Gets a list of all pilot names and pilot ids
2964
	*
2965
	* @return Array list of pilot names and pilot ids
2966
	*
2967
	*/
2968
	public function getAllPilotNames($filters = array())
2969
	{
2970
		$filter_query = $this->getFilter($filters,true,true);
2971
		$query  = "SELECT DISTINCT spotter_output.pilot_name, spotter_output.pilot_id
2972
				FROM spotter_output".$filter_query." spotter_output.pilot_name <> '' 
2973
				ORDER BY spotter_output.pilot_name ASC";
2974
		
2975
		$sth = $this->db->prepare($query);
2976
		$sth->execute();
2977
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2978
	} 
2979
	
2980
	
2981
	/**
2982
	* Gets a list of all departure & arrival airport countries
2983
	*
2984
	* @return Array list of airport countries
2985
	*
2986
	*/
2987
	public function getAllAirportCountries($filters = array())
2988
	{
2989
		$airport_array = array();
2990
					
2991
		  /*
2992
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
2993
								FROM spotter_output
2994
								WHERE spotter_output.departure_airport_country <> '' 
2995
								ORDER BY spotter_output.departure_airport_country ASC";
2996
		*/
2997
		$query = "SELECT DISTINCT country AS airport_country FROM airport ORDER BY country ASC";
2998
		
2999
		$sth = $this->db->prepare($query);
3000
		$sth->execute();
3001
   
3002
		$temp_array = array();
3003
		
3004
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3005
		{
3006
			$temp_array['airport_country'] = $row['airport_country'];
3007
3008
			$airport_array[$row['airport_country']] = $temp_array;
3009
		}
3010
		$filter_query = $this->getFilter($filters,true,true);
3011
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
3012
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
3013
								ORDER BY spotter_output.arrival_airport_country ASC";
3014
					
3015
		$sth = $this->db->prepare($query);
3016
		$sth->execute();
3017
		
3018
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3019
		{
3020
			if (isset($airport_array[$row['airport_country']]['airport_country']) && $airport_array[$row['airport_country']]['airport_country'] != $row['airport_country'])
3021
			{
3022
				$temp_array['airport_country'] = $row['airport_country'];
3023
				$airport_array[$row['airport_country']] = $temp_array;
3024
			}
3025
		}
3026
3027
		return $airport_array;
3028
	} 
3029
	
3030
	
3031
	
3032
	
3033
	/**
3034
	* Gets a list of all countries (airline, departure airport & arrival airport)
3035
	*
3036
	* @return Array list of countries
3037
	*
3038
	*/
3039
	public function getAllCountries($filters = array())
3040
	{
3041
		$Connection= new Connection($this->db);
3042
		if ($Connection->tableExists('countries')) {
3043
			$query  = "SELECT countries.name AS airport_country
3044
				FROM countries
3045
				ORDER BY countries.name ASC";
3046
			$sth = $this->db->prepare($query);
3047
			$sth->execute();
3048
   
3049
			$temp_array = array();
3050
			$country_array = array();
3051
		
3052
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
3053
			{
3054
				$temp_array['country'] = $row['airport_country'];
3055
				$country_array[$row['airport_country']] = $temp_array;
3056
			}
3057
		} else {
3058
			$filter_query = $this->getFilter($filters,true,true);
3059
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
3060
								FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' 
3061
								ORDER BY spotter_output.departure_airport_country ASC";
3062
3063
			$sth = $this->db->prepare($query);
3064
			$sth->execute();
3065
   
3066
			$temp_array = array();
3067
			$country_array = array();
3068
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
3069
			{
3070
				$temp_array['country'] = $row['airport_country'];
3071
				$country_array[$row['airport_country']] = $temp_array;
3072
			}
3073
3074
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
3075
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
3076
								ORDER BY spotter_output.arrival_airport_country ASC";
3077
					
3078
		$sth = $this->db->prepare($query);
3079
		$sth->execute();
3080
		
3081
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3082
		{
3083
			if ($country_array[$row['airport_country']]['country'] != $row['airport_country'])
3084
			{
3085
				$temp_array['country'] = $row['airport_country'];
3086
				
3087
				$country_array[$row['country']] = $temp_array;
3088
			}
3089
		}
3090
		
3091
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
3092
								FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
3093
								ORDER BY spotter_output.airline_country ASC";
3094
					
3095
		$sth = $this->db->prepare($query);
3096
		$sth->execute();
3097
		
3098
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3099
		{
3100
			if (isset($country_array[$row['airline_country']]['country']) && $country_array[$row['airline_country']]['country'] != $row['airline_country'])
3101
			{
3102
				$temp_array['country'] = $row['airline_country'];
3103
				
3104
				$country_array[$row['country']] = $temp_array;
3105
			}
3106
		}
3107
		}  
3108
		return $country_array;
3109
	} 
3110
	
3111
	
3112
	
3113
	
3114
	/**
3115
	* Gets a list of all idents/callsigns
3116
	*
3117
	* @return Array list of ident/callsign names
3118
	*
3119
	*/
3120
	public function getAllIdents($filters = array())
3121
	{
3122
		$filter_query = $this->getFilter($filters,true,true);
3123
		$query  = "SELECT DISTINCT spotter_output.ident
3124
								FROM spotter_output".$filter_query." spotter_output.ident <> '' 
3125
								ORDER BY spotter_output.date ASC LIMIT 700 OFFSET 0";
3126
3127
		$sth = $this->db->prepare($query);
3128
		$sth->execute();
3129
    
3130
		$ident_array = array();
3131
		$temp_array = array();
3132
		
3133
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3134
		{
3135
			$temp_array['ident'] = $row['ident'];
3136
			$ident_array[] = $temp_array;
3137
		}
3138
3139
		return $ident_array;
3140
	}
3141
3142
	/**
3143
	* Get a list of flights from airport since 7 days
3144
	* @return Array number, icao, name and city of airports
3145
	*/
3146
3147
	public function getLast7DaysAirportsDeparture($airport_icao = '',$filters = array()) {
3148
		global $globalTimezone, $globalDBdriver;
3149
		$filter_query = $this->getFilter($filters,true,true);
3150
		if ($globalTimezone != '') {
3151
			date_default_timezone_set($globalTimezone);
3152
			$datetime = new DateTime();
3153
			$offset = $datetime->format('P');
3154
		} else $offset = '+00:00';
3155
		if ($airport_icao == '') {
3156
			if ($globalDBdriver == 'mysql') {
3157
				$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";
3158
			} else {
3159
				$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";
3160
			}
3161
			$sth = $this->db->prepare($query);
3162
			$sth->execute(array(':offset' => $offset));
3163
		} else {
3164
			if ($globalDBdriver == 'mysql') {
3165
				$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";
3166
			} else {
3167
				$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";
3168
			}
3169
			$sth = $this->db->prepare($query);
3170
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3171
		}
3172
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3173
	}
3174
3175
	/**
3176
	* Get a list of flights from airport since 7 days
3177
	* @return Array number, icao, name and city of airports
3178
	*/
3179
3180
	public function getLast7DaysAirportsDepartureByAirlines($airport_icao = '') {
3181
		global $globalTimezone, $globalDBdriver;
3182
		if ($globalTimezone != '') {
3183
			date_default_timezone_set($globalTimezone);
3184
			$datetime = new DateTime();
3185
			$offset = $datetime->format('P');
3186
		} else $offset = '+00:00';
3187
		if ($airport_icao == '') {
3188
			if ($globalDBdriver == 'mysql') {
3189
				$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";
3190
			} else {
3191
				$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";
3192
			}
3193
			$sth = $this->db->prepare($query);
3194
			$sth->execute(array(':offset' => $offset));
3195
		} else {
3196
			if ($globalDBdriver == 'mysql') {
3197
				$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";
3198
			} else {
3199
				$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";
3200
			}
3201
			$sth = $this->db->prepare($query);
3202
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3203
		}
3204
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3205
	}
3206
3207
	/**
3208
	* Get a list of flights from detected airport since 7 days
3209
	* @return Array number, icao, name and city of airports
3210
	*/
3211
3212
	public function getLast7DaysDetectedAirportsDeparture($airport_icao = '', $filters = array()) {
3213
		global $globalTimezone, $globalDBdriver;
3214
		$filter_query = $this->getFilter($filters,true,true);
3215
		if ($globalTimezone != '') {
3216
			date_default_timezone_set($globalTimezone);
3217
			$datetime = new DateTime();
3218
			$offset = $datetime->format('P');
3219
		} else $offset = '+00:00';
3220
		if ($airport_icao == '') {
3221
			if ($globalDBdriver == 'mysql') {
3222
				$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 
3223
				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 <> '' 
3224
				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";
3225
			} else {
3226
				$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 
3227
				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 <> '' 
3228
				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";
3229
			}
3230
			$sth = $this->db->prepare($query);
3231
			$sth->execute(array(':offset' => $offset));
3232
		} else {
3233
			if ($globalDBdriver == 'mysql') {
3234
				$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 
3235
				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 
3236
				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";
3237
			} else {
3238
				$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 
3239
				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";
3240
			}
3241
			$sth = $this->db->prepare($query);
3242
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3243
		}
3244
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3245
	}
3246
3247
	/**
3248
	* Get a list of flights from detected airport since 7 days
3249
	* @return Array number, icao, name and city of airports
3250
	*/
3251
3252
	public function getLast7DaysDetectedAirportsDepartureByAirlines($airport_icao = '') {
3253
		global $globalTimezone, $globalDBdriver;
3254
		if ($globalTimezone != '') {
3255
			date_default_timezone_set($globalTimezone);
3256
			$datetime = new DateTime();
3257
			$offset = $datetime->format('P');
3258
		} else $offset = '+00:00';
3259
		if ($airport_icao == '') {
3260
			if ($globalDBdriver == 'mysql') {
3261
				$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 
3262
				FROM `spotter_output`, airport 
3263
				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 <> '' 
3264
				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";
3265
			} else {
3266
				$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 
3267
				FROM spotter_output, airport 
3268
				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 <> '' 
3269
				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";
3270
			}
3271
			$sth = $this->db->prepare($query);
3272
			$sth->execute(array(':offset' => $offset));
3273
		} else {
3274
			if ($globalDBdriver == 'mysql') {
3275
				$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 
3276
				FROM `spotter_output`, airport 
3277
				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 
3278
				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";
3279
			} else {
3280
				$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 
3281
				FROM spotter_output, airport 
3282
				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";
3283
			}
3284
			$sth = $this->db->prepare($query);
3285
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3286
		}
3287
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3288
	}
3289
3290
3291
	/**
3292
	* Get a list of flights to airport since 7 days
3293
	* @return Array number, icao, name and city of airports
3294
	*/
3295
3296
	public function getLast7DaysAirportsArrival($airport_icao = '', $filters = array()) {
3297
		global $globalTimezone, $globalDBdriver;
3298
		$filter_query = $this->getFilter($filters,true,true);
3299
		if ($globalTimezone != '') {
3300
			date_default_timezone_set($globalTimezone);
3301
			$datetime = new DateTime();
3302
			$offset = $datetime->format('P');
3303
		} else $offset = '+00:00';
3304
		if ($airport_icao == '') {
3305
			if ($globalDBdriver == 'mysql') {
3306
				$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";
3307
			} else {
3308
				$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";
3309
			}
3310
			$sth = $this->db->prepare($query);
3311
			$sth->execute(array(':offset' => $offset));
3312
		} else {
3313
			if ($globalDBdriver == 'mysql') {
3314
				$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";
3315
			} else {
3316
				$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";
3317
			}
3318
			$sth = $this->db->prepare($query);
3319
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3320
		}
3321
		
3322
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3323
	}
3324
3325
3326
	/**
3327
	* Get a list of flights detected to airport since 7 days
3328
	* @return Array number, icao, name and city of airports
3329
	*/
3330
3331
	public function getLast7DaysDetectedAirportsArrival($airport_icao = '',$filters = array()) {
3332
		global $globalTimezone, $globalDBdriver;
3333
		$filter_query = $this->getFilter($filters,true,true);
3334
		if ($globalTimezone != '') {
3335
			date_default_timezone_set($globalTimezone);
3336
			$datetime = new DateTime();
3337
			$offset = $datetime->format('P');
3338
		} else $offset = '+00:00';
3339
		if ($airport_icao == '') {
3340
			if ($globalDBdriver == 'mysql') {
3341
				$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 
3342
				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 <> '' 
3343
				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";
3344
			} else {
3345
				$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 
3346
				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 <> '' 
3347
				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";
3348
			}
3349
			$sth = $this->db->prepare($query);
3350
			$sth->execute(array(':offset' => $offset));
3351
		} else {
3352
			if ($globalDBdriver == 'mysql') {
3353
				$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 
3354
				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 
3355
				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";
3356
			} else {
3357
				$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 
3358
				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 
3359
				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";
3360
			}
3361
			$sth = $this->db->prepare($query);
3362
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3363
		}
3364
		
3365
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3366
	}
3367
3368
3369
	/**
3370
	* Get a list of flights to airport since 7 days
3371
	* @return Array number, icao, name and city of airports
3372
	*/
3373
3374
	public function getLast7DaysAirportsArrivalByAirlines($airport_icao = '') {
3375
		global $globalTimezone, $globalDBdriver;
3376
		if ($globalTimezone != '') {
3377
			date_default_timezone_set($globalTimezone);
3378
			$datetime = new DateTime();
3379
			$offset = $datetime->format('P');
3380
		} else $offset = '+00:00';
3381
		if ($airport_icao == '') {
3382
			if ($globalDBdriver == 'mysql') {
3383
				$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";
3384
			} else {
3385
				$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";
3386
			}
3387
			$sth = $this->db->prepare($query);
3388
			$sth->execute(array(':offset' => $offset));
3389
		} else {
3390
			if ($globalDBdriver == 'mysql') {
3391
				$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";
3392
			} else {
3393
				$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";
3394
			}
3395
			$sth = $this->db->prepare($query);
3396
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3397
		}
3398
		
3399
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3400
	}
3401
3402
3403
	/**
3404
	* Get a list of flights detected to airport since 7 days
3405
	* @return Array number, icao, name and city of airports
3406
	*/
3407
3408
	public function getLast7DaysDetectedAirportsArrivalByAirlines($airport_icao = '') {
3409
		global $globalTimezone, $globalDBdriver;
3410
		if ($globalTimezone != '') {
3411
			date_default_timezone_set($globalTimezone);
3412
			$datetime = new DateTime();
3413
			$offset = $datetime->format('P');
3414
		} else $offset = '+00:00';
3415
		if ($airport_icao == '') {
3416
			if ($globalDBdriver == 'mysql') {
3417
				$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 
3418
				FROM `spotter_output`, airport 
3419
				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 <> '' 
3420
				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";
3421
			} else {
3422
				$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 
3423
				FROM spotter_output, airport 
3424
				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 <> '' 
3425
				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";
3426
			}
3427
			$sth = $this->db->prepare($query);
3428
			$sth->execute(array(':offset' => $offset));
3429
		} else {
3430
			if ($globalDBdriver == 'mysql') {
3431
				$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 
3432
				FROM `spotter_output`, airport 
3433
				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 
3434
				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";
3435
			} else {
3436
				$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 
3437
				FROM spotter_output, airport 
3438
				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 
3439
				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";
3440
			}
3441
			$sth = $this->db->prepare($query);
3442
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3443
		}
3444
		
3445
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3446
	}
3447
3448
3449
	/**
3450
	* Gets a list of all dates
3451
	*
3452
	* @return Array list of date names
3453
	*
3454
	*/
3455
	public function getAllDates()
3456
	{
3457
		global $globalTimezone, $globalDBdriver;
3458
		if ($globalTimezone != '') {
3459
			date_default_timezone_set($globalTimezone);
3460
			$datetime = new DateTime();
3461
			$offset = $datetime->format('P');
3462
		} else $offset = '+00:00';
3463
3464
		if ($globalDBdriver == 'mysql') {
3465
			$query  = "SELECT DISTINCT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) as date
3466
								FROM spotter_output
3467
								WHERE spotter_output.date <> '' 
3468
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3469
		} else {
3470
			$query  = "SELECT DISTINCT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date
3471
								FROM spotter_output
3472
								WHERE spotter_output.date <> '' 
3473
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3474
		}
3475
		
3476
		$sth = $this->db->prepare($query);
3477
		$sth->execute(array(':offset' => $offset));
3478
    
3479
		$date_array = array();
3480
		$temp_array = array();
3481
		
3482
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3483
		{
3484
			$temp_array['date'] = $row['date'];
3485
3486
			$date_array[] = $temp_array;
3487
		}
3488
3489
		return $date_array;
3490
	}
3491
	
3492
	
3493
	
3494
	/**
3495
	* Gets all route combinations
3496
	*
3497
	* @return Array the route list
3498
	*
3499
	*/
3500
	public function getAllRoutes()
3501
	{
3502
		$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 
3503
				FROM spotter_output
3504
				WHERE spotter_output.ident <> '' 
3505
				GROUP BY route
3506
				ORDER BY route ASC";
3507
3508
		$sth = $this->db->prepare($query);
3509
		$sth->execute();
3510
3511
		$routes_array = array();
3512
		$temp_array = array();
3513
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3514
		{
3515
			$temp_array['route'] = $row['route'];
3516
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
3517
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
3518
3519
			$routes_array[] = $temp_array;
3520
		}
3521
		return $routes_array;
3522
	}
3523
3524
	/**
3525
	* Update ident spotter data
3526
	*
3527
	* @param String $flightaware_id the ID from flightaware
3528
	* @param String $ident the flight ident
3529
	* @return String success or false
3530
	*
3531
	*/	
3532
	public function updateIdentSpotterData($flightaware_id = '', $ident = '',$fromsource = NULL)
3533
	{
3534
		if (!is_numeric(substr($ident, 0, 3)))
3535
		{
3536
			if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3537
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3538
			} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3539
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3540
			} else {
3541
				$airline_array = $this->getAllAirlineInfo("NA");
3542
			}
3543
			if (count($airline_array) == 0) {
3544
				$airline_array = $this->getAllAirlineInfo("NA");
3545
			}
3546
			if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3547
				$airline_array = $this->getAllAirlineInfo("NA");
3548
			}
3549
		} else {
3550
			$airline_array = $this->getAllAirlineInfo("NA");
3551
		}
3552
                $airline_name = $airline_array[0]['name'];
3553
                $airline_icao = $airline_array[0]['icao'];
3554
                $airline_country = $airline_array[0]['country'];
3555
                $airline_type = $airline_array[0]['type'];
3556
3557
3558
		$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';
3559
                $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);
3560
3561
		try {
3562
			$sth = $this->db->prepare($query);
3563
			$sth->execute($query_values);
3564
		} catch (PDOException $e) {
3565
			return "error : ".$e->getMessage();
3566
		}
3567
		
3568
		return "success";
3569
3570
	}
3571
	/**
3572
	* Update latest spotter data
3573
	*
3574
	* @param String $flightaware_id the ID from flightaware
3575
	* @param String $ident the flight ident
3576
	* @param String $arrival_airport_icao the arrival airport
3577
	* @return String success or false
3578
	*
3579
	*/	
3580
	public function updateLatestSpotterData($flightaware_id = '', $ident = '', $latitude = '', $longitude = '', $altitude = '', $ground = false, $groundspeed = NULL, $date = '', $arrival_airport_icao = '',$arrival_airport_time = '')
3581
	{
3582
		if ($groundspeed == '') $groundspeed = NULL;
3583
		$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';
3584
                $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);
3585
3586
		try {
3587
			$sth = $this->db->prepare($query);
3588
			$sth->execute($query_values);
3589
		} catch (PDOException $e) {
3590
			return "error : ".$e->getMessage();
3591
		}
3592
		
3593
		return "success";
3594
3595
	}
3596
3597
	/**
3598
	* Adds a new spotter data
3599
	*
3600
	* @param String $flightaware_id the ID from flightaware
3601
	* @param String $ident the flight ident
3602
	* @param String $aircraft_icao the aircraft type
3603
	* @param String $departure_airport_icao the departure airport
3604
	* @param String $arrival_airport_icao the arrival airport
3605
	* @param String $latitude latitude of flight
3606
	* @param String $longitude latitude of flight
3607
	* @param String $waypoints waypoints of flight
3608
	* @param String $altitude altitude of flight
3609
	* @param String $heading heading of flight
3610
	* @param String $groundspeed speed of flight
3611
	* @param String $date date of flight
3612
	* @param String $departure_airport_time departure time of flight
3613
	* @param String $arrival_airport_time arrival time of flight
3614
	* @param String $squawk squawk code of flight
3615
	* @param String $route_stop route stop of flight
3616
	* @param String $highlight highlight or not
3617
	* @param String $ModeS ModesS code of flight
3618
	* @param String $registration registration code of flight
3619
	* @param String $pilot_id pilot id of flight (for virtual airlines)
3620
	* @param String $pilot_name pilot name of flight (for virtual airlines)
3621
	* @param String $verticalrate vertival rate of flight
3622
	* @return String success or false
3623
	*/
3624
	public function addSpotterData($flightaware_id = '', $ident = '', $aircraft_icao = '', $departure_airport_icao = '', $arrival_airport_icao = '', $latitude = '', $longitude = '', $waypoints = '', $altitude = '', $altitude_real = '',$heading = '', $groundspeed = '', $date = '', $departure_airport_time = '', $arrival_airport_time = '',$squawk = '', $route_stop = '', $highlight = '', $ModeS = '', $registration = '',$pilot_id = '', $pilot_name = '', $verticalrate = '', $ground = false,$format_source = '', $source_name = '',$source_type = '')
3625
	{
3626
		global $globalURL, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalDebugTimeElapsed, $globalAirlinesSource, $globalVAM;
3627
		
3628
		//if (isset($globalDebugTimeElapsed) || $globalDebugTimeElapsed == '') $globalDebugTimeElapsed = FALSE;
3629
		$Image = new Image($this->db);
3630
		$Common = new Common();
3631
		
3632
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
3633
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
3634
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
3635
		if (!isset($globalVAM)) $globalVAM = FALSE;
3636
		date_default_timezone_set('UTC');
3637
		
3638
		//getting the registration
3639
		if ($flightaware_id != "" && $registration == '')
3640
		{
3641
			if (!is_string($flightaware_id))
3642
			{
3643
				return false;
3644
			} else {
3645
				if ($ModeS != '') {
3646
					$timeelapsed = microtime(true);
3647
					$registration = $this->getAircraftRegistrationBymodeS($ModeS,$source_type);
3648
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3649
				} else {
3650
					$myhex = explode('-',$flightaware_id);
3651
					if (count($myhex) > 0) {
3652
						$timeelapsed = microtime(true);
3653
						$registration = $this->getAircraftRegistrationBymodeS($myhex[0],$source_type);
3654
						if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3655
					}
3656
				}
3657
			}
3658
		}
3659
		$fromsource = NULL;
3660
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
3661
		elseif ($format_source == 'vatsimtxt') $fromsource = 'vatsim';
3662
		elseif ($format_source == 'whazzup') $fromsource = 'ivao';
3663
		elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
3664
		elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
3665
		//getting the airline information
3666
		if ($ident != "")
3667
		{
3668
			if (!is_string($ident))
3669
			{
3670
				return false;
3671
			} else {
3672
				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'))
3673
				{
3674
					$timeelapsed = microtime(true);
3675
					if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3676
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3677
					} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3678
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3679
					} else {
3680
						$airline_array = $this->getAllAirlineInfo("NA");
3681
					}
3682
					if (count($airline_array) == 0) {
3683
						$airline_array = $this->getAllAirlineInfo("NA");
3684
					}
3685
					if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3686
						$airline_array = $this->getAllAirlineInfo("NA");
3687
					}
3688
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3689
3690
				} else {
3691
					$timeelapsed = microtime(true);
3692
					$airline_array = $this->getAllAirlineInfo("NA");
3693
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3694
				}
3695
			}
3696
		} else $airline_array = array();
3697
		
3698
		//getting the aircraft information
3699
		$aircraft_array = array();
3700
		if ($aircraft_icao != '')
3701
		{
3702
			if (!is_string($aircraft_icao))
3703
			{
3704
				return false;
3705
			} else {
3706
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3707
				{
3708
					$timeelapsed = microtime(true);
3709
					$aircraft_array = $this->getAllAircraftInfo("NA");
3710
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3711
				} else {
3712
					$timeelapsed = microtime(true);
3713
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3714
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3715
				}
3716
			}
3717
		} else {
3718
			if ($ModeS != '') {
3719
				$timeelapsed = microtime(true);
3720
				$aircraft_icao = $this->getAllAircraftType($ModeS,$source_type);
3721
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAircraftType : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3722
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3723
				{
3724
					$timeelapsed = microtime(true);
3725
					$aircraft_array = $this->getAllAircraftInfo("NA");
3726
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3727
				} else {
3728
					$timeelapsed = microtime(true);
3729
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3730
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3731
				}
3732
			}
3733
		}
3734
		
3735
		//getting the departure airport information
3736
		$departure_airport_array = array();
3737
		$departure_airport_icao = trim($departure_airport_icao);
3738
		if ($departure_airport_icao != '')
3739
		{
3740
			if (!is_string($departure_airport_icao))
3741
			{
3742
				return false;
3743
			} else {
3744
				$timeelapsed = microtime(true);
3745
				$departure_airport_array = $this->getAllAirportInfo($departure_airport_icao);
3746
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3747
			}
3748
		}
3749
		
3750
		//getting the arrival airport information
3751
		$arrival_airport_array = array();
3752
		$arrival_airport_icao = trim($arrival_airport_icao);
3753
		if ($arrival_airport_icao != '')
3754
		{
3755
			if (!is_string($arrival_airport_icao))
3756
			{
3757
				return false;
3758
			} else {
3759
				$timeelapsed = microtime(true);
3760
				$arrival_airport_array = $this->getAllAirportInfo($arrival_airport_icao);
3761
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3762
			}
3763
		}
3764
3765
		if ($latitude != "")
3766
		{
3767
			if (!is_numeric($latitude))
3768
			{
3769
				return false;
3770
			}
3771
		}
3772
		
3773
		if ($longitude != "")
3774
		{
3775
			if (!is_numeric($longitude))
3776
			{
3777
				return false;
3778
			}
3779
		}
3780
		
3781
		if ($waypoints != "")
3782
		{
3783
			if (!is_string($waypoints))
3784
			{
3785
				return false;
3786
			}
3787
		}
3788
		
3789
		if ($altitude != "")
3790
		{
3791
			if (!is_numeric($altitude))
3792
			{
3793
				return false;
3794
			}
3795
		} else $altitude = 0;
3796
		
3797
		if ($heading != "")
3798
		{
3799
			if (!is_numeric($heading))
3800
			{
3801
				return false;
3802
			}
3803
		}
3804
		
3805
		if ($groundspeed != "")
3806
		{
3807
			if (!is_numeric($groundspeed))
3808
			{
3809
				return false;
3810
			}
3811
		}
3812
3813
    
3814
		if ($date == "" || strtotime($date) < time()-20*60)
3815
		{
3816
			$date = date("Y-m-d H:i:s", time());
3817
		}
3818
3819
		//getting the aircraft image
3820
		if (($registration != "" || $registration != 'NA') && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM)
3821
		{
3822
			$timeelapsed = microtime(true);
3823
			$image_array = $Image->getSpotterImage($registration);
3824
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getSpotterImage : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3825
			if (!isset($image_array[0]['registration']))
3826
			{
3827
				//echo "Add image !!!! \n";
3828
				$Image->addSpotterImage($registration);
3829
			}
3830
			$timeelapsed = microtime(true);
3831
			$owner_info = $this->getAircraftOwnerByRegistration($registration);
3832
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftOwnerByRegistration : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3833
			if ($owner_info['owner'] != '') $aircraft_owner = ucwords(strtolower($owner_info['owner']));
3834
		}
3835
    
3836
		if (($globalIVAO || $globalVATSIM || $globalphpVMS || $globalVAM) && $aircraft_icao != '')
3837
		{
3838
            		if (isset($airline_array[0]['icao'])) $airline_icao = $airline_array[0]['icao'];
3839
            		else $airline_icao = '';
3840
			$image_array = $Image->getSpotterImage('',$aircraft_icao,$airline_icao);
3841
			if (!isset($image_array[0]['registration']))
3842
			{
3843
				//echo "Add image !!!! \n";
3844
				$Image->addSpotterImage('',$aircraft_icao,$airline_icao);
3845
			}
3846
		}
3847
    
3848
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
3849
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
3850
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
3851
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
3852
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
3853
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
3854
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3855
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3856
		$waypoints = filter_var($waypoints,FILTER_SANITIZE_STRING);
3857
		$altitude = filter_var($altitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3858
		$heading = filter_var($heading,FILTER_SANITIZE_NUMBER_INT);
3859
		$groundspeed = filter_var($groundspeed,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3860
		$squawk = filter_var($squawk,FILTER_SANITIZE_NUMBER_INT);
3861
		$route_stop = filter_var($route_stop,FILTER_SANITIZE_STRING);
3862
		$ModeS = filter_var($ModeS,FILTER_SANITIZE_STRING);
3863
		$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_STRING);
3864
		$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
3865
		$format_source = filter_var($format_source,FILTER_SANITIZE_STRING);
3866
		$verticalrate = filter_var($verticalrate,FILTER_SANITIZE_NUMBER_INT);
3867
	
3868
		if (count($airline_array) == 0) 
3869
		{
3870
                        $airline_array = $this->getAllAirlineInfo('NA');
3871
                }
3872
                if (count($aircraft_array) == 0) 
3873
                {
3874
                        $aircraft_array = $this->getAllAircraftInfo('NA');
3875
                }
3876
                if (count($departure_airport_array) == 0 || $departure_airport_array[0]['icao'] == '' || $departure_airport_icao == '') 
3877
                {
3878
                        $departure_airport_array = $this->getAllAirportInfo('NA');
3879
                }
3880
                if (count($arrival_airport_array) == 0 || $arrival_airport_array[0]['icao'] == '' || $arrival_airport_icao == '') 
3881
                {
3882
                        $arrival_airport_array = $this->getAllAirportInfo('NA');
3883
                }
3884
                if ($registration == '') $registration = 'NA';
3885
                if ($latitude == '' && $longitude == '') {
3886
            		$latitude = 0;
3887
            		$longitude = 0;
3888
            	}
3889
                if ($squawk == '' || $Common->isInteger($squawk) === false) $squawk = NULL;
3890
                if ($verticalrate == '' || $Common->isInteger($verticalrate) === false) $verticalrate = NULL;
3891
                if ($heading == '' || $Common->isInteger($heading) === false) $heading = 0;
3892
                if ($groundspeed == '' || $Common->isInteger($groundspeed) === false) $groundspeed = 0;
3893
                if (!isset($aircraft_owner)) $aircraft_owner = NULL;
3894
                $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) 
3895
                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)";
3896
3897
                $airline_name = $airline_array[0]['name'];
3898
                $airline_icao = $airline_array[0]['icao'];
3899
                $airline_country = $airline_array[0]['country'];
3900
                $airline_type = $airline_array[0]['type'];
3901
		if ($airline_type == '') {
3902
			$timeelapsed = microtime(true);
3903
			$airline_type = $this->getAircraftTypeBymodeS($ModeS);
3904
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftTypeBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3905
		}
3906
		if ($airline_type == null) $airline_type = '';
3907
                $aircraft_type = $aircraft_array[0]['type'];
3908
                $aircraft_manufacturer = $aircraft_array[0]['manufacturer'];
3909
                $departure_airport_name = $departure_airport_array[0]['name'];
3910
	        $departure_airport_city = $departure_airport_array[0]['city'];
3911
            	$departure_airport_country = $departure_airport_array[0]['country'];
3912
                
3913
                $arrival_airport_name = $arrival_airport_array[0]['name'];
3914
                $arrival_airport_city = $arrival_airport_array[0]['city'];
3915
                $arrival_airport_country = $arrival_airport_array[0]['country'];
3916
                $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);
3917
3918
		try {
3919
		        
3920
			$sth = $this->db->prepare($query);
3921
			$sth->execute($query_values);
3922
			$this->db = null;
3923
		} catch (PDOException $e) {
3924
		    return "error : ".$e->getMessage();
3925
		}
3926
		
3927
		return "success";
3928
3929
	}
3930
	
3931
  
3932
	/**
3933
	* Gets the aircraft ident within the last hour
3934
	*
3935
	* @return String the ident
3936
	*
3937
	*/
3938
	public function getIdentFromLastHour($ident)
3939
	{
3940
		global $globalDBdriver, $globalTimezone;
3941
		if ($globalDBdriver == 'mysql') {
3942
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3943
								WHERE spotter_output.ident = :ident 
3944
								AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) 
3945
								AND spotter_output.date < UTC_TIMESTAMP()";
3946
			$query_data = array(':ident' => $ident);
3947
		} else {
3948
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3949
								WHERE spotter_output.ident = :ident 
3950
								AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INTERVAL '1 HOURS'
3951
								AND spotter_output.date < now() AT TIME ZONE 'UTC'";
3952
			$query_data = array(':ident' => $ident);
3953
    		}
3954
		
3955
		$sth = $this->db->prepare($query);
3956
		$sth->execute($query_data);
3957
    		$ident_result='';
3958
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3959
		{
3960
			$ident_result = $row['ident'];
3961
		}
3962
3963
		return $ident_result;
3964
	}
3965
	
3966
	
3967
	/**
3968
	* Gets the aircraft data from the last 20 seconds
3969
	*
3970
	* @return Array the spotter data
3971
	*
3972
	*/
3973
	public function getRealTimeData($q = '')
3974
	{
3975
		global $globalDBdriver;
3976
		$additional_query = '';
3977
		if ($q != "")
3978
		{
3979
			if (!is_string($q))
3980
			{
3981
				return false;
3982
			} else {
3983
				$q_array = explode(" ", $q);
3984
				foreach ($q_array as $q_item){
3985
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
3986
					$additional_query .= " AND (";
3987
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
3988
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
3989
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
3990
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
3991
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
3992
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
3993
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
3994
					$additional_query .= "(spotter_output.ident like '%".$q_item."%')";
3995
					$additional_query .= ")";
3996
				}
3997
			}
3998
		}
3999
		if ($globalDBdriver == 'mysql') {
4000
			$query  = "SELECT spotter_output.* FROM spotter_output 
4001
				WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 20 SECOND) ".$additional_query." 
4002
				AND spotter_output.date < UTC_TIMESTAMP()";
4003
		} else {
4004
			$query  = "SELECT spotter_output.* FROM spotter_output 
4005
				WHERE spotter_output.date::timestamp >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '20 SECONDS' ".$additional_query." 
4006
				AND spotter_output.date::timestamp < CURRENT_TIMESTAMP AT TIME ZONE 'UTC'";
4007
		}
4008
		$spotter_array = $this->getDataFromDB($query, array());
4009
4010
		return $spotter_array;
4011
	}
4012
	
4013
	
4014
	
4015
	 /**
4016
	* Gets all airlines that have flown over
4017
	*
4018
	* @return Array the airline list
4019
	*
4020
	*/
4021
	public function countAllAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(), $year = '', $month = '', $day = '')
4022
	{
4023
		global $globalDBdriver;
4024
		$filter_query = $this->getFilter($filters,true,true);
4025
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4026
		 			FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.airline_icao <> 'NA'";
4027
		if ($olderthanmonths > 0) {
4028
			if ($globalDBdriver == 'mysql') {
4029
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4030
			} else {
4031
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4032
			}
4033
		}
4034
                if ($sincedate != '') {
4035
			if ($globalDBdriver == 'mysql') {
4036
				$query .= " AND spotter_output.date > '".$sincedate."'";
4037
			} else {
4038
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4039
			}
4040
		}
4041
		$query_values = array();
4042
		if ($year != '') {
4043
			if ($globalDBdriver == 'mysql') {
4044
				$query .= " AND YEAR(spotter_output.date) = :year";
4045
				$query_values = array_merge($query_values,array(':year' => $year));
4046
			} else {
4047
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4048
				$query_values = array_merge($query_values,array(':year' => $year));
4049
			}
4050
		}
4051
		if ($month != '') {
4052
			if ($globalDBdriver == 'mysql') {
4053
				$query .= " AND MONTH(spotter_output.date) = :month";
4054
				$query_values = array_merge($query_values,array(':month' => $month));
4055
			} else {
4056
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4057
				$query_values = array_merge($query_values,array(':month' => $month));
4058
			}
4059
		}
4060
		if ($day != '') {
4061
			if ($globalDBdriver == 'mysql') {
4062
				$query .= " AND DAY(spotter_output.date) = :day";
4063
				$query_values = array_merge($query_values,array(':day' => $day));
4064
			} else {
4065
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4066
				$query_values = array_merge($query_values,array(':day' => $day));
4067
			}
4068
		}
4069
		$query .= " GROUP BY spotter_output.airline_name,spotter_output.airline_icao, spotter_output.airline_country ORDER BY airline_count DESC";
4070
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4071
4072
		$sth = $this->db->prepare($query);
4073
		$sth->execute($query_values);
4074
		$airline_array = array();
4075
		$temp_array = array();
4076
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4077
		{
4078
			$temp_array['airline_name'] = $row['airline_name'];
4079
			$temp_array['airline_icao'] = $row['airline_icao'];
4080
			$temp_array['airline_count'] = $row['airline_count'];
4081
			$temp_array['airline_country'] = $row['airline_country'];
4082
			$airline_array[] = $temp_array;
4083
		}
4084
		return $airline_array;
4085
	}
4086
4087
	 /**
4088
	* Gets all pilots that have flown over
4089
	*
4090
	* @return Array the pilots list
4091
	*
4092
	*/
4093
	public function countAllPilots($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '', $month = '',$day = '')
4094
	{
4095
		global $globalDBdriver;
4096
		$filter_query = $this->getFilter($filters,true,true);
4097
		$query  = "SELECT DISTINCT spotter_output.pilot_id, s.pilot_name, COUNT(spotter_output.pilot_id) AS pilot_count, spotter_output.format_source
4098
			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 <> ''";
4099
                if ($olderthanmonths > 0) {
4100
            		if ($globalDBdriver == 'mysql') {
4101
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4102
			} else {
4103
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4104
			}
4105
		}
4106
                if ($sincedate != '') {
4107
            		if ($globalDBdriver == 'mysql') {
4108
				$query .= " AND spotter_output.date > '".$sincedate."'";
4109
			} else {
4110
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4111
			}
4112
		}
4113
		$query_values = array();
4114
		if ($year != '') {
4115
			if ($globalDBdriver == 'mysql') {
4116
				$query .= " AND YEAR(spotter_output.date) = :year";
4117
				$query_values = array_merge($query_values,array(':year' => $year));
4118
			} else {
4119
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4120
				$query_values = array_merge($query_values,array(':year' => $year));
4121
			}
4122
		}
4123
		if ($month != '') {
4124
			if ($globalDBdriver == 'mysql') {
4125
				$query .= " AND MONTH(spotter_output.date) = :month";
4126
				$query_values = array_merge($query_values,array(':month' => $month));
4127
			} else {
4128
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4129
				$query_values = array_merge($query_values,array(':month' => $month));
4130
			}
4131
		}
4132
		if ($day != '') {
4133
			if ($globalDBdriver == 'mysql') {
4134
				$query .= " AND DAY(spotter_output.date) = :day";
4135
				$query_values = array_merge($query_values,array(':day' => $day));
4136
			} else {
4137
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4138
				$query_values = array_merge($query_values,array(':day' => $day));
4139
			}
4140
		}
4141
		
4142
		$query .= " GROUP BY spotter_output.pilot_id,s.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
4143
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4144
      
4145
		
4146
		$sth = $this->db->prepare($query);
4147
		$sth->execute($query_values);
4148
		$airline_array = array();
4149
		$temp_array = array();
4150
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4151
		{
4152
			$temp_array['pilot_name'] = $row['pilot_name'];
4153
			$temp_array['pilot_id'] = $row['pilot_id'];
4154
			$temp_array['pilot_count'] = $row['pilot_count'];
4155
			$temp_array['format_source'] = $row['format_source'];
4156
			$airline_array[] = $temp_array;
4157
		}
4158
		return $airline_array;
4159
	}
4160
	
4161
	/**
4162
	* Gets all pilots that have flown over
4163
	*
4164
	* @return Array the pilots list
4165
	*
4166
	*/
4167
	public function countAllPilotsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '')
4168
	{
4169
		global $globalDBdriver;
4170
		$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
4171
		 			FROM spotter_output WHERE spotter_output.pilot_id <> '' ";
4172
                if ($olderthanmonths > 0) {
4173
            		if ($globalDBdriver == 'mysql') {
4174
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4175
			} else {
4176
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4177
			}
4178
		}
4179
                if ($sincedate != '') {
4180
            		if ($globalDBdriver == 'mysql') {
4181
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4182
			} else {
4183
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4184
			}
4185
		}
4186
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
4187
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4188
      
4189
		
4190
		$sth = $this->db->prepare($query);
4191
		$sth->execute();
4192
      
4193
		$airline_array = array();
4194
		$temp_array = array();
4195
        
4196
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4197
		{
4198
			$temp_array['pilot_name'] = $row['pilot_name'];
4199
			$temp_array['pilot_id'] = $row['pilot_id'];
4200
			$temp_array['pilot_count'] = $row['pilot_count'];
4201
			$temp_array['airline_icao'] = $row['airline_icao'];
4202
			$temp_array['format_source'] = $row['format_source'];
4203
			$airline_array[] = $temp_array;
4204
		}
4205
		return $airline_array;
4206
	}
4207
	
4208
	 /**
4209
	* Gets all owner that have flown over
4210
	*
4211
	* @return Array the pilots list
4212
	*
4213
	*/
4214
	public function countAllOwners($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
4215
	{
4216
		global $globalDBdriver;
4217
		$filter_query = $this->getFilter($filters,true,true);
4218
		$query  = "SELECT DISTINCT spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
4219
					FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL";
4220
                if ($olderthanmonths > 0) {
4221
            		if ($globalDBdriver == 'mysql') {
4222
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4223
			} else {
4224
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4225
			}
4226
		}
4227
                if ($sincedate != '') {
4228
            		if ($globalDBdriver == 'mysql') {
4229
				$query .= " AND spotter_output.date > '".$sincedate."' ";
4230
			} else {
4231
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4232
			}
4233
		}
4234
		$query_values = array();
4235
		if ($year != '') {
4236
			if ($globalDBdriver == 'mysql') {
4237
				$query .= " AND YEAR(spotter_output.date) = :year";
4238
				$query_values = array_merge($query_values,array(':year' => $year));
4239
			} else {
4240
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4241
				$query_values = array_merge($query_values,array(':year' => $year));
4242
			}
4243
		}
4244
		if ($month != '') {
4245
			if ($globalDBdriver == 'mysql') {
4246
				$query .= " AND MONTH(spotter_output.date) = :month";
4247
				$query_values = array_merge($query_values,array(':month' => $month));
4248
			} else {
4249
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4250
				$query_values = array_merge($query_values,array(':month' => $month));
4251
			}
4252
		}
4253
		if ($day != '') {
4254
			if ($globalDBdriver == 'mysql') {
4255
				$query .= " AND DAY(spotter_output.date) = :day";
4256
				$query_values = array_merge($query_values,array(':day' => $day));
4257
			} else {
4258
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4259
				$query_values = array_merge($query_values,array(':day' => $day));
4260
			}
4261
		}
4262
		$query .= " GROUP BY spotter_output.owner_name ORDER BY owner_count DESC";
4263
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4264
		
4265
		$sth = $this->db->prepare($query);
4266
		$sth->execute($query_values);
4267
		$airline_array = array();
4268
		$temp_array = array();
4269
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4270
		{
4271
			$temp_array['owner_name'] = $row['owner_name'];
4272
			$temp_array['owner_count'] = $row['owner_count'];
4273
			$airline_array[] = $temp_array;
4274
		}
4275
		return $airline_array;
4276
	}
4277
	
4278
	 /**
4279
	* Gets all owner that have flown over
4280
	*
4281
	* @return Array the pilots list
4282
	*
4283
	*/
4284
	public function countAllOwnersByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
4285
	{
4286
		global $globalDBdriver;
4287
		$filter_query = $this->getFilter($filters,true,true);
4288
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
4289
		 			FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL ";
4290
                if ($olderthanmonths > 0) {
4291
            		if ($globalDBdriver == 'mysql') {
4292
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4293
			} else {
4294
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4295
			}
4296
		}
4297
                if ($sincedate != '') {
4298
            		if ($globalDBdriver == 'mysql') {
4299
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4300
			} else {
4301
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4302
			}
4303
		}
4304
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.owner_name ORDER BY owner_count DESC";
4305
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4306
      
4307
		
4308
		$sth = $this->db->prepare($query);
4309
		$sth->execute();
4310
      
4311
		$airline_array = array();
4312
		$temp_array = array();
4313
        
4314
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4315
		{
4316
			$temp_array['owner_name'] = $row['owner_name'];
4317
			$temp_array['owner_count'] = $row['owner_count'];
4318
			$temp_array['airline_icao'] = $row['airline_icao'];
4319
			$airline_array[] = $temp_array;
4320
		}
4321
		return $airline_array;
4322
	}
4323
4324
	/**
4325
	* Gets all airlines that have flown over by aircraft
4326
	*
4327
	* @return Array the airline list
4328
	*
4329
	*/
4330
	public function countAllAirlinesByAircraft($aircraft_icao,$filters = array())
4331
	{
4332
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4333
		$filter_query = $this->getFilter($filters,true,true);
4334
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4335
		 	    FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
4336
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
4337
			    ORDER BY airline_count DESC";
4338
      
4339
		
4340
		$sth = $this->db->prepare($query);
4341
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4342
      
4343
		$airline_array = array();
4344
		$temp_array = array();
4345
        
4346
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4347
		{
4348
			$temp_array['airline_name'] = $row['airline_name'];
4349
			$temp_array['airline_icao'] = $row['airline_icao'];
4350
			$temp_array['airline_count'] = $row['airline_count'];
4351
			$temp_array['airline_country'] = $row['airline_country'];
4352
4353
			$airline_array[] = $temp_array;
4354
		}
4355
4356
		return $airline_array;
4357
	}
4358
4359
4360
	/**
4361
	* Gets all airline countries that have flown over by aircraft
4362
	*
4363
	* @return Array the airline country list
4364
	*
4365
	*/
4366
	public function countAllAirlineCountriesByAircraft($aircraft_icao,$filters = array())
4367
	{
4368
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4369
		$filter_query = $this->getFilter($filters,true,true);
4370
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count, countries.iso3 AS airline_country_iso3 
4371
			FROM spotter_output, countries ".$filter_query." countries.name = spotter_output.airline_country AND spotter_output.airline_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
4372
			GROUP BY spotter_output.airline_country, countries.iso3
4373
			ORDER BY airline_country_count DESC
4374
			LIMIT 10 OFFSET 0";
4375
      
4376
		
4377
		$sth = $this->db->prepare($query);
4378
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4379
      
4380
		$airline_country_array = array();
4381
		$temp_array = array();
4382
        
4383
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4384
		{
4385
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4386
			$temp_array['airline_country'] = $row['airline_country'];
4387
			$temp_array['airline_country_iso3'] = $row['airline_country_iso3'];
4388
 
4389
			$airline_country_array[] = $temp_array;
4390
		}
4391
		return $airline_country_array;
4392
	}
4393
4394
4395
	
4396
	
4397
	/**
4398
	* Gets all airlines that have flown over by airport
4399
	*
4400
	* @return Array the airline list
4401
	*
4402
	*/
4403
	public function countAllAirlinesByAirport($airport_icao,$filters = array())
4404
	{
4405
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4406
		$filter_query = $this->getFilter($filters,true,true);
4407
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4408
		    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 ) 
4409
                    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country
4410
		    ORDER BY airline_count DESC";
4411
      
4412
		
4413
		$sth = $this->db->prepare($query);
4414
		$sth->execute(array(':airport_icao' => $airport_icao));
4415
      
4416
		$airline_array = array();
4417
		$temp_array = array();
4418
        
4419
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4420
		{
4421
			$temp_array['airline_name'] = $row['airline_name'];
4422
			$temp_array['airline_icao'] = $row['airline_icao'];
4423
			$temp_array['airline_count'] = $row['airline_count'];
4424
			$temp_array['airline_country'] = $row['airline_country'];
4425
4426
			$airline_array[] = $temp_array;
4427
		}
4428
		return $airline_array;
4429
	}
4430
4431
4432
	/**
4433
	* Gets all airline countries that have flown over by airport icao
4434
	*
4435
	* @return Array the airline country list
4436
	*
4437
	*/
4438
	public function countAllAirlineCountriesByAirport($airport_icao,$filters = array())
4439
	{
4440
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4441
		$filter_query = $this->getFilter($filters,true,true);
4442
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count, countries.iso3 AS airline_country_iso3 
4443
			FROM countries, spotter_output".$filter_query." countries.name = spotter_output.airline_country AND spotter_output.airline_country <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao )
4444
			GROUP BY spotter_output.airline_country, countries.iso3
4445
			ORDER BY airline_country_count DESC
4446
			LIMIT 10 OFFSET 0";
4447
4448
		
4449
		$sth = $this->db->prepare($query);
4450
		$sth->execute(array(':airport_icao' => $airport_icao));
4451
4452
		$airline_country_array = array();
4453
		$temp_array = array();
4454
        
4455
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4456
		{
4457
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4458
			$temp_array['airline_country'] = $row['airline_country'];
4459
			$temp_array['airline_country_iso3'] = $row['airline_country_iso3'];
4460
 
4461
			$airline_country_array[] = $temp_array;
4462
		}
4463
		return $airline_country_array;
4464
	}
4465
4466
4467
	/**
4468
	* Gets all airlines that have flown over by aircraft manufacturer
4469
	*
4470
	* @return Array the airline list
4471
	*
4472
	*/
4473
	public function countAllAirlinesByManufacturer($aircraft_manufacturer,$filters = array())
4474
	{
4475
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4476
		$filter_query = $this->getFilter($filters,true,true);
4477
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4478
		 			FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4479
					GROUP BY spotter_output.airline_name
4480
					ORDER BY airline_count DESC";
4481
 
4482
		$sth = $this->db->prepare($query);
4483
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4484
 
4485
		$airline_array = array();
4486
		$temp_array = array();
4487
        
4488
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4489
		{
4490
			$temp_array['airline_name'] = $row['airline_name'];
4491
			$temp_array['airline_icao'] = $row['airline_icao'];
4492
			$temp_array['airline_count'] = $row['airline_count'];
4493
			$temp_array['airline_country'] = $row['airline_country'];
4494
4495
			$airline_array[] = $temp_array;
4496
		}
4497
		return $airline_array;
4498
	}
4499
4500
4501
4502
	/**
4503
	* Gets all airline countries that have flown over by aircraft manufacturer
4504
	*
4505
	* @return Array the airline country list
4506
	*
4507
	*/
4508
	public function countAllAirlineCountriesByManufacturer($aircraft_manufacturer,$filters = array())
4509
	{
4510
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4511
		$filter_query = $this->getFilter($filters,true,true);
4512
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4513
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4514
					GROUP BY spotter_output.airline_country
4515
					ORDER BY airline_country_count DESC
4516
					LIMIT 10 OFFSET 0";
4517
      
4518
		
4519
		$sth = $this->db->prepare($query);
4520
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4521
4522
		$airline_country_array = array();
4523
		$temp_array = array();
4524
        
4525
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4526
		{
4527
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4528
			$temp_array['airline_country'] = $row['airline_country'];
4529
			$airline_country_array[] = $temp_array;
4530
		}
4531
		return $airline_country_array;
4532
	}
4533
4534
4535
	/**
4536
	* Gets all airlines that have flown over by date
4537
	*
4538
	* @return Array the airline list
4539
	*
4540
	*/
4541
	public function countAllAirlinesByDate($date,$filters = array())
4542
	{
4543
		global $globalTimezone, $globalDBdriver;
4544
		$filter_query = $this->getFilter($filters,true,true);
4545
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4546
		if ($globalTimezone != '') {
4547
			date_default_timezone_set($globalTimezone);
4548
			$datetime = new DateTime($date);
4549
			$offset = $datetime->format('P');
4550
		} else $offset = '+00:00';
4551
4552
		if ($globalDBdriver == 'mysql') {
4553
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4554
		 			FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4555
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country 
4556
					ORDER BY airline_count DESC";
4557
		} else {
4558
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4559
		 			FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4560
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country
4561
					ORDER BY airline_count DESC";
4562
		}
4563
		
4564
		$sth = $this->db->prepare($query);
4565
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4566
4567
		$airline_array = array();
4568
		$temp_array = array();
4569
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4570
		{
4571
			$temp_array['airline_name'] = $row['airline_name'];
4572
			$temp_array['airline_icao'] = $row['airline_icao'];
4573
			$temp_array['airline_count'] = $row['airline_count'];
4574
			$temp_array['airline_country'] = $row['airline_country'];
4575
 
4576
			$airline_array[] = $temp_array;
4577
		}
4578
4579
		return $airline_array;
4580
	}	
4581
	
4582
	
4583
	/**
4584
	* Gets all airline countries that have flown over by date
4585
	*
4586
	* @return Array the airline country list
4587
	*
4588
	*/
4589
	public function countAllAirlineCountriesByDate($date,$filters = array())
4590
	{
4591
		global $globalTimezone, $globalDBdriver;
4592
		$filter_query = $this->getFilter($filters,true,true);
4593
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4594
		if ($globalTimezone != '') {
4595
			date_default_timezone_set($globalTimezone);
4596
			$datetime = new DateTime($date);
4597
			$offset = $datetime->format('P');
4598
		} else $offset = '+00:00';
4599
		
4600
		if ($globalDBdriver == 'mysql') {
4601
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4602
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4603
					GROUP BY spotter_output.airline_country
4604
					ORDER BY airline_country_count DESC
4605
					LIMIT 10 OFFSET 0";
4606
		} else {
4607
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4608
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4609
					GROUP BY spotter_output.airline_country
4610
					ORDER BY airline_country_count DESC
4611
					LIMIT 10 OFFSET 0";
4612
		}
4613
4614
		$sth = $this->db->prepare($query);
4615
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4616
 
4617
		$airline_country_array = array();
4618
		$temp_array = array();
4619
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4620
		{
4621
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4622
			$temp_array['airline_country'] = $row['airline_country'];
4623
4624
			$airline_country_array[] = $temp_array;
4625
		}
4626
		return $airline_country_array;
4627
	}
4628
4629
4630
	/**
4631
	* Gets all airlines that have flown over by ident/callsign
4632
	*
4633
	* @return Array the airline list
4634
	*
4635
	*/
4636
	public function countAllAirlinesByIdent($ident,$filters = array())
4637
	{
4638
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
4639
		$filter_query = $this->getFilter($filters,true,true);
4640
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4641
		 		FROM spotter_output".$filter_query." spotter_output.ident = :ident  
4642
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4643
				ORDER BY airline_count DESC";
4644
      
4645
		
4646
		$sth = $this->db->prepare($query);
4647
		$sth->execute(array(':ident' => $ident));
4648
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4649
	}
4650
4651
	/**
4652
	* Gets all airlines by owner
4653
	*
4654
	* @return Array the airline list
4655
	*
4656
	*/
4657
	public function countAllAirlinesByOwner($owner,$filters = array())
4658
	{
4659
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
4660
		$filter_query = $this->getFilter($filters,true,true);
4661
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4662
		 		FROM spotter_output".$filter_query." spotter_output.owner_name = :owner  
4663
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4664
				ORDER BY airline_count DESC";
4665
      
4666
		
4667
		$sth = $this->db->prepare($query);
4668
		$sth->execute(array(':owner' => $owner));
4669
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4670
	}
4671
4672
	/**
4673
	* Gets flight duration by owner
4674
	*
4675
	* @return String Duration of all flights
4676
	*
4677
	*/
4678
	public function getFlightDurationByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
4679
	{
4680
		global $globalDBdriver;
4681
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
4682
		$filter_query = $this->getFilter($filters,true,true);
4683
		$query  = "SELECT SUM(last_seen - date) AS duration 
4684
				FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
4685
				AND last_seen > date";
4686
		$query_values = array();
4687
		if ($year != '') {
4688
			if ($globalDBdriver == 'mysql') {
4689
				$query .= " AND YEAR(spotter_output.date) = :year";
4690
				$query_values = array_merge($query_values,array(':year' => $year));
4691
			} else {
4692
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4693
				$query_values = array_merge($query_values,array(':year' => $year));
4694
			}
4695
		}
4696
		if ($month != '') {
4697
			if ($globalDBdriver == 'mysql') {
4698
				$query .= " AND MONTH(spotter_output.date) = :month";
4699
				$query_values = array_merge($query_values,array(':month' => $month));
4700
			} else {
4701
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4702
				$query_values = array_merge($query_values,array(':month' => $month));
4703
			}
4704
		}
4705
		if ($day != '') {
4706
			if ($globalDBdriver == 'mysql') {
4707
				$query .= " AND DAY(spotter_output.date) = :day";
4708
				$query_values = array_merge($query_values,array(':day' => $day));
4709
			} else {
4710
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4711
				$query_values = array_merge($query_values,array(':day' => $day));
4712
			}
4713
		}
4714
		$query_values = array_merge($query_values,array(':owner' => $owner));
4715
		$sth = $this->db->prepare($query);
4716
		$sth->execute($query_values);
4717
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4718
		if (is_numeric($result[0]['duration'])) return gmdate('H:i:s',$result[0]['duration']);
4719
		elseif ($result[0]['duration'] == '') return 0;
4720
		else return $result[0]['duration'];
4721
	}
4722
4723
	/**
4724
	* Count flights by owner
4725
	*
4726
	* @return String Duration of all flights
4727
	*
4728
	*/
4729
	public function countFlightsByOwner($owner,$filters = array())
4730
	{
4731
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
4732
		$filter_query = $this->getFilter($filters,true,true);
4733
		$query  = "SELECT COUNT(*) AS nb 
4734
				FROM spotter_output".$filter_query." spotter_output.owner_name = :owner";
4735
		$query_values = array();
4736
		$query_values = array_merge($query_values,array(':owner' => $owner));
4737
		$sth = $this->db->prepare($query);
4738
		$sth->execute($query_values);
4739
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4740
		return $result[0]['nb'];
4741
	}
4742
4743
	/**
4744
	* Count flights by pilot
4745
	*
4746
	* @return String Duration of all flights
4747
	*
4748
	*/
4749
	public function countFlightsByPilot($pilot,$filters = array())
4750
	{
4751
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
4752
		$filter_query = $this->getFilter($filters,true,true);
4753
		$query  = "SELECT COUNT(*) AS nb 
4754
				FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilod_id = :pilot)";
4755
		$query_values = array();
4756
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
4757
		$sth = $this->db->prepare($query);
4758
		$sth->execute($query_values);
4759
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4760
		return $result[0]['nb'];
4761
	}
4762
4763
	/**
4764
	* Gets flight duration by pilot
4765
	*
4766
	* @return String Duration of all flights
4767
	*
4768
	*/
4769
	public function getFlightDurationByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
4770
	{
4771
		global $globalDBdriver;
4772
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
4773
		$filter_query = $this->getFilter($filters,true,true);
4774
		$query  = "SELECT SUM(last_seen - date) AS duration 
4775
		 		FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
4776
		 		AND last_seen > date";
4777
		$query_values = array();
4778
		if ($year != '') {
4779
			if ($globalDBdriver == 'mysql') {
4780
				$query .= " AND YEAR(spotter_output.date) = :year";
4781
				$query_values = array_merge($query_values,array(':year' => $year));
4782
			} else {
4783
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4784
				$query_values = array_merge($query_values,array(':year' => $year));
4785
			}
4786
		}
4787
		if ($month != '') {
4788
			if ($globalDBdriver == 'mysql') {
4789
				$query .= " AND MONTH(spotter_output.date) = :month";
4790
				$query_values = array_merge($query_values,array(':month' => $month));
4791
			} else {
4792
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4793
				$query_values = array_merge($query_values,array(':month' => $month));
4794
			}
4795
		}
4796
		if ($day != '') {
4797
			if ($globalDBdriver == 'mysql') {
4798
				$query .= " AND DAY(spotter_output.date) = :day";
4799
				$query_values = array_merge($query_values,array(':day' => $day));
4800
			} else {
4801
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4802
				$query_values = array_merge($query_values,array(':day' => $day));
4803
			}
4804
		}
4805
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
4806
		$sth = $this->db->prepare($query);
4807
		$sth->execute($query_values);
4808
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4809
		if (is_int($result[0]['duration'])) return gmdate('H:i:s',$result[0]['duration']);
4810
		else return $result[0]['duration'];
4811
	}
4812
4813
	/**
4814
	* Gets all airlines used by pilot
4815
	*
4816
	* @return Array the airline list
4817
	*
4818
	*/
4819
	public function countAllAirlinesByPilot($pilot,$filters = array())
4820
	{
4821
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
4822
		$filter_query = $this->getFilter($filters,true,true);
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.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
4825
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4826
				ORDER BY airline_count DESC";
4827
      
4828
		
4829
		$sth = $this->db->prepare($query);
4830
		$sth->execute(array(':pilot' => $pilot));
4831
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4832
	}
4833
4834
	/**
4835
	* Gets all airlines that have flown over by route
4836
	*
4837
	* @return Array the airline list
4838
	*
4839
	*/
4840
	public function countAllAirlinesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
4841
	{
4842
		$filter_query = $this->getFilter($filters,true,true);
4843
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4844
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4845
4846
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4847
		 			FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
4848
					GROUP BY spotter_output.airline_name
4849
					ORDER BY airline_count DESC";
4850
      
4851
		
4852
		$sth = $this->db->prepare($query);
4853
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4854
      
4855
		$airline_array = array();
4856
		$temp_array = array();
4857
        
4858
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4859
		{
4860
			$temp_array['airline_name'] = $row['airline_name'];
4861
			$temp_array['airline_icao'] = $row['airline_icao'];
4862
			$temp_array['airline_count'] = $row['airline_count'];
4863
			$temp_array['airline_country'] = $row['airline_country'];
4864
4865
			$airline_array[] = $temp_array;
4866
		}
4867
		return $airline_array;
4868
	}
4869
4870
	/**
4871
	* Gets all airline countries that have flown over by route
4872
	*
4873
	* @return Array the airline country list
4874
	*
4875
	*/
4876
	public function countAllAirlineCountriesByRoute($departure_airport_icao, $arrival_airport_icao,$filters= array())
4877
	{
4878
		$filter_query = $this->getFilter($filters,true,true);
4879
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4880
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4881
      
4882
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4883
		 		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) 
4884
				GROUP BY spotter_output.airline_country
4885
				ORDER BY airline_country_count DESC
4886
				LIMIT 10 OFFSET 0";
4887
      
4888
		
4889
		$sth = $this->db->prepare($query);
4890
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4891
      
4892
		$airline_country_array = array();
4893
		$temp_array = array();
4894
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4895
		{
4896
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4897
			$temp_array['airline_country'] = $row['airline_country'];
4898
4899
			$airline_country_array[] = $temp_array;
4900
		}
4901
4902
		return $airline_country_array;
4903
	}
4904
4905
4906
	/**
4907
	* Gets all airlines that have flown over by country
4908
	*
4909
	* @return Array the airline list
4910
	*
4911
	*/
4912
	public function countAllAirlinesByCountry($country,$filters = array())
4913
	{
4914
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4915
		$filter_query = $this->getFilter($filters,true,true);
4916
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4917
		 	    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
4918
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
4919
			    ORDER BY airline_count DESC";
4920
      
4921
		
4922
		$sth = $this->db->prepare($query);
4923
		$sth->execute(array(':country' => $country));
4924
4925
		$airline_array = array();
4926
		$temp_array = array();
4927
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4928
		{
4929
			$temp_array['airline_name'] = $row['airline_name'];
4930
			$temp_array['airline_icao'] = $row['airline_icao'];
4931
			$temp_array['airline_count'] = $row['airline_count'];
4932
			$temp_array['airline_country'] = $row['airline_country'];
4933
 
4934
			$airline_array[] = $temp_array;
4935
		}
4936
		return $airline_array;
4937
	}
4938
4939
4940
	/**
4941
	* Gets all airline countries that have flown over by country
4942
	*
4943
	* @return Array the airline country list
4944
	*
4945
	*/
4946
	public function countAllAirlineCountriesByCountry($country,$filters = array())
4947
	{
4948
		$filter_query = $this->getFilter($filters,true,true);
4949
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4950
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count, countries.iso3 AS airline_country_iso3
4951
			FROM countries,spotter_output".$filter_query." countries.name = spotter_output.airline_country AND spotter_output.airline_country <> '' AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country) OR spotter_output.airline_country = :country) 
4952
			GROUP BY spotter_output.airline_country, countries.iso3
4953
			ORDER BY airline_country_count DESC
4954
			LIMIT 10 OFFSET 0";
4955
		
4956
		$sth = $this->db->prepare($query);
4957
		$sth->execute(array(':country' => $country));
4958
4959
		$airline_country_array = array();
4960
		$temp_array = array();
4961
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4962
		{
4963
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4964
			$temp_array['airline_country'] = $row['airline_country'];
4965
			$temp_array['airline_country_iso3'] = $row['airline_country_iso3'];
4966
			$airline_country_array[] = $temp_array;
4967
		}
4968
		return $airline_country_array;
4969
	}
4970
4971
4972
	/**
4973
	* Gets all airlines countries
4974
	*
4975
	* @return Array the airline country list
4976
	*
4977
	*/
4978
	public function countAllAirlineCountries($limit = true, $filters = array(), $year = '', $month = '', $day = '')
4979
	{
4980
		global $globalDBdriver;
4981
		$filter_query = $this->getFilter($filters,true,true);
4982
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count, countries.iso3 AS airline_country_iso3
4983
		 			FROM countries, spotter_output".$filter_query." countries.name = spotter_output.airline_country AND spotter_output.airline_country <> '' AND spotter_output.airline_country <> 'NA'";
4984
		$query_values = array();
4985
		if ($year != '') {
4986
			if ($globalDBdriver == 'mysql') {
4987
				$query .= " AND YEAR(spotter_output.date) = :year";
4988
				$query_values = array_merge($query_values,array(':year' => $year));
4989
			} else {
4990
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4991
				$query_values = array_merge($query_values,array(':year' => $year));
4992
			}
4993
		}
4994
		if ($month != '') {
4995
			if ($globalDBdriver == 'mysql') {
4996
				$query .= " AND MONTH(spotter_output.date) = :month";
4997
				$query_values = array_merge($query_values,array(':month' => $month));
4998
			} else {
4999
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5000
				$query_values = array_merge($query_values,array(':month' => $month));
5001
			}
5002
		}
5003
		if ($day != '') {
5004
			if ($globalDBdriver == 'mysql') {
5005
				$query .= " AND DAY(spotter_output.date) = :day";
5006
				$query_values = array_merge($query_values,array(':day' => $day));
5007
			} else {
5008
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5009
				$query_values = array_merge($query_values,array(':day' => $day));
5010
			}
5011
		}
5012
		$query .= " GROUP BY spotter_output.airline_country, countries.iso3
5013
					ORDER BY airline_country_count DESC";
5014
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5015
      
5016
		$sth = $this->db->prepare($query);
5017
		$sth->execute($query_values);
5018
5019
		$airline_array = array();
5020
		$temp_array = array();
5021
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5022
		{
5023
			$temp_array['airline_country_count'] = $row['airline_country_count'];
5024
			$temp_array['airline_country'] = $row['airline_country'];
5025
			$temp_array['airline_country_iso3'] = $row['airline_country_iso3'];
5026
5027
			$airline_array[] = $temp_array;
5028
		}
5029
		return $airline_array;
5030
	}
5031
5032
	/**
5033
	* Gets all number of flight over countries
5034
	*
5035
	* @return Array the airline country list
5036
	*
5037
	*/
5038
	public function countAllFlightOverCountries($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
5039
	{
5040
		global $globalDBdriver;
5041
		//$filter_query = $this->getFilter($filters,true,true);
5042
		$Connection= new Connection($this->db);
5043
		if (!$Connection->tableExists('countries')) return array();
5044
		/*
5045
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
5046
					FROM countries c, spotter_output s
5047
					WHERE Within(GeomFromText(CONCAT('POINT(',s.longitude,' ',s.latitude,')')), ogc_geom) ";
5048
		*/
5049
/*
5050
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
5051
					FROM countries c, spotter_live s
5052
					WHERE c.iso2 = s.over_country ";
5053
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb FROM countries c INNER JOIN (SELECT DISTINCT flightaware_id,over_country FROM spottrer_live) l ON c.iso2 = l.over_country ";
5054
*/
5055
		require_once('class.SpotterLive.php');
5056
		$SpotterLive = new SpotterLive();
5057
		$filter_query = $SpotterLive->getFilter($filters,true,true);
5058
		$filter_query .= ' over_country IS NOT NULL';
5059
                if ($olderthanmonths > 0) {
5060
			if ($globalDBdriver == 'mysql') {
5061
				$filter_query .= ' AND spotter_live.date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5062
			} else {
5063
				$filter_query .= " AND spotter_live.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5064
			}
5065
		}
5066
                if ($sincedate != '') {
5067
            		if ($globalDBdriver == 'mysql') {
5068
				$filter_query .= " AND spotter_live.date > '".$sincedate."' ";
5069
			} else {
5070
				$filter_query .= " AND spotter_live.date > CAST('".$sincedate."' AS TIMESTAMP)";
5071
			}
5072
		}
5073
		$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 ";
5074
		$query .= "GROUP BY c.name,c.iso3,c.iso2 ORDER BY nb DESC";
5075
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5076
      
5077
		
5078
		$sth = $this->db->prepare($query);
5079
		$sth->execute();
5080
 
5081
		$flight_array = array();
5082
		$temp_array = array();
5083
        
5084
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5085
		{
5086
			$temp_array['flight_count'] = $row['nb'];
5087
			$temp_array['flight_country'] = $row['name'];
5088
			$temp_array['flight_country_iso3'] = $row['iso3'];
5089
			$temp_array['flight_country_iso2'] = $row['iso2'];
5090
			$flight_array[] = $temp_array;
5091
		}
5092
		return $flight_array;
5093
	}
5094
	
5095
	
5096
	/**
5097
	* Gets all aircraft types that have flown over
5098
	*
5099
	* @return Array the aircraft list
5100
	*
5101
	*/
5102
	public function countAllAircraftTypes($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
5103
	{
5104
		global $globalDBdriver;
5105
		$filter_query = $this->getFilter($filters,true,true);
5106
		$query  = "SELECT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
5107
		    FROM spotter_output ".$filter_query." spotter_output.aircraft_name  <> '' AND spotter_output.aircraft_icao  <> ''";
5108
		if ($olderthanmonths > 0) {
5109
			if ($globalDBdriver == 'mysql') {
5110
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5111
			} else {
5112
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5113
			}
5114
		}
5115
		if ($sincedate != '') {
5116
			if ($globalDBdriver == 'mysql') {
5117
				$query .= " AND spotter_output.date > '".$sincedate."'";
5118
			} else {
5119
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5120
			}
5121
		}
5122
		$query_values = array();
5123
		if ($year != '') {
5124
			if ($globalDBdriver == 'mysql') {
5125
				$query .= " AND YEAR(spotter_output.date) = :year";
5126
				$query_values = array_merge($query_values,array(':year' => $year));
5127
			} else {
5128
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5129
				$query_values = array_merge($query_values,array(':year' => $year));
5130
			}
5131
		}
5132
		if ($month != '') {
5133
			if ($globalDBdriver == 'mysql') {
5134
				$query .= " AND MONTH(spotter_output.date) = :month";
5135
				$query_values = array_merge($query_values,array(':month' => $month));
5136
			} else {
5137
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5138
				$query_values = array_merge($query_values,array(':month' => $month));
5139
			}
5140
		}
5141
		if ($day != '') {
5142
			if ($globalDBdriver == 'mysql') {
5143
				$query .= " AND DAY(spotter_output.date) = :day";
5144
				$query_values = array_merge($query_values,array(':day' => $day));
5145
			} else {
5146
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5147
				$query_values = array_merge($query_values,array(':day' => $day));
5148
			}
5149
		}
5150
5151
		$query .= " GROUP BY spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer ORDER BY aircraft_icao_count DESC";
5152
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5153
 
5154
		$sth = $this->db->prepare($query);
5155
		$sth->execute($query_values);
5156
5157
		$aircraft_array = array();
5158
		$temp_array = array();
5159
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5160
		{
5161
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5162
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5163
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5164
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5165
			$aircraft_array[] = $temp_array;
5166
		}
5167
		return $aircraft_array;
5168
	}
5169
5170
	/**
5171
	* Gets all aircraft types that have flown over by airline
5172
	*
5173
	* @return Array the aircraft list
5174
	*
5175
	*/
5176
	public function countAllAircraftTypesByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '',$month = '', $day = '')
5177
	{
5178
		global $globalDBdriver;
5179
		$filter_query = $this->getFilter($filters,true,true);
5180
		$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 
5181
		    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'";
5182
		if ($olderthanmonths > 0) {
5183
			if ($globalDBdriver == 'mysql') {
5184
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5185
			} else {
5186
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5187
			}
5188
		}
5189
		if ($sincedate != '') {
5190
			if ($globalDBdriver == 'mysql') {
5191
				$query .= " AND spotter_output.date > '".$sincedate."'";
5192
			} else {
5193
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5194
			}
5195
		}
5196
		$query_values = array();
5197
		if ($year != '') {
5198
			if ($globalDBdriver == 'mysql') {
5199
				$query .= " AND YEAR(spotter_output.date) = :year";
5200
				$query_values = array_merge($query_values,array(':year' => $year));
5201
			} else {
5202
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5203
				$query_values = array_merge($query_values,array(':year' => $year));
5204
			}
5205
		}
5206
		if ($month != '') {
5207
			if ($globalDBdriver == 'mysql') {
5208
				$query .= " AND MONTH(spotter_output.date) = :month";
5209
				$query_values = array_merge($query_values,array(':month' => $month));
5210
			} else {
5211
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5212
				$query_values = array_merge($query_values,array(':month' => $month));
5213
			}
5214
		}
5215
		if ($day != '') {
5216
			if ($globalDBdriver == 'mysql') {
5217
				$query .= " AND DAY(spotter_output.date) = :day";
5218
				$query_values = array_merge($query_values,array(':day' => $day));
5219
			} else {
5220
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5221
				$query_values = array_merge($query_values,array(':day' => $day));
5222
			}
5223
		}
5224
5225
		$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";
5226
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5227
 
5228
		$sth = $this->db->prepare($query);
5229
		$sth->execute($query_values);
5230
5231
		$aircraft_array = array();
5232
		$temp_array = array();
5233
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5234
		{
5235
			$temp_array['airline_icao'] = $row['airline_icao'];
5236
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5237
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5238
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5239
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5240
			$aircraft_array[] = $temp_array;
5241
		}
5242
		return $aircraft_array;
5243
	}
5244
5245
	/**
5246
	* Gets all aircraft types that have flown over by months
5247
	*
5248
	* @return Array the aircraft list
5249
	*
5250
	*/
5251
	public function countAllAircraftTypesByMonths($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
5252
	{
5253
		global $globalDBdriver;
5254
		$filter_query = $this->getFilter($filters,true,true);
5255
		$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 
5256
		    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' ";
5257
		if ($olderthanmonths > 0) {
5258
			if ($globalDBdriver == 'mysql') {
5259
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5260
			} else {
5261
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5262
			}
5263
		}
5264
		if ($sincedate != '') {
5265
			if ($globalDBdriver == 'mysql') {
5266
				$query .= "AND spotter_output.date > '".$sincedate."' ";
5267
			} else {
5268
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5269
			}
5270
		}
5271
5272
		$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";
5273
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5274
 
5275
		$sth = $this->db->prepare($query);
5276
		$sth->execute();
5277
5278
		$aircraft_array = array();
5279
		$temp_array = array();
5280
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5281
		{
5282
			//$temp_array['airline_icao'] = $row['airline_icao'];
5283
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5284
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5285
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5286
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5287
			$aircraft_array[] = $temp_array;
5288
		}
5289
		return $aircraft_array;
5290
	}
5291
5292
5293
	/**
5294
	* Gets all aircraft registration that have flown over by aircaft icao
5295
	*
5296
	* @return Array the aircraft list
5297
	*
5298
	*/
5299
	public function countAllAircraftRegistrationByAircraft($aircraft_icao,$filters = array())
5300
	{
5301
		$Image = new Image($this->db);
5302
		$filter_query = $this->getFilter($filters,true,true);
5303
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
5304
5305
		$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  
5306
				FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_icao = :aircraft_icao  
5307
				GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name  
5308
				ORDER BY registration_count DESC";
5309
5310
		$sth = $this->db->prepare($query);
5311
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
5312
5313
		$aircraft_array = array();
5314
		$temp_array = array();
5315
        
5316
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5317
		{
5318
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5319
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5320
			$temp_array['registration'] = $row['registration'];
5321
			$temp_array['airline_name'] = $row['airline_name'];
5322
			$temp_array['image_thumbnail'] = "";
5323
			if($row['registration'] != "")
5324
			{
5325
				$image_array = $Image->getSpotterImage($row['registration']);
5326
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5327
			}
5328
			$temp_array['registration_count'] = $row['registration_count'];
5329
5330
			$aircraft_array[] = $temp_array;
5331
		}
5332
		return $aircraft_array;
5333
	}
5334
5335
5336
	/**
5337
	* Gets all aircraft types that have flown over by airline icao
5338
	*
5339
	* @return Array the aircraft list
5340
	*
5341
	*/
5342
	public function countAllAircraftTypesByAirline($airline_icao,$filters = array())
5343
	{
5344
		$filter_query = $this->getFilter($filters,true,true);
5345
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5346
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5347
			    FROM spotter_output".$filter_query." spotter_output.aircraft_icao <> '' AND spotter_output.airline_icao = :airline_icao 
5348
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5349
			    ORDER BY aircraft_icao_count DESC";
5350
5351
		$sth = $this->db->prepare($query);
5352
		$sth->execute(array(':airline_icao' => $airline_icao));
5353
5354
		$aircraft_array = array();
5355
		$temp_array = array();
5356
5357
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5358
		{
5359
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5360
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5361
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5362
5363
			$aircraft_array[] = $temp_array;
5364
		}
5365
		return $aircraft_array;
5366
	}
5367
5368
5369
	/**
5370
	* Gets all aircraft registration that have flown over by airline icao
5371
	*
5372
	* @return Array the aircraft list
5373
	*
5374
	*/
5375
	public function countAllAircraftRegistrationByAirline($airline_icao,$filters = array())
5376
	{
5377
		$filter_query = $this->getFilter($filters,true,true);
5378
		$Image = new Image($this->db);
5379
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5380
5381
		$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 
5382
			    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.airline_icao = :airline_icao 
5383
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
5384
			    ORDER BY registration_count DESC";
5385
5386
		$sth = $this->db->prepare($query);
5387
		$sth->execute(array(':airline_icao' => $airline_icao));
5388
5389
		$aircraft_array = array();
5390
		$temp_array = array();
5391
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5392
		{
5393
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5394
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5395
			$temp_array['registration'] = $row['registration'];
5396
			$temp_array['airline_name'] = $row['airline_name'];
5397
			$temp_array['image_thumbnail'] = "";
5398
			if($row['registration'] != "")
5399
			{
5400
				$image_array = $Image->getSpotterImage($row['registration']);
5401
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5402
			}
5403
			$temp_array['registration_count'] = $row['registration_count'];
5404
5405
			$aircraft_array[] = $temp_array;
5406
		}
5407
		return $aircraft_array;
5408
	}
5409
5410
5411
	/**
5412
	* Gets all aircraft manufacturer that have flown over by airline icao
5413
	*
5414
	* @return Array the aircraft list
5415
	*
5416
	*/
5417
	public function countAllAircraftManufacturerByAirline($airline_icao,$filters = array())
5418
	{
5419
		$filter_query = $this->getFilter($filters,true,true);
5420
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5421
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5422
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.airline_icao = :airline_icao 
5423
				GROUP BY spotter_output.aircraft_manufacturer 
5424
				ORDER BY aircraft_manufacturer_count DESC";
5425
5426
		$sth = $this->db->prepare($query);
5427
		$sth->execute(array(':airline_icao' => $airline_icao));
5428
5429
		$aircraft_array = array();
5430
		$temp_array = array();
5431
5432
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5433
		{
5434
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5435
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5436
5437
			$aircraft_array[] = $temp_array;
5438
		}
5439
		return $aircraft_array;
5440
	}
5441
5442
5443
	/**
5444
	* Gets all aircraft types that have flown over by airline icao
5445
	*
5446
	* @return Array the aircraft list
5447
	*
5448
	*/
5449
	public function countAllAircraftTypesByAirport($airport_icao,$filters = array())
5450
	{
5451
		$filter_query = $this->getFilter($filters,true,true);
5452
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5453
5454
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5455
				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) 
5456
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5457
				ORDER BY aircraft_icao_count DESC";
5458
 
5459
		$sth = $this->db->prepare($query);
5460
		$sth->execute(array(':airport_icao' => $airport_icao));
5461
5462
		$aircraft_array = array();
5463
		$temp_array = array();
5464
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5465
		{
5466
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5467
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5468
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5469
5470
			$aircraft_array[] = $temp_array;
5471
		}
5472
		return $aircraft_array;
5473
	}
5474
5475
5476
	/**
5477
	* Gets all aircraft registration that have flown over by airport icao
5478
	*
5479
	* @return Array the aircraft list
5480
	*
5481
	*/
5482
	public function countAllAircraftRegistrationByAirport($airport_icao,$filters = array())
5483
	{
5484
		$filter_query = $this->getFilter($filters,true,true);
5485
		$Image = new Image($this->db);
5486
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5487
5488
		$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  
5489
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)   
5490
                    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5491
		    ORDER BY registration_count DESC";
5492
5493
		$sth = $this->db->prepare($query);
5494
		$sth->execute(array(':airport_icao' => $airport_icao));
5495
5496
		$aircraft_array = array();
5497
		$temp_array = array();
5498
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5499
		{
5500
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5501
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5502
			$temp_array['registration'] = $row['registration'];
5503
			$temp_array['airline_name'] = $row['airline_name'];
5504
			$temp_array['image_thumbnail'] = "";
5505
			if($row['registration'] != "")
5506
			{
5507
				$image_array = $Image->getSpotterImage($row['registration']);
5508
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5509
			}
5510
			$temp_array['registration_count'] = $row['registration_count'];
5511
			$aircraft_array[] = $temp_array;
5512
		}
5513
		return $aircraft_array;
5514
	}
5515
	
5516
	
5517
	/**
5518
	* Gets all aircraft manufacturer that have flown over by airport icao
5519
	*
5520
	* @return Array the aircraft list
5521
	*
5522
	*/
5523
	public function countAllAircraftManufacturerByAirport($airport_icao,$filters = array())
5524
	{
5525
		$filter_query = $this->getFilter($filters,true,true);
5526
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5527
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5528
                    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)  
5529
                    GROUP BY spotter_output.aircraft_manufacturer 
5530
					ORDER BY aircraft_manufacturer_count DESC";
5531
5532
		
5533
		$sth = $this->db->prepare($query);
5534
		$sth->execute(array(':airport_icao' => $airport_icao));
5535
5536
		$aircraft_array = array();
5537
		$temp_array = array();
5538
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5539
		{
5540
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5541
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5542
			$aircraft_array[] = $temp_array;
5543
		}
5544
		return $aircraft_array;
5545
	}
5546
5547
	/**
5548
	* Gets all aircraft types that have flown over by aircraft manufacturer
5549
	*
5550
	* @return Array the aircraft list
5551
	*
5552
	*/
5553
	public function countAllAircraftTypesByManufacturer($aircraft_manufacturer,$filters = array())
5554
	{
5555
		$filter_query = $this->getFilter($filters,true,true);
5556
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5557
5558
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5559
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
5560
                    GROUP BY spotter_output.aircraft_name 
5561
					ORDER BY aircraft_icao_count DESC";
5562
5563
		$sth = $this->db->prepare($query);
5564
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5565
		$aircraft_array = array();
5566
		$temp_array = array();
5567
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5568
		{
5569
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5570
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5571
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5572
			$aircraft_array[] = $temp_array;
5573
		}
5574
		return $aircraft_array;
5575
	}
5576
5577
5578
	/**
5579
	* Gets all aircraft registration that have flown over by aircaft manufacturer
5580
	*
5581
	* @return Array the aircraft list
5582
	*
5583
	*/
5584
	public function countAllAircraftRegistrationByManufacturer($aircraft_manufacturer, $filters = array())
5585
	{
5586
		$filter_query = $this->getFilter($filters,true,true);
5587
		$Image = new Image($this->db);
5588
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5589
5590
		$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   
5591
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
5592
                    GROUP BY spotter_output.registration 
5593
					ORDER BY registration_count DESC";
5594
5595
		
5596
		$sth = $this->db->prepare($query);
5597
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5598
		$aircraft_array = array();
5599
		$temp_array = array();
5600
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5601
		{
5602
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5603
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5604
			$temp_array['registration'] = $row['registration'];
5605
			$temp_array['airline_name'] = $row['airline_name'];
5606
			$temp_array['image_thumbnail'] = "";
5607
			if($row['registration'] != "")
5608
			{
5609
				$image_array = $Image->getSpotterImage($row['registration']);
5610
				$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5611
			}
5612
			$temp_array['registration_count'] = $row['registration_count'];
5613
			$aircraft_array[] = $temp_array;
5614
		}
5615
		return $aircraft_array;
5616
	}
5617
5618
	/**
5619
	* Gets all aircraft types that have flown over by date
5620
	*
5621
	* @return Array the aircraft list
5622
	*
5623
	*/
5624
	public function countAllAircraftTypesByDate($date,$filters = array())
5625
	{
5626
		global $globalTimezone, $globalDBdriver;
5627
		$filter_query = $this->getFilter($filters,true,true);
5628
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5629
		if ($globalTimezone != '') {
5630
			date_default_timezone_set($globalTimezone);
5631
			$datetime = new DateTime($date);
5632
			$offset = $datetime->format('P');
5633
		} else $offset = '+00:00';
5634
5635
		if ($globalDBdriver == 'mysql') {
5636
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5637
					FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
5638
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5639
					ORDER BY aircraft_icao_count DESC";
5640
		} else {
5641
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5642
					FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date
5643
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5644
					ORDER BY aircraft_icao_count DESC";
5645
		}
5646
		
5647
		$sth = $this->db->prepare($query);
5648
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5649
5650
		$aircraft_array = array();
5651
		$temp_array = array();
5652
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5653
		{
5654
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5655
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5656
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5657
5658
			$aircraft_array[] = $temp_array;
5659
		}
5660
		return $aircraft_array;
5661
	}
5662
5663
5664
	/**
5665
	* Gets all aircraft registration that have flown over by date
5666
	*
5667
	* @return Array the aircraft list
5668
	*
5669
	*/
5670
	public function countAllAircraftRegistrationByDate($date,$filters = array())
5671
	{
5672
		global $globalTimezone, $globalDBdriver;
5673
		$filter_query = $this->getFilter($filters,true,true);
5674
		$Image = new Image($this->db);
5675
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5676
		if ($globalTimezone != '') {
5677
			date_default_timezone_set($globalTimezone);
5678
			$datetime = new DateTime($date);
5679
			$offset = $datetime->format('P');
5680
		} else $offset = '+00:00';
5681
5682
		if ($globalDBdriver == 'mysql') {
5683
			$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 
5684
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5685
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5686
					ORDER BY registration_count DESC";
5687
		} else {
5688
			$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    
5689
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5690
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5691
					ORDER BY registration_count DESC";
5692
		}
5693
		
5694
		$sth = $this->db->prepare($query);
5695
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5696
5697
		$aircraft_array = array();
5698
		$temp_array = array();
5699
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5700
		{
5701
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5702
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5703
			$temp_array['registration'] = $row['registration'];
5704
			$temp_array['airline_name'] = $row['airline_name'];
5705
			$temp_array['image_thumbnail'] = "";
5706
			if($row['registration'] != "")
5707
			{
5708
				$image_array = $Image->getSpotterImage($row['registration']);
5709
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5710
			}
5711
			$temp_array['registration_count'] = $row['registration_count'];
5712
 
5713
			$aircraft_array[] = $temp_array;
5714
		}
5715
		return $aircraft_array;
5716
	}
5717
5718
5719
	/**
5720
	* Gets all aircraft manufacturer that have flown over by date
5721
	*
5722
	* @return Array the aircraft manufacturer list
5723
	*
5724
	*/
5725
	public function countAllAircraftManufacturerByDate($date,$filters = array())
5726
	{
5727
		global $globalTimezone, $globalDBdriver;
5728
		$filter_query = $this->getFilter($filters,true,true);
5729
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5730
		if ($globalTimezone != '') {
5731
			date_default_timezone_set($globalTimezone);
5732
			$datetime = new DateTime($date);
5733
			$offset = $datetime->format('P');
5734
		} else $offset = '+00:00';
5735
5736
		if ($globalDBdriver == 'mysql') {
5737
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5738
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5739
				GROUP BY spotter_output.aircraft_manufacturer 
5740
				ORDER BY aircraft_manufacturer_count DESC";
5741
		} else {
5742
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5743
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5744
				GROUP BY spotter_output.aircraft_manufacturer 
5745
				ORDER BY aircraft_manufacturer_count DESC";
5746
		}
5747
		
5748
		$sth = $this->db->prepare($query);
5749
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5750
5751
		$aircraft_array = array();
5752
		$temp_array = array();
5753
5754
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5755
		{
5756
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5757
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5758
5759
			$aircraft_array[] = $temp_array;
5760
		}
5761
		return $aircraft_array;
5762
	}
5763
5764
5765
	/**
5766
	* Gets all aircraft types that have flown over by ident/callsign
5767
	*
5768
	* @return Array the aircraft list
5769
	*
5770
	*/
5771
	public function countAllAircraftTypesByIdent($ident,$filters = array())
5772
	{
5773
		$filter_query = $this->getFilter($filters,true,true);
5774
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5775
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5776
				FROM spotter_output".$filter_query." spotter_output.ident = :ident 
5777
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao
5778
				ORDER BY aircraft_icao_count DESC";
5779
5780
		$sth = $this->db->prepare($query);
5781
		$sth->execute(array(':ident' => $ident));
5782
      
5783
		$aircraft_array = array();
5784
		$temp_array = array();
5785
5786
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5787
		{
5788
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5789
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5790
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5791
5792
			$aircraft_array[] = $temp_array;
5793
		}
5794
		return $aircraft_array;
5795
	}
5796
5797
	/**
5798
	* Gets all aircraft types that have flown over by pilot
5799
	*
5800
	* @return Array the aircraft list
5801
	*
5802
	*/
5803
	public function countAllAircraftTypesByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
5804
	{
5805
		global $globalDBdriver;
5806
		$filter_query = $this->getFilter($filters,true,true);
5807
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
5808
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5809
				FROM spotter_output".$filter_query." (spotter_output.pilot_id = :pilot OR spotter_output.pilot_name = :pilot)";
5810
		$query_values = array();
5811
		if ($year != '') {
5812
			if ($globalDBdriver == 'mysql') {
5813
				$query .= " AND YEAR(spotter_output.date) = :year";
5814
				$query_values = array_merge($query_values,array(':year' => $year));
5815
			} else {
5816
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5817
				$query_values = array_merge($query_values,array(':year' => $year));
5818
			}
5819
		}
5820
		if ($month != '') {
5821
			if ($globalDBdriver == 'mysql') {
5822
				$query .= " AND MONTH(spotter_output.date) = :month";
5823
				$query_values = array_merge($query_values,array(':month' => $month));
5824
			} else {
5825
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5826
				$query_values = array_merge($query_values,array(':month' => $month));
5827
			}
5828
		}
5829
		if ($day != '') {
5830
			if ($globalDBdriver == 'mysql') {
5831
				$query .= " AND DAY(spotter_output.date) = :day";
5832
				$query_values = array_merge($query_values,array(':day' => $day));
5833
			} else {
5834
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5835
				$query_values = array_merge($query_values,array(':day' => $day));
5836
			}
5837
		}
5838
5839
		$query .= " GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao
5840
				ORDER BY aircraft_icao_count DESC";
5841
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
5842
		$sth = $this->db->prepare($query);
5843
		$sth->execute($query_values);
5844
		return $sth->fetchAll(PDO::FETCH_ASSOC);
5845
	}
5846
5847
	/**
5848
	* Gets all aircraft types that have flown over by owner
5849
	*
5850
	* @return Array the aircraft list
5851
	*
5852
	*/
5853
	public function countAllAircraftTypesByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
5854
	{
5855
		global $globalDBdriver;
5856
		$filter_query = $this->getFilter($filters,true,true);
5857
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
5858
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
5859
				FROM spotter_output".$filter_query." spotter_output.owner_name = :owner";
5860
		$query_values = array();
5861
		if ($year != '') {
5862
			if ($globalDBdriver == 'mysql') {
5863
				$query .= " AND YEAR(spotter_output.date) = :year";
5864
				$query_values = array_merge($query_values,array(':year' => $year));
5865
			} else {
5866
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5867
				$query_values = array_merge($query_values,array(':year' => $year));
5868
			}
5869
		}
5870
		if ($month != '') {
5871
			if ($globalDBdriver == 'mysql') {
5872
				$query .= " AND MONTH(spotter_output.date) = :month";
5873
				$query_values = array_merge($query_values,array(':month' => $month));
5874
			} else {
5875
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5876
				$query_values = array_merge($query_values,array(':month' => $month));
5877
			}
5878
		}
5879
		if ($day != '') {
5880
			if ($globalDBdriver == 'mysql') {
5881
				$query .= " AND DAY(spotter_output.date) = :day";
5882
				$query_values = array_merge($query_values,array(':day' => $day));
5883
			} else {
5884
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5885
				$query_values = array_merge($query_values,array(':day' => $day));
5886
			}
5887
		}
5888
		$query .= " GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.aircraft_icao
5889
				ORDER BY aircraft_icao_count DESC";
5890
		$query_values = array_merge($query_values,array(':owner' => $owner));
5891
		$sth = $this->db->prepare($query);
5892
		$sth->execute($query_values);
5893
		return $sth->fetchAll(PDO::FETCH_ASSOC);
5894
	}
5895
5896
	/**
5897
	* Gets all aircraft registration that have flown over by ident/callsign
5898
	*
5899
	* @return Array the aircraft list
5900
	*
5901
	*/
5902
	public function countAllAircraftRegistrationByIdent($ident,$filters = array())
5903
	{
5904
		$filter_query = $this->getFilter($filters,true,true);
5905
		$Image = new Image($this->db);
5906
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5907
5908
		$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  
5909
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.ident = :ident   
5910
                    GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
5911
		    ORDER BY registration_count DESC";
5912
5913
		
5914
		$sth = $this->db->prepare($query);
5915
		$sth->execute(array(':ident' => $ident));
5916
      
5917
		$aircraft_array = array();
5918
		$temp_array = array();
5919
        
5920
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5921
		{
5922
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5923
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5924
			$temp_array['registration'] = $row['registration'];
5925
			$temp_array['airline_name'] = $row['airline_name'];
5926
			$temp_array['image_thumbnail'] = "";
5927
			if($row['registration'] != "")
5928
			{
5929
				$image_array = $Image->getSpotterImage($row['registration']);
5930
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5931
				else $temp_array['image_thumbnail'] = '';
5932
			}
5933
			$temp_array['registration_count'] = $row['registration_count'];
5934
			$aircraft_array[] = $temp_array;
5935
		}
5936
		return $aircraft_array;
5937
	}
5938
5939
	/**
5940
	* Gets all aircraft registration that have flown over by owner
5941
	*
5942
	* @return Array the aircraft list
5943
	*
5944
	*/
5945
	public function countAllAircraftRegistrationByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
5946
	{
5947
		global $globalDBdriver;
5948
		$filter_query = $this->getFilter($filters,true,true);
5949
		$Image = new Image($this->db);
5950
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
5951
5952
		$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  
5953
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.owner_name = :owner";
5954
		$query_values = array();
5955
		if ($year != '') {
5956
			if ($globalDBdriver == 'mysql') {
5957
				$query .= " AND YEAR(spotter_output.date) = :year";
5958
				$query_values = array_merge($query_values,array(':year' => $year));
5959
			} else {
5960
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5961
				$query_values = array_merge($query_values,array(':year' => $year));
5962
			}
5963
		}
5964
		if ($month != '') {
5965
			if ($globalDBdriver == 'mysql') {
5966
				$query .= " AND MONTH(spotter_output.date) = :month";
5967
				$query_values = array_merge($query_values,array(':month' => $month));
5968
			} else {
5969
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5970
				$query_values = array_merge($query_values,array(':month' => $month));
5971
			}
5972
		}
5973
		if ($day != '') {
5974
			if ($globalDBdriver == 'mysql') {
5975
				$query .= " AND DAY(spotter_output.date) = :day";
5976
				$query_values = array_merge($query_values,array(':day' => $day));
5977
			} else {
5978
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5979
				$query_values = array_merge($query_values,array(':day' => $day));
5980
			}
5981
		}
5982
		$query_values = array_merge($query_values,array(':owner' => $owner));
5983
5984
		$query .= " GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.airline_name
5985
		    ORDER BY registration_count DESC";
5986
5987
		
5988
		$sth = $this->db->prepare($query);
5989
		$sth->execute($query_values);
5990
      
5991
		$aircraft_array = array();
5992
		$temp_array = array();
5993
        
5994
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5995
		{
5996
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5997
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5998
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5999
			$temp_array['registration'] = $row['registration'];
6000
			$temp_array['airline_name'] = $row['airline_name'];
6001
			$temp_array['image_thumbnail'] = "";
6002
			if($row['registration'] != "")
6003
			{
6004
				$image_array = $Image->getSpotterImage($row['registration']);
6005
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6006
				else $temp_array['image_thumbnail'] = '';
6007
			}
6008
			$temp_array['registration_count'] = $row['registration_count'];
6009
			$aircraft_array[] = $temp_array;
6010
		}
6011
		return $aircraft_array;
6012
	}
6013
6014
	/**
6015
	* Gets all aircraft registration that have flown over by pilot
6016
	*
6017
	* @return Array the aircraft list
6018
	*
6019
	*/
6020
	public function countAllAircraftRegistrationByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
6021
	{
6022
		global $globalDBdriver;
6023
		$filter_query = $this->getFilter($filters,true,true);
6024
		$Image = new Image($this->db);
6025
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
6026
6027
		$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  
6028
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot)";
6029
		$query_values = array();
6030
		if ($year != '') {
6031
			if ($globalDBdriver == 'mysql') {
6032
				$query .= " AND YEAR(spotter_output.date) = :year";
6033
				$query_values = array_merge($query_values,array(':year' => $year));
6034
			} else {
6035
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6036
				$query_values = array_merge($query_values,array(':year' => $year));
6037
			}
6038
		}
6039
		if ($month != '') {
6040
			if ($globalDBdriver == 'mysql') {
6041
				$query .= " AND MONTH(spotter_output.date) = :month";
6042
				$query_values = array_merge($query_values,array(':month' => $month));
6043
			} else {
6044
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6045
				$query_values = array_merge($query_values,array(':month' => $month));
6046
			}
6047
		}
6048
		if ($day != '') {
6049
			if ($globalDBdriver == 'mysql') {
6050
				$query .= " AND DAY(spotter_output.date) = :day";
6051
				$query_values = array_merge($query_values,array(':day' => $day));
6052
			} else {
6053
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6054
				$query_values = array_merge($query_values,array(':day' => $day));
6055
			}
6056
		}
6057
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
6058
6059
		$query .= " GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.airline_name
6060
		    ORDER BY registration_count DESC";
6061
6062
		
6063
		$sth = $this->db->prepare($query);
6064
		$sth->execute($query_values);
6065
      
6066
		$aircraft_array = array();
6067
		$temp_array = array();
6068
        
6069
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6070
		{
6071
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6072
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6073
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6074
			$temp_array['registration'] = $row['registration'];
6075
			$temp_array['airline_name'] = $row['airline_name'];
6076
			$temp_array['image_thumbnail'] = "";
6077
			if($row['registration'] != "")
6078
			{
6079
				$image_array = $Image->getSpotterImage($row['registration']);
6080
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6081
				else $temp_array['image_thumbnail'] = '';
6082
			}
6083
			$temp_array['registration_count'] = $row['registration_count'];
6084
			$aircraft_array[] = $temp_array;
6085
		}
6086
		return $aircraft_array;
6087
	}
6088
6089
6090
	/**
6091
	* Gets all aircraft manufacturer that have flown over by ident/callsign
6092
	*
6093
	* @return Array the aircraft manufacturer list
6094
	*
6095
	*/
6096
	public function countAllAircraftManufacturerByIdent($ident,$filters = array())
6097
	{
6098
		$filter_query = $this->getFilter($filters,true,true);
6099
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
6100
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6101
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.ident = :ident  
6102
                    GROUP BY spotter_output.aircraft_manufacturer 
6103
					ORDER BY aircraft_manufacturer_count DESC";
6104
6105
		
6106
		$sth = $this->db->prepare($query);
6107
		$sth->execute(array(':ident' => $ident));
6108
		$aircraft_array = array();
6109
		$temp_array = array();
6110
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6111
		{
6112
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6113
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6114
			$aircraft_array[] = $temp_array;
6115
		}
6116
		return $aircraft_array;
6117
	}
6118
6119
	/**
6120
	* Gets all aircraft manufacturer that have flown over by owner
6121
	*
6122
	* @return Array the aircraft manufacturer list
6123
	*
6124
	*/
6125
	public function countAllAircraftManufacturerByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
6126
	{
6127
		global $globalDBdriver;
6128
		$filter_query = $this->getFilter($filters,true,true);
6129
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
6130
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6131
		    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.owner_name = :owner";
6132
		$query_values = array();
6133
		if ($year != '') {
6134
			if ($globalDBdriver == 'mysql') {
6135
				$query .= " AND YEAR(spotter_output.date) = :year";
6136
				$query_values = array_merge($query_values,array(':year' => $year));
6137
			} else {
6138
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6139
				$query_values = array_merge($query_values,array(':year' => $year));
6140
			}
6141
		}
6142
		if ($month != '') {
6143
			if ($globalDBdriver == 'mysql') {
6144
				$query .= " AND MONTH(spotter_output.date) = :month";
6145
				$query_values = array_merge($query_values,array(':month' => $month));
6146
			} else {
6147
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6148
				$query_values = array_merge($query_values,array(':month' => $month));
6149
			}
6150
		}
6151
		if ($day != '') {
6152
			if ($globalDBdriver == 'mysql') {
6153
				$query .= " AND DAY(spotter_output.date) = :day";
6154
				$query_values = array_merge($query_values,array(':day' => $day));
6155
			} else {
6156
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6157
				$query_values = array_merge($query_values,array(':day' => $day));
6158
			}
6159
		}
6160
		$query_values = array_merge($query_values,array(':owner' => $owner));
6161
6162
		$query .= " GROUP BY spotter_output.aircraft_manufacturer 
6163
		    ORDER BY aircraft_manufacturer_count DESC";
6164
6165
		
6166
		$sth = $this->db->prepare($query);
6167
		$sth->execute($query_values);
6168
		return $sth->fetchAll(PDO::FETCH_ASSOC);
6169
	}
6170
6171
	/**
6172
	* Gets all aircraft manufacturer that have flown over by pilot
6173
	*
6174
	* @return Array the aircraft manufacturer list
6175
	*
6176
	*/
6177
	public function countAllAircraftManufacturerByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
6178
	{
6179
		global $globalDBdriver;
6180
		$filter_query = $this->getFilter($filters,true,true);
6181
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
6182
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6183
		    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot)";
6184
		$query_values = array();
6185
		if ($year != '') {
6186
			if ($globalDBdriver == 'mysql') {
6187
				$query .= " AND YEAR(spotter_output.date) = :year";
6188
				$query_values = array_merge($query_values,array(':year' => $year));
6189
			} else {
6190
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6191
				$query_values = array_merge($query_values,array(':year' => $year));
6192
			}
6193
		}
6194
		if ($month != '') {
6195
			if ($globalDBdriver == 'mysql') {
6196
				$query .= " AND MONTH(spotter_output.date) = :month";
6197
				$query_values = array_merge($query_values,array(':month' => $month));
6198
			} else {
6199
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6200
				$query_values = array_merge($query_values,array(':month' => $month));
6201
			}
6202
		}
6203
		if ($day != '') {
6204
			if ($globalDBdriver == 'mysql') {
6205
				$query .= " AND DAY(spotter_output.date) = :day";
6206
				$query_values = array_merge($query_values,array(':day' => $day));
6207
			} else {
6208
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6209
				$query_values = array_merge($query_values,array(':day' => $day));
6210
			}
6211
		}
6212
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
6213
6214
		$query .= " GROUP BY spotter_output.aircraft_manufacturer 
6215
		    ORDER BY aircraft_manufacturer_count DESC";
6216
6217
		
6218
		$sth = $this->db->prepare($query);
6219
		$sth->execute($query_values);
6220
		return $sth->fetchAll(PDO::FETCH_ASSOC);
6221
	}
6222
6223
6224
	/**
6225
	* Gets all aircraft types that have flown over by route
6226
	*
6227
	* @return Array the aircraft list
6228
	*
6229
	*/
6230
	public function countAllAircraftTypesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
6231
	{
6232
		$filter_query = $this->getFilter($filters,true,true);
6233
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
6234
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
6235
		
6236
6237
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
6238
                    FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
6239
                    GROUP BY spotter_output.aircraft_name 
6240
					ORDER BY aircraft_icao_count DESC";
6241
 
6242
		
6243
		$sth = $this->db->prepare($query);
6244
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
6245
		$aircraft_array = array();
6246
		$temp_array = array();
6247
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6248
		{
6249
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6250
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6251
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
6252
			$aircraft_array[] = $temp_array;
6253
		}
6254
		return $aircraft_array;
6255
	}
6256
6257
	/**
6258
	* Gets all aircraft registration that have flown over by route
6259
	*
6260
	* @return Array the aircraft list
6261
	*
6262
	*/
6263
	public function countAllAircraftRegistrationByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
6264
	{
6265
		$filter_query = $this->getFilter($filters,true,true);
6266
		$Image = new Image($this->db);
6267
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
6268
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
6269
6270
		$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   
6271
                    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)   
6272
                    GROUP BY spotter_output.registration 
6273
					ORDER BY registration_count DESC";
6274
6275
		
6276
		$sth = $this->db->prepare($query);
6277
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
6278
      
6279
		$aircraft_array = array();
6280
		$temp_array = array();
6281
        
6282
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6283
		{
6284
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6285
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6286
			$temp_array['registration'] = $row['registration'];
6287
			$temp_array['airline_name'] = $row['airline_name'];
6288
			$temp_array['image_thumbnail'] = "";
6289
			if($row['registration'] != "")
6290
			{
6291
				$image_array = $Image->getSpotterImage($row['registration']);
6292
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6293
			}
6294
			$temp_array['registration_count'] = $row['registration_count'];
6295
          
6296
			$aircraft_array[] = $temp_array;
6297
		}
6298
6299
		return $aircraft_array;
6300
	}
6301
	
6302
	
6303
	/**
6304
	* Gets all aircraft manufacturer that have flown over by route
6305
	*
6306
	* @return Array the aircraft manufacturer list
6307
	*
6308
	*/
6309
	public function countAllAircraftManufacturerByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
6310
	{
6311
		$filter_query = $this->getFilter($filters,true,true);
6312
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
6313
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
6314
6315
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6316
                    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) 
6317
                    GROUP BY spotter_output.aircraft_manufacturer 
6318
					ORDER BY aircraft_manufacturer_count DESC";
6319
6320
		
6321
		$sth = $this->db->prepare($query);
6322
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
6323
      
6324
		$aircraft_array = array();
6325
		$temp_array = array();
6326
        
6327
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6328
		{
6329
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6330
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6331
          
6332
			$aircraft_array[] = $temp_array;
6333
		}
6334
6335
		return $aircraft_array;
6336
	}	
6337
6338
	
6339
	
6340
	
6341
	/**
6342
	* Gets all aircraft types that have flown over by country
6343
	*
6344
	* @return Array the aircraft list
6345
	*
6346
	*/
6347
	public function countAllAircraftTypesByCountry($country,$filters = array())
6348
	{
6349
		$filter_query = $this->getFilter($filters,true,true);
6350
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6351
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
6352
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
6353
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
6354
			    ORDER BY aircraft_icao_count DESC";
6355
 
6356
		
6357
		$sth = $this->db->prepare($query);
6358
		$sth->execute(array(':country' => $country));
6359
      
6360
		$aircraft_array = array();
6361
		$temp_array = array();
6362
        
6363
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6364
		{
6365
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6366
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6367
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
6368
          
6369
			$aircraft_array[] = $temp_array;
6370
		}
6371
6372
		return $aircraft_array;
6373
	}
6374
6375
6376
	/**
6377
	* Gets all aircraft registration that have flown over by country
6378
	*
6379
	* @return Array the aircraft list
6380
	*
6381
	*/
6382
	public function countAllAircraftRegistrationByCountry($country,$filters = array())
6383
	{
6384
		$filter_query = $this->getFilter($filters,true,true);
6385
		$Image = new Image($this->db);
6386
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6387
		$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 
6388
			    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)    
6389
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
6390
			    ORDER BY registration_count DESC";
6391
6392
		
6393
		$sth = $this->db->prepare($query);
6394
		$sth->execute(array(':country' => $country));
6395
      
6396
		$aircraft_array = array();
6397
		$temp_array = array();
6398
        
6399
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6400
		{
6401
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6402
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6403
			$temp_array['registration'] = $row['registration'];
6404
			$temp_array['airline_name'] = $row['airline_name'];
6405
			$temp_array['image_thumbnail'] = "";
6406
			if($row['registration'] != "")
6407
			{
6408
				$image_array = $Image->getSpotterImage($row['registration']);
6409
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6410
			}
6411
			$temp_array['registration_count'] = $row['registration_count'];
6412
          
6413
			$aircraft_array[] = $temp_array;
6414
		}
6415
6416
		return $aircraft_array;
6417
	}
6418
	
6419
	
6420
	/**
6421
	* Gets all aircraft manufacturer that have flown over by country
6422
	*
6423
	* @return Array the aircraft manufacturer list
6424
	*
6425
	*/
6426
	public function countAllAircraftManufacturerByCountry($country,$filters = array())
6427
	{
6428
		$filter_query = $this->getFilter($filters,true,true);
6429
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6430
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6431
                    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) 
6432
                    GROUP BY spotter_output.aircraft_manufacturer 
6433
					ORDER BY aircraft_manufacturer_count DESC";
6434
6435
		
6436
		$sth = $this->db->prepare($query);
6437
		$sth->execute(array(':country' => $country));
6438
      
6439
		$aircraft_array = array();
6440
		$temp_array = array();
6441
        
6442
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6443
		{
6444
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6445
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6446
          
6447
			$aircraft_array[] = $temp_array;
6448
		}
6449
6450
		return $aircraft_array;
6451
	}	
6452
	
6453
	
6454
	
6455
	/**
6456
	* Gets all aircraft manufacturers that have flown over
6457
	*
6458
	* @return Array the aircraft list
6459
	*
6460
	*/
6461
	public function countAllAircraftManufacturers($filters = array(),$year = '',$month = '',$day = '')
6462
	{
6463
		global $globalDBdriver;
6464
		$filter_query = $this->getFilter($filters,true,true);
6465
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6466
                    FROM spotter_output ".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.aircraft_manufacturer <> 'Not Available'";
6467
                $query_values = array();
6468
		if ($year != '') {
6469
			if ($globalDBdriver == 'mysql') {
6470
				$query .= " AND YEAR(spotter_output.date) = :year";
6471
				$query_values = array_merge($query_values,array(':year' => $year));
6472
			} else {
6473
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6474
				$query_values = array_merge($query_values,array(':year' => $year));
6475
			}
6476
		}
6477
		if ($month != '') {
6478
			if ($globalDBdriver == 'mysql') {
6479
				$query .= " AND MONTH(spotter_output.date) = :month";
6480
				$query_values = array_merge($query_values,array(':month' => $month));
6481
			} else {
6482
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6483
				$query_values = array_merge($query_values,array(':month' => $month));
6484
			}
6485
		}
6486
		if ($day != '') {
6487
			if ($globalDBdriver == 'mysql') {
6488
				$query .= " AND DAY(spotter_output.date) = :day";
6489
				$query_values = array_merge($query_values,array(':day' => $day));
6490
			} else {
6491
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6492
				$query_values = array_merge($query_values,array(':day' => $day));
6493
			}
6494
		}
6495
		$query .= " GROUP BY spotter_output.aircraft_manufacturer
6496
					ORDER BY aircraft_manufacturer_count DESC
6497
					LIMIT 10";
6498
      
6499
		
6500
		$sth = $this->db->prepare($query);
6501
		$sth->execute($query_values);
6502
      
6503
		$manufacturer_array = array();
6504
		$temp_array = array();
6505
        
6506
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6507
		{
6508
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6509
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6510
          
6511
			$manufacturer_array[] = $temp_array;
6512
		}
6513
6514
		return $manufacturer_array;
6515
	}
6516
	
6517
	
6518
	
6519
	/**
6520
	* Gets all aircraft registrations that have flown over
6521
	*
6522
	* @return Array the aircraft list
6523
	*
6524
	*/
6525
	public function countAllAircraftRegistrations($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '', $month = '', $day = '')
6526
	{
6527
		global $globalDBdriver;
6528
		$Image = new Image($this->db);
6529
		$filter_query = $this->getFilter($filters,true,true);
6530
		$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    
6531
                    FROM spotter_output ".$filter_query." spotter_output.registration <> '' AND spotter_output.registration <> 'NA'";
6532
                if ($olderthanmonths > 0) {
6533
            		if ($globalDBdriver == 'mysql') {
6534
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6535
			} else {
6536
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6537
			}
6538
		}
6539
                if ($sincedate != '') {
6540
            		if ($globalDBdriver == 'mysql') {
6541
				$query .= " AND spotter_output.date > '".$sincedate."'";
6542
			} else {
6543
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6544
			}
6545
		}
6546
		$query_values = array();
6547
		if ($year != '') {
6548
			if ($globalDBdriver == 'mysql') {
6549
				$query .= " AND YEAR(spotter_output.date) = :year";
6550
				$query_values = array_merge($query_values,array(':year' => $year));
6551
			} else {
6552
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6553
				$query_values = array_merge($query_values,array(':year' => $year));
6554
			}
6555
		}
6556
		if ($month != '') {
6557
			if ($globalDBdriver == 'mysql') {
6558
				$query .= " AND MONTH(spotter_output.date) = :month";
6559
				$query_values = array_merge($query_values,array(':month' => $month));
6560
			} else {
6561
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6562
				$query_values = array_merge($query_values,array(':month' => $month));
6563
			}
6564
		}
6565
		if ($day != '') {
6566
			if ($globalDBdriver == 'mysql') {
6567
				$query .= " AND DAY(spotter_output.date) = :day";
6568
				$query_values = array_merge($query_values,array(':day' => $day));
6569
			} else {
6570
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6571
				$query_values = array_merge($query_values,array(':day' => $day));
6572
			}
6573
		}
6574
		$query .= " GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name ORDER BY aircraft_registration_count DESC";
6575
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6576
		
6577
		$sth = $this->db->prepare($query);
6578
		$sth->execute($query_values);
6579
      
6580
		$aircraft_array = array();
6581
		$temp_array = array();
6582
        
6583
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6584
		{
6585
			$temp_array['registration'] = $row['registration'];
6586
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
6587
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6588
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6589
			$temp_array['airline_name'] = $row['airline_name'];
6590
			$temp_array['image_thumbnail'] = "";
6591
			if($row['registration'] != "")
6592
			{
6593
				$image_array = $Image->getSpotterImage($row['registration']);
6594
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6595
			}
6596
          
6597
			$aircraft_array[] = $temp_array;
6598
		}
6599
6600
		return $aircraft_array;
6601
	}
6602
6603
6604
	/**
6605
	* Gets all aircraft registrations that have flown over
6606
	*
6607
	* @return Array the aircraft list
6608
	*
6609
	*/
6610
	public function countAllAircraftRegistrationsByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
6611
	{
6612
		global $globalDBdriver;
6613
		$filter_query = $this->getFilter($filters,true,true);
6614
		$Image = new Image($this->db);
6615
		$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    
6616
                    FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.registration <> '' AND spotter_output.registration <> 'NA' ";
6617
                if ($olderthanmonths > 0) {
6618
            		if ($globalDBdriver == 'mysql') {
6619
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6620
			} else {
6621
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6622
			}
6623
		}
6624
                if ($sincedate != '') {
6625
            		if ($globalDBdriver == 'mysql') {
6626
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6627
			} else {
6628
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6629
			}
6630
		}
6631
6632
		// if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6633
		//if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6634
                $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";
6635
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6636
		
6637
		$sth = $this->db->prepare($query);
6638
		$sth->execute();
6639
      
6640
		$aircraft_array = array();
6641
		$temp_array = array();
6642
        
6643
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6644
		{
6645
			$temp_array['registration'] = $row['registration'];
6646
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
6647
			$temp_array['airline_icao'] = $row['airline_icao'];
6648
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6649
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6650
			$temp_array['airline_name'] = $row['airline_name'];
6651
			$temp_array['image_thumbnail'] = "";
6652
			if($row['registration'] != "")
6653
			{
6654
				$image_array = $Image->getSpotterImage($row['registration']);
6655
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6656
			}
6657
          
6658
			$aircraft_array[] = $temp_array;
6659
		}
6660
6661
		return $aircraft_array;
6662
	}
6663
	
6664
	
6665
	/**
6666
	* Gets all departure airports of the airplanes that have flown over
6667
	*
6668
	* @return Array the airport list
6669
	*
6670
	*/
6671
	public function countAllDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
6672
	{
6673
		global $globalDBdriver;
6674
		$filter_query = $this->getFilter($filters,true,true);
6675
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, airport.latitude, airport.longitude
6676
				FROM airport, spotter_output".$filter_query." airport.icao = spotter_output.departure_airport_icao AND spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> ''";
6677
                if ($olderthanmonths > 0) {
6678
            		if ($globalDBdriver == 'mysql') {
6679
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6680
			} else {
6681
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6682
			}
6683
                }
6684
                if ($sincedate != '') {
6685
            		if ($globalDBdriver == 'mysql') {
6686
				$query .= " AND spotter_output.date > '".$sincedate."'";
6687
			} else {
6688
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6689
			}
6690
		}
6691
		$query_values = array();
6692
		if ($year != '') {
6693
			if ($globalDBdriver == 'mysql') {
6694
				$query .= " AND YEAR(spotter_output.date) = :year";
6695
				$query_values = array_merge($query_values,array(':year' => $year));
6696
			} else {
6697
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6698
				$query_values = array_merge($query_values,array(':year' => $year));
6699
			}
6700
		}
6701
		if ($month != '') {
6702
			if ($globalDBdriver == 'mysql') {
6703
				$query .= " AND MONTH(spotter_output.date) = :month";
6704
				$query_values = array_merge($query_values,array(':month' => $month));
6705
			} else {
6706
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6707
				$query_values = array_merge($query_values,array(':month' => $month));
6708
			}
6709
		}
6710
		if ($day != '') {
6711
			if ($globalDBdriver == 'mysql') {
6712
				$query .= " AND DAY(spotter_output.date) = :day";
6713
				$query_values = array_merge($query_values,array(':day' => $day));
6714
			} else {
6715
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6716
				$query_values = array_merge($query_values,array(':day' => $day));
6717
			}
6718
		}
6719
                $query .= " GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, airport.latitude, airport.longitude
6720
				ORDER BY airport_departure_icao_count DESC";
6721
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6722
6723
		$sth = $this->db->prepare($query);
6724
		$sth->execute($query_values);
6725
6726
		$airport_array = array();
6727
		$temp_array = array();
6728
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6729
		{
6730
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6731
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6732
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6733
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6734
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6735
			$temp_array['airport_departure_latitude'] = $row['latitude'];
6736
			$temp_array['airport_departure_longitude'] = $row['longitude'];
6737
			$airport_array[] = $temp_array;
6738
		}
6739
		return $airport_array;
6740
	}
6741
6742
	/**
6743
	* Gets all departure airports of the airplanes that have flown over
6744
	*
6745
	* @return Array the airport list
6746
	*
6747
	*/
6748
	public function countAllDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
6749
	{
6750
		global $globalDBdriver;
6751
		$filter_query = $this->getFilter($filters,true,true);
6752
		$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 
6753
			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 <> '' ";
6754
                if ($olderthanmonths > 0) {
6755
            		if ($globalDBdriver == 'mysql') {
6756
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6757
			} else {
6758
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6759
			}
6760
                }
6761
                if ($sincedate != '') {
6762
            		if ($globalDBdriver == 'mysql') {
6763
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6764
			} else {
6765
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6766
			}
6767
		}
6768
6769
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6770
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6771
                $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
6772
				ORDER BY airport_departure_icao_count DESC";
6773
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6774
      
6775
		$sth = $this->db->prepare($query);
6776
		$sth->execute();
6777
      
6778
		$airport_array = array();
6779
		$temp_array = array();
6780
        
6781
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6782
		{
6783
			$temp_array['airline_icao'] = $row['airline_icao'];
6784
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6785
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6786
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6787
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6788
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6789
          
6790
			$airport_array[] = $temp_array;
6791
		}
6792
		return $airport_array;
6793
	}
6794
6795
	/**
6796
	* Gets all detected departure airports of the airplanes that have flown over
6797
	*
6798
	* @return Array the airport list
6799
	*
6800
	*/
6801
	public function countAllDetectedDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
6802
	{
6803
		global $globalDBdriver;
6804
		$filter_query = $this->getFilter($filters,true,true);
6805
		$query  = "SELECT DISTINCT spotter_output.real_departure_airport_icao AS departure_airport_icao, COUNT(spotter_output.real_departure_airport_icao) AS airport_departure_icao_count, airport.name as departure_airport_name, airport.city as departure_airport_city, airport.country as departure_airport_country, airport.latitude as departure_airport_latitude, airport.longitude as departure_airport_longitude
6806
				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";
6807
                if ($olderthanmonths > 0) {
6808
            		if ($globalDBdriver == 'mysql') {
6809
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6810
			} else {
6811
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6812
			}
6813
                }
6814
                if ($sincedate != '') {
6815
            		if ($globalDBdriver == 'mysql') {
6816
				$query .= " AND spotter_output.date > '".$sincedate."'";
6817
			} else {
6818
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6819
			}
6820
		}
6821
		$query_values = array();
6822
		if ($year != '') {
6823
			if ($globalDBdriver == 'mysql') {
6824
				$query .= " AND YEAR(spotter_output.date) = :year";
6825
				$query_values = array_merge($query_values,array(':year' => $year));
6826
			} else {
6827
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6828
				$query_values = array_merge($query_values,array(':year' => $year));
6829
			}
6830
		}
6831
		if ($month != '') {
6832
			if ($globalDBdriver == 'mysql') {
6833
				$query .= " AND MONTH(spotter_output.date) = :month";
6834
				$query_values = array_merge($query_values,array(':month' => $month));
6835
			} else {
6836
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6837
				$query_values = array_merge($query_values,array(':month' => $month));
6838
			}
6839
		}
6840
		if ($day != '') {
6841
			if ($globalDBdriver == 'mysql') {
6842
				$query .= " AND DAY(spotter_output.date) = :day";
6843
				$query_values = array_merge($query_values,array(':day' => $day));
6844
			} else {
6845
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6846
				$query_values = array_merge($query_values,array(':day' => $day));
6847
			}
6848
		}
6849
                $query .= " GROUP BY spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country, airport.latitude, airport.longitude
6850
				ORDER BY airport_departure_icao_count DESC";
6851
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6852
    		//echo $query;
6853
		$sth = $this->db->prepare($query);
6854
		$sth->execute($query_values);
6855
      
6856
		$airport_array = array();
6857
		$temp_array = array();
6858
        
6859
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6860
		{
6861
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6862
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6863
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6864
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6865
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6866
			$temp_array['airport_departure_latitude'] = $row['departure_airport_latitude'];
6867
			$temp_array['airport_departure_longitude'] = $row['departure_airport_longitude'];
6868
          
6869
			$airport_array[] = $temp_array;
6870
		}
6871
		return $airport_array;
6872
	}
6873
	
6874
	/**
6875
	* Gets all detected departure airports of the airplanes that have flown over
6876
	*
6877
	* @return Array the airport list
6878
	*
6879
	*/
6880
	public function countAllDetectedDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
6881
	{
6882
		global $globalDBdriver;
6883
		$filter_query = $this->getFilter($filters,true,true);
6884
		$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
6885
				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 ";
6886
                if ($olderthanmonths > 0) {
6887
            		if ($globalDBdriver == 'mysql') {
6888
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6889
			} else {
6890
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6891
			}
6892
                }
6893
                if ($sincedate != '') {
6894
            		if ($globalDBdriver == 'mysql') {
6895
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6896
			} else {
6897
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
6898
			}
6899
		}
6900
6901
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6902
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6903
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
6904
				ORDER BY airport_departure_icao_count DESC";
6905
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6906
      
6907
		$sth = $this->db->prepare($query);
6908
		$sth->execute();
6909
      
6910
		$airport_array = array();
6911
		$temp_array = array();
6912
        
6913
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6914
		{
6915
			$temp_array['airline_icao'] = $row['airline_icao'];
6916
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6917
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6918
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6919
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6920
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6921
          
6922
			$airport_array[] = $temp_array;
6923
		}
6924
		return $airport_array;
6925
	}	
6926
	
6927
	/**
6928
	* Gets all departure airports of the airplanes that have flown over based on an airline icao
6929
	*
6930
	* @return Array the airport list
6931
	*
6932
	*/
6933
	public function countAllDepartureAirportsByAirline($airline_icao,$filters = array())
6934
	{
6935
		$filter_query = $this->getFilter($filters,true,true);
6936
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6937
		$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 
6938
			    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 <> '' 
6939
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6940
			    ORDER BY airport_departure_icao_count DESC";
6941
      
6942
		
6943
		$sth = $this->db->prepare($query);
6944
		$sth->execute(array(':airline_icao' => $airline_icao));
6945
      
6946
		$airport_array = array();
6947
		$temp_array = array();
6948
        
6949
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6950
		{
6951
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6952
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6953
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6954
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6955
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6956
          
6957
			$airport_array[] = $temp_array;
6958
		}
6959
6960
		return $airport_array;
6961
	}
6962
	
6963
	
6964
	
6965
	/**
6966
	* Gets all departure airports by country of the airplanes that have flown over based on an airline icao
6967
	*
6968
	* @return Array the airport list
6969
	*
6970
	*/
6971
	public function countAllDepartureAirportCountriesByAirline($airline_icao,$filters = array())
6972
	{
6973
		$filter_query = $this->getFilter($filters,true,true);
6974
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6975
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count, countries.iso3 AS departure_airport_country_iso3 
6976
			FROM countries,spotter_output".$filter_query." countries.name = spotter_output.departure_airport_country AND spotter_output.departure_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
6977
			GROUP BY spotter_output.departure_airport_country, countries.iso3
6978
			ORDER BY airport_departure_country_count DESC";
6979
		
6980
		$sth = $this->db->prepare($query);
6981
		$sth->execute(array(':airline_icao' => $airline_icao));
6982
      
6983
		$airport_array = array();
6984
		$temp_array = array();
6985
        
6986
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6987
		{
6988
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6989
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6990
			$temp_array['departure_airport_country_iso3'] = $row['departure_airport_country_iso3'];
6991
			$airport_array[] = $temp_array;
6992
		}
6993
		return $airport_array;
6994
	}
6995
	
6996
	
6997
	
6998
	/**
6999
	* Gets all departure airports of the airplanes that have flown over based on an aircraft icao
7000
	*
7001
	* @return Array the airport list
7002
	*
7003
	*/
7004
	public function countAllDepartureAirportsByAircraft($aircraft_icao,$filters = array())
7005
	{
7006
		$filter_query = $this->getFilter($filters,true,true);
7007
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7008
		$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 
7009
			    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 <> '' 
7010
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7011
			    ORDER BY airport_departure_icao_count DESC";
7012
      
7013
		
7014
		$sth = $this->db->prepare($query);
7015
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7016
      
7017
		$airport_array = array();
7018
		$temp_array = array();
7019
        
7020
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7021
		{
7022
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7023
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7024
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7025
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7026
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7027
          
7028
			$airport_array[] = $temp_array;
7029
		}
7030
7031
		return $airport_array;
7032
	}
7033
	
7034
	
7035
	/**
7036
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
7037
	*
7038
	* @return Array the airport list
7039
	*
7040
	*/
7041
	public function countAllDepartureAirportCountriesByAircraft($aircraft_icao,$filters = array())
7042
	{
7043
		$filter_query = $this->getFilter($filters,true,true);
7044
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7045
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count, countries.iso3 AS departure_airport_country_iso3 
7046
			FROM countries, spotter_output".$filter_query." countries.name = spotter_output.departure_airport_country AND spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
7047
			GROUP BY spotter_output.departure_airport_country, countries.iso3
7048
			ORDER BY airport_departure_country_count DESC";
7049
      
7050
		
7051
		$sth = $this->db->prepare($query);
7052
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7053
      
7054
		$airport_array = array();
7055
		$temp_array = array();
7056
        
7057
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7058
		{
7059
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7060
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7061
			$temp_array['departure_airport_country_iso3'] = $row['departure_airport_country_iso3'];
7062
			$airport_array[] = $temp_array;
7063
		}
7064
7065
		return $airport_array;
7066
	}
7067
	
7068
	
7069
	/**
7070
	* Gets all departure airports of the airplanes that have flown over based on an aircraft registration
7071
	*
7072
	* @return Array the airport list
7073
	*
7074
	*/
7075
	public function countAllDepartureAirportsByRegistration($registration,$filters = array())
7076
	{
7077
		$filter_query = $this->getFilter($filters,true,true);
7078
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
7079
		$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 
7080
			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 <> '' 
7081
                    GROUP BY spotter_output.departure_airport_icao
7082
					ORDER BY airport_departure_icao_count DESC";
7083
      
7084
		
7085
		$sth = $this->db->prepare($query);
7086
		$sth->execute(array(':registration' => $registration));
7087
      
7088
		$airport_array = array();
7089
		$temp_array = array();
7090
        
7091
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7092
		{
7093
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7094
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7095
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7096
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7097
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7098
          
7099
			$airport_array[] = $temp_array;
7100
		}
7101
7102
		return $airport_array;
7103
	}
7104
	
7105
	
7106
	/**
7107
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft registration
7108
	*
7109
	* @return Array the airport list
7110
	*
7111
	*/
7112
	public function countAllDepartureAirportCountriesByRegistration($registration,$filters = array())
7113
	{
7114
		$filter_query = $this->getFilter($filters,true,true);
7115
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
7116
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count, countries.iso3 AS departure_airport_country_iso3 
7117
			FROM countries,spotter_output".$filter_query." countries.name = spotter_output.departure_airport_country AND spotter_output.departure_airport_country <> '' AND spotter_output.registration = :registration 
7118
			GROUP BY spotter_output.departure_airport_country, countries.iso3
7119
			ORDER BY airport_departure_country_count DESC";
7120
		
7121
		$sth = $this->db->prepare($query);
7122
		$sth->execute(array(':registration' => $registration));
7123
		$airport_array = array();
7124
		$temp_array = array();
7125
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7126
		{
7127
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7128
			$temp_array['departure_airport_country_iso3'] = $row['departure_airport_country_iso3'];
7129
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7130
			$airport_array[] = $temp_array;
7131
		}
7132
		return $airport_array;
7133
	}
7134
	
7135
	
7136
	/**
7137
	* Gets all departure airports of the airplanes that have flown over based on an arrivl airport icao
7138
	*
7139
	* @return Array the airport list
7140
	*
7141
	*/
7142
	public function countAllDepartureAirportsByAirport($airport_icao,$filters = array())
7143
	{
7144
		$filter_query = $this->getFilter($filters,true,true);
7145
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7146
		$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 
7147
			    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 <> '' 
7148
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7149
			    ORDER BY airport_departure_icao_count DESC";
7150
      
7151
		
7152
		$sth = $this->db->prepare($query);
7153
		$sth->execute(array(':airport_icao' => $airport_icao));
7154
      
7155
		$airport_array = array();
7156
		$temp_array = array();
7157
        
7158
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7159
		{
7160
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7161
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7162
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7163
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7164
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7165
          
7166
			$airport_array[] = $temp_array;
7167
		}
7168
7169
		return $airport_array;
7170
	}
7171
	
7172
	
7173
	/**
7174
	* Gets all departure airports by country of the airplanes that have flown over based on an airport icao
7175
	*
7176
	* @return Array the airport list
7177
	*
7178
	*/
7179
	public function countAllDepartureAirportCountriesByAirport($airport_icao,$filters = array())
7180
	{
7181
		$filter_query = $this->getFilter($filters,true,true);
7182
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7183
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count, countries.iso3 AS departure_airport_country_iso3 
7184
			FROM countries,spotter_output".$filter_query." countries.name = spotter_output.departure_airport_country AND spotter_output.departure_airport_country <> '' AND spotter_output.arrival_airport_icao = :airport_icao 
7185
			GROUP BY spotter_output.departure_airport_country, countries.iso3
7186
			ORDER BY airport_departure_country_count DESC";
7187
		
7188
		$sth = $this->db->prepare($query);
7189
		$sth->execute(array(':airport_icao' => $airport_icao));
7190
      
7191
		$airport_array = array();
7192
		$temp_array = array();
7193
        
7194
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7195
		{
7196
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7197
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7198
			$temp_array['departure_airport_country_iso3'] = $row['departure_airport_country_iso3'];
7199
			$airport_array[] = $temp_array;
7200
		}
7201
		return $airport_array;
7202
	}
7203
	
7204
	
7205
	
7206
	/**
7207
	* Gets all departure airports of the airplanes that have flown over based on an aircraft manufacturer
7208
	*
7209
	* @return Array the airport list
7210
	*
7211
	*/
7212
	public function countAllDepartureAirportsByManufacturer($aircraft_manufacturer,$filters = array())
7213
	{
7214
		$filter_query = $this->getFilter($filters,true,true);
7215
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7216
		$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 
7217
			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 <> '' 
7218
                    GROUP BY spotter_output.departure_airport_icao
7219
					ORDER BY airport_departure_icao_count DESC";
7220
      
7221
		
7222
		$sth = $this->db->prepare($query);
7223
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7224
      
7225
		$airport_array = array();
7226
		$temp_array = array();
7227
        
7228
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7229
		{
7230
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7231
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7232
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7233
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7234
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7235
          
7236
			$airport_array[] = $temp_array;
7237
		}
7238
7239
		return $airport_array;
7240
	}
7241
	
7242
	
7243
	/**
7244
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft manufacturer
7245
	*
7246
	* @return Array the airport list
7247
	*
7248
	*/
7249
	public function countAllDepartureAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
7250
	{
7251
		$filter_query = $this->getFilter($filters,true,true);
7252
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7253
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count, countries.iso3 AS departure_airport_country_iso3 
7254
			FROM countries, spotter_output".$filter_query." countries.name = departure_airport_country AND spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
7255
			GROUP BY spotter_output.departure_airport_country, countries.iso3
7256
			ORDER BY airport_departure_country_count DESC";
7257
		
7258
		$sth = $this->db->prepare($query);
7259
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7260
		$airport_array = array();
7261
		$temp_array = array();
7262
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7263
		{
7264
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7265
			$temp_array['departure_airport_country_iso3'] = $row['departure_airport_country_iso3'];
7266
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7267
			$airport_array[] = $temp_array;
7268
		}
7269
		return $airport_array;
7270
	}
7271
	
7272
	
7273
	/**
7274
	* Gets all departure airports of the airplanes that have flown over based on a date
7275
	*
7276
	* @return Array the airport list
7277
	*
7278
	*/
7279
	public function countAllDepartureAirportsByDate($date,$filters = array())
7280
	{
7281
		global $globalTimezone, $globalDBdriver;
7282
		$filter_query = $this->getFilter($filters,true,true);
7283
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7284
		if ($globalTimezone != '') {
7285
			date_default_timezone_set($globalTimezone);
7286
			$datetime = new DateTime($date);
7287
			$offset = $datetime->format('P');
7288
		} else $offset = '+00:00';
7289
7290
		if ($globalDBdriver == 'mysql') {
7291
			$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 
7292
					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
7293
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7294
					ORDER BY airport_departure_icao_count DESC";
7295
		} else {
7296
			$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 
7297
					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
7298
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7299
					ORDER BY airport_departure_icao_count DESC";
7300
		}
7301
7302
		$sth = $this->db->prepare($query);
7303
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7304
      
7305
		$airport_array = array();
7306
		$temp_array = array();
7307
        
7308
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7309
		{
7310
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7311
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7312
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7313
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7314
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7315
          
7316
			$airport_array[] = $temp_array;
7317
		}
7318
		return $airport_array;
7319
	}
7320
	
7321
	
7322
	
7323
	/**
7324
	* Gets all departure airports by country of the airplanes that have flown over based on a date
7325
	*
7326
	* @return Array the airport list
7327
	*
7328
	*/
7329
	public function countAllDepartureAirportCountriesByDate($date,$filters = array())
7330
	{
7331
		global $globalTimezone, $globalDBdriver;
7332
		$filter_query = $this->getFilter($filters,true,true);
7333
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7334
		if ($globalTimezone != '') {
7335
			date_default_timezone_set($globalTimezone);
7336
			$datetime = new DateTime($date);
7337
			$offset = $datetime->format('P');
7338
		} else $offset = '+00:00';
7339
7340
		if ($globalDBdriver == 'mysql') {
7341
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count,countries.iso3 AS departure_airport_country_iso3
7342
					FROM countries,spotter_output".$filter_query." countries.name = spotter_output.departure_airport_country AND spotter_output.departure_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
7343
					GROUP BY spotter_output.departure_airport_country, countries.iso3
7344
					ORDER BY airport_departure_country_count DESC";
7345
		} else {
7346
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count, countries.iso3 AS departure_airport_country_iso3 
7347
					FROM countries, spotter_output".$filter_query." countries.name = spotter_output.departure_airport_country AND spotter_output.departure_airport_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
7348
					GROUP BY spotter_output.departure_airport_country, countries.iso3
7349
					ORDER BY airport_departure_country_count DESC";
7350
		}
7351
		
7352
		$sth = $this->db->prepare($query);
7353
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7354
      
7355
		$airport_array = array();
7356
		$temp_array = array();
7357
        
7358
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7359
		{
7360
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7361
			$temp_array['departure_airport_country_iso3'] = $row['departure_airport_country_iso3'];
7362
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7363
          
7364
			$airport_array[] = $temp_array;
7365
		}
7366
		return $airport_array;
7367
	}
7368
	
7369
	
7370
	
7371
	/**
7372
	* Gets all departure airports of the airplanes that have flown over based on a ident/callsign
7373
	*
7374
	* @return Array the airport list
7375
	*
7376
	*/
7377
	public function countAllDepartureAirportsByIdent($ident,$filters = array())
7378
	{
7379
		$filter_query = $this->getFilter($filters,true,true);
7380
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7381
		$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 
7382
		    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 
7383
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7384
		    ORDER BY airport_departure_icao_count DESC";
7385
      
7386
		
7387
		$sth = $this->db->prepare($query);
7388
		$sth->execute(array(':ident' => $ident));
7389
      
7390
		$airport_array = array();
7391
		$temp_array = array();
7392
        
7393
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7394
		{
7395
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7396
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7397
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7398
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7399
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7400
          
7401
			$airport_array[] = $temp_array;
7402
		}
7403
7404
		return $airport_array;
7405
	}
7406
	
7407
	/**
7408
	* Gets all departure airports of the airplanes that have flown over based on a owner
7409
	*
7410
	* @return Array the airport list
7411
	*
7412
	*/
7413
	public function countAllDepartureAirportsByOwner($owner,$filters = array())
7414
	{
7415
		$filter_query = $this->getFilter($filters,true,true);
7416
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
7417
		$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 
7418
		    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 
7419
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7420
		    ORDER BY airport_departure_icao_count DESC";
7421
      
7422
		
7423
		$sth = $this->db->prepare($query);
7424
		$sth->execute(array(':owner' => $owner));
7425
      
7426
		$airport_array = array();
7427
		$temp_array = array();
7428
        
7429
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7430
		{
7431
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7432
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7433
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7434
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7435
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7436
          
7437
			$airport_array[] = $temp_array;
7438
		}
7439
7440
		return $airport_array;
7441
	}
7442
	
7443
	/**
7444
	* Gets all departure airports of the airplanes that have flown over based on a pilot
7445
	*
7446
	* @return Array the airport list
7447
	*
7448
	*/
7449
	public function countAllDepartureAirportsByPilot($pilot,$filters = array())
7450
	{
7451
		$filter_query = $this->getFilter($filters,true,true);
7452
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
7453
		$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 
7454
		    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) 
7455
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7456
		    ORDER BY airport_departure_icao_count DESC";
7457
		
7458
		$sth = $this->db->prepare($query);
7459
		$sth->execute(array(':pilot' => $pilot));
7460
      
7461
		$airport_array = array();
7462
		$temp_array = array();
7463
        
7464
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7465
		{
7466
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7467
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7468
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7469
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7470
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7471
          
7472
			$airport_array[] = $temp_array;
7473
		}
7474
7475
		return $airport_array;
7476
	}
7477
	
7478
	
7479
	
7480
	/**
7481
	* Gets all departure airports by country of the airplanes that have flown over based on a callsign/ident
7482
	*
7483
	* @return Array the airport list
7484
	*
7485
	*/
7486
	public function countAllDepartureAirportCountriesByIdent($ident,$filters = array())
7487
	{
7488
		$filter_query = $this->getFilter($filters,true,true);
7489
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7490
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count, countries.iso3 AS departure_airport_country_iso3 
7491
			FROM countries,spotter_output".$filter_query." countries.name = spotter_output.departure_airport_country AND spotter_output.departure_airport_country <> '' AND spotter_output.ident = :ident 
7492
			GROUP BY spotter_output.departure_airport_country, countries.iso3
7493
			ORDER BY airport_departure_country_count DESC";
7494
		
7495
		$sth = $this->db->prepare($query);
7496
		$sth->execute(array(':ident' => $ident));
7497
		$airport_array = array();
7498
		$temp_array = array();
7499
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7500
		{
7501
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7502
			$temp_array['departure_airport_country_iso3'] = $row['departure_airport_country_iso3'];
7503
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7504
			$airport_array[] = $temp_array;
7505
		}
7506
		return $airport_array;
7507
	}
7508
	
7509
	/**
7510
	* Gets all departure airports by country of the airplanes that have flown over based on owner
7511
	*
7512
	* @return Array the airport list
7513
	*
7514
	*/
7515
	public function countAllDepartureAirportCountriesByOwner($owner,$filters = array())
7516
	{
7517
		$filter_query = $this->getFilter($filters,true,true);
7518
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
7519
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7520
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.owner_name = :owner 
7521
			GROUP BY spotter_output.departure_airport_country
7522
			ORDER BY airport_departure_country_count DESC";
7523
		
7524
		$sth = $this->db->prepare($query);
7525
		$sth->execute(array(':owner' => $owner));
7526
		return $sth->fetchAll(PDO::FETCH_ASSOC);
7527
	}
7528
	
7529
	/**
7530
	* Gets all departure airports by country of the airplanes that have flown over based on pilot
7531
	*
7532
	* @return Array the airport list
7533
	*
7534
	*/
7535
	public function countAllDepartureAirportCountriesByPilot($pilot,$filters = array())
7536
	{
7537
		$filter_query = $this->getFilter($filters,true,true);
7538
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
7539
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7540
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
7541
			GROUP BY spotter_output.departure_airport_country
7542
			ORDER BY airport_departure_country_count DESC";
7543
		
7544
		$sth = $this->db->prepare($query);
7545
		$sth->execute(array(':pilot' => $pilot));
7546
		return $sth->fetchAll(PDO::FETCH_ASSOC);
7547
	}
7548
	
7549
	
7550
	
7551
	/**
7552
	* Gets all departure airports of the airplanes that have flown over based on a country
7553
	*
7554
	* @return Array the airport list
7555
	*
7556
	*/
7557
	public function countAllDepartureAirportsByCountry($country,$filters = array())
7558
	{
7559
		$filter_query = $this->getFilter($filters,true,true);
7560
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7561
7562
		$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 
7563
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
7564
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7565
			    ORDER BY airport_departure_icao_count DESC";
7566
      
7567
		
7568
		$sth = $this->db->prepare($query);
7569
		$sth->execute(array(':country' => $country));
7570
      
7571
		$airport_array = array();
7572
		$temp_array = array();
7573
        
7574
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7575
		{
7576
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7577
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7578
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7579
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7580
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7581
          
7582
			$airport_array[] = $temp_array;
7583
		}
7584
7585
		return $airport_array;
7586
	}
7587
7588
7589
	/**
7590
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
7591
	*
7592
	* @return Array the airport list
7593
	*
7594
	*/
7595
	public function countAllDepartureAirportCountriesByCountry($country,$filters = array())
7596
	{
7597
		$filter_query = $this->getFilter($filters,true,true);
7598
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7599
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count, countries.iso3 AS departure_airport_country_iso3 
7600
			FROM countries,spotter_output".$filter_query." countries.name = spotter_output.departure_airport_country AND spotter_output.departure_airport_country <> '' AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country) OR spotter_output.airline_country = :country) 
7601
			GROUP BY spotter_output.departure_airport_country, countries.iso3
7602
			ORDER BY airport_departure_country_count DESC";
7603
		
7604
		$sth = $this->db->prepare($query);
7605
		$sth->execute(array(':country' => $country));
7606
		$airport_array = array();
7607
		$temp_array = array();
7608
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7609
		{
7610
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7611
			$temp_array['departure_airport_country_iso3'] = $row['departure_airport_country_iso3'];
7612
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7613
			$airport_array[] = $temp_array;
7614
		}
7615
		return $airport_array;
7616
	}
7617
	
7618
7619
	/**
7620
	* Gets all arrival airports of the airplanes that have flown over
7621
	*
7622
	* @param Boolean $limit Limit result to 10 or not
7623
	* @param Integer $olderthanmonths Only show result older than x months
7624
	* @param String $sincedate Only show result since x date
7625
	* @param Boolean $icaoaskey Show result by ICAO
7626
	* @param Array $filters Filter used here
7627
	* @return Array the airport list
7628
	*
7629
	*/
7630
	public function countAllArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array(),$year = '',$month = '',$day = '')
7631
	{
7632
		global $globalDBdriver;
7633
		$filter_query = $this->getFilter($filters,true,true);
7634
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country, airport.latitude as arrival_airport_latitude, airport.longitude as arrival_airport_longitude 
7635
				FROM airport, spotter_output".$filter_query." airport.icao = spotter_output.arrival_airport_icao AND spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''";
7636
                if ($olderthanmonths > 0) {
7637
            		if ($globalDBdriver == 'mysql') {
7638
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
7639
			} else {
7640
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
7641
			}
7642
		}
7643
                if ($sincedate != '') {
7644
            		if ($globalDBdriver == 'mysql') {
7645
				$query .= " AND spotter_output.date > '".$sincedate."'";
7646
			} else {
7647
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7648
			}
7649
		}
7650
		$query_values = array();
7651
		if ($year != '') {
7652
			if ($globalDBdriver == 'mysql') {
7653
				$query .= " AND YEAR(spotter_output.date) = :year";
7654
				$query_values = array_merge($query_values,array(':year' => $year));
7655
			} else {
7656
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
7657
				$query_values = array_merge($query_values,array(':year' => $year));
7658
			}
7659
		}
7660
		if ($month != '') {
7661
			if ($globalDBdriver == 'mysql') {
7662
				$query .= " AND MONTH(spotter_output.date) = :month";
7663
				$query_values = array_merge($query_values,array(':month' => $month));
7664
			} else {
7665
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
7666
				$query_values = array_merge($query_values,array(':month' => $month));
7667
			}
7668
		}
7669
		if ($day != '') {
7670
			if ($globalDBdriver == 'mysql') {
7671
				$query .= " AND DAY(spotter_output.date) = :day";
7672
				$query_values = array_merge($query_values,array(':day' => $day));
7673
			} else {
7674
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
7675
				$query_values = array_merge($query_values,array(':day' => $day));
7676
			}
7677
		}
7678
                $query .= " GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country, airport.latitude, airport.longitude
7679
					ORDER BY airport_arrival_icao_count DESC";
7680
		if ($limit) $query .= " LIMIT 10";
7681
      
7682
		
7683
		$sth = $this->db->prepare($query);
7684
		$sth->execute($query_values);
7685
      
7686
		$airport_array = array();
7687
		$temp_array = array();
7688
        
7689
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7690
		{
7691
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7692
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7693
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7694
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7695
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7696
			$temp_array['airport_arrival_latitude'] = $row['arrival_airport_latitude'];
7697
			$temp_array['airport_arrival_longitude'] = $row['arrival_airport_longitude'];
7698
          
7699
			if ($icaoaskey) {
7700
				$icao = $row['arrival_airport_icao'];
7701
				$airport_array[$icao] = $temp_array;
7702
			} else $airport_array[] = $temp_array;
7703
		}
7704
7705
		return $airport_array;
7706
	}
7707
7708
	/**
7709
	* Gets all arrival airports of the airplanes that have flown over
7710
	*
7711
	* @return Array the airport list
7712
	*
7713
	*/
7714
	public function countAllArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array())
7715
	{
7716
		global $globalDBdriver;
7717
		$filter_query = $this->getFilter($filters,true,true);
7718
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country, countries.iso3 AS arrival_airport_country_iso3 
7719
			FROM countries,spotter_output".$filter_query." countries.name = spotter_output.arrival_airport_country AND spotter_output.airline_icao <> '' AND spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' ";
7720
                if ($olderthanmonths > 0) {
7721
            		if ($globalDBdriver == 'mysql') {
7722
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
7723
			} else {
7724
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
7725
			}
7726
		}
7727
                if ($sincedate != '') {
7728
            		if ($globalDBdriver == 'mysql') {
7729
				$query .= "AND spotter_output.date > '".$sincedate."' ";
7730
			} else {
7731
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7732
			}
7733
		}
7734
7735
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
7736
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
7737
                $query .= "GROUP BY spotter_output.airline_icao,spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country, countries.iso3
7738
					ORDER BY airport_arrival_icao_count DESC";
7739
		if ($limit) $query .= " LIMIT 10";
7740
      
7741
		
7742
		$sth = $this->db->prepare($query);
7743
		$sth->execute();
7744
      
7745
		$airport_array = array();
7746
		$temp_array = array();
7747
        
7748
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7749
		{
7750
			$temp_array['airline_icao'] = $row['airline_icao'];
7751
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7752
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7753
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7754
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7755
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7756
			$temp_array['airport_arrival_country_iso3'] = $row['arrival_airport_country_iso3'];
7757
          
7758
			if ($icaoaskey) {
7759
				$icao = $row['arrival_airport_icao'];
7760
				$airport_array[$icao] = $temp_array;
7761
			} else $airport_array[] = $temp_array;
7762
		}
7763
7764
		return $airport_array;
7765
	}
7766
7767
7768
	/**
7769
	* Gets all detected arrival airports of the airplanes that have flown over
7770
	*
7771
	* @return Array the airport list
7772
	*
7773
	*/
7774
	public function countAllDetectedArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array(),$year = '',$month = '',$day = '')
7775
	{
7776
		global $globalDBdriver;
7777
		$filter_query = $this->getFilter($filters,true,true);
7778
		$query  = "SELECT DISTINCT spotter_output.real_arrival_airport_icao as arrival_airport_icao, COUNT(spotter_output.real_arrival_airport_icao) AS airport_arrival_icao_count, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, airport.latitude AS arrival_airport_latitude, airport.longitude AS arrival_airport_longitude 
7779
			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";
7780
                if ($olderthanmonths > 0) {
7781
            		if ($globalDBdriver == 'mysql') {
7782
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
7783
			} else {
7784
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
7785
			}
7786
		}
7787
                if ($sincedate != '') {
7788
            		if ($globalDBdriver == 'mysql') {
7789
				$query .= " AND spotter_output.date > '".$sincedate."'";
7790
			} else {
7791
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7792
			}
7793
		}
7794
		$query_values = array();
7795
		if ($year != '') {
7796
			if ($globalDBdriver == 'mysql') {
7797
				$query .= " AND YEAR(spotter_output.date) = :year";
7798
				$query_values = array_merge($query_values,array(':year' => $year));
7799
			} else {
7800
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
7801
				$query_values = array_merge($query_values,array(':year' => $year));
7802
			}
7803
		}
7804
		if ($month != '') {
7805
			if ($globalDBdriver == 'mysql') {
7806
				$query .= " AND MONTH(spotter_output.date) = :month";
7807
				$query_values = array_merge($query_values,array(':month' => $month));
7808
			} else {
7809
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
7810
				$query_values = array_merge($query_values,array(':month' => $month));
7811
			}
7812
		}
7813
		if ($day != '') {
7814
			if ($globalDBdriver == 'mysql') {
7815
				$query .= " AND DAY(spotter_output.date) = :day";
7816
				$query_values = array_merge($query_values,array(':day' => $day));
7817
			} else {
7818
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
7819
				$query_values = array_merge($query_values,array(':day' => $day));
7820
			}
7821
		}
7822
		$query .= " GROUP BY spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country, airport.latitude, airport.longitude
7823
					ORDER BY airport_arrival_icao_count DESC";
7824
		if ($limit) $query .= " LIMIT 10";
7825
      
7826
		
7827
		$sth = $this->db->prepare($query);
7828
		$sth->execute($query_values);
7829
      
7830
		$airport_array = array();
7831
		$temp_array = array();
7832
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7833
		{
7834
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7835
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7836
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7837
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7838
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7839
          
7840
			if ($icaoaskey) {
7841
				$icao = $row['arrival_airport_icao'];
7842
				$airport_array[$icao] = $temp_array;
7843
			} else $airport_array[] = $temp_array;
7844
		}
7845
7846
		return $airport_array;
7847
	}
7848
	
7849
	/**
7850
	* Gets all detected arrival airports of the airplanes that have flown over
7851
	*
7852
	* @return Array the airport list
7853
	*
7854
	*/
7855
	public function countAllDetectedArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array())
7856
	{
7857
		global $globalDBdriver;
7858
		$filter_query = $this->getFilter($filters,true,true);
7859
		$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 
7860
			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 ";
7861
                if ($olderthanmonths > 0) {
7862
            		if ($globalDBdriver == 'mysql') {
7863
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
7864
			} else {
7865
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
7866
			}
7867
		}
7868
                if ($sincedate != '') {
7869
            		if ($globalDBdriver == 'mysql') {
7870
				$query .= "AND spotter_output.date > '".$sincedate."' ";
7871
			} else {
7872
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7873
			}
7874
		}
7875
7876
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
7877
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
7878
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
7879
					ORDER BY airport_arrival_icao_count DESC";
7880
		if ($limit) $query .= " LIMIT 10";
7881
      
7882
		
7883
		$sth = $this->db->prepare($query);
7884
		$sth->execute();
7885
      
7886
		$airport_array = array();
7887
		$temp_array = array();
7888
        
7889
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7890
		{
7891
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7892
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7893
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7894
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7895
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7896
			$temp_array['airline_icao'] = $row['airline_icao'];
7897
          
7898
			if ($icaoaskey) {
7899
				$icao = $row['arrival_airport_icao'];
7900
				$airport_array[$icao] = $temp_array;
7901
			} else $airport_array[] = $temp_array;
7902
		}
7903
7904
		return $airport_array;
7905
	}	
7906
	
7907
	/**
7908
	* Gets all arrival airports of the airplanes that have flown over based on an airline icao
7909
	*
7910
	* @return Array the airport list
7911
	*
7912
	*/
7913
	public function countAllArrivalAirportsByAirline($airline_icao, $filters = array())
7914
	{
7915
		$filter_query = $this->getFilter($filters,true,true);
7916
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7917
		$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 
7918
			    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 
7919
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7920
			    ORDER BY airport_arrival_icao_count DESC";
7921
		
7922
		$sth = $this->db->prepare($query);
7923
		$sth->execute(array(':airline_icao' => $airline_icao));
7924
      
7925
		$airport_array = array();
7926
		$temp_array = array();
7927
        
7928
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7929
		{
7930
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7931
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7932
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7933
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7934
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7935
          
7936
			$airport_array[] = $temp_array;
7937
		}
7938
7939
		return $airport_array;
7940
	}
7941
	
7942
	
7943
	/**
7944
	* Gets all arrival airports by country of the airplanes that have flown over based on an airline icao
7945
	*
7946
	* @return Array the airport list
7947
	*
7948
	*/
7949
	public function countAllArrivalAirportCountriesByAirline($airline_icao,$filters = array())
7950
	{
7951
		$filter_query = $this->getFilter($filters,true,true);
7952
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7953
		
7954
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count, countries.iso3 AS arrival_airport_country_iso3 
7955
			FROM countries, spotter_output".$filter_query." countries.name = spotter_output.arrival_airport_country AND spotter_output.arrival_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
7956
			GROUP BY spotter_output.arrival_airport_country, countries.iso3
7957
			ORDER BY airport_arrival_country_count DESC";
7958
      
7959
		
7960
		$sth = $this->db->prepare($query);
7961
		$sth->execute(array(':airline_icao' => $airline_icao));
7962
      
7963
		$airport_array = array();
7964
		$temp_array = array();
7965
        
7966
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7967
		{
7968
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7969
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7970
			$temp_array['arrival_airport_country_iso3'] = $row['arrival_airport_country_iso3'];
7971
			$airport_array[] = $temp_array;
7972
		}
7973
		return $airport_array;
7974
	}
7975
	
7976
	
7977
	/**
7978
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft icao
7979
	*
7980
	* @return Array the airport list
7981
	*
7982
	*/
7983
	public function countAllArrivalAirportsByAircraft($aircraft_icao,$filters = array())
7984
	{
7985
		$filter_query = $this->getFilter($filters,true,true);
7986
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7987
		$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 
7988
			    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 
7989
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7990
			    ORDER BY airport_arrival_icao_count DESC";
7991
      
7992
		
7993
		$sth = $this->db->prepare($query);
7994
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7995
      
7996
		$airport_array = array();
7997
		$temp_array = array();
7998
        
7999
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8000
		{
8001
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8002
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8003
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8004
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8005
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8006
          
8007
			$airport_array[] = $temp_array;
8008
		}
8009
8010
		return $airport_array;
8011
	}
8012
	
8013
	
8014
	
8015
	/**
8016
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft icao
8017
	*
8018
	* @return Array the airport list
8019
	*
8020
	*/
8021
	public function countAllArrivalAirportCountriesByAircraft($aircraft_icao,$filters = array())
8022
	{
8023
		$filter_query = $this->getFilter($filters,true,true);
8024
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
8025
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count, countries.iso3 AS airport_arrival_country_iso3 
8026
			    FROM countries, spotter_output".$filter_query." countries.name = spotter_output.arrival_airport_country AND spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
8027
			    GROUP BY spotter_output.arrival_airport_country, countries.iso3
8028
			    ORDER BY airport_arrival_country_count DESC";
8029
      
8030
		
8031
		$sth = $this->db->prepare($query);
8032
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
8033
      
8034
		$airport_array = array();
8035
		$temp_array = array();
8036
        
8037
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8038
		{
8039
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8040
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8041
			$temp_array['arrival_airport_country_iso3'] = $row['airport_arrival_country_iso3'];
8042
			$airport_array[] = $temp_array;
8043
		}
8044
8045
		return $airport_array;
8046
	}
8047
	
8048
	
8049
	/**
8050
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft registration
8051
	*
8052
	* @return Array the airport list
8053
	*
8054
	*/
8055
	public function countAllArrivalAirportsByRegistration($registration,$filters = array())
8056
	{
8057
		$filter_query = $this->getFilter($filters,true,true);
8058
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
8059
8060
		$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 
8061
			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 
8062
                    GROUP BY spotter_output.arrival_airport_icao
8063
					ORDER BY airport_arrival_icao_count DESC";
8064
      
8065
		
8066
		$sth = $this->db->prepare($query);
8067
		$sth->execute(array(':registration' => $registration));
8068
      
8069
		$airport_array = array();
8070
		$temp_array = array();
8071
        
8072
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8073
		{
8074
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8075
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8076
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8077
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8078
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8079
          
8080
			$airport_array[] = $temp_array;
8081
		}
8082
8083
		return $airport_array;
8084
	}
8085
	
8086
	
8087
	/**
8088
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft registration
8089
	*
8090
	* @return Array the airport list
8091
	*
8092
	*/
8093
	public function countAllArrivalAirportCountriesByRegistration($registration,$filters = array())
8094
	{
8095
		$filter_query = $this->getFilter($filters,true,true);
8096
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
8097
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count, countries.iso3 AS arrival_airport_country_iso3 
8098
			FROM countries,spotter_output".$filter_query." countries.name = spotter_output.arrival_airport_country AND spotter_output.arrival_airport_country <> '' AND spotter_output.registration = :registration 
8099
			GROUP BY spotter_output.arrival_airport_country, countries.iso3
8100
			ORDER BY airport_arrival_country_count DESC";
8101
		
8102
		$sth = $this->db->prepare($query);
8103
		$sth->execute(array(':registration' => $registration));
8104
		$airport_array = array();
8105
		$temp_array = array();
8106
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8107
		{
8108
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8109
			$temp_array['arrival_airport_country_iso3'] = $row['arrival_airport_country_iso3'];
8110
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8111
			$airport_array[] = $temp_array;
8112
		}
8113
		return $airport_array;
8114
	}
8115
	
8116
	
8117
	
8118
	/**
8119
	* Gets all arrival airports of the airplanes that have flown over based on an departure airport
8120
	*
8121
	* @return Array the airport list
8122
	*
8123
	*/
8124
	public function countAllArrivalAirportsByAirport($airport_icao,$filters = array())
8125
	{
8126
		$filter_query = $this->getFilter($filters,true,true);
8127
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8128
		$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 
8129
			    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 
8130
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8131
			    ORDER BY airport_arrival_icao_count DESC";
8132
      
8133
		
8134
		$sth = $this->db->prepare($query);
8135
		$sth->execute(array(':airport_icao' => $airport_icao));
8136
      
8137
		$airport_array = array();
8138
		$temp_array = array();
8139
        
8140
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8141
		{
8142
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8143
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8144
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8145
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8146
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8147
          
8148
			$airport_array[] = $temp_array;
8149
		}
8150
8151
		return $airport_array;
8152
	}
8153
	
8154
	
8155
	/**
8156
	* Gets all arrival airports by country of the airplanes that have flown over based on an airport icao
8157
	*
8158
	* @return Array the airport list
8159
	*
8160
	*/
8161
	public function countAllArrivalAirportCountriesByAirport($airport_icao,$filters = array())
8162
	{
8163
		$filter_query = $this->getFilter($filters,true,true);
8164
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8165
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count, countries.iso3 AS arrival_airport_country_iso3 
8166
			FROM countries, spotter_output".$filter_query." countries.name = spotter_output.arrival_airport_country AND spotter_output.arrival_airport_country <> '' AND spotter_output.departure_airport_icao = :airport_icao 
8167
			GROUP BY spotter_output.arrival_airport_country, countries.iso3
8168
			ORDER BY airport_arrival_country_count DESC";
8169
		
8170
		$sth = $this->db->prepare($query);
8171
		$sth->execute(array(':airport_icao' => $airport_icao));
8172
      
8173
		$airport_array = array();
8174
		$temp_array = array();
8175
        
8176
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8177
		{
8178
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8179
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8180
			$temp_array['arrival_airport_country_iso3'] = $row['arrival_airport_country_iso3'];
8181
			$airport_array[] = $temp_array;
8182
		}
8183
		return $airport_array;
8184
	}
8185
	
8186
	
8187
	/**
8188
	* Gets all arrival airports of the airplanes that have flown over based on a aircraft manufacturer
8189
	*
8190
	* @return Array the airport list
8191
	*
8192
	*/
8193
	public function countAllArrivalAirportsByManufacturer($aircraft_manufacturer,$filters = array())
8194
	{
8195
		$filter_query = $this->getFilter($filters,true,true);
8196
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
8197
		$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 
8198
			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 
8199
                    GROUP BY spotter_output.arrival_airport_icao
8200
					ORDER BY airport_arrival_icao_count DESC";
8201
      
8202
		
8203
		$sth = $this->db->prepare($query);
8204
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
8205
      
8206
		$airport_array = array();
8207
		$temp_array = array();
8208
        
8209
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8210
		{
8211
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8212
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8213
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8214
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8215
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8216
          
8217
			$airport_array[] = $temp_array;
8218
		}
8219
8220
		return $airport_array;
8221
	}
8222
	
8223
	
8224
	
8225
	/**
8226
	* Gets all arrival airports by country of the airplanes that have flown over based on a aircraft manufacturer
8227
	*
8228
	* @return Array the airport list
8229
	*
8230
	*/
8231
	public function countAllArrivalAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
8232
	{
8233
		$filter_query = $this->getFilter($filters,true,true);
8234
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
8235
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count, countries.iso3 AS arrival_airport_country_iso3 
8236
			FROM countries,spotter_output".$filter_query." countries.name = spotter_output.arrival_airport_country AND spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
8237
			GROUP BY spotter_output.arrival_airport_country, countries.iso3
8238
			ORDER BY airport_arrival_country_count DESC";
8239
		
8240
		$sth = $this->db->prepare($query);
8241
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
8242
		$airport_array = array();
8243
		$temp_array = array();
8244
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8245
		{
8246
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8247
			$temp_array['arrival_airport_country_iso3'] = $row['arrival_airport_country_iso3'];
8248
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8249
			$airport_array[] = $temp_array;
8250
		}
8251
		return $airport_array;
8252
	}
8253
	
8254
	
8255
	
8256
	/**
8257
	* Gets all arrival airports of the airplanes that have flown over based on a date
8258
	*
8259
	* @return Array the airport list
8260
	*
8261
	*/
8262
	public function countAllArrivalAirportsByDate($date,$filters = array())
8263
	{
8264
		global $globalTimezone, $globalDBdriver;
8265
		$filter_query = $this->getFilter($filters,true,true);
8266
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8267
		if ($globalTimezone != '') {
8268
			date_default_timezone_set($globalTimezone);
8269
			$datetime = new DateTime($date);
8270
			$offset = $datetime->format('P');
8271
		} else $offset = '+00:00';
8272
8273
		if ($globalDBdriver == 'mysql') {
8274
			$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 
8275
					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  
8276
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8277
					ORDER BY airport_arrival_icao_count DESC";
8278
		} else {
8279
			$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 
8280
					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  
8281
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8282
					ORDER BY airport_arrival_icao_count DESC";
8283
		}
8284
		
8285
		$sth = $this->db->prepare($query);
8286
		$sth->execute(array(':date' => $date, ':offset' => $offset));
8287
      
8288
		$airport_array = array();
8289
		$temp_array = array();
8290
        
8291
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8292
		{
8293
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8294
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8295
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8296
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8297
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8298
          
8299
			$airport_array[] = $temp_array;
8300
		}
8301
		return $airport_array;
8302
	}
8303
	
8304
	
8305
	
8306
	/**
8307
	* Gets all arrival airports by country of the airplanes that have flown over based on a date
8308
	*
8309
	* @return Array the airport list
8310
	*
8311
	*/
8312
	public function countAllArrivalAirportCountriesByDate($date, $filters = array())
8313
	{
8314
		global $globalTimezone, $globalDBdriver;
8315
		$filter_query = $this->getFilter($filters,true,true);
8316
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8317
		if ($globalTimezone != '') {
8318
			date_default_timezone_set($globalTimezone);
8319
			$datetime = new DateTime($date);
8320
			$offset = $datetime->format('P');
8321
		} else $offset = '+00:00';
8322
8323
		if ($globalDBdriver == 'mysql') {
8324
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count, countries.iso3 AS arrival_airport_country_iso3 
8325
					FROM countries,spotter_output".$filter_query." countries.name = spotter_output.arrival_airport_country AND spotter_output.arrival_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
8326
					GROUP BY spotter_output.arrival_airport_country, countries.iso3
8327
					ORDER BY airport_arrival_country_count DESC";
8328
		} else {
8329
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count, countries.iso3 AS arrival_airport_country_iso3 
8330
					FROM countries,spotter_output".$filter_query." countries.name = spotter_output.arrival_airport_country AND spotter_output.arrival_airport_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
8331
					GROUP BY spotter_output.arrival_airport_country, countries.iso3
8332
					ORDER BY airport_arrival_country_count DESC";
8333
		}
8334
		
8335
		$sth = $this->db->prepare($query);
8336
		$sth->execute(array(':date' => $date, ':offset' => $offset));
8337
      
8338
		$airport_array = array();
8339
		$temp_array = array();
8340
        
8341
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8342
		{
8343
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8344
			$temp_array['arrival_airport_country_iso3'] = $row['arrival_airport_country_iso3'];
8345
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8346
			$airport_array[] = $temp_array;
8347
		}
8348
		return $airport_array;
8349
	}
8350
	
8351
	
8352
	
8353
	/**
8354
	* Gets all arrival airports of the airplanes that have flown over based on a ident/callsign
8355
	*
8356
	* @return Array the airport list
8357
	*
8358
	*/
8359
	public function countAllArrivalAirportsByIdent($ident,$filters = array())
8360
	{
8361
		$filter_query = $this->getFilter($filters,true,true);
8362
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
8363
		$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 
8364
		    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  
8365
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8366
		    ORDER BY airport_arrival_icao_count DESC";
8367
      
8368
		
8369
		$sth = $this->db->prepare($query);
8370
		$sth->execute(array(':ident' => $ident));
8371
      
8372
		$airport_array = array();
8373
		$temp_array = array();
8374
        
8375
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8376
		{
8377
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8378
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8379
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8380
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8381
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8382
          
8383
			$airport_array[] = $temp_array;
8384
		}
8385
8386
		return $airport_array;
8387
	}
8388
	
8389
	/**
8390
	* Gets all arrival airports of the airplanes that have flown over based on a owner
8391
	*
8392
	* @return Array the airport list
8393
	*
8394
	*/
8395
	public function countAllArrivalAirportsByOwner($owner,$filters = array())
8396
	{
8397
		$filter_query = $this->getFilter($filters,true,true);
8398
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
8399
		$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 
8400
		    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 
8401
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8402
		    ORDER BY airport_arrival_icao_count DESC";
8403
      
8404
		
8405
		$sth = $this->db->prepare($query);
8406
		$sth->execute(array(':owner' => $owner));
8407
		$airport_array = array();
8408
		$temp_array = array();
8409
        
8410
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8411
		{
8412
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8413
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8414
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8415
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8416
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8417
          
8418
			$airport_array[] = $temp_array;
8419
		}
8420
8421
		return $airport_array;
8422
	}
8423
8424
	/**
8425
	* Gets all arrival airports of the airplanes that have flown over based on a pilot
8426
	*
8427
	* @return Array the airport list
8428
	*
8429
	*/
8430
	public function countAllArrivalAirportsByPilot($pilot,$filters = array())
8431
	{
8432
		$filter_query = $this->getFilter($filters,true,true);
8433
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
8434
		$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 
8435
		    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) 
8436
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8437
		    ORDER BY airport_arrival_icao_count DESC";
8438
      
8439
		
8440
		$sth = $this->db->prepare($query);
8441
		$sth->execute(array(':pilot' => $pilot));
8442
		$airport_array = array();
8443
		$temp_array = array();
8444
        
8445
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8446
		{
8447
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8448
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8449
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8450
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8451
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8452
          
8453
			$airport_array[] = $temp_array;
8454
		}
8455
8456
		return $airport_array;
8457
	}
8458
	
8459
	/**
8460
	* Gets all arrival airports by country of the airplanes that have flown over based on a callsign/ident
8461
	*
8462
	* @return Array the airport list
8463
	*
8464
	*/
8465
	public function countAllArrivalAirportCountriesByIdent($ident, $filters = array())
8466
	{
8467
		$filter_query = $this->getFilter($filters,true,true);
8468
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
8469
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count, countries.iso3 AS arrival_airport_country_iso3 
8470
			FROM countries,spotter_output".$filter_query." countries.name = spotter_output.arrival_airport_country AND spotter_output.arrival_airport_country <> '' AND spotter_output.ident = :ident 
8471
			GROUP BY spotter_output.arrival_airport_country, countries.iso3
8472
			ORDER BY airport_arrival_country_count DESC";
8473
		
8474
		$sth = $this->db->prepare($query);
8475
		$sth->execute(array(':ident' => $ident));
8476
		$airport_array = array();
8477
		$temp_array = array();
8478
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8479
		{
8480
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8481
			$temp_array['arrival_airport_country_iso3'] = $row['arrival_airport_country_iso3'];
8482
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8483
			$airport_array[] = $temp_array;
8484
		}
8485
		return $airport_array;
8486
	}
8487
	
8488
	/**
8489
	* Gets all arrival airports by country of the airplanes that have flown over based on a owner
8490
	*
8491
	* @return Array the airport list
8492
	*
8493
	*/
8494
	public function countAllArrivalAirportCountriesByOwner($owner, $filters = array())
8495
	{
8496
		$filter_query = $this->getFilter($filters,true,true);
8497
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
8498
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8499
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.owner_name = :owner 
8500
                    GROUP BY spotter_output.arrival_airport_country
8501
		    ORDER BY airport_arrival_country_count DESC";
8502
8503
		$sth = $this->db->prepare($query);
8504
		$sth->execute(array(':owner' => $owner));
8505
		return $sth->fetchAll(PDO::FETCH_ASSOC);
8506
	}
8507
	
8508
	/**
8509
	* Gets all arrival airports by country of the airplanes that have flown over based on a pilot
8510
	*
8511
	* @return Array the airport list
8512
	*
8513
	*/
8514
	public function countAllArrivalAirportCountriesByPilot($pilot, $filters = array())
8515
	{
8516
		$filter_query = $this->getFilter($filters,true,true);
8517
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
8518
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8519
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
8520
                    GROUP BY spotter_output.arrival_airport_country
8521
		    ORDER BY airport_arrival_country_count DESC";
8522
8523
		$sth = $this->db->prepare($query);
8524
		$sth->execute(array(':pilot' => $pilot));
8525
		return $sth->fetchAll(PDO::FETCH_ASSOC);
8526
	}
8527
	
8528
	
8529
	
8530
	/**
8531
	* Gets all arrival airports of the airplanes that have flown over based on a country
8532
	*
8533
	* @return Array the airport list
8534
	*
8535
	*/
8536
	public function countAllArrivalAirportsByCountry($country,$filters = array())
8537
	{
8538
		$filter_query = $this->getFilter($filters,true,true);
8539
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8540
		$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 
8541
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
8542
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8543
			    ORDER BY airport_arrival_icao_count DESC";
8544
      
8545
		
8546
		$sth = $this->db->prepare($query);
8547
		$sth->execute(array(':country' => $country));
8548
      
8549
		$airport_array = array();
8550
		$temp_array = array();
8551
        
8552
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8553
		{
8554
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8555
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8556
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8557
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8558
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8559
          
8560
			$airport_array[] = $temp_array;
8561
		}
8562
8563
		return $airport_array;
8564
	}
8565
	
8566
	
8567
	/**
8568
	* Gets all arrival airports by country of the airplanes that have flown over based on a country
8569
	*
8570
	* @return Array the airport list
8571
	*
8572
	*/
8573
	public function countAllArrivalAirportCountriesByCountry($country,$filters = array())
8574
	{
8575
		global $globalDBdriver;
8576
		$filter_query = $this->getFilter($filters,true,true);
8577
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8578
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count, countries.iso3 AS arrival_airport_country_iso3 
8579
			FROM countries,spotter_output".$filter_query." countries.name = spotter_output.arrival_airport_country AND spotter_output.arrival_airport_country <> '' AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country) OR spotter_output.airline_country = :country) 
8580
			GROUP BY spotter_output.arrival_airport_country, countries.iso3
8581
			ORDER BY airport_arrival_country_count DESC";
8582
		
8583
		$sth = $this->db->prepare($query);
8584
		$sth->execute(array(':country' => $country));
8585
		$airport_array = array();
8586
		$temp_array = array();
8587
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8588
		{
8589
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8590
			$temp_array['arrival_airport_country_iso3'] = $row['arrival_airport_country_iso3'];
8591
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8592
			$airport_array[] = $temp_array;
8593
		}
8594
		return $airport_array;
8595
	}
8596
8597
8598
8599
	/**
8600
	* Counts all airport departure countries
8601
	*
8602
	* @return Array the airport departure list
8603
	*
8604
	*/
8605
	public function countAllDepartureCountries($filters = array(),$year = '',$month = '', $day = '')
8606
	{
8607
		global $globalDBdriver;
8608
		$filter_query = $this->getFilter($filters,true,true);
8609
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count, countries.iso3 AS airport_departure_country_iso3 
8610
				FROM countries,spotter_output".$filter_query." countries.name = spotter_output.departure_airport_country AND spotter_output.departure_airport_country <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> ''";
8611
		$query_values = array();
8612
		if ($year != '') {
8613
			if ($globalDBdriver == 'mysql') {
8614
				$query .= " AND YEAR(spotter_output.date) = :year";
8615
				$query_values = array_merge($query_values,array(':year' => $year));
8616
			} else {
8617
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
8618
				$query_values = array_merge($query_values,array(':year' => $year));
8619
			}
8620
		}
8621
		if ($month != '') {
8622
			if ($globalDBdriver == 'mysql') {
8623
				$query .= " AND MONTH(spotter_output.date) = :month";
8624
				$query_values = array_merge($query_values,array(':month' => $month));
8625
			} else {
8626
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
8627
				$query_values = array_merge($query_values,array(':month' => $month));
8628
			}
8629
		}
8630
		if ($day != '') {
8631
			if ($globalDBdriver == 'mysql') {
8632
				$query .= " AND DAY(spotter_output.date) = :day";
8633
				$query_values = array_merge($query_values,array(':day' => $day));
8634
			} else {
8635
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
8636
				$query_values = array_merge($query_values,array(':day' => $day));
8637
			}
8638
		}
8639
		$query .= " GROUP BY spotter_output.departure_airport_country, countries.iso3
8640
					ORDER BY airport_departure_country_count DESC
8641
					LIMIT 10 OFFSET 0";
8642
      
8643
		
8644
		$sth = $this->db->prepare($query);
8645
		$sth->execute($query_values);
8646
      
8647
		$airport_array = array();
8648
		$temp_array = array();
8649
        
8650
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8651
		{
8652
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
8653
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
8654
          
8655
			$airport_array[] = $temp_array;
8656
		}
8657
8658
		return $airport_array;
8659
	}
8660
	
8661
	
8662
	/**
8663
	* Counts all airport arrival countries
8664
	*
8665
	* @return Array the airport arrival list
8666
	*
8667
	*/
8668
	public function countAllArrivalCountries($limit = true,$filters = array(),$year = '',$month = '',$day = '')
8669
	{
8670
		global $globalDBdriver;
8671
		$filter_query = $this->getFilter($filters,true,true);
8672
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count, countries.iso3 AS airport_arrival_country_iso3 
8673
			FROM countries, spotter_output".$filter_query." countries.name = spotter_output.arrival_airport_country AND spotter_output.arrival_airport_country <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''";
8674
		$query_values = array();
8675
		if ($year != '') {
8676
			if ($globalDBdriver == 'mysql') {
8677
				$query .= " AND YEAR(spotter_output.date) = :year";
8678
				$query_values = array_merge($query_values,array(':year' => $year));
8679
			} else {
8680
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
8681
				$query_values = array_merge($query_values,array(':year' => $year));
8682
			}
8683
		}
8684
		if ($month != '') {
8685
			if ($globalDBdriver == 'mysql') {
8686
				$query .= " AND MONTH(spotter_output.date) = :month";
8687
				$query_values = array_merge($query_values,array(':month' => $month));
8688
			} else {
8689
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
8690
				$query_values = array_merge($query_values,array(':month' => $month));
8691
			}
8692
		}
8693
		if ($day != '') {
8694
			if ($globalDBdriver == 'mysql') {
8695
				$query .= " AND DAY(spotter_output.date) = :day";
8696
				$query_values = array_merge($query_values,array(':day' => $day));
8697
			} else {
8698
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
8699
				$query_values = array_merge($query_values,array(':day' => $day));
8700
			}
8701
		}
8702
		$query .= " GROUP BY spotter_output.arrival_airport_country, countries.iso3
8703
					ORDER BY airport_arrival_country_count DESC";
8704
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
8705
      
8706
		
8707
		$sth = $this->db->prepare($query);
8708
		$sth->execute($query_values);
8709
      
8710
		$airport_array = array();
8711
		$temp_array = array();
8712
        
8713
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8714
		{
8715
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8716
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8717
			$temp_array['airport_arrival_country_iso3'] = $row['airport_arrival_country_iso3'];
8718
          
8719
			$airport_array[] = $temp_array;
8720
		}
8721
8722
		return $airport_array;
8723
	}
8724
8725
8726
8727
8728
8729
	/**
8730
	* Gets all route combinations
8731
	*
8732
	* @return Array the route list
8733
	*
8734
	*/
8735
	public function countAllRoutes($filters = array())
8736
	{
8737
		$filter_query = $this->getFilter($filters,true,true);
8738
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
8739
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''
8740
                    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
8741
                    ORDER BY route_count DESC
8742
		    LIMIT 10 OFFSET 0";
8743
      
8744
		
8745
		$sth = $this->db->prepare($query);
8746
		$sth->execute();
8747
      
8748
		$routes_array = array();
8749
		$temp_array = array();
8750
        
8751
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8752
		{
8753
			$temp_array['route_count'] = $row['route_count'];
8754
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8755
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8756
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8757
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8758
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8759
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8760
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8761
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8762
          
8763
			$routes_array[] = $temp_array;
8764
		}
8765
8766
		return $routes_array;
8767
	}
8768
	
8769
	
8770
	
8771
	
8772
	/**
8773
	* Gets all route combinations based on an aircraft
8774
	*
8775
	* @return Array the route list
8776
	*
8777
	*/
8778
	public function countAllRoutesByAircraft($aircraft_icao,$filters = array())
8779
	{
8780
		$filter_query = $this->getFilter($filters,true,true);
8781
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
8782
		$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
8783
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
8784
			    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 
8785
			    ORDER BY route_count DESC";
8786
		
8787
		$sth = $this->db->prepare($query);
8788
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
8789
      
8790
		$routes_array = array();
8791
		$temp_array = array();
8792
        
8793
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8794
		{
8795
			$temp_array['route_count'] = $row['route_count'];
8796
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8797
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8798
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8799
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8800
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8801
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8802
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8803
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8804
          
8805
			$routes_array[] = $temp_array;
8806
		}
8807
8808
		return $routes_array;
8809
	}
8810
	
8811
	
8812
	/**
8813
	* Gets all route combinations based on an aircraft registration
8814
	*
8815
	* @return Array the route list
8816
	*
8817
	*/
8818
	public function countAllRoutesByRegistration($registration, $filters = array())
8819
	{
8820
		$filter_query = $this->getFilter($filters,true,true);
8821
		$registration = filter_var($registration, FILTER_SANITIZE_STRING);
8822
		$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
8823
			FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.registration = :registration 
8824
                    GROUP BY route
8825
                    ORDER BY route_count DESC";
8826
      
8827
		
8828
		$sth = $this->db->prepare($query);
8829
		$sth->execute(array(':registration' => $registration));
8830
      
8831
		$routes_array = array();
8832
		$temp_array = array();
8833
        
8834
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8835
		{
8836
			$temp_array['route_count'] = $row['route_count'];
8837
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8838
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8839
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8840
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8841
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8842
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8843
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8844
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8845
          
8846
			$routes_array[] = $temp_array;
8847
		}
8848
8849
		return $routes_array;
8850
	}
8851
	
8852
	
8853
	
8854
	/**
8855
	* Gets all route combinations based on an airline
8856
	*
8857
	* @return Array the route list
8858
	*
8859
	*/
8860
	public function countAllRoutesByAirline($airline_icao, $filters = array())
8861
	{
8862
		$filter_query = $this->getFilter($filters,true,true);
8863
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
8864
		$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
8865
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.airline_icao = :airline_icao 
8866
			    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 
8867
			    ORDER BY route_count DESC";
8868
      
8869
		
8870
		$sth = $this->db->prepare($query);
8871
		$sth->execute(array(':airline_icao' => $airline_icao));
8872
      
8873
		$routes_array = array();
8874
		$temp_array = array();
8875
        
8876
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8877
		{
8878
			$temp_array['route_count'] = $row['route_count'];
8879
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8880
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8881
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8882
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8883
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8884
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8885
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8886
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8887
          
8888
			$routes_array[] = $temp_array;
8889
		}
8890
8891
		return $routes_array;
8892
	}
8893
	
8894
	
8895
	
8896
	/**
8897
	* Gets all route combinations based on an airport
8898
	*
8899
	* @return Array the route list
8900
	*
8901
	*/
8902
	public function countAllRoutesByAirport($airport_icao, $filters = array())
8903
	{
8904
		$filter_query = $this->getFilter($filters,true,true);
8905
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8906
		$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
8907
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
8908
			    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 
8909
			    ORDER BY route_count DESC";
8910
		
8911
		$sth = $this->db->prepare($query);
8912
		$sth->execute(array(':airport_icao' => $airport_icao));
8913
      
8914
		$routes_array = array();
8915
		$temp_array = array();
8916
        
8917
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8918
		{
8919
			$temp_array['route_count'] = $row['route_count'];
8920
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8921
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8922
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8923
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8924
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8925
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8926
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8927
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8928
          
8929
			$routes_array[] = $temp_array;
8930
		}
8931
8932
		return $routes_array;
8933
	}
8934
	
8935
	
8936
	
8937
	/**
8938
	* Gets all route combinations based on an country
8939
	*
8940
	* @return Array the route list
8941
	*
8942
	*/
8943
	public function countAllRoutesByCountry($country, $filters = array())
8944
	{
8945
		$filter_query = $this->getFilter($filters,true,true);
8946
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8947
		$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
8948
			    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 
8949
			    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 
8950
			    ORDER BY route_count DESC";
8951
		
8952
		$sth = $this->db->prepare($query);
8953
		$sth->execute(array(':country' => $country));
8954
      
8955
		$routes_array = array();
8956
		$temp_array = array();
8957
        
8958
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8959
		{
8960
			$temp_array['route_count'] = $row['route_count'];
8961
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8962
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8963
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8964
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8965
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8966
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8967
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8968
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8969
          
8970
			$routes_array[] = $temp_array;
8971
		}
8972
8973
		return $routes_array;
8974
	}
8975
8976
8977
	/**
8978
	* Gets all route combinations based on an date
8979
	*
8980
	* @return Array the route list
8981
	*
8982
	*/
8983
	public function countAllRoutesByDate($date, $filters = array())
8984
	{
8985
		global $globalTimezone, $globalDBdriver;
8986
		$filter_query = $this->getFilter($filters,true,true);
8987
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8988
		if ($globalTimezone != '') {
8989
			date_default_timezone_set($globalTimezone);
8990
			$datetime = new DateTime($date);
8991
			$offset = $datetime->format('P');
8992
		} else $offset = '+00:00';
8993
		
8994
		if ($globalDBdriver == 'mysql') {
8995
			$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
8996
				    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date  
8997
				    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
8998
				    ORDER BY route_count DESC";
8999
		} else {
9000
			$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
9001
				    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date  
9002
				    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
9003
				    ORDER BY route_count DESC";
9004
		}
9005
		
9006
		$sth = $this->db->prepare($query);
9007
		$sth->execute(array(':date' => $date, ':offset' => $offset));
9008
      
9009
		$routes_array = array();
9010
		$temp_array = array();
9011
        
9012
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9013
		{
9014
			$temp_array['route_count'] = $row['route_count'];
9015
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9016
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9017
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9018
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9019
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9020
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9021
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9022
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9023
          
9024
			$routes_array[] = $temp_array;
9025
		}
9026
9027
		return $routes_array;
9028
	}
9029
	
9030
	
9031
	/**
9032
	* Gets all route combinations based on an ident/callsign
9033
	*
9034
	* @return Array the route list
9035
	*
9036
	*/
9037
	public function countAllRoutesByIdent($ident, $filters = array())
9038
	{
9039
		$filter_query = $this->getFilter($filters,true,true);
9040
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
9041
		$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
9042
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.ident = :ident   
9043
                    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
9044
                    ORDER BY route_count DESC";
9045
      
9046
		
9047
		$sth = $this->db->prepare($query);
9048
		$sth->execute(array(':ident' => $ident));
9049
      
9050
		$routes_array = array();
9051
		$temp_array = array();
9052
        
9053
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9054
		{
9055
			$temp_array['route_count'] = $row['route_count'];
9056
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9057
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9058
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9059
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9060
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9061
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9062
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9063
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9064
          
9065
			$routes_array[] = $temp_array;
9066
		}
9067
9068
		return $routes_array;
9069
	}
9070
	
9071
	/**
9072
	* Gets all route combinations based on an owner
9073
	*
9074
	* @return Array the route list
9075
	*
9076
	*/
9077
	public function countAllRoutesByOwner($owner,$filters = array())
9078
	{
9079
		$filter_query = $this->getFilter($filters,true,true);
9080
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
9081
		$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
9082
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.owner_name = :owner 
9083
                    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
9084
                    ORDER BY route_count DESC";
9085
      
9086
		
9087
		$sth = $this->db->prepare($query);
9088
		$sth->execute(array(':owner' => $owner));
9089
      
9090
		$routes_array = array();
9091
		$temp_array = array();
9092
        
9093
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9094
		{
9095
			$temp_array['route_count'] = $row['route_count'];
9096
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9097
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9098
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9099
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9100
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9101
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9102
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9103
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9104
          
9105
			$routes_array[] = $temp_array;
9106
		}
9107
9108
		return $routes_array;
9109
	}
9110
	
9111
	/**
9112
	* Gets all route combinations based on a pilot
9113
	*
9114
	* @return Array the route list
9115
	*
9116
	*/
9117
	public function countAllRoutesByPilot($pilot,$filters = array())
9118
	{
9119
		$filter_query = $this->getFilter($filters,true,true);
9120
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
9121
		$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
9122
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
9123
                    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
9124
                    ORDER BY route_count DESC";
9125
      
9126
		
9127
		$sth = $this->db->prepare($query);
9128
		$sth->execute(array(':pilot' => $pilot));
9129
      
9130
		$routes_array = array();
9131
		$temp_array = array();
9132
        
9133
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9134
		{
9135
			$temp_array['route_count'] = $row['route_count'];
9136
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9137
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9138
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9139
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9140
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9141
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9142
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9143
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9144
          
9145
			$routes_array[] = $temp_array;
9146
		}
9147
9148
		return $routes_array;
9149
	}
9150
	
9151
	
9152
	/**
9153
	* Gets all route combinations based on an manufacturer
9154
	*
9155
	* @return Array the route list
9156
	*
9157
	*/
9158
	public function countAllRoutesByManufacturer($aircraft_manufacturer, $filters = array())
9159
	{
9160
		$filter_query = $this->getFilter($filters,true,true);
9161
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
9162
		$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
9163
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
9164
                    GROUP BY route
9165
                    ORDER BY route_count DESC";
9166
      
9167
		
9168
		$sth = $this->db->prepare($query);
9169
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
9170
      
9171
		$routes_array = array();
9172
		$temp_array = array();
9173
        
9174
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9175
		{
9176
			$temp_array['route_count'] = $row['route_count'];
9177
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9178
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9179
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9180
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9181
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9182
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9183
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9184
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9185
          
9186
			$routes_array[] = $temp_array;
9187
		}
9188
9189
		return $routes_array;
9190
	}
9191
9192
	
9193
	
9194
	/**
9195
	* Gets all route combinations with waypoints
9196
	*
9197
	* @return Array the route list
9198
	*
9199
	*/
9200
	public function countAllRoutesWithWaypoints($filters = array())
9201
	{
9202
		$filter_query = $this->getFilter($filters,true,true);
9203
		$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
9204
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.waypoints <> '' 
9205
                    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
9206
                    ORDER BY route_count DESC
9207
		    LIMIT 10 OFFSET 0";
9208
      
9209
		
9210
		$sth = $this->db->prepare($query);
9211
		$sth->execute();
9212
      
9213
		$routes_array = array();
9214
		$temp_array = array();
9215
        
9216
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9217
		{
9218
			$temp_array['spotter_id'] = $row['spotter_id'];
9219
			$temp_array['route_count'] = $row['route_count'];
9220
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9221
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9222
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9223
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9224
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9225
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9226
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9227
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9228
          
9229
			$routes_array[] = $temp_array;
9230
		}
9231
9232
		return $routes_array;
9233
	}
9234
	
9235
	/**
9236
	* Gets all callsigns that have flown over
9237
	*
9238
	* @return Array the callsign list
9239
	*
9240
	*/
9241
	public function countAllCallsigns($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '', $month = '', $day = '')
9242
	{
9243
		global $globalDBdriver;
9244
		$filter_query = $this->getFilter($filters,true,true);
9245
		$query  = "SELECT DISTINCT spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name, spotter_output.airline_icao  
9246
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''";
9247
		 if ($olderthanmonths > 0) {
9248
			if ($globalDBdriver == 'mysql') $query .= ' AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH)';
9249
			else $query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
9250
		}
9251
		if ($sincedate != '') {
9252
			if ($globalDBdriver == 'mysql') $query .= " AND spotter_output.date > '".$sincedate."'";
9253
			else $query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
9254
		}
9255
		$query_values = array();
9256
		if ($year != '') {
9257
			if ($globalDBdriver == 'mysql') {
9258
				$query .= " AND YEAR(spotter_output.date) = :year";
9259
				$query_values = array_merge($query_values,array(':year' => $year));
9260
			} else {
9261
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
9262
				$query_values = array_merge($query_values,array(':year' => $year));
9263
			}
9264
		}
9265
		if ($month != '') {
9266
			if ($globalDBdriver == 'mysql') {
9267
				$query .= " AND MONTH(spotter_output.date) = :month";
9268
				$query_values = array_merge($query_values,array(':month' => $month));
9269
			} else {
9270
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
9271
				$query_values = array_merge($query_values,array(':month' => $month));
9272
			}
9273
		}
9274
		if ($day != '') {
9275
			if ($globalDBdriver == 'mysql') {
9276
				$query .= " AND DAY(spotter_output.date) = :day";
9277
				$query_values = array_merge($query_values,array(':day' => $day));
9278
			} else {
9279
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
9280
				$query_values = array_merge($query_values,array(':day' => $day));
9281
			}
9282
		}
9283
		$query .= " GROUP BY spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
9284
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
9285
      		
9286
		$sth = $this->db->prepare($query);
9287
		$sth->execute($query_values);
9288
      
9289
		$callsign_array = array();
9290
		$temp_array = array();
9291
        
9292
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9293
		{
9294
			$temp_array['callsign_icao'] = $row['ident'];
9295
			$temp_array['airline_name'] = $row['airline_name'];
9296
			$temp_array['airline_icao'] = $row['airline_icao'];
9297
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
9298
          
9299
			$callsign_array[] = $temp_array;
9300
		}
9301
9302
		return $callsign_array;
9303
	}
9304
9305
	/**
9306
	* Gets all callsigns that have flown over
9307
	*
9308
	* @return Array the callsign list
9309
	*
9310
	*/
9311
	public function countAllCallsignsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $filters = array())
9312
	{
9313
		global $globalDBdriver;
9314
		$filter_query = $this->getFilter($filters,true,true);
9315
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name  
9316
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''  AND spotter_output.airline_icao <> '' ";
9317
		 if ($olderthanmonths > 0) {
9318
			if ($globalDBdriver == 'mysql') $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
9319
			else $query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
9320
		}
9321
		if ($sincedate != '') {
9322
			if ($globalDBdriver == 'mysql') $query .= "AND spotter_output.date > '".$sincedate."' ";
9323
			else $query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
9324
		}
9325
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
9326
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
9327
      		
9328
		$sth = $this->db->prepare($query);
9329
		$sth->execute();
9330
      
9331
		$callsign_array = array();
9332
		$temp_array = array();
9333
        
9334
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9335
		{
9336
			$temp_array['callsign_icao'] = $row['ident'];
9337
			$temp_array['airline_name'] = $row['airline_name'];
9338
			$temp_array['airline_icao'] = $row['airline_icao'];
9339
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
9340
          
9341
			$callsign_array[] = $temp_array;
9342
		}
9343
9344
		return $callsign_array;
9345
	}
9346
9347
9348
9349
9350
	/**
9351
	* Counts all dates
9352
	*
9353
	* @return Array the date list
9354
	*
9355
	*/
9356
	public function countAllDates($filters = array())
9357
	{
9358
		global $globalTimezone, $globalDBdriver;
9359
		if ($globalTimezone != '') {
9360
			date_default_timezone_set($globalTimezone);
9361
			$datetime = new DateTime();
9362
			$offset = $datetime->format('P');
9363
		} else $offset = '+00:00';
9364
9365
		if ($globalDBdriver == 'mysql') {
9366
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9367
								FROM spotter_output";
9368
			$query .= $this->getFilter($filters);
9369
			$query .= " GROUP BY date_name 
9370
								ORDER BY date_count DESC
9371
								LIMIT 10 OFFSET 0";
9372
		} else {
9373
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9374
								FROM spotter_output";
9375
			$query .= $this->getFilter($filters);
9376
			$query .= " GROUP BY date_name 
9377
								ORDER BY date_count DESC
9378
								LIMIT 10 OFFSET 0";
9379
		}
9380
      
9381
		
9382
		$sth = $this->db->prepare($query);
9383
		$sth->execute(array(':offset' => $offset));
9384
      
9385
		$date_array = array();
9386
		$temp_array = array();
9387
        
9388
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9389
		{
9390
			$temp_array['date_name'] = $row['date_name'];
9391
			$temp_array['date_count'] = $row['date_count'];
9392
9393
			$date_array[] = $temp_array;
9394
		}
9395
9396
		return $date_array;
9397
	}
9398
	
9399
	/**
9400
	* Counts all dates
9401
	*
9402
	* @return Array the date list
9403
	*
9404
	*/
9405
	public function countAllDatesByAirlines($filters = array())
9406
	{
9407
		global $globalTimezone, $globalDBdriver;
9408
		if ($globalTimezone != '') {
9409
			date_default_timezone_set($globalTimezone);
9410
			$datetime = new DateTime();
9411
			$offset = $datetime->format('P');
9412
		} else $offset = '+00:00';
9413
		$filter_query = $this->getFilter($filters,true,true);
9414
		if ($globalDBdriver == 'mysql') {
9415
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9416
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9417
								GROUP BY spotter_output.airline_icao, date_name 
9418
								ORDER BY date_count DESC
9419
								LIMIT 10 OFFSET 0";
9420
		} else {
9421
			$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
9422
								FROM spotter_output 
9423
								WHERE spotter_output.airline_icao <> '' 
9424
								GROUP BY spotter_output.airline_icao, date_name 
9425
								ORDER BY date_count DESC
9426
								LIMIT 10 OFFSET 0";
9427
		}
9428
      
9429
		
9430
		$sth = $this->db->prepare($query);
9431
		$sth->execute(array(':offset' => $offset));
9432
      
9433
		$date_array = array();
9434
		$temp_array = array();
9435
        
9436
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9437
		{
9438
			$temp_array['date_name'] = $row['date_name'];
9439
			$temp_array['date_count'] = $row['date_count'];
9440
			$temp_array['airline_icao'] = $row['airline_icao'];
9441
9442
			$date_array[] = $temp_array;
9443
		}
9444
9445
		return $date_array;
9446
	}	
9447
	
9448
	/**
9449
	* Counts all dates during the last 7 days
9450
	*
9451
	* @return Array the date list
9452
	*
9453
	*/
9454
	public function countAllDatesLast7Days($filters = array())
9455
	{
9456
		global $globalTimezone, $globalDBdriver;
9457
		if ($globalTimezone != '') {
9458
			date_default_timezone_set($globalTimezone);
9459
			$datetime = new DateTime();
9460
			$offset = $datetime->format('P');
9461
		} else $offset = '+00:00';
9462
		$filter_query = $this->getFilter($filters,true,true);
9463
		if ($globalDBdriver == 'mysql') {
9464
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9465
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY)";
9466
			$query .= " GROUP BY date_name 
9467
								ORDER BY spotter_output.date ASC";
9468
			$query_data = array(':offset' => $offset);
9469
		} else {
9470
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9471
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '7 DAYS'";
9472
			$query .= " GROUP BY date_name 
9473
								ORDER BY date_name ASC";
9474
			$query_data = array(':offset' => $offset);
9475
    		}
9476
		
9477
		$sth = $this->db->prepare($query);
9478
		$sth->execute($query_data);
9479
      
9480
		$date_array = array();
9481
		$temp_array = array();
9482
        
9483
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9484
		{
9485
			$temp_array['date_name'] = $row['date_name'];
9486
			$temp_array['date_count'] = $row['date_count'];
9487
          
9488
			$date_array[] = $temp_array;
9489
		}
9490
9491
		return $date_array;
9492
	}
9493
9494
	/**
9495
	* Counts all dates during the last month
9496
	*
9497
	* @return Array the date list
9498
	*
9499
	*/
9500
	public function countAllDatesLastMonth($filters = array())
9501
	{
9502
		global $globalTimezone, $globalDBdriver;
9503
		if ($globalTimezone != '') {
9504
			date_default_timezone_set($globalTimezone);
9505
			$datetime = new DateTime();
9506
			$offset = $datetime->format('P');
9507
		} else $offset = '+00:00';
9508
		$filter_query = $this->getFilter($filters,true,true);
9509
		if ($globalDBdriver == 'mysql') {
9510
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9511
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)";
9512
			$query .= " GROUP BY date_name 
9513
								ORDER BY spotter_output.date ASC";
9514
			$query_data = array(':offset' => $offset);
9515
		} else {
9516
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9517
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'";
9518
			$query .= " GROUP BY date_name 
9519
								ORDER BY date_name ASC";
9520
			$query_data = array(':offset' => $offset);
9521
    		}
9522
		
9523
		$sth = $this->db->prepare($query);
9524
		$sth->execute($query_data);
9525
      
9526
		$date_array = array();
9527
		$temp_array = array();
9528
        
9529
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9530
		{
9531
			$temp_array['date_name'] = $row['date_name'];
9532
			$temp_array['date_count'] = $row['date_count'];
9533
          
9534
			$date_array[] = $temp_array;
9535
		}
9536
9537
		return $date_array;
9538
	}
9539
9540
9541
	/**
9542
	* Counts all dates during the last month
9543
	*
9544
	* @return Array the date list
9545
	*
9546
	*/
9547
	public function countAllDatesLastMonthByAirlines($filters = array())
9548
	{
9549
		global $globalTimezone, $globalDBdriver;
9550
		$filter_query = $this->getFilter($filters,true,true);
9551
		if ($globalTimezone != '') {
9552
			date_default_timezone_set($globalTimezone);
9553
			$datetime = new DateTime();
9554
			$offset = $datetime->format('P');
9555
		} else $offset = '+00:00';
9556
		
9557
		if ($globalDBdriver == 'mysql') {
9558
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9559
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)
9560
								GROUP BY spotter_output.airline_icao, date_name 
9561
								ORDER BY spotter_output.date ASC";
9562
			$query_data = array(':offset' => $offset);
9563
		} else {
9564
			$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
9565
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'
9566
								GROUP BY spotter_output.airline_icao, date_name 
9567
								ORDER BY date_name ASC";
9568
			$query_data = array(':offset' => $offset);
9569
    		}
9570
		
9571
		$sth = $this->db->prepare($query);
9572
		$sth->execute($query_data);
9573
      
9574
		$date_array = array();
9575
		$temp_array = array();
9576
        
9577
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9578
		{
9579
			$temp_array['date_name'] = $row['date_name'];
9580
			$temp_array['date_count'] = $row['date_count'];
9581
			$temp_array['airline_icao'] = $row['airline_icao'];
9582
          
9583
			$date_array[] = $temp_array;
9584
		}
9585
9586
		return $date_array;
9587
	}
9588
	
9589
9590
	/**
9591
	* Counts all month
9592
	*
9593
	* @return Array the month list
9594
	*
9595
	*/
9596
	public function countAllMonths($filters = array())
9597
	{
9598
		global $globalTimezone, $globalDBdriver;
9599
		if ($globalTimezone != '') {
9600
			date_default_timezone_set($globalTimezone);
9601
			$datetime = new DateTime();
9602
			$offset = $datetime->format('P');
9603
		} else $offset = '+00:00';
9604
9605
		if ($globalDBdriver == 'mysql') {
9606
			$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
9607
								FROM spotter_output";
9608
			$query .= $this->getFilter($filters);
9609
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
9610
		} else {
9611
			$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
9612
								FROM spotter_output";
9613
			$query .= $this->getFilter($filters);
9614
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
9615
		}
9616
      
9617
		
9618
		$sth = $this->db->prepare($query);
9619
		$sth->execute(array(':offset' => $offset));
9620
      
9621
		$date_array = array();
9622
		$temp_array = array();
9623
        
9624
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9625
		{
9626
			$temp_array['month_name'] = $row['month_name'];
9627
			$temp_array['year_name'] = $row['year_name'];
9628
			$temp_array['date_count'] = $row['date_count'];
9629
9630
			$date_array[] = $temp_array;
9631
		}
9632
9633
		return $date_array;
9634
	}
9635
9636
	/**
9637
	* Counts all month
9638
	*
9639
	* @return Array the month list
9640
	*
9641
	*/
9642
	public function countAllMonthsByAirlines($filters = array())
9643
	{
9644
		global $globalTimezone, $globalDBdriver;
9645
		$filter_query = $this->getFilter($filters,true,true);
9646
		if ($globalTimezone != '') {
9647
			date_default_timezone_set($globalTimezone);
9648
			$datetime = new DateTime();
9649
			$offset = $datetime->format('P');
9650
		} else $offset = '+00:00';
9651
9652
		if ($globalDBdriver == 'mysql') {
9653
			$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
9654
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9655
								GROUP BY spotter_output.airline_icao, year_name, month_name 
9656
								ORDER BY date_count DESC";
9657
		} else {
9658
			$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
9659
								FROM spotter_output 
9660
								WHERE spotter_output.airline_icao <> '' 
9661
								GROUP BY spotter_output.airline_icao, year_name, month_name 
9662
								ORDER BY date_count DESC";
9663
		}
9664
      
9665
		
9666
		$sth = $this->db->prepare($query);
9667
		$sth->execute(array(':offset' => $offset));
9668
      
9669
		$date_array = array();
9670
		$temp_array = array();
9671
        
9672
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9673
		{
9674
			$temp_array['month_name'] = $row['month_name'];
9675
			$temp_array['year_name'] = $row['year_name'];
9676
			$temp_array['date_count'] = $row['date_count'];
9677
			$temp_array['airline_icao'] = $row['airline_icao'];
9678
9679
			$date_array[] = $temp_array;
9680
		}
9681
9682
		return $date_array;
9683
	}
9684
9685
	/**
9686
	* Counts all military month
9687
	*
9688
	* @return Array the month list
9689
	*
9690
	*/
9691
	public function countAllMilitaryMonths($filters = array())
9692
	{
9693
		global $globalTimezone, $globalDBdriver;
9694
		if ($globalTimezone != '') {
9695
			date_default_timezone_set($globalTimezone);
9696
			$datetime = new DateTime();
9697
			$offset = $datetime->format('P');
9698
		} else $offset = '+00:00';
9699
		$filter_query = $this->getFilter($filters,true,true);
9700
		if ($globalDBdriver == 'mysql') {
9701
			$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
9702
								FROM spotter_output".$filter_query." spotter_output.airline_type = 'military'
9703
								GROUP BY year_name, month_name 
9704
								ORDER BY date_count DESC";
9705
		} else {
9706
			$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
9707
								FROM spotter_output".$filter_query." spotter_output.airline_type = 'military'
9708
								GROUP BY year_name, month_name 
9709
								ORDER BY date_count DESC";
9710
		}
9711
		
9712
		$sth = $this->db->prepare($query);
9713
		$sth->execute(array(':offset' => $offset));
9714
      
9715
		$date_array = array();
9716
		$temp_array = array();
9717
        
9718
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9719
		{
9720
			$temp_array['month_name'] = $row['month_name'];
9721
			$temp_array['year_name'] = $row['year_name'];
9722
			$temp_array['date_count'] = $row['date_count'];
9723
9724
			$date_array[] = $temp_array;
9725
		}
9726
9727
		return $date_array;
9728
	}
9729
	
9730
	/**
9731
	* Counts all month owners
9732
	*
9733
	* @return Array the month list
9734
	*
9735
	*/
9736
	public function countAllMonthsOwners($filters = array())
9737
	{
9738
		global $globalTimezone, $globalDBdriver;
9739
		if ($globalTimezone != '') {
9740
			date_default_timezone_set($globalTimezone);
9741
			$datetime = new DateTime();
9742
			$offset = $datetime->format('P');
9743
		} else $offset = '+00:00';
9744
		$filter_query = $this->getFilter($filters,true,true);
9745
9746
		if ($globalDBdriver == 'mysql') {
9747
			$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
9748
								FROM spotter_output".$filter_query." owner_name <> ''
9749
								GROUP BY year_name, month_name
9750
								ORDER BY date_count DESC";
9751
		} else {
9752
			$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
9753
								FROM spotter_output".$filter_query." owner_name <> ''
9754
								GROUP BY year_name, month_name
9755
								ORDER BY date_count DESC";
9756
		}
9757
		
9758
		$sth = $this->db->prepare($query);
9759
		$sth->execute(array(':offset' => $offset));
9760
      
9761
		$date_array = array();
9762
		$temp_array = array();
9763
        
9764
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9765
		{
9766
			$temp_array['month_name'] = $row['month_name'];
9767
			$temp_array['year_name'] = $row['year_name'];
9768
			$temp_array['date_count'] = $row['date_count'];
9769
9770
			$date_array[] = $temp_array;
9771
		}
9772
9773
		return $date_array;
9774
	}
9775
	
9776
	/**
9777
	* Counts all month owners
9778
	*
9779
	* @return Array the month list
9780
	*
9781
	*/
9782
	public function countAllMonthsOwnersByAirlines($filters = array())
9783
	{
9784
		global $globalTimezone, $globalDBdriver;
9785
		$filter_query = $this->getFilter($filters,true,true);
9786
		if ($globalTimezone != '') {
9787
			date_default_timezone_set($globalTimezone);
9788
			$datetime = new DateTime();
9789
			$offset = $datetime->format('P');
9790
		} else $offset = '+00:00';
9791
9792
		if ($globalDBdriver == 'mysql') {
9793
			$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
9794
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
9795
								GROUP BY spotter_output.airline_icao, year_name, month_name
9796
								ORDER BY date_count DESC";
9797
		} else {
9798
			$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
9799
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
9800
								GROUP BY spotter_output.airline_icao, year_name, month_name
9801
								ORDER BY date_count DESC";
9802
		}
9803
		
9804
		$sth = $this->db->prepare($query);
9805
		$sth->execute(array(':offset' => $offset));
9806
      
9807
		$date_array = array();
9808
		$temp_array = array();
9809
        
9810
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9811
		{
9812
			$temp_array['month_name'] = $row['month_name'];
9813
			$temp_array['year_name'] = $row['year_name'];
9814
			$temp_array['date_count'] = $row['date_count'];
9815
			$temp_array['airline_icao'] = $row['airline_icao'];
9816
9817
			$date_array[] = $temp_array;
9818
		}
9819
9820
		return $date_array;
9821
	}
9822
9823
	/**
9824
	* Counts all month pilot
9825
	*
9826
	* @return Array the month list
9827
	*
9828
	*/
9829
	public function countAllMonthsPilots($filters = array())
9830
	{
9831
		global $globalTimezone, $globalDBdriver;
9832
		if ($globalTimezone != '') {
9833
			date_default_timezone_set($globalTimezone);
9834
			$datetime = new DateTime();
9835
			$offset = $datetime->format('P');
9836
		} else $offset = '+00:00';
9837
		$filter_query = $this->getFilter($filters,true,true);
9838
9839
		if ($globalDBdriver == 'mysql') {
9840
			$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
9841
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
9842
								GROUP BY year_name, month_name
9843
								ORDER BY date_count DESC";
9844
		} else {
9845
			$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
9846
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
9847
								GROUP BY year_name, month_name
9848
								ORDER BY date_count DESC";
9849
		}
9850
		
9851
		$sth = $this->db->prepare($query);
9852
		$sth->execute(array(':offset' => $offset));
9853
      
9854
		$date_array = array();
9855
		$temp_array = array();
9856
        
9857
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9858
		{
9859
			$temp_array['month_name'] = $row['month_name'];
9860
			$temp_array['year_name'] = $row['year_name'];
9861
			$temp_array['date_count'] = $row['date_count'];
9862
9863
			$date_array[] = $temp_array;
9864
		}
9865
9866
		return $date_array;
9867
	}
9868
	
9869
	/**
9870
	* Counts all month pilot
9871
	*
9872
	* @return Array the month list
9873
	*
9874
	*/
9875
	public function countAllMonthsPilotsByAirlines($filters = array())
9876
	{
9877
		global $globalTimezone, $globalDBdriver;
9878
		$filter_query = $this->getFilter($filters,true,true);
9879
		if ($globalTimezone != '') {
9880
			date_default_timezone_set($globalTimezone);
9881
			$datetime = new DateTime();
9882
			$offset = $datetime->format('P');
9883
		} else $offset = '+00:00';
9884
9885
		if ($globalDBdriver == 'mysql') {
9886
			$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
9887
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
9888
								GROUP BY spotter_output.airline_icao,year_name, month_name
9889
								ORDER BY date_count DESC";
9890
		} else {
9891
			$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
9892
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
9893
								GROUP BY spotter_output.airline_icao, year_name, month_name
9894
								ORDER BY date_count DESC";
9895
		}
9896
		
9897
		$sth = $this->db->prepare($query);
9898
		$sth->execute(array(':offset' => $offset));
9899
      
9900
		$date_array = array();
9901
		$temp_array = array();
9902
        
9903
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9904
		{
9905
			$temp_array['month_name'] = $row['month_name'];
9906
			$temp_array['year_name'] = $row['year_name'];
9907
			$temp_array['date_count'] = $row['date_count'];
9908
			$temp_array['airline_icao'] = $row['airline_icao'];
9909
9910
			$date_array[] = $temp_array;
9911
		}
9912
9913
		return $date_array;
9914
	}
9915
9916
	/**
9917
	* Counts all month airline
9918
	*
9919
	* @return Array the month list
9920
	*
9921
	*/
9922
	public function countAllMonthsAirlines($filters = array())
9923
	{
9924
		global $globalTimezone, $globalDBdriver;
9925
		$filter_query = $this->getFilter($filters,true,true);
9926
		if ($globalTimezone != '') {
9927
			date_default_timezone_set($globalTimezone);
9928
			$datetime = new DateTime();
9929
			$offset = $datetime->format('P');
9930
		} else $offset = '+00:00';
9931
9932
		if ($globalDBdriver == 'mysql') {
9933
			$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
9934
								FROM spotter_output".$filter_query." airline_icao <> '' 
9935
								GROUP BY year_name, month_name
9936
								ORDER BY date_count DESC";
9937
		} else {
9938
			$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
9939
								FROM spotter_output".$filter_query." airline_icao <> '' 
9940
								GROUP BY year_name, month_name
9941
								ORDER BY date_count DESC";
9942
		}
9943
		
9944
		$sth = $this->db->prepare($query);
9945
		$sth->execute(array(':offset' => $offset));
9946
      
9947
		$date_array = array();
9948
		$temp_array = array();
9949
        
9950
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9951
		{
9952
			$temp_array['month_name'] = $row['month_name'];
9953
			$temp_array['year_name'] = $row['year_name'];
9954
			$temp_array['date_count'] = $row['date_count'];
9955
9956
			$date_array[] = $temp_array;
9957
		}
9958
9959
		return $date_array;
9960
	}
9961
	
9962
	/**
9963
	* Counts all month aircraft
9964
	*
9965
	* @return Array the month list
9966
	*
9967
	*/
9968
	public function countAllMonthsAircrafts($filters = array())
9969
	{
9970
		global $globalTimezone, $globalDBdriver;
9971
		if ($globalTimezone != '') {
9972
			date_default_timezone_set($globalTimezone);
9973
			$datetime = new DateTime();
9974
			$offset = $datetime->format('P');
9975
		} else $offset = '+00:00';
9976
		$filter_query = $this->getFilter($filters,true,true);
9977
9978
		if ($globalDBdriver == 'mysql') {
9979
			$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
9980
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
9981
								GROUP BY year_name, month_name
9982
								ORDER BY date_count DESC";
9983
		} else {
9984
			$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
9985
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
9986
								GROUP BY year_name, month_name
9987
								ORDER BY date_count DESC";
9988
		}
9989
		
9990
		$sth = $this->db->prepare($query);
9991
		$sth->execute(array(':offset' => $offset));
9992
      
9993
		$date_array = array();
9994
		$temp_array = array();
9995
        
9996
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9997
		{
9998
			$temp_array['month_name'] = $row['month_name'];
9999
			$temp_array['year_name'] = $row['year_name'];
10000
			$temp_array['date_count'] = $row['date_count'];
10001
10002
			$date_array[] = $temp_array;
10003
		}
10004
10005
		return $date_array;
10006
	}
10007
	
10008
10009
	/**
10010
	* Counts all month aircraft
10011
	*
10012
	* @return Array the month list
10013
	*
10014
	*/
10015
	public function countAllMonthsAircraftsByAirlines($filters = array())
10016
	{
10017
		global $globalTimezone, $globalDBdriver;
10018
		$filter_query = $this->getFilter($filters,true,true);
10019
		if ($globalTimezone != '') {
10020
			date_default_timezone_set($globalTimezone);
10021
			$datetime = new DateTime();
10022
			$offset = $datetime->format('P');
10023
		} else $offset = '+00:00';
10024
10025
		if ($globalDBdriver == 'mysql') {
10026
			$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
10027
								FROM spotter_output".$filter_query." aircraft_icao <> ''  AND spotter_output.airline_icao <> '' 
10028
								GROUP BY spotter_output.airline_icao, year_name, month_name
10029
								ORDER BY date_count DESC";
10030
		} else {
10031
			$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
10032
								FROM spotter_output".$filter_query." aircraft_icao <> '' AND spotter_output.airline_icao <> '' 
10033
								GROUP BY spotter_output.airline_icao, year_name, month_name
10034
								ORDER BY date_count DESC";
10035
		}
10036
		
10037
		$sth = $this->db->prepare($query);
10038
		$sth->execute(array(':offset' => $offset));
10039
      
10040
		$date_array = array();
10041
		$temp_array = array();
10042
        
10043
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10044
		{
10045
			$temp_array['month_name'] = $row['month_name'];
10046
			$temp_array['year_name'] = $row['year_name'];
10047
			$temp_array['date_count'] = $row['date_count'];
10048
			$temp_array['airline_icao'] = $row['airline_icao'];
10049
10050
			$date_array[] = $temp_array;
10051
		}
10052
10053
		return $date_array;
10054
	}
10055
10056
	/**
10057
	* Counts all month real arrival
10058
	*
10059
	* @return Array the month list
10060
	*
10061
	*/
10062
	public function countAllMonthsRealArrivals($filters = array())
10063
	{
10064
		global $globalTimezone, $globalDBdriver;
10065
		if ($globalTimezone != '') {
10066
			date_default_timezone_set($globalTimezone);
10067
			$datetime = new DateTime();
10068
			$offset = $datetime->format('P');
10069
		} else $offset = '+00:00';
10070
		$filter_query = $this->getFilter($filters,true,true);
10071
10072
		if ($globalDBdriver == 'mysql') {
10073
			$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
10074
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
10075
								GROUP BY year_name, month_name
10076
								ORDER BY date_count DESC";
10077
		} else {
10078
			$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
10079
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
10080
								GROUP BY year_name, month_name
10081
								ORDER BY date_count DESC";
10082
		}
10083
		
10084
		$sth = $this->db->prepare($query);
10085
		$sth->execute(array(':offset' => $offset));
10086
      
10087
		$date_array = array();
10088
		$temp_array = array();
10089
        
10090
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10091
		{
10092
			$temp_array['month_name'] = $row['month_name'];
10093
			$temp_array['year_name'] = $row['year_name'];
10094
			$temp_array['date_count'] = $row['date_count'];
10095
10096
			$date_array[] = $temp_array;
10097
		}
10098
10099
		return $date_array;
10100
	}
10101
	
10102
10103
	/**
10104
	* Counts all month real arrival
10105
	*
10106
	* @return Array the month list
10107
	*
10108
	*/
10109
	public function countAllMonthsRealArrivalsByAirlines($filters = array())
10110
	{
10111
		global $globalTimezone, $globalDBdriver;
10112
		$filter_query = $this->getFilter($filters,true,true);
10113
		if ($globalTimezone != '') {
10114
			date_default_timezone_set($globalTimezone);
10115
			$datetime = new DateTime();
10116
			$offset = $datetime->format('P');
10117
		} else $offset = '+00:00';
10118
10119
		if ($globalDBdriver == 'mysql') {
10120
			$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
10121
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
10122
								GROUP BY spotter_output.airline_icao, year_name, month_name
10123
								ORDER BY date_count DESC";
10124
		} else {
10125
			$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
10126
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
10127
								GROUP BY spotter_output.airline_icao, year_name, month_name
10128
								ORDER BY date_count DESC";
10129
		}
10130
		
10131
		$sth = $this->db->prepare($query);
10132
		$sth->execute(array(':offset' => $offset));
10133
      
10134
		$date_array = array();
10135
		$temp_array = array();
10136
        
10137
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10138
		{
10139
			$temp_array['month_name'] = $row['month_name'];
10140
			$temp_array['year_name'] = $row['year_name'];
10141
			$temp_array['date_count'] = $row['date_count'];
10142
			$temp_array['airline_icao'] = $row['airline_icao'];
10143
10144
			$date_array[] = $temp_array;
10145
		}
10146
10147
		return $date_array;
10148
	}
10149
	
10150
10151
	/**
10152
	* Counts all dates during the last year
10153
	*
10154
	* @return Array the date list
10155
	*
10156
	*/
10157
	public function countAllMonthsLastYear($filters)
10158
	{
10159
		global $globalTimezone, $globalDBdriver;
10160
		if ($globalTimezone != '') {
10161
			date_default_timezone_set($globalTimezone);
10162
			$datetime = new DateTime();
10163
			$offset = $datetime->format('P');
10164
		} else $offset = '+00:00';
10165
		$filter_query = $this->getFilter($filters,true,true);
10166
		if ($globalDBdriver == 'mysql') {
10167
			$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
10168
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 YEAR)";
10169
			$query .= " GROUP BY year_name, month_name
10170
								ORDER BY year_name, month_name ASC";
10171
			$query_data = array(':offset' => $offset);
10172
		} else {
10173
			$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
10174
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 YEARS'";
10175
			$query .= " GROUP BY year_name, month_name
10176
								ORDER BY year_name, month_name ASC";
10177
			$query_data = array(':offset' => $offset);
10178
    		}
10179
		
10180
		$sth = $this->db->prepare($query);
10181
		$sth->execute($query_data);
10182
      
10183
		$date_array = array();
10184
		$temp_array = array();
10185
        
10186
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10187
		{
10188
			$temp_array['year_name'] = $row['year_name'];
10189
			$temp_array['month_name'] = $row['month_name'];
10190
			$temp_array['date_count'] = $row['date_count'];
10191
          
10192
			$date_array[] = $temp_array;
10193
		}
10194
10195
		return $date_array;
10196
	}
10197
	
10198
	
10199
	
10200
	/**
10201
	* Counts all hours
10202
	*
10203
	* @return Array the hour list
10204
	*
10205
	*/
10206
	public function countAllHours($orderby,$filters = array())
10207
	{
10208
		global $globalTimezone, $globalDBdriver;
10209
		if ($globalTimezone != '') {
10210
			date_default_timezone_set($globalTimezone);
10211
			$datetime = new DateTime();
10212
			$offset = $datetime->format('P');
10213
		} else $offset = '+00:00';
10214
10215
		$orderby_sql = '';
10216
		if ($orderby == "hour")
10217
		{
10218
			$orderby_sql = "ORDER BY hour_name ASC";
10219
		}
10220
		if ($orderby == "count")
10221
		{
10222
			$orderby_sql = "ORDER BY hour_count DESC";
10223
		}
10224
		
10225
		if ($globalDBdriver == 'mysql') {
10226
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10227
								FROM spotter_output";
10228
			$query .= $this->getFilter($filters);
10229
			$query .= " GROUP BY hour_name 
10230
								".$orderby_sql;
10231
10232
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
10233
								FROM spotter_output 
10234
								GROUP BY hour_name 
10235
								".$orderby_sql."
10236
								LIMIT 10 OFFSET 00";
10237
  */    
10238
		$query_data = array(':offset' => $offset);
10239
		} else {
10240
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10241
								FROM spotter_output";
10242
			$query .= $this->getFilter($filters);
10243
			$query .= " GROUP BY hour_name 
10244
								".$orderby_sql;
10245
			$query_data = array(':offset' => $offset);
10246
		}
10247
		
10248
		$sth = $this->db->prepare($query);
10249
		$sth->execute($query_data);
10250
      
10251
		$hour_array = array();
10252
		$temp_array = array();
10253
        
10254
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10255
		{
10256
			$temp_array['hour_name'] = $row['hour_name'];
10257
			$temp_array['hour_count'] = $row['hour_count'];
10258
          
10259
			$hour_array[] = $temp_array;
10260
		}
10261
10262
		return $hour_array;
10263
	}
10264
	
10265
	/**
10266
	* Counts all hours
10267
	*
10268
	* @return Array the hour list
10269
	*
10270
	*/
10271
	public function countAllHoursByAirlines($orderby, $filters = array())
10272
	{
10273
		global $globalTimezone, $globalDBdriver;
10274
		$filter_query = $this->getFilter($filters,true,true);
10275
		if ($globalTimezone != '') {
10276
			date_default_timezone_set($globalTimezone);
10277
			$datetime = new DateTime();
10278
			$offset = $datetime->format('P');
10279
		} else $offset = '+00:00';
10280
10281
		$orderby_sql = '';
10282
		if ($orderby == "hour")
10283
		{
10284
			$orderby_sql = "ORDER BY hour_name ASC";
10285
		}
10286
		if ($orderby == "count")
10287
		{
10288
			$orderby_sql = "ORDER BY hour_count DESC";
10289
		}
10290
		
10291
		if ($globalDBdriver == 'mysql') {
10292
			$query  = "SELECT spotter_output.airline_icao, HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10293
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
10294
								GROUP BY spotter_output.airline_icao, hour_name 
10295
								".$orderby_sql;
10296
10297
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
10298
								FROM spotter_output 
10299
								GROUP BY hour_name 
10300
								".$orderby_sql."
10301
								LIMIT 10 OFFSET 00";
10302
  */    
10303
		$query_data = array(':offset' => $offset);
10304
		} else {
10305
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10306
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
10307
								GROUP BY spotter_output.airline_icao, hour_name 
10308
								".$orderby_sql;
10309
			$query_data = array(':offset' => $offset);
10310
		}
10311
		
10312
		$sth = $this->db->prepare($query);
10313
		$sth->execute($query_data);
10314
      
10315
		$hour_array = array();
10316
		$temp_array = array();
10317
        
10318
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10319
		{
10320
			$temp_array['hour_name'] = $row['hour_name'];
10321
			$temp_array['hour_count'] = $row['hour_count'];
10322
			$temp_array['airline_icao'] = $row['airline_icao'];
10323
          
10324
			$hour_array[] = $temp_array;
10325
		}
10326
10327
		return $hour_array;
10328
	}
10329
10330
10331
10332
	/**
10333
	* Counts all hours by airline
10334
	*
10335
	* @return Array the hour list
10336
	*
10337
	*/
10338
	public function countAllHoursByAirline($airline_icao, $filters = array())
10339
	{
10340
		global $globalTimezone, $globalDBdriver;
10341
		$filter_query = $this->getFilter($filters,true,true);
10342
		if ($globalTimezone != '') {
10343
			date_default_timezone_set($globalTimezone);
10344
			$datetime = new DateTime();
10345
			$offset = $datetime->format('P');
10346
		} else $offset = '+00:00';
10347
10348
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
10349
10350
		if ($globalDBdriver == 'mysql') {
10351
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10352
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
10353
								GROUP BY hour_name 
10354
								ORDER BY hour_name ASC";
10355
		} else {
10356
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10357
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
10358
								GROUP BY hour_name 
10359
								ORDER BY hour_name ASC";
10360
		}
10361
		
10362
		$sth = $this->db->prepare($query);
10363
		$sth->execute(array(':airline_icao' => $airline_icao,':offset' => $offset));
10364
      
10365
		$hour_array = array();
10366
		$temp_array = array();
10367
        
10368
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10369
		{
10370
			$temp_array['hour_name'] = $row['hour_name'];
10371
			$temp_array['hour_count'] = $row['hour_count'];
10372
          
10373
			$hour_array[] = $temp_array;
10374
		}
10375
10376
		return $hour_array;
10377
	}
10378
	
10379
	
10380
	
10381
	
10382
	/**
10383
	* Counts all hours by aircraft
10384
	*
10385
	* @return Array the hour list
10386
	*
10387
	*/
10388
	public function countAllHoursByAircraft($aircraft_icao, $filters = array())
10389
	{
10390
		global $globalTimezone, $globalDBdriver;
10391
		$filter_query = $this->getFilter($filters,true,true);
10392
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
10393
		if ($globalTimezone != '') {
10394
			date_default_timezone_set($globalTimezone);
10395
			$datetime = new DateTime();
10396
			$offset = $datetime->format('P');
10397
		} else $offset = '+00:00';
10398
10399
		if ($globalDBdriver == 'mysql') {
10400
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10401
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
10402
								GROUP BY hour_name 
10403
								ORDER BY hour_name ASC";
10404
		} else {
10405
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10406
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
10407
								GROUP BY hour_name 
10408
								ORDER BY hour_name ASC";
10409
		}
10410
		
10411
		$sth = $this->db->prepare($query);
10412
		$sth->execute(array(':aircraft_icao' => $aircraft_icao,':offset' => $offset));
10413
      
10414
		$hour_array = array();
10415
		$temp_array = array();
10416
        
10417
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10418
		{
10419
			$temp_array['hour_name'] = $row['hour_name'];
10420
			$temp_array['hour_count'] = $row['hour_count'];
10421
          
10422
			$hour_array[] = $temp_array;
10423
		}
10424
10425
		return $hour_array;
10426
	}
10427
	
10428
	
10429
	/**
10430
	* Counts all hours by aircraft registration
10431
	*
10432
	* @return Array the hour list
10433
	*
10434
	*/
10435
	public function countAllHoursByRegistration($registration, $filters = array())
10436
	{
10437
		global $globalTimezone, $globalDBdriver;
10438
		$filter_query = $this->getFilter($filters,true,true);
10439
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
10440
		if ($globalTimezone != '') {
10441
			date_default_timezone_set($globalTimezone);
10442
			$datetime = new DateTime();
10443
			$offset = $datetime->format('P');
10444
		} else $offset = '+00:00';
10445
10446
		if ($globalDBdriver == 'mysql') {
10447
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10448
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
10449
								GROUP BY hour_name 
10450
								ORDER BY hour_name ASC";
10451
		} else {
10452
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10453
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
10454
								GROUP BY hour_name 
10455
								ORDER BY hour_name ASC";
10456
		}
10457
		
10458
		$sth = $this->db->prepare($query);
10459
		$sth->execute(array(':registration' => $registration,':offset' => $offset));
10460
      
10461
		$hour_array = array();
10462
		$temp_array = array();
10463
        
10464
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10465
		{
10466
			$temp_array['hour_name'] = $row['hour_name'];
10467
			$temp_array['hour_count'] = $row['hour_count'];
10468
          
10469
			$hour_array[] = $temp_array;
10470
		}
10471
10472
		return $hour_array;
10473
	}
10474
	
10475
	
10476
	/**
10477
	* Counts all hours by airport
10478
	*
10479
	* @return Array the hour list
10480
	*
10481
	*/
10482
	public function countAllHoursByAirport($airport_icao, $filters = array())
10483
	{
10484
		global $globalTimezone, $globalDBdriver;
10485
		$filter_query = $this->getFilter($filters,true,true);
10486
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
10487
		if ($globalTimezone != '') {
10488
			date_default_timezone_set($globalTimezone);
10489
			$datetime = new DateTime();
10490
			$offset = $datetime->format('P');
10491
		} else $offset = '+00:00';
10492
10493
		if ($globalDBdriver == 'mysql') {
10494
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10495
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
10496
								GROUP BY hour_name 
10497
								ORDER BY hour_name ASC";
10498
		} else {
10499
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10500
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
10501
								GROUP BY hour_name 
10502
								ORDER BY hour_name ASC";
10503
		}
10504
		
10505
		$sth = $this->db->prepare($query);
10506
		$sth->execute(array(':airport_icao' => $airport_icao,':offset' => $offset));
10507
      
10508
		$hour_array = array();
10509
		$temp_array = array();
10510
        
10511
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10512
		{
10513
			$temp_array['hour_name'] = $row['hour_name'];
10514
			$temp_array['hour_count'] = $row['hour_count'];
10515
          
10516
			$hour_array[] = $temp_array;
10517
		}
10518
10519
		return $hour_array;
10520
	}
10521
	
10522
	
10523
	
10524
	/**
10525
	* Counts all hours by manufacturer
10526
	*
10527
	* @return Array the hour list
10528
	*
10529
	*/
10530
	public function countAllHoursByManufacturer($aircraft_manufacturer,$filters =array())
10531
	{
10532
		global $globalTimezone, $globalDBdriver;
10533
		$filter_query = $this->getFilter($filters,true,true);
10534
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
10535
		if ($globalTimezone != '') {
10536
			date_default_timezone_set($globalTimezone);
10537
			$datetime = new DateTime();
10538
			$offset = $datetime->format('P');
10539
		} else $offset = '+00:00';
10540
10541
		if ($globalDBdriver == 'mysql') {
10542
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10543
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
10544
								GROUP BY hour_name 
10545
								ORDER BY hour_name ASC";
10546
		} else {
10547
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10548
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
10549
								GROUP BY hour_name 
10550
								ORDER BY hour_name ASC";
10551
		}
10552
		
10553
		$sth = $this->db->prepare($query);
10554
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer,':offset' => $offset));
10555
      
10556
		$hour_array = array();
10557
		$temp_array = array();
10558
        
10559
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10560
		{
10561
			$temp_array['hour_name'] = $row['hour_name'];
10562
			$temp_array['hour_count'] = $row['hour_count'];
10563
          
10564
			$hour_array[] = $temp_array;
10565
		}
10566
10567
		return $hour_array;
10568
	}
10569
	
10570
	
10571
	
10572
	/**
10573
	* Counts all hours by date
10574
	*
10575
	* @return Array the hour list
10576
	*
10577
	*/
10578
	public function countAllHoursByDate($date, $filters = array())
10579
	{
10580
		global $globalTimezone, $globalDBdriver;
10581
		$filter_query = $this->getFilter($filters,true,true);
10582
		$date = filter_var($date,FILTER_SANITIZE_STRING);
10583
		if ($globalTimezone != '') {
10584
			date_default_timezone_set($globalTimezone);
10585
			$datetime = new DateTime($date);
10586
			$offset = $datetime->format('P');
10587
		} else $offset = '+00:00';
10588
10589
		if ($globalDBdriver == 'mysql') {
10590
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10591
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
10592
								GROUP BY hour_name 
10593
								ORDER BY hour_name ASC";
10594
		} else {
10595
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10596
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset, 'YYYY-mm-dd') = :date
10597
								GROUP BY hour_name 
10598
								ORDER BY hour_name ASC";
10599
		}
10600
		
10601
		$sth = $this->db->prepare($query);
10602
		$sth->execute(array(':date' => $date, ':offset' => $offset));
10603
      
10604
		$hour_array = array();
10605
		$temp_array = array();
10606
        
10607
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10608
		{
10609
			$temp_array['hour_name'] = $row['hour_name'];
10610
			$temp_array['hour_count'] = $row['hour_count'];
10611
          
10612
			$hour_array[] = $temp_array;
10613
		}
10614
10615
		return $hour_array;
10616
	}
10617
	
10618
	
10619
	
10620
	/**
10621
	* Counts all hours by a ident/callsign
10622
	*
10623
	* @return Array the hour list
10624
	*
10625
	*/
10626
	public function countAllHoursByIdent($ident, $filters = array())
10627
	{
10628
		global $globalTimezone, $globalDBdriver;
10629
		$filter_query = $this->getFilter($filters,true,true);
10630
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
10631
		if ($globalTimezone != '') {
10632
			date_default_timezone_set($globalTimezone);
10633
			$datetime = new DateTime();
10634
			$offset = $datetime->format('P');
10635
		} else $offset = '+00:00';
10636
10637
		if ($globalDBdriver == 'mysql') {
10638
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10639
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
10640
								GROUP BY hour_name 
10641
								ORDER BY hour_name ASC";
10642
		} else {
10643
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10644
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
10645
								GROUP BY hour_name 
10646
								ORDER BY hour_name ASC";
10647
		}
10648
      
10649
		
10650
		$sth = $this->db->prepare($query);
10651
		$sth->execute(array(':ident' => $ident,':offset' => $offset));
10652
      
10653
		$hour_array = array();
10654
		$temp_array = array();
10655
        
10656
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10657
		{
10658
			$temp_array['hour_name'] = $row['hour_name'];
10659
			$temp_array['hour_count'] = $row['hour_count'];
10660
          
10661
			$hour_array[] = $temp_array;
10662
		}
10663
10664
		return $hour_array;
10665
	}
10666
	
10667
	/**
10668
	* Counts all hours by a owner
10669
	*
10670
	* @return Array the hour list
10671
	*
10672
	*/
10673
	public function countAllHoursByOwner($owner, $filters = array())
10674
	{
10675
		global $globalTimezone, $globalDBdriver;
10676
		$filter_query = $this->getFilter($filters,true,true);
10677
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
10678
		if ($globalTimezone != '') {
10679
			date_default_timezone_set($globalTimezone);
10680
			$datetime = new DateTime();
10681
			$offset = $datetime->format('P');
10682
		} else $offset = '+00:00';
10683
10684
		if ($globalDBdriver == 'mysql') {
10685
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10686
								FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
10687
								GROUP BY hour_name 
10688
								ORDER BY hour_name ASC";
10689
		} else {
10690
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10691
								FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
10692
								GROUP BY hour_name 
10693
								ORDER BY hour_name ASC";
10694
		}
10695
      
10696
		
10697
		$sth = $this->db->prepare($query);
10698
		$sth->execute(array(':owner' => $owner,':offset' => $offset));
10699
      
10700
		$hour_array = array();
10701
		$temp_array = array();
10702
        
10703
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10704
		{
10705
			$temp_array['hour_name'] = $row['hour_name'];
10706
			$temp_array['hour_count'] = $row['hour_count'];
10707
          
10708
			$hour_array[] = $temp_array;
10709
		}
10710
10711
		return $hour_array;
10712
	}
10713
	
10714
	/**
10715
	* Counts all hours by a pilot
10716
	*
10717
	* @return Array the hour list
10718
	*
10719
	*/
10720
	public function countAllHoursByPilot($pilot, $filters = array())
10721
	{
10722
		global $globalTimezone, $globalDBdriver;
10723
		$filter_query = $this->getFilter($filters,true,true);
10724
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
10725
		if ($globalTimezone != '') {
10726
			date_default_timezone_set($globalTimezone);
10727
			$datetime = new DateTime();
10728
			$offset = $datetime->format('P');
10729
		} else $offset = '+00:00';
10730
10731
		if ($globalDBdriver == 'mysql') {
10732
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10733
								FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
10734
								GROUP BY hour_name 
10735
								ORDER BY hour_name ASC";
10736
		} else {
10737
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10738
								FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
10739
								GROUP BY hour_name 
10740
								ORDER BY hour_name ASC";
10741
		}
10742
      
10743
		
10744
		$sth = $this->db->prepare($query);
10745
		$sth->execute(array(':pilot' => $pilot,':offset' => $offset));
10746
      
10747
		$hour_array = array();
10748
		$temp_array = array();
10749
        
10750
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10751
		{
10752
			$temp_array['hour_name'] = $row['hour_name'];
10753
			$temp_array['hour_count'] = $row['hour_count'];
10754
          
10755
			$hour_array[] = $temp_array;
10756
		}
10757
10758
		return $hour_array;
10759
	}
10760
	
10761
	
10762
	
10763
	/**
10764
	* Counts all hours by route
10765
	*
10766
	* @return Array the hour list
10767
	*
10768
	*/
10769
	public function countAllHoursByRoute($departure_airport_icao, $arrival_airport_icao, $filters =array())
10770
	{
10771
		global $globalTimezone, $globalDBdriver;
10772
		$filter_query = $this->getFilter($filters,true,true);
10773
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
10774
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
10775
		if ($globalTimezone != '') {
10776
			date_default_timezone_set($globalTimezone);
10777
			$datetime = new DateTime();
10778
			$offset = $datetime->format('P');
10779
		} else $offset = '+00:00';
10780
10781
		if ($globalDBdriver == 'mysql') {
10782
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10783
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
10784
								GROUP BY hour_name 
10785
								ORDER BY hour_name ASC";
10786
		} else {
10787
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10788
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
10789
								GROUP BY hour_name 
10790
								ORDER BY hour_name ASC";
10791
		}
10792
		
10793
		$sth = $this->db->prepare($query);
10794
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao,':offset' => $offset));
10795
      
10796
		$hour_array = array();
10797
		$temp_array = array();
10798
        
10799
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10800
		{
10801
			$temp_array['hour_name'] = $row['hour_name'];
10802
			$temp_array['hour_count'] = $row['hour_count'];
10803
          
10804
			$hour_array[] = $temp_array;
10805
		}
10806
10807
		return $hour_array;
10808
	}
10809
	
10810
	
10811
	/**
10812
	* Counts all hours by country
10813
	*
10814
	* @return Array the hour list
10815
	*
10816
	*/
10817
	public function countAllHoursByCountry($country, $filters = array())
10818
	{
10819
		global $globalTimezone, $globalDBdriver;
10820
		$filter_query = $this->getFilter($filters,true,true);
10821
		$country = filter_var($country,FILTER_SANITIZE_STRING);
10822
		if ($globalTimezone != '') {
10823
			date_default_timezone_set($globalTimezone);
10824
			$datetime = new DateTime();
10825
			$offset = $datetime->format('P');
10826
		} else $offset = '+00:00';
10827
10828
		if ($globalDBdriver == 'mysql') {
10829
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10830
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
10831
								GROUP BY hour_name 
10832
								ORDER BY hour_name ASC";
10833
		} else {
10834
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10835
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
10836
								GROUP BY hour_name 
10837
								ORDER BY hour_name ASC";
10838
		}
10839
		
10840
		$sth = $this->db->prepare($query);
10841
		$sth->execute(array(':country' => $country,':offset' => $offset));
10842
      
10843
		$hour_array = array();
10844
		$temp_array = array();
10845
        
10846
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10847
		{
10848
			$temp_array['hour_name'] = $row['hour_name'];
10849
			$temp_array['hour_count'] = $row['hour_count'];
10850
          
10851
			$hour_array[] = $temp_array;
10852
		}
10853
10854
		return $hour_array;
10855
	}
10856
10857
10858
10859
10860
	/**
10861
	* Counts all aircraft that have flown over
10862
	*
10863
	* @return Integer the number of aircrafts
10864
	*
10865
	*/
10866
	public function countOverallAircrafts($filters = array(),$year = '',$month = '')
10867
	{
10868
		global $globalDBdriver;
10869
		$filter_query = $this->getFilter($filters,true,true);
10870
		$query  = "SELECT COUNT(DISTINCT spotter_output.aircraft_icao) AS aircraft_count  
10871
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''";
10872
		$query_values = array();
10873
		if ($year != '') {
10874
			if ($globalDBdriver == 'mysql') {
10875
				$query .= " AND YEAR(spotter_output.date) = :year";
10876
				$query_values = array_merge($query_values,array(':year' => $year));
10877
			} else {
10878
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10879
				$query_values = array_merge($query_values,array(':year' => $year));
10880
			}
10881
		}
10882
		if ($month != '') {
10883
			if ($globalDBdriver == 'mysql') {
10884
				$query .= " AND MONTH(spotter_output.date) = :month";
10885
				$query_values = array_merge($query_values,array(':month' => $month));
10886
			} else {
10887
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10888
				$query_values = array_merge($query_values,array(':month' => $month));
10889
			}
10890
		}
10891
10892
		$sth = $this->db->prepare($query);
10893
		$sth->execute($query_values);
10894
		return $sth->fetchColumn();
10895
	}
10896
10897
	/**
10898
	* Counts all flight that really arrival
10899
	*
10900
	* @return Integer the number of aircrafts
10901
	*
10902
	*/
10903
	public function countOverallArrival($filters = array(),$year = '',$month = '')
10904
	{
10905
		global $globalDBdriver;
10906
		$filter_query = $this->getFilter($filters,true,true);
10907
		$query  = "SELECT COUNT(spotter_output.real_arrival_airport_icao) AS arrival_count  
10908
                    FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> ''";
10909
		$query_values = array();
10910
		if ($year != '') {
10911
			if ($globalDBdriver == 'mysql') {
10912
				$query .= " AND YEAR(spotter_output.date) = :year";
10913
				$query_values = array_merge($query_values,array(':year' => $year));
10914
			} else {
10915
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10916
				$query_values = array_merge($query_values,array(':year' => $year));
10917
			}
10918
		}
10919
		if ($month != '') {
10920
			if ($globalDBdriver == 'mysql') {
10921
				$query .= " AND MONTH(spotter_output.date) = :month";
10922
				$query_values = array_merge($query_values,array(':month' => $month));
10923
			} else {
10924
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10925
				$query_values = array_merge($query_values,array(':month' => $month));
10926
			}
10927
		}
10928
		
10929
		$sth = $this->db->prepare($query);
10930
		$sth->execute($query_values);
10931
		return $sth->fetchColumn();
10932
	}
10933
10934
	/**
10935
	* Counts all pilots that have flown over
10936
	*
10937
	* @return Integer the number of pilots
10938
	*
10939
	*/
10940
	public function countOverallPilots($filters = array(),$year = '',$month = '')
10941
	{
10942
		global $globalDBdriver;
10943
		$filter_query = $this->getFilter($filters,true,true);
10944
		$query  = "SELECT COUNT(DISTINCT spotter_output.pilot_id) AS pilot_count  
10945
                    FROM spotter_output".$filter_query." spotter_output.pilot_id <> ''";
10946
		$query_values = array();
10947
		if ($year != '') {
10948
			if ($globalDBdriver == 'mysql') {
10949
				$query .= " AND YEAR(spotter_output.date) = :year";
10950
				$query_values = array_merge($query_values,array(':year' => $year));
10951
			} else {
10952
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10953
				$query_values = array_merge($query_values,array(':year' => $year));
10954
			}
10955
		}
10956
		if ($month != '') {
10957
			if ($globalDBdriver == 'mysql') {
10958
				$query .= " AND MONTH(spotter_output.date) = :month";
10959
				$query_values = array_merge($query_values,array(':month' => $month));
10960
			} else {
10961
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10962
				$query_values = array_merge($query_values,array(':month' => $month));
10963
			}
10964
		}
10965
		$sth = $this->db->prepare($query);
10966
		$sth->execute($query_values);
10967
		return $sth->fetchColumn();
10968
	}
10969
10970
	/**
10971
	* Counts all owners that have flown over
10972
	*
10973
	* @return Integer the number of owners
10974
	*
10975
	*/
10976
	public function countOverallOwners($filters = array(),$year = '',$month = '')
10977
	{
10978
		global $globalDBdriver;
10979
		$filter_query = $this->getFilter($filters,true,true);
10980
		$query  = "SELECT COUNT(DISTINCT spotter_output.owner_name) AS owner_count  
10981
                    FROM spotter_output".$filter_query." spotter_output.owner_name <> ''";
10982
		$query_values = array();
10983
		if ($year != '') {
10984
			if ($globalDBdriver == 'mysql') {
10985
				$query .= " AND YEAR(spotter_output.date) = :year";
10986
				$query_values = array_merge($query_values,array(':year' => $year));
10987
			} else {
10988
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10989
				$query_values = array_merge($query_values,array(':year' => $year));
10990
			}
10991
		}
10992
		if ($month != '') {
10993
			if ($globalDBdriver == 'mysql') {
10994
				$query .= " AND MONTH(spotter_output.date) = :month";
10995
				$query_values = array_merge($query_values,array(':month' => $month));
10996
			} else {
10997
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10998
				$query_values = array_merge($query_values,array(':month' => $month));
10999
			}
11000
		}
11001
		$sth = $this->db->prepare($query);
11002
		$sth->execute($query_values);
11003
		return $sth->fetchColumn();
11004
	}
11005
	
11006
	
11007
	/**
11008
	* Counts all flights that have flown over
11009
	*
11010
	* @return Integer the number of flights
11011
	*
11012
	*/
11013
	public function countOverallFlights($filters = array(),$year = '',$month = '')
11014
	{
11015
		global $globalDBdriver;
11016
		$queryi  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count FROM spotter_output";
11017
		$query_values = array();
11018
		$query = '';
11019
		if ($year != '') {
11020
			if ($globalDBdriver == 'mysql') {
11021
				$query .= " AND YEAR(spotter_output.date) = :year";
11022
				$query_values = array_merge($query_values,array(':year' => $year));
11023
			} else {
11024
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
11025
				$query_values = array_merge($query_values,array(':year' => $year));
11026
			}
11027
		}
11028
		if ($month != '') {
11029
			if ($globalDBdriver == 'mysql') {
11030
				$query .= " AND MONTH(spotter_output.date) = :month";
11031
				$query_values = array_merge($query_values,array(':month' => $month));
11032
			} else {
11033
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
11034
				$query_values = array_merge($query_values,array(':month' => $month));
11035
			}
11036
		}
11037
		if (empty($query_values)) $queryi .= $this->getFilter($filters);
11038
		else $queryi .= $this->getFilter($filters,true,true).substr($query,4);
11039
		
11040
		$sth = $this->db->prepare($queryi);
11041
		$sth->execute($query_values);
11042
		return $sth->fetchColumn();
11043
	}
11044
	
11045
	/**
11046
	* Counts all military flights that have flown over
11047
	*
11048
	* @return Integer the number of flights
11049
	*
11050
	*/
11051
	public function countOverallMilitaryFlights($filters = array(),$year = '',$month = '')
11052
	{
11053
		global $globalDBdriver;
11054
		$filter_query = $this->getFilter($filters,true,true);
11055
		$query  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count  
11056
                    FROM airlines,spotter_output".$filter_query." spotter_output.airline_icao = airlines.icao AND airlines.type = 'military'";
11057
		$query_values = array();
11058
		if ($year != '') {
11059
			if ($globalDBdriver == 'mysql') {
11060
				$query .= " AND YEAR(spotter_output.date) = :year";
11061
				$query_values = array_merge($query_values,array(':year' => $year));
11062
			} else {
11063
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
11064
				$query_values = array_merge($query_values,array(':year' => $year));
11065
			}
11066
		}
11067
		if ($month != '') {
11068
			if ($globalDBdriver == 'mysql') {
11069
				$query .= " AND MONTH(spotter_output.date) = :month";
11070
				$query_values = array_merge($query_values,array(':month' => $month));
11071
			} else {
11072
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
11073
				$query_values = array_merge($query_values,array(':month' => $month));
11074
			}
11075
		}
11076
      
11077
		$sth = $this->db->prepare($query);
11078
		$sth->execute($query_values);
11079
		return $sth->fetchColumn();
11080
	}
11081
	
11082
	
11083
	
11084
	/**
11085
	* Counts all airlines that have flown over
11086
	*
11087
	* @return Integer the number of airlines
11088
	*
11089
	*/
11090
	public function countOverallAirlines($filters = array(),$year = '',$month = '')
11091
	{
11092
		global $globalDBdriver;
11093
		$queryi  = "SELECT COUNT(DISTINCT spotter_output.airline_name) AS airline_count 
11094
							FROM spotter_output";
11095
      
11096
		$query_values = array();
11097
		$query = '';
11098
		if ($year != '') {
11099
			if ($globalDBdriver == 'mysql') {
11100
				$query .= " AND YEAR(spotter_output.date) = :year";
11101
				$query_values = array_merge($query_values,array(':year' => $year));
11102
			} else {
11103
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
11104
				$query_values = array_merge($query_values,array(':year' => $year));
11105
			}
11106
		}
11107
		if ($month != '') {
11108
			if ($globalDBdriver == 'mysql') {
11109
				$query .= " AND MONTH(spotter_output.date) = :month";
11110
				$query_values = array_merge($query_values,array(':month' => $month));
11111
			} else {
11112
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
11113
				$query_values = array_merge($query_values,array(':month' => $month));
11114
			}
11115
		}
11116
                if ($query == '') $queryi .= $this->getFilter($filters);
11117
                else $queryi .= $this->getFilter($filters,true,true).substr($query,4);
11118
11119
11120
		$sth = $this->db->prepare($queryi);
11121
		$sth->execute($query_values);
11122
		return $sth->fetchColumn();
11123
	}
11124
11125
  
11126
	/**
11127
	* Counts all hours of today
11128
	*
11129
	* @return Array the hour list
11130
	*
11131
	*/
11132
	public function countAllHoursFromToday($filters = array())
11133
	{
11134
		global $globalTimezone, $globalDBdriver;
11135
		$filter_query = $this->getFilter($filters,true,true);
11136
		if ($globalTimezone != '') {
11137
			date_default_timezone_set($globalTimezone);
11138
			$datetime = new DateTime();
11139
			$offset = $datetime->format('P');
11140
		} else $offset = '+00:00';
11141
11142
		if ($globalDBdriver == 'mysql') {
11143
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
11144
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = CURDATE()
11145
								GROUP BY hour_name 
11146
								ORDER BY hour_name ASC";
11147
		} else {
11148
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
11149
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = CAST(NOW() AS date)
11150
								GROUP BY hour_name 
11151
								ORDER BY hour_name ASC";
11152
		}
11153
		
11154
		$sth = $this->db->prepare($query);
11155
		$sth->execute(array(':offset' => $offset));
11156
      
11157
		$hour_array = array();
11158
		$temp_array = array();
11159
        
11160
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11161
		{
11162
			$temp_array['hour_name'] = $row['hour_name'];
11163
			$temp_array['hour_count'] = $row['hour_count'];
11164
			$hour_array[] = $temp_array;
11165
		}
11166
11167
		return $hour_array;
11168
	}
11169
    
11170
	/**
11171
	* Gets all the spotter information based on calculated upcoming flights
11172
	*
11173
	* @return Array the spotter information
11174
	*
11175
	*/
11176
	public function getUpcomingFlights($limit = '', $sort = '', $filters = array())
11177
	{
11178
		global $global_query, $globalDBdriver, $globalTimezone;
11179
		$filter_query = $this->getFilter($filters,true,true);
11180
		date_default_timezone_set('UTC');
11181
		$limit_query = '';
11182
		if ($limit != "")
11183
		{
11184
			$limit_array = explode(",", $limit);
11185
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
11186
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
11187
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
11188
			{
11189
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
11190
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
11191
			}
11192
		}
11193
		$currentHour = date("G");
11194
		$next3Hours = date("G", strtotime("+3 hour"));
11195
		//if the next 3 hours is already equal to/past midnight, we limit it to stay there, otherwise the query will fail
11196
		if ($currentHour >= 21 && $next3Hours >= 00)
11197
		{
11198
			$next3Hours = 24;
11199
		}
11200
		$currentDayofWeek = date("l");
11201
		if ($globalDBdriver == 'mysql') {
11202
			if ($sort != "")
11203
			{
11204
				$search_orderby_array = $this->getOrderBy();
11205
				$orderby_query = $search_orderby_array[$sort]['sql'];
11206
			} else {
11207
				$orderby_query = " ORDER BY HOUR(spotter_output.date) ASC";
11208
			}
11209
/*
11210
			$query = "SELECT spotter_output.*, count(spotter_output.ident) as ident_count
11211
			    FROM spotter_output
11212
			    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'
11213
			    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";
11214
*/
11215
/*			$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
11216
			    FROM spotter_output
11217
			    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'
11218
			    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";
11219
*/
11220
			$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 
11221
			    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'
11222
			    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
11223
			    HAVING count(spotter_output.ident) > 5$orderby_query";
11224
11225
			$spotter_array = $this->getDataFromDB($query.$limit_query);
11226
		} else {
11227
			if ($sort != "")
11228
			{
11229
				$search_orderby_array = $this->getOrderBy();
11230
				$orderby_query = $search_orderby_array[$sort]['sql'];
11231
			} else {
11232
				$orderby_query = " ORDER BY to_char(spotter_output.date,'HH') ASC";
11233
			}
11234
			$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') 
11235
			    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 <> '' 
11236
			    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')
11237
			    HAVING count(spotter_output.ident) > 5$orderby_query";
11238
			//echo $query;
11239
			$spotter_array = $this->getDataFromDB($query.$limit_query,array(':timezone' => $globalTimezone));
11240
			/*
11241
			$sth = $this->db->prepare($query);
11242
			$sth->execute(array(':timezone' => $globalTimezone));
11243
			return $sth->fetchAll(PDO::FETCH_ASSOC);
11244
			*/
11245
		}
11246
		return $spotter_array;
11247
	}
11248
    
11249
    
11250
     /**
11251
	* Gets the Barrie Spotter ID based on the FlightAware ID
11252
	*
11253
	* @return Integer the Barrie Spotter ID
11254
q	*
11255
	*/
11256
	public function getSpotterIDBasedOnFlightAwareID($flightaware_id)
11257
	{
11258
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
11259
11260
		$query  = "SELECT spotter_output.spotter_id
11261
								FROM spotter_output 
11262
								WHERE spotter_output.flightaware_id = '".$flightaware_id."'";
11263
        
11264
		
11265
		$sth = $this->db->prepare($query);
11266
		$sth->execute();
11267
11268
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11269
		{
11270
			return $row['spotter_id'];
11271
		}
11272
	}
11273
  
11274
 
11275
	/**
11276
	* Parses a date string
11277
	*
11278
	* @param String $dateString the date string
11279
	* @param String $timezone the timezone of a user
11280
	* @return Array the time information
11281
	*
11282
	*/
11283
	public function parseDateString($dateString, $timezone = '')
11284
	{
11285
		$time_array = array();
11286
	
11287
		if ($timezone != "")
11288
		{
11289
			date_default_timezone_set($timezone);
11290
		}
11291
		
11292
		$current_date = date("Y-m-d H:i:s");
11293
		$date = date("Y-m-d H:i:s",strtotime($dateString." UTC"));
11294
		
11295
		$diff = abs(strtotime($current_date) - strtotime($date));
11296
11297
		$time_array['years'] = floor($diff / (365*60*60*24)); 
11298
		$years = $time_array['years'];
11299
		
11300
		$time_array['months'] = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
11301
		$months = $time_array['months'];
11302
		
11303
		$time_array['days'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
11304
		$days = $time_array['days'];
11305
		$time_array['hours'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24)/ (60*60));
11306
		$hours = $time_array['hours'];
11307
		$time_array['minutes'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60)/ 60);
11308
		$minutes = $time_array['minutes'];
11309
		$time_array['seconds'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60 - $minutes*60));  
11310
		
11311
		return $time_array;	
11312
	}	
11313
	
11314
	
11315
	
11316
	
11317
	/**
11318
	* Parses the direction degrees to working
11319
	*
11320
	* @param Float $direction the direction in degrees
11321
	* @return Array the direction information
11322
	*
11323
	*/
11324
	public function parseDirection($direction = 0)
11325
	{
11326
		if ($direction == '') $direction = 0;
11327
		$direction_array = array();
11328
		$temp_array = array();
11329
11330
		if ($direction == 360 || ($direction >= 0 && $direction < 22.5))
11331
		{
11332
			$temp_array['direction_degree'] = $direction;
11333
			$temp_array['direction_shortname'] = "N";
11334
			$temp_array['direction_fullname'] = "North";
11335
		} elseif ($direction >= 22.5 && $direction < 45){
11336
			$temp_array['direction_degree'] = $direction;
11337
			$temp_array['direction_shortname'] = "NNE";
11338
			$temp_array['direction_fullname'] = "North-Northeast";
11339
		} elseif ($direction >= 45 && $direction < 67.5){
11340
			$temp_array['direction_degree'] = $direction;
11341
			$temp_array['direction_shortname'] = "NE";
11342
			$temp_array['direction_fullname'] = "Northeast";
11343
		} elseif ($direction >= 67.5 && $direction < 90){
11344
			$temp_array['direction_degree'] = $direction;
11345
			$temp_array['direction_shortname'] = "ENE";
11346
			$temp_array['direction_fullname'] = "East-Northeast";
11347
		} elseif ($direction >= 90 && $direction < 112.5){
11348
			$temp_array['direction_degree'] = $direction;
11349
			$temp_array['direction_shortname'] = "E";
11350
			$temp_array['direction_fullname'] = "East";
11351
		} elseif ($direction >= 112.5 && $direction < 135){
11352
			$temp_array['direction_degree'] = $direction;
11353
			$temp_array['direction_shortname'] = "ESE";
11354
			$temp_array['direction_fullname'] = "East-Southeast";
11355
		} elseif ($direction >= 135 && $direction < 157.5){
11356
			$temp_array['direction_degree'] = $direction;
11357
			$temp_array['direction_shortname'] = "SE";
11358
			$temp_array['direction_fullname'] = "Southeast";
11359
		} elseif ($direction >= 157.5 && $direction < 180){
11360
			$temp_array['direction_degree'] = $direction;
11361
			$temp_array['direction_shortname'] = "SSE";
11362
			$temp_array['direction_fullname'] = "South-Southeast";
11363
		} elseif ($direction >= 180 && $direction < 202.5){
11364
			$temp_array['direction_degree'] = $direction;
11365
			$temp_array['direction_shortname'] = "S";
11366
			$temp_array['direction_fullname'] = "South";
11367
		} elseif ($direction >= 202.5 && $direction < 225){
11368
			$temp_array['direction_degree'] = $direction;
11369
			$temp_array['direction_shortname'] = "SSW";
11370
			$temp_array['direction_fullname'] = "South-Southwest";
11371
		} elseif ($direction >= 225 && $direction < 247.5){
11372
			$temp_array['direction_degree'] = $direction;
11373
			$temp_array['direction_shortname'] = "SW";
11374
			$temp_array['direction_fullname'] = "Southwest";
11375
		} elseif ($direction >= 247.5 && $direction < 270){
11376
			$temp_array['direction_degree'] = $direction;
11377
			$temp_array['direction_shortname'] = "WSW";
11378
			$temp_array['direction_fullname'] = "West-Southwest";
11379
		} elseif ($direction >= 270 && $direction < 292.5){
11380
			$temp_array['direction_degree'] = $direction;
11381
			$temp_array['direction_shortname'] = "W";
11382
			$temp_array['direction_fullname'] = "West";
11383
		} elseif ($direction >= 292.5 && $direction < 315){
11384
			$temp_array['direction_degree'] = $direction;
11385
			$temp_array['direction_shortname'] = "WNW";
11386
			$temp_array['direction_fullname'] = "West-Northwest";
11387
		} elseif ($direction >= 315 && $direction < 337.5){
11388
			$temp_array['direction_degree'] = $direction;
11389
			$temp_array['direction_shortname'] = "NW";
11390
			$temp_array['direction_fullname'] = "Northwest";
11391
		} elseif ($direction >= 337.5 && $direction < 360){
11392
			$temp_array['direction_degree'] = $direction;
11393
			$temp_array['direction_shortname'] = "NNW";
11394
			$temp_array['direction_fullname'] = "North-Northwest";
11395
		}
11396
		$direction_array[] = $temp_array;
11397
		return $direction_array;
11398
	}
11399
	
11400
	
11401
	/**
11402
	* Gets the aircraft registration
11403
	*
11404
	* @param String $flightaware_id the flight aware id
11405
	* @return String the aircraft registration
11406
	*
11407
	*/
11408
	
11409
	public function getAircraftRegistration($flightaware_id)
11410
	{
11411
		global $globalFlightAwareUsername, $globalFlightAwarePassword;
11412
        
11413
		$options = array(
11414
			'trace' => true,
11415
			'exceptions' => 0,
11416
			'login' => $globalFlightAwareUsername,
11417
			'password' => $globalFlightAwarePassword,
11418
		);
11419
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
11420
		
11421
		$params = array('faFlightID' => $flightaware_id);
11422
		$result = $client->AirlineFlightInfo($params);
11423
		
11424
		if (isset($result->AirlineFlightInfoResult))
11425
		{
11426
			$registration = $result->AirlineFlightInfoResult->tailnumber;
11427
		} else return '';
11428
		
11429
		$registration = $this->convertAircraftRegistration($registration);
11430
		
11431
		return $registration;
11432
	}
11433
11434
11435
	/**
11436
	* Gets the aircraft registration from ModeS
11437
	*
11438
	* @param String $aircraft_modes the flight ModeS in hex
11439
	* @return String the aircraft registration
11440
	*
11441
	*/
11442
	public function getAircraftRegistrationBymodeS($aircraft_modes, $source_type = '')
11443
	{
11444
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
11445
		$source_type = filter_var($source_type,FILTER_SANITIZE_STRING);
11446
		if ($source_type == '' || $source_type == 'modes') {
11447
			$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";
11448
		} else {
11449
			$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";
11450
		}
11451
		$sth = $this->db->prepare($query);
11452
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
11453
    
11454
		$row = $sth->fetch(PDO::FETCH_ASSOC);
11455
		$sth->closeCursor();
11456
		if (count($row) > 0) {
11457
		    //return $row['Registration'];
11458
		    return $row['registration'];
11459
		} elseif ($source_type == 'flarm') {
11460
			return $this->getAircraftRegistrationBymodeS($aircraft_modes);
11461
		} else return '';
11462
	
11463
	}
11464
11465
	/**
11466
	* Gets the aircraft type from ModeS
11467
	*
11468
	* @param String $aircraft_modes the flight ModeS in hex
11469
	* @return String the aircraft type
11470
	*
11471
	*/
11472
	public function getAircraftTypeBymodeS($aircraft_modes,$source_type = '')
11473
	{
11474
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
11475
		$source_type = filter_var($source_type,FILTER_SANITIZE_STRING);
11476
		if ($source_type == '' || $source_type == 'modes') {
11477
			$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";
11478
		} else {
11479
			$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";
11480
		}
11481
		
11482
		$sth = $this->db->prepare($query);
11483
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
11484
    
11485
		$row = $sth->fetch(PDO::FETCH_ASSOC);
11486
		$sth->closeCursor();
11487
		if (count($row) > 0) {
11488
			if ($row['type_flight'] == null) return '';
11489
			else return $row['type_flight'];
11490
		} elseif ($source_type == 'flarm') {
11491
			return $this->getAircraftTypeBymodeS($aircraft_modes);
11492
		} else return '';
11493
	
11494
	}
11495
11496
	/**
11497
	* Gets Country from latitude/longitude
11498
	*
11499
	* @param Float $latitude latitute of the flight
11500
	* @param Float $longitude longitute of the flight
11501
	* @return String the countrie
11502
	*/
11503
	public function getCountryFromLatitudeLongitude($latitude,$longitude)
11504
	{
11505
		global $globalDBdriver, $globalDebug;
11506
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
11507
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
11508
	
11509
		$Connection = new Connection($this->db);
11510
		if (!$Connection->tableExists('countries')) return '';
11511
	
11512
		try {
11513
			/*
11514
			if ($globalDBdriver == 'mysql') {
11515
				//$query  = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(:latitude :longitude)'), ogc_geom) LIMIT 1";
11516
				$query = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(".$longitude.' '.$latitude.")'), ogc_geom) LIMIT 1";
11517
			}
11518
			*/
11519
			// This query seems to work both for MariaDB and PostgreSQL
11520
			$query = "SELECT name,iso2,iso3 FROM countries WHERE ST_Within(ST_GeomFromText('POINT(".$longitude." ".$latitude.")',4326), ogc_geom) LIMIT 1";
11521
		
11522
			$sth = $this->db->prepare($query);
11523
			//$sth->execute(array(':latitude' => $latitude,':longitude' => $longitude));
11524
			$sth->execute();
11525
    
11526
			$row = $sth->fetch(PDO::FETCH_ASSOC);
11527
			$sth->closeCursor();
11528
			if (count($row) > 0) {
11529
				return $row;
11530
			} else return '';
11531
		} catch (PDOException $e) {
11532
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
11533
			return '';
11534
		}
11535
	
11536
	}
11537
11538
	/**
11539
	* Gets Country from iso2
11540
	*
11541
	* @param String $iso2 ISO2 country code
11542
	* @return String the countrie
11543
	*/
11544
	public function getCountryFromISO2($iso2)
11545
	{
11546
		global $globalDBdriver, $globalDebug;
11547
		$iso2 = filter_var($iso2,FILTER_SANITIZE_STRING);
11548
	
11549
		$Connection = new Connection($this->db);
11550
		if (!$Connection->tableExists('countries')) return '';
11551
	
11552
		try {
11553
			$query = "SELECT name,iso2,iso3 FROM countries WHERE iso2 = :iso2 LIMIT 1";
11554
		
11555
			$sth = $this->db->prepare($query);
11556
			$sth->execute(array(':iso2' => $iso2));
11557
    
11558
			$row = $sth->fetch(PDO::FETCH_ASSOC);
11559
			$sth->closeCursor();
11560
			if (count($row) > 0) {
11561
				return $row;
11562
			} else return '';
11563
		} catch (PDOException $e) {
11564
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
11565
			return '';
11566
		}
11567
	
11568
	}
11569
11570
	/**
11571
	* converts the registration code using the country prefix
11572
	*
11573
	* @param String $registration the aircraft registration
11574
	* @return String the aircraft registration
11575
	*
11576
	*/
11577
	public function convertAircraftRegistration($registration)
11578
	{
11579
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11580
		$registration_prefix = '';
11581
		$registration_1 = substr($registration, 0, 1);
11582
		$registration_2 = substr($registration, 0, 2);
11583
11584
		//first get the prefix based on two characters
11585
		$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_2";
11586
      
11587
		
11588
		$sth = $this->db->prepare($query);
11589
		$sth->execute(array(':registration_2' => $registration_2));
11590
        
11591
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11592
		{
11593
			$registration_prefix = $row['registration_prefix'];
11594
		}
11595
11596
		//if we didn't find a two chracter prefix lets just search the one with one character
11597
		if ($registration_prefix == '')
11598
		{
11599
			$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_1";
11600
			$sth = $this->db->prepare($query);
11601
			$sth->execute(array(':registration_1' => $registration_1));
11602
	        
11603
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11604
			{
11605
				$registration_prefix = $row['registration_prefix'];
11606
			}
11607
		}
11608
11609
		//determine which characters are being used and convert the registration code appropiately
11610
		if (strlen($registration_prefix) == 1)
11611
		{
11612
			if (0 === strpos($registration, 'N')) {
11613
				$registration = preg_replace("/^(.{1})/", "$1", $registration);
11614
			} else {
11615
				$registration = preg_replace("/^(.{1})/", "$1-", $registration);
11616
			}
11617
		} else if(strlen($registration_prefix) == 2){
11618
			if (0 === strpos($registration, 'N')) {
11619
				$registration = preg_replace("/^(.{2})/", "$1", $registration);
11620
			} else {
11621
				$registration = preg_replace("/^(.{2})/", "$1-", $registration);
11622
			}
11623
		}
11624
		return $registration;
11625
	}
11626
11627
	/**
11628
	* Country from the registration code
11629
	*
11630
	* @param String $registration the aircraft registration
11631
	* @return String the country
11632
	*
11633
	*/
11634
	public function countryFromAircraftRegistration($registration)
11635
	{
11636
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11637
		
11638
		$registration_prefix = '';
11639
		$registration_test = explode('-',$registration);
11640
		$country = '';
11641
		if ($registration_test[0] != $registration) {
11642
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11643
	      
11644
			$sth = $this->db->prepare($query);
11645
			$sth->execute(array(':registration_1' => $registration_test[0]));
11646
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11647
			{
11648
				//$registration_prefix = $row['registration_prefix'];
11649
				$country = $row['country'];
11650
			}
11651
		} else {
11652
    			$registration_1 = substr($registration, 0, 1);
11653
		        $registration_2 = substr($registration, 0, 2);
11654
11655
			$country = '';
11656
			//first get the prefix based on two characters
11657
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
11658
      
11659
			
11660
			$sth = $this->db->prepare($query);
11661
			$sth->execute(array(':registration_2' => $registration_2));
11662
        
11663
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11664
			{
11665
				$registration_prefix = $row['registration_prefix'];
11666
				$country = $row['country'];
11667
			}
11668
11669
			//if we didn't find a two chracter prefix lets just search the one with one character
11670
			if ($registration_prefix == "")
11671
			{
11672
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11673
	      
11674
				$sth = $this->db->prepare($query);
11675
				$sth->execute(array(':registration_1' => $registration_1));
11676
	        
11677
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
11678
				{
11679
					//$registration_prefix = $row['registration_prefix'];
11680
					$country = $row['country'];
11681
				}
11682
			}
11683
		}
11684
    
11685
		return $country;
11686
	}
11687
11688
	/**
11689
	* Registration prefix from the registration code
11690
	*
11691
	* @param String $registration the aircraft registration
11692
	* @return String the registration prefix
11693
	*
11694
	*/
11695
	public function registrationPrefixFromAircraftRegistration($registration)
11696
	{
11697
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11698
		
11699
		$registration_prefix = '';
11700
		$registration_test = explode('-',$registration);
11701
		//$country = '';
11702
		if ($registration_test[0] != $registration) {
11703
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11704
	      
11705
			$sth = $this->db->prepare($query);
11706
			$sth->execute(array(':registration_1' => $registration_test[0]));
11707
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11708
			{
11709
				$registration_prefix = $row['registration_prefix'];
11710
				//$country = $row['country'];
11711
			}
11712
		} else {
11713
    			$registration_1 = substr($registration, 0, 1);
11714
		        $registration_2 = substr($registration, 0, 2);
11715
11716
			//first get the prefix based on two characters
11717
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
11718
      
11719
			
11720
			$sth = $this->db->prepare($query);
11721
			$sth->execute(array(':registration_2' => $registration_2));
11722
        
11723
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11724
			{
11725
				$registration_prefix = $row['registration_prefix'];
11726
				//$country = $row['country'];
11727
			}
11728
11729
			//if we didn't find a two chracter prefix lets just search the one with one character
11730
			if ($registration_prefix == "")
11731
			{
11732
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11733
	      
11734
				$sth = $this->db->prepare($query);
11735
				$sth->execute(array(':registration_1' => $registration_1));
11736
	        
11737
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
11738
				{
11739
					$registration_prefix = $row['registration_prefix'];
11740
					//$country = $row['country'];
11741
				}
11742
			}
11743
		}
11744
    
11745
		return $registration_prefix;
11746
	}
11747
11748
11749
	/**
11750
	* Country from the registration code
11751
	*
11752
	* @param String $registration the aircraft registration
11753
	* @return String the country
11754
	*
11755
	*/
11756
	public function countryFromAircraftRegistrationCode($registration)
11757
	{
11758
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11759
		
11760
		$country = '';
11761
		$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration LIMIT 1";
11762
		$sth = $this->db->prepare($query);
11763
		$sth->execute(array(':registration' => $registration));
11764
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11765
		{
11766
			$country = $row['country'];
11767
		}
11768
		return $country;
11769
	}
11770
	
11771
	/**
11772
	* Set a new highlight value for a flight
11773
	*
11774
	* @param String $flightaware_id flightaware_id from spotter_output table
11775
	* @param String $highlight New highlight value
11776
	*/
11777
	public function setHighlightFlight($flightaware_id,$highlight) {
11778
		
11779
		$query  = "UPDATE spotter_output SET highlight = :highlight WHERE flightaware_id = :flightaware_id";
11780
		$sth = $this->db->prepare($query);
11781
		$sth->execute(array(':flightaware_id' => $flightaware_id, ':highlight' => $highlight));
11782
	}
11783
11784
	/**
11785
	* Set a new highlight value for a flight by Registration
11786
	*
11787
	* @param String $registration Registration of the aircraft
11788
	* @param String $date Date of spotted aircraft
11789
	* @param String $highlight New highlight value
11790
	*/
11791
	public function setHighlightFlightByRegistration($registration,$highlight, $date = '') {
11792
		if ($date == '') {
11793
			$query  = "UPDATE spotter_output SET highlight = :highlight WHERE spotter_id IN (SELECT MAX(spotter_id) FROM spotter_output WHERE registration = :registration)";
11794
			$query_values = array(':registration' => $registration, ':highlight' => $highlight);
11795
		} else {
11796
			$query  = "UPDATE spotter_output SET highlight = :highlight WHERE registration = :registration AND date(date) = :date";
11797
			$query_values = array(':registration' => $registration, ':highlight' => $highlight,':date' => $date);
11798
		}
11799
		$sth = $this->db->prepare($query);
11800
		$sth->execute($query_values);
11801
	}
11802
	
11803
	/**
11804
	* Gets the short url from bit.ly
11805
	*
11806
	* @param String $url the full url
11807
	* @return String the bit.ly url
11808
	*
11809
	*/
11810
	public function getBitlyURL($url)
11811
	{
11812
		global $globalBitlyAccessToken;
11813
		
11814
		if ($globalBitlyAccessToken == '') return $url;
11815
        
11816
		$google_url = 'https://api-ssl.bitly.com/v3/shorten?access_token='.$globalBitlyAccessToken.'&longUrl='.$url;
11817
		
11818
		$ch = curl_init();
11819
		curl_setopt($ch, CURLOPT_HEADER, 0);
11820
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
11821
		curl_setopt($ch, CURLOPT_URL, $google_url);
11822
		$bitly_data = curl_exec($ch);
11823
		curl_close($ch);
11824
		
11825
		$bitly_data = json_decode($bitly_data);
11826
		$bitly_url = '';
11827
		if ($bitly_data->status_txt = "OK"){
11828
			$bitly_url = $bitly_data->data->url;
11829
		}
11830
11831
		return $bitly_url;
11832
	}
11833
11834
11835
	public function getOrderBy()
11836
	{
11837
		$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"));
11838
		
11839
		return $orderby;
11840
		
11841
	}
11842
    
11843
/*
11844
	public function importFromFlightAware()
11845
	{
11846
		global $globalFlightAwareUsername, $globalFlightAwarePassword, $globalLatitudeMax, $globalLatitudeMin, $globalLongitudeMax, $globalLongitudeMin, $globalAirportIgnore;
11847
		$Spotter = new Spotter($this->db);
11848
		$SpotterLive = new SpotterLive($this->db);
11849
		$options = array(
11850
		            'trace' => true,
11851
		            'exceptions' => 0,
11852
		            'login' => $globalFlightAwareUsername,
11853
		            'password' => $globalFlightAwarePassword,
11854
		);
11855
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
11856
		$params = array('query' => '{range lat '.$globalLatitudeMin.' '.$globalLatitudeMax.'} {range lon '.$globalLongitudeMax.' '.$globalLongitudeMin.'} {true inAir}', 'howMany' => '15', 'offset' => '0');
11857
		$result = $client->SearchBirdseyeInFlight($params);
11858
		$dataFound = false;
11859
		$ignoreImport = false;
11860
		if (isset($result->SearchBirdseyeInFlightResult))
11861
		{
11862
			if (is_array($result->SearchBirdseyeInFlightResult->aircraft))
11863
			{
11864
				foreach($result->SearchBirdseyeInFlightResult->aircraft as $aircraft)
11865
				{
11866
					if (!strstr($aircraft->origin, 'L ') && !strstr($aircraft->destination, 'L '))
11867
					{
11868
						foreach($globalAirportIgnore as $airportIgnore)
11869
						{
11870
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
11871
							{
11872
								$ignoreImport = true; 
11873
							}
11874
						}
11875
						if ($ignoreImport == false)
11876
						{
11877
							$flightaware_id = $aircraft->faFlightID;
11878
							$ident = $aircraft->ident;
11879
							$aircraft_type = $aircraft->type;
11880
							$departure_airport = $aircraft->origin;
11881
							$arrival_airport = $aircraft->destination;
11882
							$latitude = $aircraft->latitude;
11883
							$longitude = $aircraft->longitude;
11884
							$waypoints = $aircraft->waypoints;
11885
							$altitude = $aircraft->altitude;
11886
							$heading = $aircraft->heading;
11887
							$groundspeed = $aircraft->groundspeed;
11888
							$dataFound = true;
11889
							//gets the callsign from the last hour
11890
							$last_hour_ident = $this->getIdentFromLastHour($ident);
11891
							//change the departure/arrival airport to NA if its not available
11892
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
11893
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
11894
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
11895
							if($last_hour_ident == "")
11896
							{
11897
								//adds the spotter data for the archive
11898
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11899
							}
11900
11901
							//adds the spotter LIVE data
11902
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11903
						}
11904
					}
11905
					$ignoreImport = false;
11906
				}
11907
			} else {
11908
				if (!strstr($result->SearchBirdseyeInFlightResult->aircraft->origin, 'L ') && !strstr($result->SearchBirdseyeInFlightResult->aircraft->destination, 'L '))
11909
				{
11910
					foreach($globalAirportIgnore as $airportIgnore)
11911
					{
11912
						foreach($globalAirportIgnore as $airportIgnore)
11913
						{
11914
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
11915
							{
11916
								$ignoreImport = true; 
11917
							}
11918
						}
11919
						if ($ignoreImport == false)
11920
						{
11921
							$flightaware_id = $result->SearchBirdseyeInFlightResult->aircraft->faFlightID;
11922
							$ident = $result->SearchBirdseyeInFlightResult->aircraft->ident;
11923
							$aircraft_type = $result->SearchBirdseyeInFlightResult->aircraft->type;
11924
							$departure_airport = $result->SearchBirdseyeInFlightResult->aircraft->origin;
11925
							$arrival_airport = $result->SearchBirdseyeInFlightResult->aircraft->destination;
11926
							$latitude = $result->SearchBirdseyeInFlightResult->aircraft->latitude;
11927
							$longitude = $result->SearchBirdseyeInFlightResult->aircraft->longitude;
11928
							$waypoints = $result->SearchBirdseyeInFlightResult->aircraft->waypoints;
11929
							$altitude = $result->SearchBirdseyeInFlightResult->aircraft->altitude;
11930
							$heading = $result->SearchBirdseyeInFlightResult->aircraft->heading;
11931
							$groundspeed = $result->SearchBirdseyeInFlightResult->aircraft->groundspeed;
11932
							$dataFound = true;
11933
							//gets the callsign from the last hour
11934
							$last_hour_ident = $this->getIdentFromLastHour($ident);
11935
							//change the departure/arrival airport to NA if its not available
11936
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
11937
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
11938
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
11939
							if($last_hour_ident == "")
11940
							{
11941
								//adds the spotter data for the archive
11942
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11943
							}
11944
							//adds the spotter LIVE data
11945
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11946
						}
11947
						$ignoreImport = false;
11948
					}
11949
				}
11950
			}
11951
		} 
11952
	}
11953
*/
11954
11955
	// Update flights data when new data in DB
11956
	public function updateFieldsFromOtherTables()
11957
	{
11958
		global $globalDebug, $globalDBdriver;
11959
		$Image = new Image($this->db);
11960
		
11961
11962
		// routes
11963
		if ($globalDebug) print "Routes...\n";
11964
		if ($globalDBdriver == 'mysql') {
11965
			$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)";
11966
		} else {
11967
			$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'";
11968
		}
11969
		$sth = $this->db->prepare($query);
11970
		$sth->execute();
11971
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11972
		{
11973
			$departure_airport_array = $this->getAllAirportInfo($row['fromairport_icao']);
11974
			$arrival_airport_array = $this->getAllAirportInfo($row['toairport_icao']);
11975
			if (count($departure_airport_array) > 0 && count($arrival_airport_array) > 0) {
11976
				$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";
11977
				$sthu = $this->db->prepare($update_query);
11978
				$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']));
11979
			}
11980
		}
11981
		
11982
		if ($globalDebug) print "Airlines...\n";
11983
		//airlines
11984
		if ($globalDBdriver == 'mysql') {
11985
			$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)";
11986
		} elseif ($globalDBdriver == 'pgsql') {
11987
			$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'";
11988
		}
11989
		$sth = $this->db->prepare($query);
11990
		$sth->execute();
11991
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11992
		{
11993
			if (is_numeric(substr($row['ident'], -1, 1)))
11994
			{
11995
				$fromsource = NULL;
11996
				if (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
11997
				elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
11998
				elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
11999
				elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
12000
				$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
12001
				if (isset($airline_array[0]['name'])) {
12002
					$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";
12003
					$sthu = $this->db->prepare($update_query);
12004
					$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']));
12005
				}
12006
			}
12007
		}
12008
12009
		if ($globalDebug) print "Remove Duplicate in aircraft_modes...\n";
12010
		//duplicate modes
12011
		$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";
12012
		$sth = $this->db->prepare($query);
12013
		$sth->execute();
12014
		
12015
		if ($globalDebug) print "Aircraft...\n";
12016
		//aircraft
12017
		if ($globalDBdriver == 'mysql') {
12018
			$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)";
12019
		} elseif ($globalDBdriver == 'pgsql') {
12020
			$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'";
12021
		}
12022
		$sth = $this->db->prepare($query);
12023
		$sth->execute();
12024
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
12025
		{
12026
			if ($row['aircraft_icao'] != '') {
12027
				$aircraft_name = $this->getAllAircraftInfo($row['aircraft_icao']);
12028
				if ($row['registration'] != ""){
12029
					$image_array = $Image->getSpotterImage($row['registration']);
12030
					if (!isset($image_array[0]['registration'])) {
12031
						$Image->addSpotterImage($row['registration']);
12032
					}
12033
				}
12034
				if (count($aircraft_name) > 0) {
12035
					$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";
12036
					$sthu = $this->db->prepare($update_query);
12037
					$sthu->execute(array(':aircraft_name' => $aircraft_name[0]['type'], ':aircraft_manufacturer' => $aircraft_name[0]['manufacturer'], ':spotter_id' => $row['spotter_id']));
12038
				}
12039
			}
12040
		}
12041
	}	
12042
12043
	// Update arrival airports for data already in DB
12044
	public function updateArrivalAirports()
12045
	{
12046
		global $globalDebug, $globalDBdriver, $globalClosestMinDist;
12047
		$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";
12048
		$sth = $this->db->prepare($query);
12049
		$sth->execute();
12050
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
12051
		{
12052
			if ($row['last_latitude'] != '' && $row['last_longitude'] != '') {
12053
				$closestAirports = $this->closestAirports($row['last_latitude'],$row['last_longitude'],$globalClosestMinDist);
12054
				$airport_icao = '';
12055
				 if (isset($closestAirports[0])) {
12056
					if ($row['arrival_airport_icao'] == $closestAirports[0]['icao']) {
12057
						$airport_icao = $closestAirports[0]['icao'];
12058
						if ($globalDebug) echo "\o/ 1st ---++ Find arrival airport. airport_icao : ".$airport_icao."\n";
12059
					} elseif (count($closestAirports > 1) && $row['arrival_airport_icao'] != '' && $row['arrival_airport_icao'] != 'NA') {
12060
						foreach ($closestAirports as $airport) {
12061
							if ($row['arrival_airport_icao'] == $airport['icao']) {
12062
								$airport_icao = $airport['icao'];
12063
								if ($globalDebug) echo "\o/ try --++ Find arrival airport. airport_icao : ".$airport_icao."\n";
12064
								break;
12065
							}
12066
						}
12067
					} elseif ($row['last_altitude'] == 0 || ($row['last_altitude'] != '' && ($closestAirports[0]['altitude'] <= $row['last_altitude']*100+1000 && $row['last_altitude']*100 < $closestAirports[0]['altitude']+5000))) {
12068
						$airport_icao = $closestAirports[0]['icao'];
12069
						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";
12070
					} else {
12071
						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";
12072
					}
12073
				} else {
12074
					if ($globalDebug) echo "----- No Airport near last coord. Latitude : ".$row['last_latitude'].' - Longitude : '.$row['last_longitude'].' - MinDist : '.$globalClosestMinDist."\n";
12075
				}
12076
				if ($row['real_arrival_airport_icao'] != $airport_icao) {
12077
					if ($globalDebug) echo "Updating airport to ".$airport_icao."...\n";
12078
					$update_query="UPDATE spotter_output SET real_arrival_airport_icao = :airport_icao WHERE spotter_id = :spotter_id";
12079
					$sthu = $this->db->prepare($update_query);
12080
					$sthu->execute(array(':airport_icao' => $airport_icao,':spotter_id' => $row['spotter_id']));
12081
				}
12082
			}
12083
		}
12084
	}
12085
	
12086
	public function closestAirports($origLat,$origLon,$dist = 10) {
12087
		global $globalDBdriver;
12088
		$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
12089
/*
12090
		$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 
12091
                      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)) 
12092
                      having distance < $dist ORDER BY distance limit 100;";
12093
*/
12094
		if ($globalDBdriver == 'mysql') {
12095
			$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 
12096
	                      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)) 
12097
	                      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;";
12098
                } else {
12099
			$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 
12100
	                      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)) 
12101
	                      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;";
12102
    		}
12103
		$sth = $this->db->prepare($query);
12104
		$sth->execute();
12105
		return $sth->fetchAll(PDO::FETCH_ASSOC);
12106
	}
12107
}
12108
/*
12109
$Spotter = new Spotter();
12110
print_r($Spotter->closestAirports('-19.9813','-47.8286',10));
12111
*/
12112
/*
12113
$Spotter = new Spotter();
12114
$da = $Spotter->countAllDetectedArrivalAirports(true,0,'',true);
12115
$aa = $Spotter->countAllArrivalAirports(true,0,'',true);
12116
print_r($da);
12117
print_r($aa);
12118
print_r(array_merge($da,$aa));
12119
*/
12120
?>