Completed
Push — master ( c0c7e7...9f35ba )
by Yannick
08:38
created

Spotter   D

Complexity

Total Complexity 1552

Size/Duplication

Total Lines 12103
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Importance

Changes 0
Metric Value
dl 0
loc 12103
rs 4.4102
c 0
b 0
f 0
wmc 1552
lcom 1
cbo 7

How to fix   Complexity   

Complex Class

Complex classes like Spotter often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use Spotter, and based on these observations, apply Extract Interface, too.

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