Completed
Push — master ( 79e230...523b76 )
by Yannick
07:34
created

Spotter::updateLatestSpotterData()   A

Complexity

Conditions 3
Paths 6

Size

Total Lines 16
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 10
nc 6
nop 10
dl 0
loc 16
rs 9.4285
c 0
b 0
f 0

How to fix   Many Parameters   

Many Parameters

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

There are several approaches to avoid long parameter lists:

1
<?php
2
require_once(dirname(__FILE__).'/class.Scheduler.php');
3
require_once(dirname(__FILE__).'/class.ACARS.php');
4
require_once(dirname(__FILE__).'/class.Image.php');
5
$global_query = "SELECT spotter_output.* FROM spotter_output";
6
7
class Spotter{
8
	public $aircraft_correct_icaotype = array('CL64' => 'CL60',
9
					'F9LX' => 'F900',
10
					'K35T' => 'K35R',
11
					'F5EX' => 'FA50',
12
					'G102' => 'GLID',
13
					'LJ36' => 'LJ35',
14
					'G500' => 'EGRT',
15
					'A300' => 'A30B',
16
					'ROT' => 'B77W',
17
					'BPN' => 'B772',
18
					'0011' => 'B77W',
19
					'F9DX' => 'F900',
20
					'B757' => 'B752',
21
					'4/05' => 'A332',
22
					'F/A3' => 'A320',
23
					'F2EX' => 'F2TH',
24
					'EA55' => 'EA50',
25
					'B73B' => 'B737',
26
					'G450' => 'GLF4',
27
					'H25X' => 'H25B',
28
					'E175' => 'E75S',
29
					'B777' => 'B77W',
30
					'F2LX' => 'F2TH',
31
					'CL65' => 'CL60',
32
					'A380' => 'A388',
33
					'G550' => 'GLF5',
34
					'F9EX' => 'F900',
35
					'E195' => 'E190',
36
					'H750' => 'H25B',
37
					'B747' => 'B744',
38
					'B757' => 'B753',
39
					'B767' => 'B763',
40
					'PA39' => 'PA30',
41
					'H900' => 'H25B',
42
					'AN74' => 'AN72',
43
					'CL85' => 'CRJ2',
44
					'G400' => 'GLF4',
45
					'CL61' => 'CL60',
46
					'F2TS' => 'F2TH',
47
					'Z602' => 'CH60',
48
					'G100' => 'ASTR');
49
50
51
	public $db;
52
	
53
	public function __construct($dbc = null) {
54
		$Connection = new Connection($dbc);
55
		$this->db = $Connection->db();
56
	}
57
58
	/**
59
	* Get SQL query part for filter used
60
	* @param Array $filter the filter
61
	* @return Array the SQL part
62
	*/
63
	public function getFilter($filter = array(),$where = false,$and = false) {
64
		global $globalFilter, $globalStatsFilters, $globalFilterName, $globalDBdriver;
65
		$filters = array();
66
		if (is_array($globalStatsFilters) && isset($globalStatsFilters[$globalFilterName])) {
67
			if (isset($globalStatsFilters[$globalFilterName][0]['source'])) {
68
				$filters = $globalStatsFilters[$globalFilterName];
69
			} else {
70
				$filter = array_merge($filter,$globalStatsFilters[$globalFilterName]);
71
			}
72
		}
73
		if (isset($filter[0]['source'])) {
74
			$filters = array_merge($filters,$filter);
75
		}
76
		if (is_array($globalFilter)) $filter = array_merge($filter,$globalFilter);
77
		$filter_query_join = '';
78
		$filter_query_where = '';
79
		foreach($filters as $flt) {
80
			if (isset($flt['airlines']) && !empty($flt['airlines'])) {
81
				if ($flt['airlines'][0] != '') {
82
					if (isset($flt['source'])) {
83
						$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";
84
					} else {
85
						$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";
86
					}
87
				}
88
			}
89
			if (isset($flt['pilots_id']) && !empty($flt['pilots_id'])) {
90
				if (isset($flt['source'])) {
91
					$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";
92
				} else {
93
					$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";
94
				}
95
			}
96
			if (isset($flt['idents']) && !empty($flt['idents'])) {
97
				if (isset($flt['source'])) {
98
					$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";
99
				} else {
100
					$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";
101
				}
102
			}
103
			if (isset($flt['registrations']) && !empty($flt['registrations'])) {
104
				if (isset($flt['source'])) {
105
					$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";
106
				} else {
107
					$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";
108
				}
109
			}
110
			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']))) {
111
				if (isset($flt['source'])) {
112
					$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";
113
				}
114
			}
115
		}
116
		if (isset($filter['airlines']) && !empty($filter['airlines'])) {
117
			if ($filter['airlines'][0] != '') {
118
					$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";
119
			}
120
		}
121
		if (isset($filter['airlinestype']) && !empty($filter['airlinestype'])) {
122
			$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 ";
123
		}
124
		if (isset($filter['alliance']) && !empty($filter['alliance'])) {
125
			$filter_query_join .= " INNER JOIN (SELECT icao FROM airlines WHERE alliance = '".$filter['alliance']."') sal ON sal.icao = spotter_output.airline_icao ";
126
		}
127
		if (isset($filter['pilots_id']) && !empty($filter['pilots_id'])) {
128
				$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";
129
			}
130
		if (isset($filter['source']) && !empty($filter['source'])) {
131
			$filter_query_where .= " AND format_source IN ('".implode("','",$filter['source'])."')";
132
		}
133
		if (isset($filter['ident']) && !empty($filter['ident'])) {
134
			$filter_query_where .= " AND ident = '".$filter['ident']."'";
135
		}
136
		if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
137
			$filter_query_where .= " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
138
		}
139
		if (isset($filter['year']) && $filter['year'] != '') {
140
			if ($globalDBdriver == 'mysql') {
141
				$filter_query_where .= " AND YEAR(spotter_output.date) = '".$filter['year']."'";
142
			} else {
143
				$filter_query_where .= " AND EXTRACT(YEAR FROM spotter_output.date) = '".$filter['year']."'";
144
			}
145
		}
146
		if (isset($filter['month']) && $filter['month'] != '') {
147
			if ($globalDBdriver == 'mysql') {
148
				$filter_query_where .= " AND MONTH(spotter_output.date) = '".$filter['month']."'";
149
			} else {
150
				$filter_query_where .= " AND EXTRACT(MONTH FROM spotter_output.date) = '".$filter['month']."'";
151
			}
152
		}
153
		if (isset($filter['day']) && $filter['day'] != '') {
154
			if ($globalDBdriver == 'mysql') {
155
				$filter_query_where .= " AND DAY(spotter_output.date) = '".$filter['day']."'";
156
			} else {
157
				$filter_query_where .= " AND EXTRACT(DAY FROM spotter_output.date) = '".$filter['day']."'";
158
			}
159
		}
160
		if ($filter_query_where == '' && $where) $filter_query_where = ' WHERE';
161
		elseif ($filter_query_where != '' && $and) $filter_query_where .= ' AND';
162
		if ($filter_query_where != '') {
163
			$filter_query_where = preg_replace('/^ AND/',' WHERE',$filter_query_where);
164
		}
165
		$filter_query = $filter_query_join.$filter_query_where;
166
		return $filter_query;
167
	}
168
169
	/**
170
	* Executes the SQL statements to get the spotter information
171
	*
172
	* @param String $query the SQL query
173
	* @param Array $params parameter of the query
174
	* @param String $limitQuery the limit query
175
	* @return Array the spotter information
176
	*
177
	*/
178
	public function getDataFromDB($query, $params = array(), $limitQuery = '',$schedules = false)
179
	{
180
		global $globalSquawkCountry, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalAirlinesSource, $globalVAM;
181
		$Image = new Image($this->db);
182
		$Schedule = new Schedule($this->db);
183
		$ACARS = new ACARS($this->db);
184
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
185
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
186
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
187
		if (!isset($globalVAM)) $globalVAM = FALSE;
188
		date_default_timezone_set('UTC');
189
		
190
		if (!is_string($query))
191
		{
192
			return false;
193
		}
194
		
195
		if ($limitQuery != "")
196
		{
197
			if (!is_string($limitQuery))
198
			{
199
				return false;
200
			}
201
		}
202
203
		
204
		try {
205
			$sth = $this->db->prepare($query.$limitQuery);
206
			$sth->execute($params);
207
		} catch (PDOException $e) {
208
			printf("Invalid query : %s\nWhole query: %s\n",$e->getMessage(), $query.$limitQuery);
209
			exit();
210
		}
211
		
212
	//	$num_rows = count($sth->fetchAll());
213
		$num_rows = 0;
214
215
		$spotter_array = array();
216
217
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
218
		{
219
			$num_rows++;
220
			$temp_array = array();
221
			if (isset($row['spotter_live_id'])) {
222
				//$temp_array['spotter_id'] = $row['spotter_live_id'];
223
				$temp_array['spotter_id'] = $this->getSpotterIDBasedOnFlightAwareID($row['flightaware_id']);
224
			} elseif (isset($row['spotter_archive_id'])) {
225
				$temp_array['spotter_id'] = $row['spotter_archive_id'];
226
			} elseif (isset($row['spotter_archive_output_id'])) {
227
				$temp_array['spotter_id'] = $row['spotter_archive_output_id'];
228
			} elseif (isset($row['spotter_id'])) {
229
				$temp_array['spotter_id'] = $row['spotter_id'];
230
			} else {
231
				$temp_array['spotter_id'] = '';
232
			}
233
			if (isset($row['flightaware_id'])) $temp_array['flightaware_id'] = $row['flightaware_id'];
234
			if (isset($row['modes'])) $temp_array['modes'] = $row['modes'];
235
			$temp_array['ident'] = $row['ident'];
236
			if (isset($row['registration']) && $row['registration'] != '') {
237
				$temp_array['registration'] = $row['registration'];
238
			} elseif (isset($temp_array['modes'])) {
239
				$temp_array['registration'] = $this->getAircraftRegistrationBymodeS($temp_array['modes']);
240
			} else $temp_array['registration'] = '';
241
			if (isset($row['aircraft_icao'])) $temp_array['aircraft_type'] = $row['aircraft_icao'];
242
			
243
			$temp_array['departure_airport'] = $row['departure_airport_icao'];
244
			$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
245
			if (isset($row['real_arrival_airport_icao']) && $row['real_arrival_airport_icao'] != NULL) $temp_array['real_arrival_airport'] = $row['real_arrival_airport_icao'];
246
			if (isset($row['latitude'])) $temp_array['latitude'] = $row['latitude'];
247
			if (isset($row['longitude'])) $temp_array['longitude'] = $row['longitude'];
248
			/*
249
			if (Connection->tableExists('countries')) {
250
				$country_info = $this->getCountryFromLatitudeLongitude($temp_array['latitude'],$temp_array['longitude']);
251
				if (is_array($country_info) && isset($country_info['name']) && isset($country_info['iso2'])) {
252
				    $temp_array['country'] = $country_info['name'];
253
				    $temp_array['country_iso2'] = $country_info['iso2'];
254
				}
255
			}
256
			*/
257
			if (isset($row['waypoints'])) $temp_array['waypoints'] = $row['waypoints'];
258
			if (isset($row['format_source'])) $temp_array['format_source'] = $row['format_source'];
259
			if (isset($row['route_stop']) && $row['route_stop'] != '') {
260
				$temp_array['route_stop'] = $row['route_stop'];
261
				$allroute = explode(' ',$row['route_stop']);
262
				foreach ($allroute as $route) {
263
					$route_airport_array = $this->getAllAirportInfo($route);
264
					if (isset($route_airport_array[0]['name'])) {
265
						$route_stop_details = array();
266
						$route_stop_details['airport_name'] = $route_airport_array[0]['name'];
267
						$route_stop_details['airport_city'] = $route_airport_array[0]['city'];
268
						$route_stop_details['airport_country'] = $route_airport_array[0]['country'];
269
						$route_stop_details['airport_icao'] = $route_airport_array[0]['icao'];
270
						$temp_array['route_stop_details'][] = $route_stop_details;
271
					}
272
				}
273
			}
274
			if (isset($row['altitude'])) $temp_array['altitude'] = $row['altitude'];
275
			if (isset($row['heading'])) {
276
				$temp_array['heading'] = $row['heading'];
277
				$heading_direction = $this->parseDirection($row['heading']);
278
				if (isset($heading_direction[0]['direction_fullname'])) $temp_array['heading_name'] = $heading_direction[0]['direction_fullname'];
279
			}
280
			if (isset($row['ground_speed'])) $temp_array['ground_speed'] = $row['ground_speed'];
281
			$temp_array['image'] = "";
282
			$temp_array['image_thumbnail'] = "";
283
			$temp_array['image_source'] = "";
284
			$temp_array['image_copyright'] = "";
285
 
286
			if (isset($row['highlight'])) {
287
				$temp_array['highlight'] = $row['highlight'];
288
			} else $temp_array['highlight'] = '';
289
			
290
			if (isset($row['date'])) {
291
				$dateArray = $this->parseDateString($row['date']);
292
				if ($dateArray['seconds'] < 10)
293
				{
294
					$temp_array['date'] = "a few seconds ago";
295
				} elseif ($dateArray['seconds'] >= 5 && $dateArray['seconds'] < 30)
296
				{
297
					$temp_array['date'] = "half a minute ago";
298
				} elseif ($dateArray['seconds'] >= 30 && $dateArray['seconds'] < 60)
299
				{
300
					$temp_array['date'] = "about a minute ago";
301
				} elseif ($dateArray['minutes'] < 5)
302
				{
303
					$temp_array['date'] = "a few minutes ago";
304
				} elseif ($dateArray['minutes'] >= 5 && $dateArray['minutes'] < 60)
305
				{
306
					$temp_array['date'] = "about ".$dateArray['minutes']." minutes ago";
307
				} elseif ($dateArray['hours'] < 2)
308
				{
309
					$temp_array['date'] = "about an hour ago";
310
				} elseif ($dateArray['hours'] >= 2 && $dateArray['hours'] < 24)
311
				{
312
					$temp_array['date'] = "about ".$dateArray['hours']." hours ago";
313
				} else {
314
					$temp_array['date'] = date("M j Y, g:i a",strtotime($row['date']." UTC"));
315
				}
316
				$temp_array['date_minutes_past'] = $dateArray['minutes'];
317
				$temp_array['date_iso_8601'] = date("c",strtotime($row['date']." UTC"));
318
				$temp_array['date_rfc_2822'] = date("r",strtotime($row['date']." UTC"));
319
				$temp_array['date_unix'] = strtotime($row['date']." UTC");
320
				if (isset($row['last_seen']) && $row['last_seen'] != '') {
321
					if (strtotime($row['last_seen']) > strtotime($row['date'])) {
322
						$temp_array['duration'] = strtotime($row['last_seen']) - strtotime($row['date']);
323
						$temp_array['last_seen_date_iso_8601'] = date("c",strtotime($row['last_seen']." UTC"));
324
						$temp_array['last_seen_date_rfc_2822'] = date("r",strtotime($row['last_seen']." UTC"));
325
						$temp_array['last_seen_date_unix'] = strtotime($row['last_seen']." UTC");
326
					}
327
				}
328
			}
329
			
330
			if (isset($row['aircraft_name']) && $row['aircraft_name'] != '' && isset($row['aircraft_shadow']) && $row['aircraft_shadow'] != '') {
331
				$temp_array['aircraft_name'] = $row['aircraft_name'];
332
				$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
333
				if (isset($row['aircraft_shadow'])) {
334
					$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
335
				}
336
			} elseif (isset($row['aircraft_icao'])) {
337
				$aircraft_array = $this->getAllAircraftInfo($row['aircraft_icao']);
338
				if (count($aircraft_array) > 0) {
339
					$temp_array['aircraft_name'] = $aircraft_array[0]['type'];
340
					$temp_array['aircraft_manufacturer'] = $aircraft_array[0]['manufacturer'];
341
				
342
					if ($aircraft_array[0]['aircraft_shadow'] != NULL) {
343
						$temp_array['aircraft_shadow'] = $aircraft_array[0]['aircraft_shadow'];
344
					} else $temp_array['aircraft_shadow'] = 'default.png';
345
                                } else {
346
                            		$temp_array['aircraft_shadow'] = 'default.png';
347
					$temp_array['aircraft_name'] = 'N/A';
348
					$temp_array['aircraft_manufacturer'] = 'N/A';
349
                            	}
350
			}
351
			$fromsource = NULL;
352
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
353
			elseif (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
354
			elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
355
			elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
356
			elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
357
			if (!isset($row['airline_name']) || $row['airline_name'] == '') {
358
				if (!is_numeric(substr($row['ident'], 0, 3))) {
359
					if (is_numeric(substr($row['ident'], 2, 1))) {
360
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 2),$fromsource);
361
					} elseif (is_numeric(substr($row['ident'], 3, 1))) {
362
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
363
					} else {
364
						$airline_array = $this->getAllAirlineInfo('NA');
365
					}
366
				} else {
367
					$airline_array = $this->getAllAirlineInfo('NA');
368
				}
369
				if (count($airline_array) > 0) {
370
					$temp_array['airline_icao'] = $airline_array[0]['icao'];
371
					$temp_array['airline_iata'] = $airline_array[0]['iata'];
372
					$temp_array['airline_name'] = $airline_array[0]['name'];
373
					$temp_array['airline_country'] = $airline_array[0]['country'];
374
					$temp_array['airline_callsign'] = $airline_array[0]['callsign'];
375
					$temp_array['airline_type'] = $airline_array[0]['type'];
376
				}
377
			} else {
378
				$temp_array['airline_icao'] = $row['airline_icao'];
379
				if (isset($row['airline_iata'])) $temp_array['airline_iata'] = $row['airline_iata'];
380
				else $temp_array['airline_iata'] = 'N/A';
381
				$temp_array['airline_name'] = $row['airline_name'];
382
				$temp_array['airline_country'] = $row['airline_country'];
383
				if (isset($row['airline_callsign'])) $temp_array['airline_callsign'] = $row['airline_callsign'];
384
				else $temp_array['airline_callsign'] = 'N/A';
385
				$temp_array['airline_type'] = $row['airline_type'];
386
				if ($temp_array['airline_icao'] != '' && $temp_array['airline_iata'] == 'N/A') {
387
					$airline_array = $this->getAllAirlineInfo($temp_array['airline_icao']);
388
					if (count($airline_array) > 0) {
389
						$temp_array['airline_icao'] = $airline_array[0]['icao'];
390
						$temp_array['airline_iata'] = $airline_array[0]['iata'];
391
						$temp_array['airline_name'] = $airline_array[0]['name'];
392
						$temp_array['airline_country'] = $airline_array[0]['country'];
393
						$temp_array['airline_callsign'] = $airline_array[0]['callsign'];
394
						$temp_array['airline_type'] = $airline_array[0]['type'];
395
					}
396
				}
397
			}
398
			if (isset($temp_array['airline_iata']) && $temp_array['airline_iata'] != '') {
399
				$acars_array = $ACARS->getLiveAcarsData($temp_array['airline_iata'].substr($temp_array['ident'],3));
400
				//$acars_array = ACARS->getLiveAcarsData('BA40YL');
401
				if (count($acars_array) > 0) {
402
					$temp_array['acars'] = $acars_array;
403
					//print_r($acars_array);
404
				}
405
			}
406
			if (isset($row['owner_name']) && $row['owner_name'] != '' && $row['owner_name'] != NULL) {
407
				$temp_array['aircraft_owner'] = $row['owner_name'];
408
			}
409
			if ($temp_array['registration'] != "" && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM && !isset($temp_array['aircraft_owner'])) {
410
				$owner_info = $this->getAircraftOwnerByRegistration($temp_array['registration']);
411
				if ($owner_info['owner'] != '') $temp_array['aircraft_owner'] = ucwords(strtolower($owner_info['owner']));
412
				$temp_array['aircraft_base'] = $owner_info['base'];
413
				$temp_array['aircraft_date_first_reg'] = $owner_info['date_first_reg'];
414
			}
415
416
			if($temp_array['registration'] != "" || (($globalIVAO || $globalVATSIM || $globalphpVMS || $globalVAM) && isset($temp_array['aircraft_type']) && $temp_array['aircraft_type'] != ''))
417
			{
418
				if ($globalIVAO) {
419
					if (isset($temp_array['airline_icao']))	$image_array = $Image->getSpotterImage('',$temp_array['aircraft_type'],$temp_array['airline_icao']);
420
					else $image_array = $Image->getSpotterImage('',$temp_array['aircraft_type']);
421
				} elseif (isset($temp_array['aircraft_type']) && isset($temp_array['airline_icao'])) $image_array = $Image->getSpotterImage($temp_array['registration'],$temp_array['aircraft_type'],$temp_array['airline_icao']);
422
				elseif (isset($temp_array['aircraft_type'])) $image_array = $Image->getSpotterImage($temp_array['registration'],$temp_array['aircraft_type']);
423
				else $image_array = $Image->getSpotterImage($temp_array['registration']);
424
				if (count($image_array) > 0) {
425
					$temp_array['image'] = $image_array[0]['image'];
426
					$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
427
					$temp_array['image_source'] = $image_array[0]['image_source'];
428
					$temp_array['image_source_website'] = $image_array[0]['image_source_website'];
429
					if ($temp_array['image_source_website'] == '' && $temp_array['image_source'] == 'planespotters') {
430
						$planespotter_url_array = explode("_", $temp_array['image']);
431
						$planespotter_id = str_replace(".jpg", "", $planespotter_url_array[1]);
432
						$temp_array['image_source_website'] = 'http://www.planespotters.net/Aviation_Photos/photo.show?id='.$planespotter_id;
433
					 }
434
					$temp_array['image_copyright'] = $image_array[0]['image_copyright'];
435
				}
436
			}
437
438
439
			if (isset($row['departure_airport_time']) && $row['departure_airport_time'] != '') {
440
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
441
			}
442
			if (isset($row['arrival_airport_time']) && $row['arrival_airport_time'] != '') {
443
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
444
			}
445
			
446
			if ((!isset($globalIVAO) || ! $globalIVAO) && (!isset($globalVATSIM) || !$globalVATSIM) && (!isset($globalphpVMS) || !$globalphpVMS) && (!isset($globalVAM) || !$globalVAM)) {
447
				if ($schedules === true) {
448
					$schedule_array = $Schedule->getSchedule($temp_array['ident']);
449
					//print_r($schedule_array);
450
					if (count($schedule_array) > 0) {
451
						if ($schedule_array['departure_airport_icao'] != '') {
452
							$row['departure_airport_icao'] = $schedule_array['departure_airport_icao'];
453
							$temp_array['departure_airport'] = $row['departure_airport_icao'];
454
						}
455
						if ($schedule_array['arrival_airport_icao'] != '') {
456
							$row['arrival_airport_icao'] = $schedule_array['arrival_airport_icao'];
457
							$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
458
						}
459
						$temp_array['departure_airport_time'] = $schedule_array['departure_airport_time'];
460
						$temp_array['arrival_airport_time'] = $schedule_array['arrival_airport_time'];
461
					}
462
				}
463
			} else {
464
				if (isset($row['real_departure_airport_time']) && $row['real_departure_airport_time'] != '') {
465
					$temp_array['departure_airport_time'] = $row['real_departure_airport_time'];
466
				}
467
				if (isset($row['real_arrival_airport_time']) && $row['real_arrival_airport_time'] != '') {
468
					$temp_array['real_arrival_airport_time'] = $row['real_arrival_airport_time'];
469
				}
470
			}
471
			
472
			//if ($row['departure_airport_icao'] != '' && $row['departure_airport_name'] == '') {
473
			if ($row['departure_airport_icao'] != '') {
474
				$departure_airport_array = $this->getAllAirportInfo($row['departure_airport_icao']);
475
				if (!isset($departure_airport_array[0]['name'])) $departure_airport_array = $this->getAllAirportInfo('NA');
476
			/*
477
			} elseif ($row['departure_airport_name'] != '') {
478
				$temp_array['departure_airport_name'] = $row['departure_airport_name'];
479
				$temp_array['departure_airport_city'] = $row['departure_airport_city'];
480
				$temp_array['departure_airport_country'] = $row['departure_airport_country'];
481
				$temp_array['departure_airport_icao'] = $row['departure_airport_icao'];
482
			*/
483
			} else $departure_airport_array = $this->getAllAirportInfo('NA');
484
			if (isset($departure_airport_array[0]['name'])) {
485
				$temp_array['departure_airport_name'] = $departure_airport_array[0]['name'];
486
				$temp_array['departure_airport_city'] = $departure_airport_array[0]['city'];
487
				$temp_array['departure_airport_country'] = $departure_airport_array[0]['country'];
488
				$temp_array['departure_airport_iata'] = $departure_airport_array[0]['iata'];
489
				$temp_array['departure_airport_icao'] = $departure_airport_array[0]['icao'];
490
				$temp_array['departure_airport_latitude'] = $departure_airport_array[0]['latitude'];
491
				$temp_array['departure_airport_longitude'] = $departure_airport_array[0]['longitude'];
492
				$temp_array['departure_airport_altitude'] = $departure_airport_array[0]['altitude'];
493
			}
494
495
			/*
496
			if (isset($row['departure_airport_time'])) {
497
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
498
			}
499
			*/
500
			
501
			if ($row['arrival_airport_icao'] != '') {
502
				$arrival_airport_array = $this->getAllAirportInfo($row['arrival_airport_icao']);
503
				if (count($arrival_airport_array) == 0) $arrival_airport_array = $this->getAllAirportInfo('NA');
504
			} else $arrival_airport_array = $this->getAllAirportInfo('NA');
505
			if (isset($arrival_airport_array[0]['name'])) {
506
				$temp_array['arrival_airport_name'] = $arrival_airport_array[0]['name'];
507
				$temp_array['arrival_airport_city'] = $arrival_airport_array[0]['city'];
508
				$temp_array['arrival_airport_country'] = $arrival_airport_array[0]['country'];
509
				$temp_array['arrival_airport_iata'] = $arrival_airport_array[0]['iata'];
510
				$temp_array['arrival_airport_icao'] = $arrival_airport_array[0]['icao'];
511
				$temp_array['arrival_airport_latitude'] = $arrival_airport_array[0]['latitude'];
512
				$temp_array['arrival_airport_longitude'] = $arrival_airport_array[0]['longitude'];
513
				$temp_array['arrival_airport_altitude'] = $arrival_airport_array[0]['altitude'];
514
			}
515
			/*
516
			if (isset($row['arrival_airport_time'])) {
517
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
518
			}
519
			*/
520
			if (isset($row['pilot_id']) && $row['pilot_id'] != '') $temp_array['pilot_id'] = $row['pilot_id'];
521
			if (isset($row['pilot_name']) && $row['pilot_name'] != '') $temp_array['pilot_name'] = $row['pilot_name'];
522
			if (isset($row['source_name']) && $row['source_name'] != '') $temp_array['source_name'] = $row['source_name'];
523
			if (isset($row['over_country']) && $row['over_country'] != '') $temp_array['over_country'] = $row['over_country'];
524
			if (isset($row['distance']) && $row['distance'] != '') $temp_array['distance'] = $row['distance'];
525
			if (isset($row['squawk'])) {
526
				$temp_array['squawk'] = $row['squawk'];
527
				if ($row['squawk'] != '' && isset($temp_array['country_iso2'])) {
528
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['country_iso2']);
529
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
530
				} elseif ($row['squawk'] != '' && isset($temp_array['over_country'])) {
531
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['over_country']);
532
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
533
				} elseif ($row['squawk'] != '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
534
			}
535
    			
536
			$temp_array['query_number_rows'] = $num_rows;
537
			
538
			$spotter_array[] = $temp_array;
539
		}
540
		if ($num_rows == 0) return array();
541
		$spotter_array[0]['query_number_rows'] = $num_rows;
542
		return $spotter_array;
543
	}	
544
	
545
	
546
	/**
547
	* Gets all the spotter information
548
	*
549
	* @return Array the spotter information
550
	*
551
	*/
552
	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())
553
	{
554
		global $globalTimezone, $globalDBdriver;
555
		require_once(dirname(__FILE__).'/class.Translation.php');
556
		$Translation = new Translation();
557
558
		date_default_timezone_set('UTC');
559
560
		$query_values = array();
561
		$additional_query = '';
562
		$filter_query = $this->getFilter($filters,true,true);
563
		if ($q != "")
564
		{
565
			if (!is_string($q))
566
			{
567
				return false;
568
			} else {
569
				$q_array = explode(" ", $q);
570
				foreach ($q_array as $q_item){
571
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
572
					$additional_query .= " AND (";
573
					if (is_int($q_item)) $additional_query .= "(spotter_output.spotter_id like '%".$q_item."%') OR ";
574
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
575
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
576
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
577
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
578
					$additional_query .= "(spotter_output.airline_name like '%".$q_item."%') OR ";
579
					$additional_query .= "(spotter_output.airline_country like '%".$q_item."%') OR ";
580
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
581
					$additional_query .= "(spotter_output.departure_airport_name like '%".$q_item."%') OR ";
582
					$additional_query .= "(spotter_output.departure_airport_city like '%".$q_item."%') OR ";
583
					$additional_query .= "(spotter_output.departure_airport_country like '%".$q_item."%') OR ";
584
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
585
					$additional_query .= "(spotter_output.arrival_airport_name like '%".$q_item."%') OR ";
586
					$additional_query .= "(spotter_output.arrival_airport_city like '%".$q_item."%') OR ";
587
					$additional_query .= "(spotter_output.arrival_airport_country like '%".$q_item."%') OR ";
588
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
589
					$additional_query .= "(spotter_output.owner_name like '%".$q_item."%') OR ";
590
					$additional_query .= "(spotter_output.pilot_id like '%".$q_item."%') OR ";
591
					$additional_query .= "(spotter_output.pilot_name like '%".$q_item."%') OR ";
592
					$additional_query .= "(spotter_output.ident like '%".$q_item."%') OR ";
593
					$translate = $Translation->ident2icao($q_item);
594
					if ($translate != $q_item) $additional_query .= "(spotter_output.ident like '%".$translate."%') OR ";
595
					$additional_query .= "(spotter_output.highlight like '%".$q_item."%')";
596
					$additional_query .= ")";
597
				}
598
			}
599
		}
600
601
		if ($registration != "")
602
		{
603
			$registration = filter_var($registration,FILTER_SANITIZE_STRING);
604
			if (!is_string($registration))
605
			{
606
				return false;
607
			} else {
608
				$additional_query .= " AND spotter_output.registration = :registration";
609
				$query_values = array_merge($query_values,array(':registration' => $registration));
610
			}
611
		}
612
613
		if ($aircraft_icao != "")
614
		{
615
			$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
616
			if (!is_string($aircraft_icao))
617
			{
618
				return false;
619
			} else {
620
				$additional_query .= " AND spotter_output.aircraft_icao = :aircraft_icao";
621
				$query_values = array_merge($query_values,array(':aircraft_icao' => $aircraft_icao));
622
			}
623
		}
624
625
		if ($aircraft_manufacturer != "")
626
		{
627
			$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
628
			if (!is_string($aircraft_manufacturer))
629
			{
630
				return false;
631
			} else {
632
				$additional_query .= " AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer";
633
				$query_values = array_merge($query_values,array(':aircraft_manufacturer' => $aircraft_manufacturer));
634
			}
635
		}
636
637
		if ($highlights == "true")
638
		{
639
			if (!is_string($highlights))
640
			{
641
				return false;
642
			} else {
643
				$additional_query .= " AND (spotter_output.highlight <> '')";
644
			}
645
		}
646
647
		if ($airline_icao != "")
648
		{
649
			$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
650
			if (!is_string($airline_icao))
651
			{
652
				return false;
653
			} else {
654
				$additional_query .= " AND spotter_output.airline_icao = :airline_icao";
655
				$query_values = array_merge($query_values,array(':airline_icao' => $airline_icao));
656
			}
657
		}
658
659
		if ($airline_country != "")
660
		{
661
			$airline_country = filter_var($airline_country,FILTER_SANITIZE_STRING);
662
			if (!is_string($airline_country))
663
			{
664
				return false;
665
			} else {
666
				$additional_query .= " AND spotter_output.airline_country = :airline_country";
667
				$query_values = array_merge($query_values,array(':airline_country' => $airline_country));
668
			}
669
		}
670
671
		if ($airline_type != "")
672
		{
673
			if (!is_string($airline_type))
674
			{
675
				return false;
676
			} else {
677
				if ($airline_type == "passenger")
678
				{
679
					$additional_query .= " AND (spotter_output.airline_type = 'passenger')";
680
				}
681
				if ($airline_type == "cargo")
682
				{
683
					$additional_query .= " AND (spotter_output.airline_type = 'cargo')";
684
				}
685
				if ($airline_type == "military")
686
				{
687
					$additional_query .= " AND (spotter_output.airline_type = 'military')";
688
				}
689
			}
690
		}
691
692
		if ($airport != "")
693
		{
694
			$airport = filter_var($airport,FILTER_SANITIZE_STRING);
695
			if (!is_string($airport))
696
			{
697
				return false;
698
			} else {
699
				$additional_query .= " AND (spotter_output.departure_airport_icao = :airport OR spotter_output.arrival_airport_icao = :airport)";
700
				$query_values = array_merge($query_values,array(':airport' => $airport));
701
			}
702
		}
703
704
		if ($airport_country != "")
705
		{
706
			$airport_country = filter_var($airport_country,FILTER_SANITIZE_STRING);
707
			if (!is_string($airport_country))
708
			{
709
				return false;
710
			} else {
711
				$additional_query .= " AND (spotter_output.departure_airport_country = :airport_country OR spotter_output.arrival_airport_country = :airport_country)";
712
				$query_values = array_merge($query_values,array(':airport_country' => $airport_country));
713
			}
714
		}
715
    
716
		if ($callsign != "")
717
		{
718
			$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
719
			if (!is_string($callsign))
720
			{
721
				return false;
722
			} else {
723
				$translate = $Translation->ident2icao($callsign);
724
				if ($translate != $callsign) {
725
					$additional_query .= " AND (spotter_output.ident = :callsign OR spotter_output.ident = :translate)";
726
					$query_values = array_merge($query_values,array(':callsign' => $callsign,':translate' => $translate));
727
				} else {
728
					$additional_query .= " AND spotter_output.ident = :callsign";
729
					$query_values = array_merge($query_values,array(':callsign' => $callsign));
730
				}
731
			}
732
		}
733
734
		if ($owner != "")
735
		{
736
			$owner = filter_var($owner,FILTER_SANITIZE_STRING);
737
			if (!is_string($owner))
738
			{
739
				return false;
740
			} else {
741
				$additional_query .= " AND spotter_output.owner_name = :owner";
742
				$query_values = array_merge($query_values,array(':owner' => $owner));
743
			}
744
		}
745
746
		if ($pilot_name != "")
747
		{
748
			$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
749
			if (!is_string($pilot_name))
750
			{
751
				return false;
752
			} else {
753
				$additional_query .= " AND spotter_output.pilot_name = :pilot_name";
754
				$query_values = array_merge($query_values,array(':pilot_name' => $pilot_name));
755
			}
756
		}
757
758
		if ($pilot_id != "")
759
		{
760
			$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_STRING);
761
			if (!is_string($pilot_id))
762
			{
763
				return false;
764
			} else {
765
				$additional_query .= " AND spotter_output.pilot_id = :pilot_id";
766
				$query_values = array_merge($query_values,array(':pilot_id' => $pilot_id));
767
			}
768
		}
769
770
		if ($departure_airport_route != "")
771
		{
772
			$departure_airport_route = filter_var($departure_airport_route,FILTER_SANITIZE_STRING);
773
			if (!is_string($departure_airport_route))
774
			{
775
				return false;
776
			} else {
777
				$additional_query .= " AND spotter_output.departure_airport_icao = :departure_airport_route";
778
				$query_values = array_merge($query_values,array(':departure_airport_route' => $departure_airport_route));
779
			}
780
		}
781
782
		if ($arrival_airport_route != "")
783
		{
784
			$arrival_airport_route = filter_var($arrival_airport_route,FILTER_SANITIZE_STRING);
785
			if (!is_string($arrival_airport_route))
786
			{
787
				return false;
788
			} else {
789
				$additional_query .= " AND spotter_output.arrival_airport_icao = :arrival_airport_route";
790
				$query_values = array_merge($query_values,array(':arrival_airport_route' => $arrival_airport_route));
791
			}
792
		}
793
794
		if ($altitude != "")
795
		{
796
			$altitude_array = explode(",", $altitude);
797
			$altitude_array[0] = filter_var($altitude_array[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
798
			$altitude_array[1] = filter_var($altitude_array[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
799
800
			if ($altitude_array[1] != "")
801
			{                
802
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
803
				$altitude_array[1] = substr($altitude_array[1], 0, -2);
804
				$additional_query .= " AND altitude BETWEEN '".$altitude_array[0]."' AND '".$altitude_array[1]."' ";
805
			} else {
806
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
807
				$additional_query .= " AND altitude <= '".$altitude_array[0]."' ";
808
			}
809
		}
810
811
		if ($date_posted != "")
812
		{
813
			$date_array = explode(",", $date_posted);
814
			$date_array[0] = filter_var($date_array[0],FILTER_SANITIZE_STRING);
815
			$date_array[1] = filter_var($date_array[1],FILTER_SANITIZE_STRING);
816
817
			if ($globalTimezone != '') {
818
				date_default_timezone_set($globalTimezone);
819
				$datetime = new DateTime();
820
				$offset = $datetime->format('P');
821
			} else $offset = '+00:00';
822
823
			if ($date_array[1] != "")
824
			{
825
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
826
				$date_array[1] = date("Y-m-d H:i:s", strtotime($date_array[1]));
827
				if ($globalDBdriver == 'mysql') {
828
					$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]."' ";
829
				} else {
830
					$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]."' ";
831
				}
832
			} else {
833
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
834
				if ($globalDBdriver == 'mysql') {
835
					$additional_query .= " AND TIMESTAMP(CONVERT_TZ(spotter_output.date,'+00:00', '".$offset."')) >= '".$date_array[0]."' ";
836
				} else {
837
					$additional_query .= " AND CAST(spotter_output.date AT TIME ZONE INTERVAL ".$offset." AS TIMESTAMP) >= '".$date_array[0]."' ";
838
				}
839
			}
840
		}
841
842
		if ($limit != "")
843
		{
844
			$limit_array = explode(",", $limit);
845
			
846
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
847
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
848
			
849
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
850
			{
851
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
852
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
853
			} else $limit_query = "";
854
		} else $limit_query = "";
855
856
857
		if ($sort != "")
858
		{
859
			$search_orderby_array = $this->getOrderBy();
860
			$orderby_query = $search_orderby_array[$sort]['sql'];
861
		} else {
862
			if ($origLat != "" && $origLon != "" && $dist != "") {
863
				$orderby_query = " ORDER BY distance ASC";
864
			} else {
865
				$orderby_query = " ORDER BY spotter_output.date DESC";
866
			}
867
		}
868
869
		if ($includegeodata == "true")
870
		{
871
			$additional_query .= " AND spotter_output.waypoints <> ''";
872
		}
873
874
875
		if ($origLat != "" && $origLon != "" && $dist != "") {
876
			$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
877
878
			if ($globalDBdriver == 'mysql') {
879
				$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 
880
						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)) 
881
						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;
882
			} else {
883
				$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 
884
						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)) 
885
						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;
886
			}
887
		} else {		
888
			$query  = "SELECT spotter_output.* FROM spotter_output".$filter_query." spotter_output.ident <> '' 
889
					".$additional_query."
890
					".$orderby_query;
891
		}
892
		$spotter_array = $this->getDataFromDB($query, $query_values,$limit_query);
893
		return $spotter_array;
894
	}
895
	
896
	
897
	/**
898
	* Gets all the spotter information based on the latest data entry
899
	*
900
	* @return Array the spotter information
901
	*
902
	*/
903
	public function getLatestSpotterData($limit = '', $sort = '', $filter = array())
904
	{
905
		global $global_query;
906
		
907
		date_default_timezone_set('UTC');
908
909
		$filter_query = $this->getFilter($filter);
910
		
911
		if ($limit != "")
912
		{
913
			$limit_array = explode(",", $limit);
914
			
915
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
916
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
917
			
918
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
919
			{
920
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
921
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
922
			} else $limit_query = "";
923
		} else $limit_query = "";
924
		
925
		if ($sort != "")
926
		{
927
			$search_orderby_array = $this->getOrderBy();
928
			$orderby_query = $search_orderby_array[$sort]['sql'];
929
		} else {
930
			$orderby_query = " ORDER BY spotter_output.date DESC";
931
		}
932
933
		$query  = $global_query.$filter_query." ".$orderby_query;
934
935
		$spotter_array = $this->getDataFromDB($query, array(),$limit_query,true);
936
937
		return $spotter_array;
938
	}
939
    
940
    
941
    /**
942
	* Gets all the spotter information based on a user's latitude and longitude
943
	*
944
	* @return Array the spotter information
945
	*
946
	*/
947
	public function getLatestSpotterForLayar($lat, $lng, $radius, $interval)
948
	{
949
		date_default_timezone_set('UTC');
950
		$limit_query = '';
951
		if ($lat != "")
952
		{
953
			if (!is_numeric($lat))
954
			{
955
				return false;
956
			}
957
		}
958
        
959
		if ($lng != "")
960
		{
961
			if (!is_numeric($lng))
962
			{
963
				return false;
964
			}
965
		}
966
		
967
		if ($radius != "")
968
		{
969
			if (!is_numeric($radius))
970
			{
971
				return false;
972
			}
973
		}
974
    		$additional_query = '';
975
		if ($interval != "")
976
		{
977
			if (!is_string($interval))
978
			{
979
				return false;
980
			} else {
981
				if ($interval == "30m"){
982
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 MINUTE) <= $this_output.date ';
983
				} else if ($interval == "1h"){
984
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) <= $this_output.date ';
985
				} else if ($interval == "3h"){
986
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 3 HOUR) <= $this_output.date ';
987
				} else if ($interval == "6h"){
988
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 6 HOUR) <= $this_output.date ';
989
				} else if ($interval == "12h"){
990
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 12 HOUR) <= $this_output.date ';
991
				} else if ($interval == "24h"){
992
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 24 HOUR) <= $this_output.date ';
993
				} else if ($interval == "7d"){
994
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY) <= $this_output.date ';
995
				} else if ($interval == "30d"){
996
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 DAY) <= $this_output.date ';
997
				} 
998
			}
999
		}
1000
1001
		$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 
1002
                   WHERE spotter_output.latitude <> '' 
1003
				   AND spotter_output.longitude <> '' 
1004
                   ".$additional_query."
1005
                   HAVING distance < :radius  
1006
				   ORDER BY distance";
1007
1008
		$spotter_array = $this->getDataFromDB($query, array(':radius' => $radius),$limit_query);
1009
1010
		return $spotter_array;
1011
	}
1012
    
1013
    
1014
    /**
1015
	* Gets all the spotter information sorted by the newest aircraft type
1016
	*
1017
	* @return Array the spotter information
1018
	*
1019
	*/
1020
	public function getNewestSpotterDataSortedByAircraftType($limit = '', $sort = '',$filter = array())
1021
	{
1022
		global $global_query;
1023
		
1024
		date_default_timezone_set('UTC');
1025
1026
		$filter_query = $this->getFilter($filter,true,true);
1027
1028
		$limit_query = '';
1029
		if ($limit != "")
1030
		{
1031
			$limit_array = explode(",", $limit);
1032
			
1033
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1034
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1035
			
1036
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1037
			{
1038
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1039
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1040
			}
1041
		}
1042
		
1043
		if ($sort != "")
1044
		{
1045
			$search_orderby_array = $this->getOrderBy();
1046
			$orderby_query = $search_orderby_array[$sort]['sql'];
1047
		} else {
1048
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1049
		}
1050
1051
		$query  = $global_query." ".$filter_query." spotter_output.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;
1052
1053
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1054
1055
		return $spotter_array;
1056
	}
1057
    
1058
    
1059
	/**
1060
	* Gets all the spotter information sorted by the newest aircraft registration
1061
	*
1062
	* @return Array the spotter information
1063
	*
1064
	*/
1065
	public function getNewestSpotterDataSortedByAircraftRegistration($limit = '', $sort = '', $filter = array())
1066
	{
1067
		global $global_query;
1068
		
1069
		date_default_timezone_set('UTC');
1070
		$filter_query = $this->getFilter($filter,true,true);
1071
1072
		$limit_query = '';
1073
		if ($limit != "")
1074
		{
1075
			$limit_array = explode(",", $limit);
1076
			
1077
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1078
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1079
			
1080
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1081
			{
1082
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1083
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1084
			}
1085
		}
1086
		
1087
		if ($sort != "")
1088
		{
1089
			$search_orderby_array = $this->getOrderBy();
1090
			$orderby_query = $search_orderby_array[$sort]['sql'];
1091
		} else {
1092
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1093
		}
1094
1095
		$query  = $global_query." ".$filter_query." spotter_output.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;
1096
1097
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1098
1099
		return $spotter_array;
1100
	}
1101
1102
1103
	/**
1104
	* Gets all the spotter information sorted by the newest airline
1105
	*
1106
	* @return Array the spotter information
1107
	*
1108
	*/
1109
	public function getNewestSpotterDataSortedByAirline($limit = '', $sort = '',$filter = array())
1110
	{
1111
		global $global_query;
1112
		
1113
		date_default_timezone_set('UTC');
1114
		$filter_query = $this->getFilter($filter,true,true);
1115
		
1116
		$limit_query = '';
1117
		if ($limit != "")
1118
		{
1119
			$limit_array = explode(",", $limit);
1120
			
1121
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1122
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1123
			
1124
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1125
			{
1126
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1127
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1128
			}
1129
		}
1130
		
1131
		if ($sort != "")
1132
		{
1133
			$search_orderby_array = $this->getOrderBy();
1134
			$orderby_query = $search_orderby_array[$sort]['sql'];
1135
		} else {
1136
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1137
		}
1138
1139
		$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;
1140
1141
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1142
1143
		return $spotter_array;
1144
	}
1145
    
1146
    
1147
    /**
1148
	* Gets all the spotter information sorted by the newest departure airport
1149
	*
1150
	* @return Array the spotter information
1151
	*
1152
	*/
1153
	public function getNewestSpotterDataSortedByDepartureAirport($limit = '', $sort = '', $filter = array())
1154
	{
1155
		global $global_query;
1156
		
1157
		date_default_timezone_set('UTC');
1158
		
1159
		$filter_query = $this->getFilter($filter,true,true);
1160
		
1161
		$limit_query = '';
1162
		
1163
		if ($limit != "")
1164
		{
1165
			$limit_array = explode(",", $limit);
1166
			
1167
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1168
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1169
			
1170
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1171
			{
1172
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1173
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1174
			}
1175
		}
1176
		
1177
		if ($sort != "")
1178
		{
1179
			$search_orderby_array = $this->getOrderBy();
1180
			$orderby_query = $search_orderby_array[$sort]['sql'];
1181
		} else {
1182
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1183
		}
1184
1185
		$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;
1186
1187
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1188
1189
		return $spotter_array;
1190
	}
1191
1192
1193
	/**
1194
	* Gets all the spotter information sorted by the newest arrival airport
1195
	*
1196
	* @return Array the spotter information
1197
	*
1198
	*/
1199
	public function getNewestSpotterDataSortedByArrivalAirport($limit = '', $sort = '', $filter = array())
1200
	{
1201
		global $global_query;
1202
		
1203
		date_default_timezone_set('UTC');
1204
		$filter_query = $this->getFilter($filter,true,true);
1205
		$limit_query = '';
1206
		if ($limit != "")
1207
		{
1208
			$limit_array = explode(",", $limit);
1209
			
1210
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1211
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1212
			
1213
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1214
			{
1215
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1216
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1217
			}
1218
		}
1219
		
1220
		if ($sort != "")
1221
		{
1222
			$search_orderby_array = $this->getOrderBy();
1223
			$orderby_query = $search_orderby_array[$sort]['sql'];
1224
		} else {
1225
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1226
		}
1227
1228
		$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;
1229
1230
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1231
1232
		return $spotter_array;
1233
	}
1234
	
1235
1236
	/**
1237
	* Gets all the spotter information based on the spotter id
1238
	*
1239
	* @return Array the spotter information
1240
	*
1241
	*/
1242
	public function getSpotterDataByID($id = '')
1243
	{
1244
		global $global_query;
1245
		
1246
		date_default_timezone_set('UTC');
1247
		if ($id == '') return array();
1248
		$additional_query = "spotter_output.spotter_id = :id";
1249
		$query_values = array(':id' => $id);
1250
1251
		//$query  = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ";
1252
		$query  = $global_query." WHERE ".$additional_query." ";
1253
1254
		$spotter_array = $this->getDataFromDB($query,$query_values);
1255
1256
		return $spotter_array;
1257
	}
1258
1259
	
1260
	
1261
	
1262
	/**
1263
	* Gets all the spotter information based on the callsign
1264
	*
1265
	* @return Array the spotter information
1266
	*
1267
	*/
1268
	public function getSpotterDataByIdent($ident = '', $limit = '', $sort = '', $filter = array())
1269
	{
1270
		global $global_query;
1271
		
1272
		date_default_timezone_set('UTC');
1273
		
1274
		$query_values = array();
1275
		$limit_query = '';
1276
		$additional_query = '';
1277
		$filter_query = $this->getFilter($filter,true,true);
1278
		if ($ident != "")
1279
		{
1280
			if (!is_string($ident))
1281
			{
1282
				return false;
1283
			} else {
1284
				$additional_query = " AND (spotter_output.ident = :ident)";
1285
				$query_values = array(':ident' => $ident);
1286
			}
1287
		}
1288
		
1289
		if ($limit != "")
1290
		{
1291
			$limit_array = explode(",", $limit);
1292
			
1293
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1294
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1295
			
1296
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1297
			{
1298
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1299
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1300
			}
1301
		}
1302
1303
		if ($sort != "")
1304
		{
1305
			$search_orderby_array = $this->getOrderBy();
1306
			$orderby_query = $search_orderby_array[$sort]['sql'];
1307
		} else {
1308
			$orderby_query = " ORDER BY spotter_output.date DESC";
1309
		}
1310
1311
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1312
1313
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1314
1315
		return $spotter_array;
1316
	}
1317
	
1318
	/**
1319
	* Gets all the spotter information based on the owner
1320
	*
1321
	* @return Array the spotter information
1322
	*
1323
	*/
1324
	public function getSpotterDataByOwner($owner = '', $limit = '', $sort = '', $filter = array())
1325
	{
1326
		global $global_query;
1327
		
1328
		date_default_timezone_set('UTC');
1329
		
1330
		$query_values = array();
1331
		$limit_query = '';
1332
		$additional_query = '';
1333
		$filter_query = $this->getFilter($filter,true,true);
1334
		if ($owner != "")
1335
		{
1336
			if (!is_string($owner))
1337
			{
1338
				return false;
1339
			} else {
1340
				$additional_query = " AND (spotter_output.owner_name = :owner)";
1341
				$query_values = array(':owner' => $owner);
1342
			}
1343
		}
1344
		
1345
		if ($limit != "")
1346
		{
1347
			$limit_array = explode(",", $limit);
1348
			
1349
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1350
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1351
			
1352
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1353
			{
1354
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1355
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1356
			}
1357
		}
1358
1359
		if ($sort != "")
1360
		{
1361
			$search_orderby_array = $this->getOrderBy();
1362
			if (isset($search_orderby_array[$sort]['sql'])) $orderby_query = $search_orderby_array[$sort]['sql'];
1363
			else $orderby_query = " ORDER BY spotter_output.date DESC";
1364
		} else {
1365
			$orderby_query = " ORDER BY spotter_output.date DESC";
1366
		}
1367
1368
		$query = $global_query.$filter_query." spotter_output.owner_name <> '' ".$additional_query." ".$orderby_query;
1369
1370
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1371
1372
		return $spotter_array;
1373
	}
1374
	
1375
	/**
1376
	* Gets all the spotter information based on the pilot
1377
	*
1378
	* @return Array the spotter information
1379
	*
1380
	*/
1381
	public function getSpotterDataByPilot($pilot = '', $limit = '', $sort = '', $filter = array())
1382
	{
1383
		global $global_query;
1384
		
1385
		date_default_timezone_set('UTC');
1386
		
1387
		$query_values = array();
1388
		$limit_query = '';
1389
		$additional_query = '';
1390
		$filter_query = $this->getFilter($filter,true,true);
1391
		if ($pilot != "")
1392
		{
1393
			$additional_query = " AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot)";
1394
			$query_values = array(':pilot' => $pilot);
1395
		}
1396
		
1397
		if ($limit != "")
1398
		{
1399
			$limit_array = explode(",", $limit);
1400
			
1401
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1402
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1403
			
1404
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1405
			{
1406
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1407
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1408
			}
1409
		}
1410
1411
		if ($sort != "")
1412
		{
1413
			$search_orderby_array = $this->getOrderBy();
1414
			$orderby_query = $search_orderby_array[$sort]['sql'];
1415
		} else {
1416
			$orderby_query = " ORDER BY spotter_output.date DESC";
1417
		}
1418
1419
		$query = $global_query.$filter_query." spotter_output.pilot_name <> '' ".$additional_query." ".$orderby_query;
1420
1421
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1422
1423
		return $spotter_array;
1424
	}
1425
	
1426
	
1427
	
1428
	/**
1429
	* Gets all the spotter information based on the aircraft type
1430
	*
1431
	* @return Array the spotter information
1432
	*
1433
	*/
1434
	public function getSpotterDataByAircraft($aircraft_type = '', $limit = '', $sort = '', $filter = array())
1435
	{
1436
		global $global_query;
1437
		
1438
		date_default_timezone_set('UTC');
1439
		
1440
		$query_values = array();
1441
		$limit_query = '';
1442
		$additional_query = '';
1443
		$filter_query = $this->getFilter($filter,true,true);
1444
		
1445
		if ($aircraft_type != "")
1446
		{
1447
			if (!is_string($aircraft_type))
1448
			{
1449
				return false;
1450
			} else {
1451
				$additional_query = " AND (spotter_output.aircraft_icao = :aircraft_type)";
1452
				$query_values = array(':aircraft_type' => $aircraft_type);
1453
			}
1454
		}
1455
		
1456
		if ($limit != "")
1457
		{
1458
			$limit_array = explode(",", $limit);
1459
			
1460
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1461
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1462
			
1463
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1464
			{
1465
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1466
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1467
			}
1468
		}
1469
1470
		if ($sort != "")
1471
		{
1472
			$search_orderby_array = $this->getOrderBy();
1473
			$orderby_query = $search_orderby_array[$sort]['sql'];
1474
		} else {
1475
			$orderby_query = " ORDER BY spotter_output.date DESC";
1476
		}
1477
1478
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1479
1480
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1481
1482
		return $spotter_array;
1483
	}
1484
	
1485
	
1486
	/**
1487
	* Gets all the spotter information based on the aircraft registration
1488
	*
1489
	* @return Array the spotter information
1490
	*
1491
	*/
1492
	public function getSpotterDataByRegistration($registration = '', $limit = '', $sort = '', $filter = array())
1493
	{
1494
		global $global_query;
1495
		
1496
		date_default_timezone_set('UTC');
1497
		
1498
		$query_values = array();
1499
		$limit_query = '';
1500
		$additional_query = '';
1501
		
1502
		if ($registration != "")
1503
		{
1504
			if (!is_string($registration))
1505
			{
1506
				return false;
1507
			} else {
1508
				$additional_query = " (spotter_output.registration = :registration)";
1509
				$query_values = array(':registration' => $registration);
1510
			}
1511
		}
1512
		
1513
		if ($limit != "")
1514
		{
1515
			$limit_array = explode(",", $limit);
1516
			
1517
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1518
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1519
			
1520
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1521
			{
1522
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1523
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1524
			}
1525
		}
1526
1527
		if ($sort != "")
1528
		{
1529
			$search_orderby_array = $this->getOrderBy();
1530
			$orderby_query = $search_orderby_array[$sort]['sql'];
1531
		} else {
1532
			$orderby_query = " ORDER BY spotter_output.date DESC";
1533
		}
1534
		$filter_query = $this->getFilter($filter,true,true);
1535
1536
		//$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1537
		$query = $global_query.$filter_query." ".$additional_query." ".$orderby_query;
1538
1539
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1540
1541
		return $spotter_array;
1542
	}
1543
1544
	
1545
	
1546
	
1547
	/**
1548
	* Gets all the spotter information based on the airline
1549
	*
1550
	* @return Array the spotter information
1551
	*
1552
	*/
1553
	public function getSpotterDataByAirline($airline = '', $limit = '', $sort = '',$filters = array())
1554
	{
1555
		global $global_query;
1556
		
1557
		date_default_timezone_set('UTC');
1558
1559
		$query_values = array();
1560
		$limit_query = '';
1561
		$additional_query = '';
1562
		$filter_query = $this->getFilter($filters,true,true);
1563
		
1564
		if ($airline != "")
1565
		{
1566
			if (!is_string($airline))
1567
			{
1568
				return false;
1569
			} else {
1570
				$additional_query = " AND (spotter_output.airline_icao = :airline)";
1571
				$query_values = array(':airline' => $airline);
1572
			}
1573
		}
1574
		
1575
		if ($limit != "")
1576
		{
1577
			$limit_array = explode(",", $limit);
1578
			
1579
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1580
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1581
			
1582
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1583
			{
1584
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1585
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1586
			}
1587
		}
1588
		
1589
		if ($sort != "")
1590
		{
1591
			$search_orderby_array = $this->getOrderBy();
1592
			$orderby_query = $search_orderby_array[$sort]['sql'];
1593
		} else {
1594
			$orderby_query = " ORDER BY spotter_output.date DESC";
1595
		}
1596
1597
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1598
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1599
1600
		return $spotter_array;
1601
	}
1602
	
1603
	
1604
	/**
1605
	* Gets all the spotter information based on the airport
1606
	*
1607
	* @return Array the spotter information
1608
	*
1609
	*/
1610
	public function getSpotterDataByAirport($airport = '', $limit = '', $sort = '',$filters = array())
1611
	{
1612
		global $global_query;
1613
		
1614
		date_default_timezone_set('UTC');
1615
		$query_values = array();
1616
		$limit_query = '';
1617
		$additional_query = '';
1618
		$filter_query = $this->getFilter($filters,true,true);
1619
		
1620
		if ($airport != "")
1621
		{
1622
			if (!is_string($airport))
1623
			{
1624
				return false;
1625
			} else {
1626
				$additional_query .= " AND ((spotter_output.departure_airport_icao = :airport) OR (spotter_output.arrival_airport_icao = :airport))";
1627
				$query_values = array(':airport' => $airport);
1628
			}
1629
		}
1630
		
1631
		if ($limit != "")
1632
		{
1633
			$limit_array = explode(",", $limit);
1634
			
1635
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1636
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1637
			
1638
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1639
			{
1640
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1641
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1642
			}
1643
		}
1644
		
1645
		if ($sort != "")
1646
		{
1647
			$search_orderby_array = $this->getOrderBy();
1648
			$orderby_query = $search_orderby_array[$sort]['sql'];
1649
		} else {
1650
			$orderby_query = " ORDER BY spotter_output.date DESC";
1651
		}
1652
1653
		$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;
1654
1655
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1656
1657
		return $spotter_array;
1658
	}
1659
1660
1661
1662
	/**
1663
	* Gets all the spotter information based on the date
1664
	*
1665
	* @return Array the spotter information
1666
	*
1667
	*/
1668
	public function getSpotterDataByDate($date = '', $limit = '', $sort = '',$filter = array())
1669
	{
1670
		global $global_query, $globalTimezone, $globalDBdriver;
1671
		
1672
		$query_values = array();
1673
		$limit_query = '';
1674
		$additional_query = '';
1675
1676
		$filter_query = $this->getFilter($filter,true,true);
1677
		
1678
		if ($date != "")
1679
		{
1680
			if ($globalTimezone != '') {
1681
				date_default_timezone_set($globalTimezone);
1682
				$datetime = new DateTime($date);
1683
				$offset = $datetime->format('P');
1684
			} else {
1685
				date_default_timezone_set('UTC');
1686
				$datetime = new DateTime($date);
1687
				$offset = '+00:00';
1688
			}
1689
			if ($globalDBdriver == 'mysql') {
1690
				$additional_query = " AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date ";
1691
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':offset' => $offset);
1692
			} elseif ($globalDBdriver == 'pgsql') {
1693
				//$globalTimezone = 'UTC';
1694
				$additional_query = " AND to_char(spotter_output.date AT TIME ZONE :timezone,'YYYY-mm-dd') = :date ";
1695
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':timezone' => $globalTimezone);
1696
				//$additional_query = " AND to_char(spotter_output.date,'YYYY-mm-dd') = :date ";
1697
				//$query_values = array(':date' => $datetime->format('Y-m-d'));
1698
			}
1699
		}
1700
		
1701
		if ($limit != "")
1702
		{
1703
			$limit_array = explode(",", $limit);
1704
			
1705
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1706
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1707
			
1708
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1709
			{
1710
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1711
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1712
			}
1713
		}
1714
1715
		if ($sort != "")
1716
		{
1717
			$search_orderby_array = $this->getOrderBy();
1718
			$orderby_query = $search_orderby_array[$sort]['sql'];
1719
		} else {
1720
			$orderby_query = " ORDER BY spotter_output.date DESC";
1721
		}
1722
1723
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query.$orderby_query;
1724
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1725
		return $spotter_array;
1726
	}
1727
1728
1729
1730
	/**
1731
	* Gets all the spotter information based on the country name
1732
	*
1733
	* @return Array the spotter information
1734
	*
1735
	*/
1736
	public function getSpotterDataByCountry($country = '', $limit = '', $sort = '',$filters = array())
1737
	{
1738
		global $global_query;
1739
		
1740
		date_default_timezone_set('UTC');
1741
		
1742
		$query_values = array();
1743
		$limit_query = '';
1744
		$additional_query = '';
1745
		$filter_query = $this->getFilter($filters,true,true);
1746
		if ($country != "")
1747
		{
1748
			if (!is_string($country))
1749
			{
1750
				return false;
1751
			} else {
1752
				$additional_query .= " AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country))";
1753
				$additional_query .= " OR spotter_output.airline_country = :country";
1754
				$query_values = array(':country' => $country);
1755
			}
1756
		}
1757
		
1758
		if ($limit != "")
1759
		{
1760
			$limit_array = explode(",", $limit);
1761
			
1762
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1763
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1764
			
1765
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1766
			{
1767
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1768
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1769
			}
1770
		}
1771
					
1772
		if ($sort != "")
1773
		{
1774
			$search_orderby_array = $this->getOrderBy();
1775
			$orderby_query = $search_orderby_array[$sort]['sql'];
1776
		} else {
1777
			$orderby_query = " ORDER BY spotter_output.date DESC";
1778
		}
1779
1780
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1781
1782
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1783
1784
		return $spotter_array;
1785
	}	
1786
	
1787
	
1788
	/**
1789
	* Gets all the spotter information based on the manufacturer name
1790
	*
1791
	* @return Array the spotter information
1792
	*
1793
	*/
1794
	public function getSpotterDataByManufacturer($aircraft_manufacturer = '', $limit = '', $sort = '', $filters = array())
1795
	{
1796
		global $global_query;
1797
		
1798
		date_default_timezone_set('UTC');
1799
		
1800
		$query_values = array();
1801
		$additional_query = '';
1802
		$limit_query = '';
1803
		$filter_query = $this->getFilter($filters,true,true);
1804
		
1805
		if ($aircraft_manufacturer != "")
1806
		{
1807
			if (!is_string($aircraft_manufacturer))
1808
			{
1809
				return false;
1810
			} else {
1811
				$additional_query .= " AND (spotter_output.aircraft_manufacturer = :aircraft_manufacturer)";
1812
				$query_values = array(':aircraft_manufacturer' => $aircraft_manufacturer);
1813
			}
1814
		}
1815
		
1816
		if ($limit != "")
1817
		{
1818
			$limit_array = explode(",", $limit);
1819
			
1820
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1821
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1822
			
1823
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1824
			{
1825
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1826
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1827
			}
1828
		}
1829
1830
		if ($sort != "")
1831
		{
1832
			$search_orderby_array = $this->getOrderBy();
1833
			$orderby_query = $search_orderby_array[$sort]['sql'];
1834
		} else {
1835
			$orderby_query = " ORDER BY spotter_output.date DESC";
1836
		}
1837
1838
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1839
1840
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1841
1842
		return $spotter_array;
1843
	}
1844
1845
1846
  
1847
  
1848
	/**
1849
	* Gets a list of all aircraft that take a route
1850
	*
1851
	* @param String $departure_airport_icao ICAO code of departure airport
1852
	* @param String $arrival_airport_icao ICAO code of arrival airport
1853
	* @return Array the spotter information
1854
	*
1855
	*/
1856
	public function getSpotterDataByRoute($departure_airport_icao = '', $arrival_airport_icao = '', $limit = '', $sort = '', $filters = array())
1857
	{
1858
		global $global_query;
1859
		
1860
		$query_values = array();
1861
		$additional_query = '';
1862
		$limit_query = '';
1863
		$filter_query = $this->getFilter($filters,true,true);
1864
		if ($departure_airport_icao != "")
1865
		{
1866
			if (!is_string($departure_airport_icao))
1867
			{
1868
				return false;
1869
			} else {
1870
				$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
1871
				$additional_query .= " AND (spotter_output.departure_airport_icao = :departure_airport_icao)";
1872
				//$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";
1873
				$query_values = array(':departure_airport_icao' => $departure_airport_icao);
1874
			}
1875
		}
1876
		
1877
		if ($arrival_airport_icao != "")
1878
		{
1879
			if (!is_string($arrival_airport_icao))
1880
			{
1881
				return false;
1882
			} else {
1883
				$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
1884
				$additional_query .= " AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)";
1885
				//$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)";
1886
				$query_values = array_merge($query_values,array(':arrival_airport_icao' => $arrival_airport_icao));
1887
			}
1888
		}
1889
		
1890
		if ($limit != "")
1891
		{
1892
			$limit_array = explode(",", $limit);
1893
			
1894
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1895
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1896
			
1897
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1898
			{
1899
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1900
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1901
			}
1902
		}
1903
	
1904
		if ($sort != "")
1905
		{
1906
			$search_orderby_array = $this->getOrderBy();
1907
			$orderby_query = $search_orderby_array[$sort]['sql'];
1908
		} else {
1909
			$orderby_query = " ORDER BY spotter_output.date DESC";
1910
		}
1911
1912
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1913
          
1914
		//$result = mysqli_query($GLOBALS["___mysqli_ston"], $query);
1915
1916
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1917
1918
		return $spotter_array;
1919
	}
1920
	
1921
	
1922
	
1923
	/**
1924
	* Gets all the spotter information based on the special column in the table
1925
	*
1926
	* @return Array the spotter information
1927
	*
1928
	*/
1929
	public function getSpotterDataByHighlight($limit = '', $sort = '', $filter = array())
1930
	{
1931
		global $global_query;
1932
		
1933
		date_default_timezone_set('UTC');
1934
		$filter_query = $this->getFilter($filter,true,true);
1935
		$limit_query = '';
1936
		
1937
		if ($limit != "")
1938
		{
1939
			$limit_array = explode(",", $limit);
1940
			
1941
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1942
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1943
			
1944
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1945
			{
1946
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1947
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1948
			}
1949
		}
1950
		
1951
		if ($sort != "")
1952
		{
1953
			$search_orderby_array = $this->getOrderBy();
1954
			$orderby_query = $search_orderby_array[$sort]['sql'];
1955
		} else {
1956
			$orderby_query = " ORDER BY spotter_output.date DESC";
1957
		}
1958
1959
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' ".$orderby_query;
1960
1961
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1962
1963
		return $spotter_array;
1964
	}
1965
1966
	/**
1967
	* Gets all the highlight based on a aircraft registration
1968
	*
1969
	* @return String the highlight text
1970
	*
1971
	*/
1972
	public function getHighlightByRegistration($registration,$filter = array())
1973
	{
1974
		global $global_query;
1975
		
1976
		date_default_timezone_set('UTC');
1977
		$filter_query = $this->getFilter($filter,true,true);
1978
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
1979
		
1980
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' AND spotter_output.registration = :registration";
1981
		$sth = $this->db->prepare($query);
1982
		$sth->execute(array(':registration' => $registration));
1983
1984
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1985
		{
1986
			$highlight = $row['highlight'];
1987
		}
1988
		if (isset($highlight)) return $highlight;
1989
	}
1990
1991
	
1992
	/**
1993
	* Gets the squawk usage from squawk code
1994
	*
1995
	* @param String $squawk squawk code
1996
	* @param String $country country
1997
	* @return String usage
1998
	*
1999
	*/
2000
	public function getSquawkUsage($squawk = '',$country = 'FR')
2001
	{
2002
		
2003
		$squawk = filter_var($squawk,FILTER_SANITIZE_STRING);
2004
		$country = filter_var($country,FILTER_SANITIZE_STRING);
2005
2006
		$query  = "SELECT squawk.* FROM squawk WHERE squawk.code = :squawk AND squawk.country = :country LIMIT 1";
2007
		$query_values = array(':squawk' => ltrim($squawk,'0'), ':country' => $country);
2008
		
2009
		$sth = $this->db->prepare($query);
2010
		$sth->execute($query_values);
2011
    
2012
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2013
		$sth->closeCursor();
2014
		if (count($row) > 0) {
2015
			return $row['usage'];
2016
		} else return '';
2017
	}
2018
2019
	/**
2020
	* Gets the airport icao from the iata
2021
	*
2022
	* @param String $airport_iata the iata code of the airport
2023
	* @return String airport iata
2024
	*
2025
	*/
2026
	public function getAirportIcao($airport_iata = '')
2027
	{
2028
		
2029
		$airport_iata = filter_var($airport_iata,FILTER_SANITIZE_STRING);
2030
2031
		$query  = "SELECT airport.* FROM airport WHERE airport.iata = :airport LIMIT 1";
2032
		$query_values = array(':airport' => $airport_iata);
2033
		
2034
		$sth = $this->db->prepare($query);
2035
		$sth->execute($query_values);
2036
		
2037
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2038
		$sth->closeCursor();
2039
		if (count($row) > 0) {
2040
			return $row['icao'];
2041
		} else return '';
2042
	}
2043
2044
	/**
2045
	* Gets the airport distance
2046
	*
2047
	* @param String $airport_icao the icao code of the airport
2048
	* @param Float $latitude the latitude
2049
	* @param Float $longitude the longitude
2050
	* @return Float distance to the airport
2051
	*
2052
	*/
2053
	public function getAirportDistance($airport_icao,$latitude,$longitude)
2054
	{
2055
		
2056
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
2057
2058
		$query  = "SELECT airport.latitude, airport.longitude FROM airport WHERE airport.icao = :airport LIMIT 1";
2059
		$query_values = array(':airport' => $airport_icao);
2060
		$sth = $this->db->prepare($query);
2061
		$sth->execute($query_values);
2062
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2063
		$sth->closeCursor();
2064
		if (count($row) > 0) {
2065
			$airport_latitude = $row['latitude'];
2066
			$airport_longitude = $row['longitude'];
2067
			$Common = new Common();
2068
			return $Common->distance($latitude,$longitude,$airport_latitude,$airport_longitude);
2069
		} else return '';
2070
	}
2071
	
2072
	/**
2073
	* Gets the airport info based on the icao
2074
	*
2075
	* @param String $airport the icao code of the airport
2076
	* @return Array airport information
2077
	*
2078
	*/
2079
	public function getAllAirportInfo($airport = '')
2080
	{
2081
		
2082
		$airport = filter_var($airport,FILTER_SANITIZE_STRING);
2083
2084
		$query_values = array();
2085
		if ($airport == 'NA') {
2086
			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' => ''));
2087
		} elseif ($airport == '') {
2088
			$query  = "SELECT airport.name, airport.city, airport.country, airport.iata, airport.icao, airport.latitude, airport.longitude, airport.altitude, airport.type, airport.home_link, airport.wikipedia_link, airport.image_thumb, airport.image FROM airport";
2089
		} else {
2090
			$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";
2091
			$query_values = array(':airport' => $airport);
2092
		}
2093
		
2094
		$sth = $this->db->prepare($query);
2095
		$sth->execute($query_values);
2096
		/*
2097
		$airport_array = array();
2098
		$temp_array = array();
2099
		
2100
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2101
		{
2102
			$temp_array['name'] = $row['name'];
2103
			$temp_array['city'] = $row['city'];
2104
			$temp_array['country'] = $row['country'];
2105
			$temp_array['iata'] = $row['iata'];
2106
			$temp_array['icao'] = $row['icao'];
2107
			$temp_array['latitude'] = $row['latitude'];
2108
			$temp_array['longitude'] = $row['longitude'];
2109
			$temp_array['altitude'] = $row['altitude'];
2110
			$temp_array['home_link'] = $row['home_link'];
2111
			$temp_array['wikipedia_link'] = $row['wikipedia_link'];
2112
			$temp_array['image'] = $row['image'];
2113
			$temp_array['image_thumb'] = $row['image_thumb'];
2114
2115
			$airport_array[] = $temp_array;
2116
		}
2117
2118
		return $airport_array;
2119
		*/
2120
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2121
	}
2122
	
2123
	/**
2124
	* Gets the airport info based on the country
2125
	*
2126
	* @param Array $countries Airports countries
2127
	* @return Array airport information
2128
	*
2129
	*/
2130
	public function getAllAirportInfobyCountry($countries)
2131
	{
2132
		$lst_countries = '';
2133
		foreach ($countries as $country) {
2134
			$country = filter_var($country,FILTER_SANITIZE_STRING);
2135
			if ($lst_countries == '') {
2136
				$lst_countries = "'".$country."'";
2137
			} else {
2138
				$lst_countries .= ",'".$country."'";
2139
			}
2140
		}
2141
		$query  = "SELECT airport.* FROM airport WHERE airport.country IN (".$lst_countries.")";
2142
		
2143
		$sth = $this->db->prepare($query);
2144
		$sth->execute();
2145
    
2146
		$airport_array = array();
2147
		$temp_array = array();
2148
		
2149
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2150
		{
2151
			$temp_array['name'] = $row['name'];
2152
			$temp_array['city'] = $row['city'];
2153
			$temp_array['country'] = $row['country'];
2154
			$temp_array['iata'] = $row['iata'];
2155
			$temp_array['icao'] = $row['icao'];
2156
			$temp_array['latitude'] = $row['latitude'];
2157
			$temp_array['longitude'] = $row['longitude'];
2158
			$temp_array['altitude'] = $row['altitude'];
2159
2160
			$airport_array[] = $temp_array;
2161
		}
2162
2163
		return $airport_array;
2164
	}
2165
	
2166
	/**
2167
	* Gets airports info based on the coord
2168
	*
2169
	* @param Array $coord Airports longitude min,latitude min, longitude max, latitude max
2170
	* @return Array airport information
2171
	*
2172
	*/
2173
	public function getAllAirportInfobyCoord($coord)
2174
	{
2175
		global $globalDBdriver;
2176
		if (is_array($coord)) {
2177
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2178
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2179
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2180
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2181
		} else return array();
2182
		if ($globalDBdriver == 'mysql') {
2183
			$query  = "SELECT airport.* FROM airport WHERE airport.latitude BETWEEN ".$minlat." AND ".$maxlat." AND airport.longitude BETWEEN ".$minlong." AND ".$maxlong." AND airport.type != 'closed'";
2184
		} else {
2185
			$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'";
2186
		}
2187
		$sth = $this->db->prepare($query);
2188
		$sth->execute();
2189
    
2190
		$airport_array = array();
2191
		
2192
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2193
		{
2194
			$temp_array = $row;
2195
2196
			$airport_array[] = $temp_array;
2197
		}
2198
2199
		return $airport_array;
2200
	}
2201
2202
	/**
2203
	* Gets waypoints info based on the coord
2204
	*
2205
	* @param Array $coord waypoints coord
2206
	* @return Array airport information
2207
	*
2208
	*/
2209
	public function getAllWaypointsInfobyCoord($coord)
2210
	{
2211
		if (is_array($coord)) {
2212
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2213
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2214
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2215
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2216
		} else return array();
2217
		//$query  = "SELECT waypoints.* FROM waypoints WHERE waypoints.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_begin BETWEEN ".$minlong." AND ".$maxlong;
2218
		$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.")";
2219
		//$query  = "SELECT waypoints.* FROM waypoints";
2220
		//$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";
2221
		//$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;
2222
		//$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;
2223
		//echo $query;
2224
		
2225
		$sth = $this->db->prepare($query);
2226
		$sth->execute();
2227
    
2228
		$waypoints_array = array();
2229
		
2230
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2231
		{
2232
			$temp_array = $row;
2233
2234
			$waypoints_array[] = $temp_array;
2235
		}
2236
2237
		return $waypoints_array;
2238
	}
2239
	
2240
	
2241
	/**
2242
	* Gets the airline info based on the icao code or iata code
2243
	*
2244
	* @param String $airline_icao the iata code of the airport
2245
	* @return Array airport information
2246
	*
2247
	*/
2248
	public function getAllAirlineInfo($airline_icao, $fromsource = NULL)
2249
	{
2250
		global $globalUseRealAirlines;
2251
		if (isset($globalUseRealAirlines) && $globalUseRealAirlines) $fromsource = NULL;
2252
		$airline_icao = strtoupper(filter_var($airline_icao,FILTER_SANITIZE_STRING));
2253
		if ($airline_icao == 'NA') {
2254
			$airline_array = array();
2255
			$airline_array[] = array('name' => 'Not Available','iata' => 'NA', 'icao' => 'NA', 'callsign' => '', 'country' => 'NA', 'type' =>'');
2256
			return $airline_array;
2257
		} else {
2258
			if (strlen($airline_icao) == 2) {
2259
				if ($fromsource === NULL) {
2260
					$query  = "SELECT airlines.name, airlines.iata, airlines.icao, airlines.callsign, airlines.country, airlines.type FROM airlines WHERE airlines.iata = :airline_icao AND airlines.active = 'Y' AND airlines.forsource IS NULL LIMIT 1";
2261
				} else {
2262
					$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";
2263
				}
2264
			} else {
2265
				if ($fromsource === NULL) {
2266
					$query  = "SELECT airlines.name, airlines.iata, airlines.icao, airlines.callsign, airlines.country, airlines.type FROM airlines WHERE airlines.icao = :airline_icao AND airlines.active = 'Y' AND airlines.forsource IS NULL LIMIT 1";
2267
				} else {
2268
					$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";
2269
				}
2270
			}
2271
			
2272
			$sth = $this->db->prepare($query);
2273
			if ($fromsource === NULL) {
2274
				$sth->execute(array(':airline_icao' => $airline_icao));
2275
			} else {
2276
				$sth->execute(array(':airline_icao' => $airline_icao,':fromsource' => $fromsource));
2277
			}
2278
                        /*
2279
			$airline_array = array();
2280
			$temp_array = array();
2281
		
2282
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2283
			{
2284
				$temp_array['name'] = $row['name'];
2285
				$temp_array['iata'] = $row['iata'];
2286
				$temp_array['icao'] = $row['icao'];
2287
				$temp_array['callsign'] = $row['callsign'];
2288
				$temp_array['country'] = $row['country'];
2289
				$temp_array['type'] = $row['type'];
2290
				$airline_array[] = $temp_array;
2291
			}
2292
			return $airline_array;
2293
			*/
2294
			$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2295
			if (empty($result) && $fromsource !== NULL) {
2296
				/*
2297
				$query = 'SELECT COUNT(*) AS nb FROM airlines WHERE forsource = :fromsource';
2298
				$sth = $this->db->prepare($query);
2299
				$sth->execute(array(':fromsource' => $fromsource));
2300
				$row = $sth->fetch(PDO::FETCH_ASSOC);
2301
				$sth->closeCursor();
2302
				if ($row['nb'] == 0) $result = $this->getAllAirlineInfo($airline_icao);
2303
				*/
2304
				$result = $this->getAllAirlineInfo($airline_icao);
2305
			}
2306
			return $result;
2307
		}
2308
	}
2309
	
2310
	/**
2311
	* Gets the airline info based on the airline name
2312
	*
2313
	* @param String $airline_name the name of the airline
2314
	* @return Array airline information
2315
	*
2316
	*/
2317
	public function getAllAirlineInfoByName($airline_name, $fromsource = NULL)
2318
	{
2319
		global $globalUseRealAirlines;
2320
		if (isset($globalUseRealAirlines) && $globalUseRealAirlines) $fromsource = NULL;
2321
		$airline_name = strtolower(filter_var($airline_name,FILTER_SANITIZE_STRING));
2322
		$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";
2323
		$sth = $this->db->prepare($query);
2324
		if ($fromsource === NULL) {
2325
			$sth->execute(array(':airline_name' => $airline_name));
2326
		} else {
2327
			$sth->execute(array(':airline_name' => $airline_name,':fromsource' => $fromsource));
2328
		}
2329
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2330
		if (empty($result) && $fromsource !== NULL) {
2331
			$query = 'SELECT COUNT(*) AS nb FROM airlines WHERE forsource = :fromsource';
2332
			$sth = $this->db->prepare($query);
2333
			$sth->execute(array(':fromsource' => $fromsource));
2334
			$row = $sth->fetch(PDO::FETCH_ASSOC);
2335
			$sth->closeCursor();
2336
			if ($row['nb'] == 0) $result = $this->getAllAirlineInfoByName($airline_name);
2337
		}
2338
		return $result;
2339
	}
2340
	
2341
	
2342
	
2343
	/**
2344
	* Gets the aircraft info based on the aircraft type
2345
	*
2346
	* @param String $aircraft_type the aircraft type
2347
	* @return Array aircraft information
2348
	*
2349
	*/
2350
	public function getAllAircraftInfo($aircraft_type)
2351
	{
2352
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2353
2354
		if ($aircraft_type == 'NA') {
2355
			return array(array('icao' => 'NA','type' => 'Not Available', 'manufacturer' => 'Not Available', 'aircraft_shadow' => NULL));
2356
		}
2357
		$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";
2358
		
2359
		$sth = $this->db->prepare($query);
2360
		$sth->execute(array(':aircraft_type' => $aircraft_type));
2361
		/*
2362
		$aircraft_array = array();
2363
		$temp_array = array();
2364
		
2365
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2366
		{
2367
			$temp_array = array();
2368
			$temp_array['icao'] = $row['icao'];
2369
			$temp_array['type'] = $row['type'];
2370
			$temp_array['manufacturer'] = $row['manufacturer'];
2371
			$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
2372
2373
			$aircraft_array[] = $temp_array;
2374
		}
2375
		return $aircraft_array;
2376
		*/
2377
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2378
	}
2379
2380
	/**
2381
	* Gets the aircraft icao based on the aircraft name/type
2382
	*
2383
	* @param String $aircraft_type the aircraft type
2384
	* @return String aircraft information
2385
	*
2386
	*/
2387
	public function getAircraftIcao($aircraft_type)
2388
	{
2389
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2390
		$all_aircraft = array('737-300' => 'B733',
2391
				'777-200' => 'B772',
2392
				'777-200ER' => 'B772',
2393
				'777-300ER' => 'B77W',
2394
				'c172p' => 'C172',
2395
				'aerostar' => 'AEST',
2396
				'A320-211' => 'A320',
2397
				'747-8i' => 'B748',
2398
				'A380' => 'A388');
2399
		if (isset($all_aircraft[$aircraft_type])) return $all_aircraft[$aircraft_type];
2400
2401
		$query  = "SELECT aircraft.icao FROM aircraft WHERE aircraft.type LIKE :saircraft_type OR aircraft.type = :aircraft_type OR aircraft.icao = :aircraft_type LIMIT 1";
2402
		$aircraft_type = strtoupper($aircraft_type);
2403
		$sth = $this->db->prepare($query);
2404
		$sth->execute(array(':saircraft_type' => '%'.$aircraft_type.'%',':aircraft_type' => $aircraft_type,));
2405
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2406
		if (isset($result[0]['icao'])) return $result[0]['icao'];
2407
		else return '';
2408
	}
2409
	
2410
	/**
2411
	* Gets the aircraft info based on the aircraft modes
2412
	*
2413
	* @param String $aircraft_modes the aircraft ident (hex)
2414
	* @return String aircraft type
2415
	*
2416
	*/
2417
	public function getAllAircraftType($aircraft_modes,$source_type = '')
2418
	{
2419
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
2420
		$source_type = filter_var($source_type,FILTER_SANITIZE_STRING);
2421
2422
		if ($source_type == '' || $source_type == 'modes') {
2423
			$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";
2424
		} else {
2425
			$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";
2426
		}
2427
		
2428
		$sth = $this->db->prepare($query);
2429
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
2430
2431
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2432
		$sth->closeCursor();
2433
		if (isset($row['icaotypecode'])) {
2434
			$icao = $row['icaotypecode'];
2435
			if (isset($this->aircraft_correct_icaotype[$icao])) $icao = $this->aircraft_correct_icaotype[$icao];
2436
			return $icao;
2437
		} elseif ($source_type == 'flarm') {
2438
			return $this->getAllAircraftType($aircraft_modes);
2439
		} else  return '';
2440
	}
2441
2442
	/**
2443
	* Gets the aircraft info based on the aircraft registration
2444
	*
2445
	* @param String $registration the aircraft registration
2446
	* @return String aircraft type
2447
	*
2448
	*/
2449
	public function getAllAircraftTypeByRegistration($registration)
2450
	{
2451
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2452
2453
		$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.registration = :registration ORDER BY FirstCreated DESC LIMIT 1";
2454
		
2455
		$sth = $this->db->prepare($query);
2456
		$sth->execute(array(':registration' => $registration));
2457
2458
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2459
		$sth->closeCursor();
2460
		if (isset($row['icaotypecode'])) {
2461
			return $row['icaotypecode'];
2462
		} else return '';
2463
	}
2464
2465
	/**
2466
	* Gets the spotter_id and flightaware_id based on the aircraft registration
2467
	*
2468
	* @param String $registration the aircraft registration
2469
	* @return Array spotter_id and flightaware_id
2470
	*
2471
	*/
2472
	public function getAllIDByRegistration($registration)
2473
	{
2474
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2475
2476
		$query  = "SELECT spotter_id,flightaware_id, date FROM spotter_output WHERE spotter_output.registration = :registration";
2477
		
2478
		$sth = $this->db->prepare($query);
2479
		$sth->execute(array(':registration' => $registration));
2480
2481
		$idarray = array();
2482
		while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
2483
			$date = $row['date'];
2484
			$idarray[$date] = array('flightaware_id' => $row['flightaware_id'],'spotter_id' => $row['spotter_id']);
2485
		}
2486
		return $idarray;
2487
	}
2488
2489
	/**
2490
	* Gets correct aircraft operator code
2491
	*
2492
	* @param String $operator the aircraft operator code (callsign)
2493
	* @return String aircraft operator code
2494
	*
2495
	*/
2496
	public function getOperator($operator)
2497
	{
2498
		$operator = filter_var($operator,FILTER_SANITIZE_STRING);
2499
		$query  = "SELECT translation.operator_correct FROM translation WHERE translation.operator = :operator LIMIT 1";
2500
		
2501
		$sth = $this->db->prepare($query);
2502
		$sth->execute(array(':operator' => $operator));
2503
2504
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2505
		$sth->closeCursor();
2506
		if (isset($row['operator_correct'])) {
2507
			return $row['operator_correct'];
2508
		} else return $operator;
2509
	}
2510
2511
	/**
2512
	* Gets the aircraft route based on the aircraft callsign
2513
	*
2514
	* @param String $callsign the aircraft callsign
2515
	* @return Array aircraft type
2516
	*
2517
	*/
2518
	public function getRouteInfo($callsign)
2519
	{
2520
		$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
2521
                if ($callsign == '') return array();
2522
		$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";
2523
		
2524
		$sth = $this->db->prepare($query);
2525
		$sth->execute(array(':callsign' => $callsign));
2526
2527
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2528
		$sth->closeCursor();
2529
		if (count($row) > 0) {
2530
			return $row;
2531
		} else return array();
2532
	}
2533
	
2534
	/**
2535
	* Gets the aircraft info based on the aircraft registration
2536
	*
2537
	* @param String $registration the aircraft registration
2538
	* @return Array aircraft information
2539
	*
2540
	*/
2541
	public function getAircraftInfoByRegistration($registration)
2542
	{
2543
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2544
2545
		$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";
2546
		
2547
		$sth = $this->db->prepare($query);
2548
		$sth->execute(array(':registration' => $registration));
2549
2550
		$aircraft_array = array();
2551
		$temp_array = array();
2552
		
2553
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2554
		{
2555
			$temp_array['airline_icao'] = $row['airline_icao'];
2556
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2557
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2558
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2559
2560
			$aircraft_array[] = $temp_array;
2561
		}
2562
2563
		return $aircraft_array;
2564
	}
2565
	
2566
	/**
2567
	* Gets the aircraft owner & base based on the aircraft registration
2568
	*
2569
	* @param String $registration the aircraft registration
2570
	* @return Array aircraft information
2571
	*
2572
	*/
2573
	public function getAircraftOwnerByRegistration($registration)
2574
	{
2575
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2576
		$Connection = new Connection($this->db);
2577
		if ($Connection->tableExists('aircraft_owner')) {
2578
			$query  = "SELECT aircraft_owner.base, aircraft_owner.owner, aircraft_owner.date_first_reg FROM aircraft_owner WHERE registration = :registration LIMIT 1";
2579
			$sth = $this->db->prepare($query);
2580
			$sth->execute(array(':registration' => $registration));
2581
			$result = $sth->fetch(PDO::FETCH_ASSOC);
2582
			$sth->closeCursor();
2583
			return $result;
2584
		} else return array();
2585
	}
2586
	
2587
  
2588
  /**
2589
	* Gets all flights (but with only little info)
2590
	*
2591
	* @return Array basic flight information
2592
	*
2593
	*/
2594
	public function getAllFlightsforSitemap()
2595
	{
2596
		//$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 ";
2597
		$query  = "SELECT spotter_output.spotter_id FROM spotter_output ORDER BY spotter_id DESC LIMIT 200 OFFSET 0";
2598
		
2599
		$sth = $this->db->prepare($query);
2600
		$sth->execute();
2601
                  /*
2602
		$flight_array = array();
2603
		$temp_array = array();
2604
		
2605
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2606
		{
2607
			$temp_array['spotter_id'] = $row['spotter_id'];
2608
//			$temp_array['ident'] = $row['ident'];
2609
//			$temp_array['airline_name'] = $row['airline_name'];
2610
//			$temp_array['aircraft_type'] = $row['aircraft_icao'];
2611
//			$temp_array['aircraft_name'] = $row['aircraft_name'];
2612
			//$temp_array['image'] = $row['image'];
2613
2614
			$flight_array[] = $temp_array;
2615
		}
2616
2617
		return $flight_array;
2618
		*/
2619
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2620
	}
2621
  
2622
	/**
2623
	* Gets a list of all aircraft manufacturers
2624
	*
2625
	* @return Array list of aircraft types
2626
	*
2627
	*/
2628
	public function getAllManufacturers()
2629
	{
2630
		/*
2631
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer AS aircraft_manufacturer
2632
								FROM spotter_output
2633
								WHERE spotter_output.aircraft_manufacturer <> '' 
2634
								ORDER BY spotter_output.aircraft_manufacturer ASC";
2635
		  */
2636
		
2637
		$query = "SELECT DISTINCT manufacturer AS aircraft_manufacturer FROM aircraft WHERE manufacturer <> '' ORDER BY manufacturer ASC";
2638
		$sth = $this->db->prepare($query);
2639
		$sth->execute();
2640
2641
		$manufacturer_array = array();
2642
		$temp_array = array();
2643
		
2644
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2645
		{
2646
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2647
2648
			$manufacturer_array[] = $temp_array;
2649
		}
2650
2651
		return $manufacturer_array;
2652
	}
2653
  
2654
  
2655
  /**
2656
	* Gets a list of all aircraft types
2657
	*
2658
	* @return Array list of aircraft types
2659
	*
2660
	*/
2661
	public function getAllAircraftTypes($filters = array())
0 ignored issues
show
Unused Code introduced by
The parameter $filters is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
2662
	{
2663
		/*
2664
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao AS aircraft_icao, spotter_output.aircraft_name AS aircraft_name
2665
								FROM spotter_output  
2666
								WHERE spotter_output.aircraft_icao <> '' 
2667
								ORDER BY spotter_output.aircraft_name ASC";
2668
								
2669
		*/
2670
		//$filter_query = $this->getFilter($filters,true,true);
2671
		//$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";
2672
2673
		$query = "SELECT DISTINCT icao AS aircraft_icao, type AS aircraft_name, manufacturer AS aircraft_manufacturer FROM aircraft WHERE icao <> '' ORDER BY aircraft_manufacturer ASC";
2674
		
2675
		$sth = $this->db->prepare($query);
2676
		$sth->execute();
2677
2678
		$aircraft_array = array();
2679
		$temp_array = array();
2680
		
2681
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2682
		{
2683
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2684
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2685
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2686
2687
			$aircraft_array[] = $temp_array;
2688
		}
2689
2690
		return $aircraft_array;
2691
	}
2692
	
2693
	
2694
	/**
2695
	* Gets a list of all aircraft registrations
2696
	*
2697
	* @return Array list of aircraft registrations
2698
	*
2699
	*/
2700
	public function getAllAircraftRegistrations($filters = array())
2701
	{
2702
		$filter_query = $this->getFilter($filters,true,true);
2703
		$query  = "SELECT DISTINCT spotter_output.registration 
2704
				FROM spotter_output".$filter_query." spotter_output.registration <> '' 
2705
				ORDER BY spotter_output.registration ASC";
2706
2707
		$sth = $this->db->prepare($query);
2708
		$sth->execute();
2709
2710
		$aircraft_array = array();
2711
		$temp_array = array();
2712
		
2713
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2714
		{
2715
			$temp_array['registration'] = $row['registration'];
2716
2717
			$aircraft_array[] = $temp_array;
2718
		}
2719
2720
		return $aircraft_array;
2721
	}
2722
2723
	/**
2724
	* Gets all source name
2725
	*
2726
	* @param String type format of source
2727
	* @return Array list of source name
2728
	*
2729
	*/
2730
	public function getAllSourceName($type = '',$filters = array())
2731
	{
2732
		$filter_query = $this->getFilter($filters,true,true);
2733
		$query_values = array();
2734
		$query  = "SELECT DISTINCT spotter_output.source_name 
2735
				FROM spotter_output".$filter_query." spotter_output.source_name <> ''";
2736
		if ($type != '') {
2737
			$query_values = array(':type' => $type);
2738
			$query .= " AND format_source = :type";
2739
		}
2740
		$query .= " ORDER BY spotter_output.source_name ASC";
2741
2742
		$sth = $this->db->prepare($query);
2743
		if (!empty($query_values)) $sth->execute($query_values);
2744
		else $sth->execute();
2745
2746
		$source_array = array();
2747
		$temp_array = array();
2748
		
2749
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2750
		{
2751
			$temp_array['source_name'] = $row['source_name'];
2752
			$source_array[] = $temp_array;
2753
		}
2754
		return $source_array;
2755
	}
2756
2757
2758
2759
	/**
2760
	* Gets a list of all airline names
2761
	*
2762
	* @return Array list of airline names
2763
	*
2764
	*/
2765
	public function getAllAirlineNames($airline_type = '',$forsource = NULL,$filters = array())
2766
	{
2767
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2768
		$filter_query = $this->getFilter($filters,true,true);
2769
		$airline_type = filter_var($airline_type,FILTER_SANITIZE_STRING);
2770
		if ($airline_type == '' || $airline_type == 'all') {
2771
			/*
2772
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2773
								FROM spotter_output
2774
								WHERE spotter_output.airline_icao <> '' 
2775
								ORDER BY spotter_output.airline_name ASC";
2776
			*/
2777
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2778
			elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2779
			elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2780
			if ($forsource === NULL) {
2781
				$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";
2782
				$query_data = array();
2783
			} else {
2784
				$query = "SELECT DISTINCT icao AS airline_icao, name AS airline_name, type AS airline_type FROM airlines WHERE forsource = :forsource ORDER BY name ASC";
2785
				$query_data = array(':forsource' => $forsource);
2786
			}
2787
		} else {
2788
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2789
					FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
2790
					AND spotter_output.airline_type = :airline_type 
2791
					ORDER BY spotter_output.airline_icao ASC";
2792
			$query_data = array(':airline_type' => $airline_type);
2793
		}
2794
		
2795
		$sth = $this->db->prepare($query);
2796
		$sth->execute($query_data);
2797
    
2798
		$airline_array = array();
2799
		$temp_array = array();
2800
		
2801
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2802
		{
2803
			$temp_array['airline_icao'] = $row['airline_icao'];
2804
			$temp_array['airline_name'] = $row['airline_name'];
2805
			$temp_array['airline_type'] = $row['airline_type'];
2806
2807
			$airline_array[] = $temp_array;
2808
		}
2809
		return $airline_array;
2810
	}
2811
	
2812
	/**
2813
	* Gets a list of all alliance names
2814
	*
2815
	* @return Array list of alliance names
2816
	*
2817
	*/
2818
	public function getAllAllianceNames($forsource = NULL,$filters = array())
2819
	{
2820
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2821
		$filter_query = $this->getFilter($filters,true,true);
0 ignored issues
show
Unused Code introduced by
$filter_query is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
2822
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2823
		elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2824
		elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2825
		if ($forsource === NULL) {
2826
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND forsource IS NULL ORDER BY alliance ASC";
2827
			$query_data = array();
2828
		} else {
2829
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND  forsource = :forsource ORDER BY alliance ASC";
2830
			$query_data = array(':forsource' => $forsource);
2831
		}
2832
		
2833
		$sth = $this->db->prepare($query);
2834
		$sth->execute($query_data);
2835
    
2836
		$alliance_array = array();
0 ignored issues
show
Unused Code introduced by
$alliance_array is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
2837
		$alliance_array = $sth->fetchAll(PDO::FETCH_ASSOC);
2838
		return $alliance_array;
2839
	}
2840
	
2841
	/**
2842
	* Gets a list of all airline countries
2843
	*
2844
	* @return Array list of airline countries
2845
	*
2846
	*/
2847
	public function getAllAirlineCountries($filters = array())
2848
	{
2849
		$filter_query = $this->getFilter($filters,true,true);
2850
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
2851
				FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
2852
				ORDER BY spotter_output.airline_country ASC";
2853
		
2854
		//$query = "SELECT DISTINCT country AS airline_country FROM airlines WHERE country <> '' AND active = 'Y' ORDER BY country ASC";
2855
		$sth = $this->db->prepare($query);
2856
		$sth->execute();
2857
2858
		$airline_array = array();
2859
		$temp_array = array();
2860
		
2861
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2862
		{
2863
			$temp_array['airline_country'] = $row['airline_country'];
2864
2865
			$airline_array[] = $temp_array;
2866
		}
2867
2868
		return $airline_array;
2869
	}
2870
2871
	
2872
	
2873
	/**
2874
	* Gets a list of all departure & arrival names
2875
	*
2876
	* @return Array list of airport names
2877
	*
2878
	*/
2879
	public function getAllAirportNames($filters = array())
2880
	{
2881
		$filter_query = $this->getFilter($filters,true,true);
2882
		$airport_array = array();
2883
		$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
2884
				FROM spotter_output".$filter_query." spotter_output.departure_airport_icao <> '' AND spotter_output.departure_airport_icao <> 'NA' 
2885
				ORDER BY spotter_output.departure_airport_city ASC";
2886
		
2887
		//$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";
2888
		$sth = $this->db->prepare($query);
2889
		$sth->execute();
2890
2891
		$temp_array = array();
2892
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2893
		{
2894
			$temp_array['airport_icao'] = $row['airport_icao'];
2895
			$temp_array['airport_name'] = $row['airport_name'];
2896
			$temp_array['airport_city'] = $row['airport_city'];
2897
			$temp_array['airport_country'] = $row['airport_country'];
2898
2899
			$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2900
		}
2901
2902
		$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
2903
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> '' AND spotter_output.arrival_airport_icao <> 'NA' 
2904
								ORDER BY spotter_output.arrival_airport_city ASC";
2905
					
2906
		$sth = $this->db->prepare($query);
2907
		$sth->execute();
2908
2909
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2910
			{
2911
		//	if ($airport_array[$row['airport_city'].",".$row['airport_name']]['airport_icao'] != $row['airport_icao'])
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
2922
		return $airport_array;
2923
	} 
2924
2925
	/**
2926
	* Gets a list of all owner names
2927
	*
2928
	* @return Array list of owner names
2929
	*
2930
	*/
2931
	public function getAllOwnerNames($filters = array())
2932
	{
2933
		$filter_query = $this->getFilter($filters,true,true);
2934
		$query  = "SELECT DISTINCT spotter_output.owner_name
2935
				FROM spotter_output".$filter_query." spotter_output.owner_name <> '' 
2936
				ORDER BY spotter_output.owner_name ASC";
2937
		
2938
		$sth = $this->db->prepare($query);
2939
		$sth->execute();
2940
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2941
	} 
2942
2943
	/**
2944
	* Gets a list of all pilot names and pilot ids
2945
	*
2946
	* @return Array list of pilot names and pilot ids
2947
	*
2948
	*/
2949
	public function getAllPilotNames($filters = array())
2950
	{
2951
		$filter_query = $this->getFilter($filters,true,true);
2952
		$query  = "SELECT DISTINCT spotter_output.pilot_name, spotter_output.pilot_id
2953
				FROM spotter_output".$filter_query." spotter_output.pilot_name <> '' 
2954
				ORDER BY spotter_output.pilot_name ASC";
2955
		
2956
		$sth = $this->db->prepare($query);
2957
		$sth->execute();
2958
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2959
	} 
2960
	
2961
	
2962
	/**
2963
	* Gets a list of all departure & arrival airport countries
2964
	*
2965
	* @return Array list of airport countries
2966
	*
2967
	*/
2968
	public function getAllAirportCountries($filters = array())
2969
	{
2970
		$airport_array = array();
2971
					
2972
		  /*
2973
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
2974
								FROM spotter_output
2975
								WHERE spotter_output.departure_airport_country <> '' 
2976
								ORDER BY spotter_output.departure_airport_country ASC";
2977
		*/
2978
		$query = "SELECT DISTINCT country AS airport_country FROM airport ORDER BY country ASC";
2979
		
2980
		$sth = $this->db->prepare($query);
2981
		$sth->execute();
2982
   
2983
		$temp_array = array();
2984
		
2985
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2986
		{
2987
			$temp_array['airport_country'] = $row['airport_country'];
2988
2989
			$airport_array[$row['airport_country']] = $temp_array;
2990
		}
2991
		$filter_query = $this->getFilter($filters,true,true);
2992
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
2993
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
2994
								ORDER BY spotter_output.arrival_airport_country ASC";
2995
					
2996
		$sth = $this->db->prepare($query);
2997
		$sth->execute();
2998
		
2999
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3000
		{
3001
			if (isset($airport_array[$row['airport_country']]['airport_country']) && $airport_array[$row['airport_country']]['airport_country'] != $row['airport_country'])
3002
			{
3003
				$temp_array['airport_country'] = $row['airport_country'];
3004
				$airport_array[$row['airport_country']] = $temp_array;
3005
			}
3006
		}
3007
3008
		return $airport_array;
3009
	} 
3010
	
3011
	
3012
	
3013
	
3014
	/**
3015
	* Gets a list of all countries (airline, departure airport & arrival airport)
3016
	*
3017
	* @return Array list of countries
3018
	*
3019
	*/
3020
	public function getAllCountries($filters = array())
3021
	{
3022
		$Connection= new Connection($this->db);
3023
		if ($Connection->tableExists('countries')) {
3024
			$query  = "SELECT countries.name AS airport_country
3025
				FROM countries
3026
				ORDER BY countries.name ASC";
3027
			$sth = $this->db->prepare($query);
3028
			$sth->execute();
3029
   
3030
			$temp_array = array();
3031
			$country_array = array();
3032
		
3033
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
3034
			{
3035
				$temp_array['country'] = $row['airport_country'];
3036
				$country_array[$row['airport_country']] = $temp_array;
3037
			}
3038
		} else {
3039
			$filter_query = $this->getFilter($filters,true,true);
3040
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
3041
								FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' 
3042
								ORDER BY spotter_output.departure_airport_country ASC";
3043
3044
			$sth = $this->db->prepare($query);
3045
			$sth->execute();
3046
   
3047
			$temp_array = array();
3048
			$country_array = array();
3049
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
3050
			{
3051
				$temp_array['country'] = $row['airport_country'];
3052
				$country_array[$row['airport_country']] = $temp_array;
3053
			}
3054
3055
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
3056
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
3057
								ORDER BY spotter_output.arrival_airport_country ASC";
3058
					
3059
		$sth = $this->db->prepare($query);
3060
		$sth->execute();
3061
		
3062
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3063
		{
3064
			if ($country_array[$row['airport_country']]['country'] != $row['airport_country'])
3065
			{
3066
				$temp_array['country'] = $row['airport_country'];
3067
				
3068
				$country_array[$row['country']] = $temp_array;
3069
			}
3070
		}
3071
		
3072
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
3073
								FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
3074
								ORDER BY spotter_output.airline_country ASC";
3075
					
3076
		$sth = $this->db->prepare($query);
3077
		$sth->execute();
3078
		
3079
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3080
		{
3081
			if (isset($country_array[$row['airline_country']]['country']) && $country_array[$row['airline_country']]['country'] != $row['airline_country'])
3082
			{
3083
				$temp_array['country'] = $row['airline_country'];
3084
				
3085
				$country_array[$row['country']] = $temp_array;
3086
			}
3087
		}
3088
		}  
3089
		return $country_array;
3090
	} 
3091
	
3092
	
3093
	
3094
	
3095
	/**
3096
	* Gets a list of all idents/callsigns
3097
	*
3098
	* @return Array list of ident/callsign names
3099
	*
3100
	*/
3101
	public function getAllIdents($filters = array())
3102
	{
3103
		$filter_query = $this->getFilter($filters,true,true);
3104
		$query  = "SELECT DISTINCT spotter_output.ident
3105
								FROM spotter_output".$filter_query." spotter_output.ident <> '' 
3106
								ORDER BY spotter_output.date ASC LIMIT 700 OFFSET 0";
3107
3108
		$sth = $this->db->prepare($query);
3109
		$sth->execute();
3110
    
3111
		$ident_array = array();
3112
		$temp_array = array();
3113
		
3114
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3115
		{
3116
			$temp_array['ident'] = $row['ident'];
3117
			$ident_array[] = $temp_array;
3118
		}
3119
3120
		return $ident_array;
3121
	}
3122
3123
	/**
3124
	* Get a list of flights from airport since 7 days
3125
	* @return Array number, icao, name and city of airports
3126
	*/
3127
3128
	public function getLast7DaysAirportsDeparture($airport_icao = '',$filters = array()) {
3129
		global $globalTimezone, $globalDBdriver;
3130
		$filter_query = $this->getFilter($filters,true,true);
3131
		if ($globalTimezone != '') {
3132
			date_default_timezone_set($globalTimezone);
3133
			$datetime = new DateTime();
3134
			$offset = $datetime->format('P');
3135
		} else $offset = '+00:00';
3136
		if ($airport_icao == '') {
3137
			if ($globalDBdriver == 'mysql') {
3138
				$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";
3139
			} else {
3140
				$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";
3141
			}
3142
			$sth = $this->db->prepare($query);
3143
			$sth->execute(array(':offset' => $offset));
3144
		} else {
3145
			if ($globalDBdriver == 'mysql') {
3146
				$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";
3147
			} else {
3148
				$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";
3149
			}
3150
			$sth = $this->db->prepare($query);
3151
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3152
		}
3153
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3154
	}
3155
3156
	/**
3157
	* Get a list of flights from airport since 7 days
3158
	* @return Array number, icao, name and city of airports
3159
	*/
3160
3161
	public function getLast7DaysAirportsDepartureByAirlines($airport_icao = '') {
3162
		global $globalTimezone, $globalDBdriver;
3163
		if ($globalTimezone != '') {
3164
			date_default_timezone_set($globalTimezone);
3165
			$datetime = new DateTime();
3166
			$offset = $datetime->format('P');
3167
		} else $offset = '+00:00';
3168
		if ($airport_icao == '') {
3169
			if ($globalDBdriver == 'mysql') {
3170
				$query = "SELECT spotter_output.airline_icao, COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, 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";
3171
			} else {
3172
				$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";
3173
			}
3174
			$sth = $this->db->prepare($query);
3175
			$sth->execute(array(':offset' => $offset));
3176
		} else {
3177
			if ($globalDBdriver == 'mysql') {
3178
				$query = "SELECT spotter_output.airline_icao, COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, 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";
3179
			} else {
3180
				$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";
3181
			}
3182
			$sth = $this->db->prepare($query);
3183
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3184
		}
3185
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3186
	}
3187
3188
	/**
3189
	* Get a list of flights from detected airport since 7 days
3190
	* @return Array number, icao, name and city of airports
3191
	*/
3192
3193
	public function getLast7DaysDetectedAirportsDeparture($airport_icao = '', $filters = array()) {
3194
		global $globalTimezone, $globalDBdriver;
3195
		$filter_query = $this->getFilter($filters,true,true);
3196
		if ($globalTimezone != '') {
3197
			date_default_timezone_set($globalTimezone);
3198
			$datetime = new DateTime();
3199
			$offset = $datetime->format('P');
3200
		} else $offset = '+00:00';
3201
		if ($airport_icao == '') {
3202
			if ($globalDBdriver == 'mysql') {
3203
				$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 
3204
				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 <> '' 
3205
				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";
3206
			} else {
3207
				$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 
3208
				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 <> '' 
3209
				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";
3210
			}
3211
			$sth = $this->db->prepare($query);
3212
			$sth->execute(array(':offset' => $offset));
3213
		} else {
3214
			if ($globalDBdriver == 'mysql') {
3215
				$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 
3216
				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 
3217
				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";
3218
			} else {
3219
				$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 
3220
				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";
3221
			}
3222
			$sth = $this->db->prepare($query);
3223
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3224
		}
3225
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3226
	}
3227
3228
	/**
3229
	* Get a list of flights from detected airport since 7 days
3230
	* @return Array number, icao, name and city of airports
3231
	*/
3232
3233
	public function getLast7DaysDetectedAirportsDepartureByAirlines($airport_icao = '') {
3234
		global $globalTimezone, $globalDBdriver;
3235
		if ($globalTimezone != '') {
3236
			date_default_timezone_set($globalTimezone);
3237
			$datetime = new DateTime();
3238
			$offset = $datetime->format('P');
3239
		} else $offset = '+00:00';
3240
		if ($airport_icao == '') {
3241
			if ($globalDBdriver == 'mysql') {
3242
				$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 
3243
				FROM `spotter_output`, airport 
3244
				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 <> '' 
3245
				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";
3246
			} else {
3247
				$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 
3248
				FROM spotter_output, airport 
3249
				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 <> '' 
3250
				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";
3251
			}
3252
			$sth = $this->db->prepare($query);
3253
			$sth->execute(array(':offset' => $offset));
3254
		} else {
3255
			if ($globalDBdriver == 'mysql') {
3256
				$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 
3257
				FROM `spotter_output`, airport 
3258
				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 
3259
				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";
3260
			} else {
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, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') 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 >= 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";
3264
			}
3265
			$sth = $this->db->prepare($query);
3266
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3267
		}
3268
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3269
	}
3270
3271
3272
	/**
3273
	* Get a list of flights to airport since 7 days
3274
	* @return Array number, icao, name and city of airports
3275
	*/
3276
3277
	public function getLast7DaysAirportsArrival($airport_icao = '', $filters = array()) {
3278
		global $globalTimezone, $globalDBdriver;
3279
		$filter_query = $this->getFilter($filters,true,true);
3280
		if ($globalTimezone != '') {
3281
			date_default_timezone_set($globalTimezone);
3282
			$datetime = new DateTime();
3283
			$offset = $datetime->format('P');
3284
		} else $offset = '+00:00';
3285
		if ($airport_icao == '') {
3286
			if ($globalDBdriver == 'mysql') {
3287
				$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";
3288
			} else {
3289
				$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";
3290
			}
3291
			$sth = $this->db->prepare($query);
3292
			$sth->execute(array(':offset' => $offset));
3293
		} else {
3294
			if ($globalDBdriver == 'mysql') {
3295
				$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";
3296
			} else {
3297
				$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";
3298
			}
3299
			$sth = $this->db->prepare($query);
3300
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3301
		}
3302
		
3303
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3304
	}
3305
3306
3307
	/**
3308
	* Get a list of flights detected to airport since 7 days
3309
	* @return Array number, icao, name and city of airports
3310
	*/
3311
3312
	public function getLast7DaysDetectedAirportsArrival($airport_icao = '',$filters = array()) {
3313
		global $globalTimezone, $globalDBdriver;
3314
		$filter_query = $this->getFilter($filters,true,true);
3315
		if ($globalTimezone != '') {
3316
			date_default_timezone_set($globalTimezone);
3317
			$datetime = new DateTime();
3318
			$offset = $datetime->format('P');
3319
		} else $offset = '+00:00';
3320
		if ($airport_icao == '') {
3321
			if ($globalDBdriver == 'mysql') {
3322
				$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 
3323
				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 <> '' 
3324
				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";
3325
			} else {
3326
				$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 
3327
				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 <> '' 
3328
				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";
3329
			}
3330
			$sth = $this->db->prepare($query);
3331
			$sth->execute(array(':offset' => $offset));
3332
		} else {
3333
			if ($globalDBdriver == 'mysql') {
3334
				$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 
3335
				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 
3336
				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";
3337
			} else {
3338
				$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 
3339
				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 
3340
				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";
3341
			}
3342
			$sth = $this->db->prepare($query);
3343
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3344
		}
3345
		
3346
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3347
	}
3348
3349
3350
	/**
3351
	* Get a list of flights to airport since 7 days
3352
	* @return Array number, icao, name and city of airports
3353
	*/
3354
3355
	public function getLast7DaysAirportsArrivalByAirlines($airport_icao = '') {
3356
		global $globalTimezone, $globalDBdriver;
3357
		if ($globalTimezone != '') {
3358
			date_default_timezone_set($globalTimezone);
3359
			$datetime = new DateTime();
3360
			$offset = $datetime->format('P');
3361
		} else $offset = '+00:00';
3362
		if ($airport_icao == '') {
3363
			if ($globalDBdriver == 'mysql') {
3364
				$query = "SELECT spotter_output.airline_icao, COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, 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";
3365
			} else {
3366
				$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";
3367
			}
3368
			$sth = $this->db->prepare($query);
3369
			$sth->execute(array(':offset' => $offset));
3370
		} else {
3371
			if ($globalDBdriver == 'mysql') {
3372
				$query = "SELECT spotter_output.airline_icao, COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, 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";
3373
			} else {
3374
				$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";
3375
			}
3376
			$sth = $this->db->prepare($query);
3377
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3378
		}
3379
		
3380
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3381
	}
3382
3383
3384
	/**
3385
	* Get a list of flights detected to airport since 7 days
3386
	* @return Array number, icao, name and city of airports
3387
	*/
3388
3389
	public function getLast7DaysDetectedAirportsArrivalByAirlines($airport_icao = '') {
3390
		global $globalTimezone, $globalDBdriver;
3391
		if ($globalTimezone != '') {
3392
			date_default_timezone_set($globalTimezone);
3393
			$datetime = new DateTime();
3394
			$offset = $datetime->format('P');
3395
		} else $offset = '+00:00';
3396
		if ($airport_icao == '') {
3397
			if ($globalDBdriver == 'mysql') {
3398
				$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 
3399
				FROM `spotter_output`, airport 
3400
				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 <> '' 
3401
				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";
3402
			} else {
3403
				$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 
3404
				FROM spotter_output, airport 
3405
				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 <> '' 
3406
				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";
3407
			}
3408
			$sth = $this->db->prepare($query);
3409
			$sth->execute(array(':offset' => $offset));
3410
		} else {
3411
			if ($globalDBdriver == 'mysql') {
3412
				$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 
3413
				FROM `spotter_output`, airport 
3414
				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 
3415
				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";
3416
			} else {
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, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') 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 >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao = :airport_icao 
3420
				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";
3421
			}
3422
			$sth = $this->db->prepare($query);
3423
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3424
		}
3425
		
3426
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3427
	}
3428
3429
3430
	/**
3431
	* Gets a list of all dates
3432
	*
3433
	* @return Array list of date names
3434
	*
3435
	*/
3436
	public function getAllDates()
3437
	{
3438
		global $globalTimezone, $globalDBdriver;
3439
		if ($globalTimezone != '') {
3440
			date_default_timezone_set($globalTimezone);
3441
			$datetime = new DateTime();
3442
			$offset = $datetime->format('P');
3443
		} else $offset = '+00:00';
3444
3445
		if ($globalDBdriver == 'mysql') {
3446
			$query  = "SELECT DISTINCT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) as date
3447
								FROM spotter_output
3448
								WHERE spotter_output.date <> '' 
3449
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3450
		} else {
3451
			$query  = "SELECT DISTINCT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date
3452
								FROM spotter_output
3453
								WHERE spotter_output.date <> '' 
3454
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3455
		}
3456
		
3457
		$sth = $this->db->prepare($query);
3458
		$sth->execute(array(':offset' => $offset));
3459
    
3460
		$date_array = array();
3461
		$temp_array = array();
3462
		
3463
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3464
		{
3465
			$temp_array['date'] = $row['date'];
3466
3467
			$date_array[] = $temp_array;
3468
		}
3469
3470
		return $date_array;
3471
	}
3472
	
3473
	
3474
	
3475
	/**
3476
	* Gets all route combinations
3477
	*
3478
	* @return Array the route list
3479
	*
3480
	*/
3481
	public function getAllRoutes()
3482
	{
3483
		$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 
3484
				FROM spotter_output
3485
				WHERE spotter_output.ident <> '' 
3486
				GROUP BY route
3487
				ORDER BY route ASC";
3488
3489
		$sth = $this->db->prepare($query);
3490
		$sth->execute();
3491
3492
		$routes_array = array();
3493
		$temp_array = array();
3494
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3495
		{
3496
			$temp_array['route'] = $row['route'];
3497
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
3498
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
3499
3500
			$routes_array[] = $temp_array;
3501
		}
3502
		return $routes_array;
3503
	}
3504
3505
	/**
3506
	* Update ident spotter data
3507
	*
3508
	* @param String $flightaware_id the ID from flightaware
3509
	* @param String $ident the flight ident
3510
	* @return String success or false
3511
	*
3512
	*/	
3513
	public function updateIdentSpotterData($flightaware_id = '', $ident = '',$fromsource = NULL)
3514
	{
3515
		if (!is_numeric(substr($ident, 0, 3)))
3516
		{
3517
			if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3518
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3519
			} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3520
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3521
			} else {
3522
				$airline_array = $this->getAllAirlineInfo("NA");
3523
			}
3524
			if (count($airline_array) == 0) {
3525
				$airline_array = $this->getAllAirlineInfo("NA");
3526
			}
3527
			if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3528
				$airline_array = $this->getAllAirlineInfo("NA");
3529
			}
3530
		} else {
3531
			$airline_array = $this->getAllAirlineInfo("NA");
3532
		}
3533
                $airline_name = $airline_array[0]['name'];
3534
                $airline_icao = $airline_array[0]['icao'];
3535
                $airline_country = $airline_array[0]['country'];
3536
                $airline_type = $airline_array[0]['type'];
3537
3538
3539
		$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';
3540
                $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);
3541
3542
		try {
3543
			$sth = $this->db->prepare($query);
3544
			$sth->execute($query_values);
3545
		} catch (PDOException $e) {
3546
			return "error : ".$e->getMessage();
3547
		}
3548
		
3549
		return "success";
3550
3551
	}
3552
	/**
3553
	* Update latest spotter data
3554
	*
3555
	* @param String $flightaware_id the ID from flightaware
3556
	* @param String $ident the flight ident
3557
	* @param String $arrival_airport_icao the arrival airport
3558
	* @return String success or false
3559
	*
3560
	*/	
3561
	public function updateLatestSpotterData($flightaware_id = '', $ident = '', $latitude = '', $longitude = '', $altitude = '', $ground = false, $groundspeed = NULL, $date = '', $arrival_airport_icao = '',$arrival_airport_time = '')
3562
	{
3563
		if ($groundspeed == '') $groundspeed = NULL;
3564
		$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';
3565
                $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);
3566
3567
		try {
3568
			$sth = $this->db->prepare($query);
3569
			$sth->execute($query_values);
3570
		} catch (PDOException $e) {
3571
			return "error : ".$e->getMessage();
3572
		}
3573
		
3574
		return "success";
3575
3576
	}
3577
3578
	/**
3579
	* Adds a new spotter data
3580
	*
3581
	* @param String $flightaware_id the ID from flightaware
3582
	* @param String $ident the flight ident
3583
	* @param String $aircraft_icao the aircraft type
3584
	* @param String $departure_airport_icao the departure airport
3585
	* @param String $arrival_airport_icao the arrival airport
3586
	* @param String $latitude latitude of flight
3587
	* @param String $longitude latitude of flight
3588
	* @param String $waypoints waypoints of flight
3589
	* @param String $altitude altitude of flight
3590
	* @param String $heading heading of flight
3591
	* @param String $groundspeed speed of flight
3592
	* @param String $date date of flight
3593
	* @param String $departure_airport_time departure time of flight
3594
	* @param String $arrival_airport_time arrival time of flight
3595
	* @param String $squawk squawk code of flight
3596
	* @param String $route_stop route stop of flight
3597
	* @param String $highlight highlight or not
3598
	* @param String $ModeS ModesS code of flight
3599
	* @param String $registration registration code of flight
3600
	* @param String $pilot_id pilot id of flight (for virtual airlines)
3601
	* @param String $pilot_name pilot name of flight (for virtual airlines)
3602
	* @param String $verticalrate vertival rate of flight
3603
	* @return String success or false
3604
	*/
3605
	public function addSpotterData($flightaware_id = '', $ident = '', $aircraft_icao = '', $departure_airport_icao = '', $arrival_airport_icao = '', $latitude = '', $longitude = '', $waypoints = '', $altitude = '', $altitude_real = '',$heading = '', $groundspeed = '', $date = '', $departure_airport_time = '', $arrival_airport_time = '',$squawk = '', $route_stop = '', $highlight = '', $ModeS = '', $registration = '',$pilot_id = '', $pilot_name = '', $verticalrate = '', $ground = false,$format_source = '', $source_name = '',$source_type = '')
0 ignored issues
show
Unused Code introduced by
The parameter $altitude_real is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
3606
	{
3607
		global $globalURL, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalDebugTimeElapsed, $globalAirlinesSource, $globalVAM;
3608
		
3609
		//if (isset($globalDebugTimeElapsed) || $globalDebugTimeElapsed == '') $globalDebugTimeElapsed = FALSE;
3610
		$Image = new Image($this->db);
3611
		$Common = new Common();
3612
		
3613
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
3614
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
3615
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
3616
		if (!isset($globalVAM)) $globalVAM = FALSE;
3617
		date_default_timezone_set('UTC');
3618
		
3619
		//getting the registration
3620
		if ($flightaware_id != "" && $registration == '')
3621
		{
3622
			if (!is_string($flightaware_id))
3623
			{
3624
				return false;
3625
			} else {
3626
				if ($ModeS != '') {
3627
					$timeelapsed = microtime(true);
3628
					$registration = $this->getAircraftRegistrationBymodeS($ModeS,$source_type);
3629
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3630
				} else {
3631
					$myhex = explode('-',$flightaware_id);
3632
					if (count($myhex) > 0) {
3633
						$timeelapsed = microtime(true);
3634
						$registration = $this->getAircraftRegistrationBymodeS($myhex[0],$source_type);
3635
						if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3636
					}
3637
				}
3638
			}
3639
		}
3640
		$fromsource = NULL;
3641
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
3642
		elseif ($format_source == 'vatsimtxt') $fromsource = 'vatsim';
3643
		elseif ($format_source == 'whazzup') $fromsource = 'ivao';
3644
		elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
3645
		elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
3646
		//getting the airline information
3647
		if ($ident != "")
3648
		{
3649
			if (!is_string($ident))
3650
			{
3651
				return false;
3652
			} else {
3653
				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'))
3654
				{
3655
					$timeelapsed = microtime(true);
3656
					if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3657
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3658
					} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3659
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3660
					} else {
3661
						$airline_array = $this->getAllAirlineInfo("NA");
3662
					}
3663
					if (count($airline_array) == 0) {
3664
						$airline_array = $this->getAllAirlineInfo("NA");
3665
					}
3666
					if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3667
						$airline_array = $this->getAllAirlineInfo("NA");
3668
					}
3669
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3670
3671
				} else {
3672
					$timeelapsed = microtime(true);
3673
					$airline_array = $this->getAllAirlineInfo("NA");
3674
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3675
				}
3676
			}
3677
		} else $airline_array = array();
3678
		
3679
		//getting the aircraft information
3680
		$aircraft_array = array();
3681
		if ($aircraft_icao != '')
3682
		{
3683
			if (!is_string($aircraft_icao))
3684
			{
3685
				return false;
3686
			} else {
3687
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3688
				{
3689
					$timeelapsed = microtime(true);
3690
					$aircraft_array = $this->getAllAircraftInfo("NA");
3691
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3692
				} else {
3693
					$timeelapsed = microtime(true);
3694
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3695
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3696
				}
3697
			}
3698
		} else {
3699
			if ($ModeS != '') {
3700
				$timeelapsed = microtime(true);
3701
				$aircraft_icao = $this->getAllAircraftType($ModeS,$source_type);
3702
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAircraftType : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3703
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3704
				{
3705
					$timeelapsed = microtime(true);
3706
					$aircraft_array = $this->getAllAircraftInfo("NA");
3707
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3708
				} else {
3709
					$timeelapsed = microtime(true);
3710
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3711
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3712
				}
3713
			}
3714
		}
3715
		
3716
		//getting the departure airport information
3717
		$departure_airport_array = array();
3718
		$departure_airport_icao = trim($departure_airport_icao);
3719
		if ($departure_airport_icao != '')
3720
		{
3721
			if (!is_string($departure_airport_icao))
3722
			{
3723
				return false;
3724
			} else {
3725
				$timeelapsed = microtime(true);
3726
				$departure_airport_array = $this->getAllAirportInfo($departure_airport_icao);
3727
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3728
			}
3729
		}
3730
		
3731
		//getting the arrival airport information
3732
		$arrival_airport_array = array();
3733
		$arrival_airport_icao = trim($arrival_airport_icao);
3734
		if ($arrival_airport_icao != '')
3735
		{
3736
			if (!is_string($arrival_airport_icao))
3737
			{
3738
				return false;
3739
			} else {
3740
				$timeelapsed = microtime(true);
3741
				$arrival_airport_array = $this->getAllAirportInfo($arrival_airport_icao);
3742
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3743
			}
3744
		}
3745
3746
		if ($latitude != "")
3747
		{
3748
			if (!is_numeric($latitude))
3749
			{
3750
				return false;
3751
			}
3752
		}
3753
		
3754
		if ($longitude != "")
3755
		{
3756
			if (!is_numeric($longitude))
3757
			{
3758
				return false;
3759
			}
3760
		}
3761
		
3762
		if ($waypoints != "")
3763
		{
3764
			if (!is_string($waypoints))
3765
			{
3766
				return false;
3767
			}
3768
		}
3769
		
3770
		if ($altitude != "")
3771
		{
3772
			if (!is_numeric($altitude))
3773
			{
3774
				return false;
3775
			}
3776
		} else $altitude = 0;
3777
		
3778
		if ($heading != "")
3779
		{
3780
			if (!is_numeric($heading))
3781
			{
3782
				return false;
3783
			}
3784
		}
3785
		
3786
		if ($groundspeed != "")
3787
		{
3788
			if (!is_numeric($groundspeed))
3789
			{
3790
				return false;
3791
			}
3792
		}
3793
3794
    
3795
		if ($date == "" || strtotime($date) < time()-20*60)
3796
		{
3797
			$date = date("Y-m-d H:i:s", time());
3798
		}
3799
3800
		//getting the aircraft image
3801
		if (($registration != "" || $registration != 'NA') && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM)
3802
		{
3803
			$timeelapsed = microtime(true);
3804
			$image_array = $Image->getSpotterImage($registration);
3805
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getSpotterImage : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3806
			if (!isset($image_array[0]['registration']))
3807
			{
3808
				//echo "Add image !!!! \n";
3809
				$Image->addSpotterImage($registration);
3810
			}
3811
			$timeelapsed = microtime(true);
3812
			$owner_info = $this->getAircraftOwnerByRegistration($registration);
3813
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftOwnerByRegistration : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3814
			if ($owner_info['owner'] != '') $aircraft_owner = ucwords(strtolower($owner_info['owner']));
3815
		}
3816
    
3817
		if (($globalIVAO || $globalVATSIM || $globalphpVMS || $globalVAM) && $aircraft_icao != '')
3818
		{
3819
            		if (isset($airline_array[0]['icao'])) $airline_icao = $airline_array[0]['icao'];
3820
            		else $airline_icao = '';
3821
			$image_array = $Image->getSpotterImage('',$aircraft_icao,$airline_icao);
3822
			if (!isset($image_array[0]['registration']))
3823
			{
3824
				//echo "Add image !!!! \n";
3825
				$Image->addSpotterImage('',$aircraft_icao,$airline_icao);
3826
			}
3827
		}
3828
    
3829
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
3830
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
3831
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
3832
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
3833
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
3834
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
3835
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3836
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3837
		$waypoints = filter_var($waypoints,FILTER_SANITIZE_STRING);
3838
		$altitude = filter_var($altitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3839
		$heading = filter_var($heading,FILTER_SANITIZE_NUMBER_INT);
3840
		$groundspeed = filter_var($groundspeed,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3841
		$squawk = filter_var($squawk,FILTER_SANITIZE_NUMBER_INT);
3842
		$route_stop = filter_var($route_stop,FILTER_SANITIZE_STRING);
3843
		$ModeS = filter_var($ModeS,FILTER_SANITIZE_STRING);
3844
		$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_STRING);
3845
		$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
3846
		$format_source = filter_var($format_source,FILTER_SANITIZE_STRING);
3847
		$verticalrate = filter_var($verticalrate,FILTER_SANITIZE_NUMBER_INT);
3848
	
3849
		if (count($airline_array) == 0) 
3850
		{
3851
                        $airline_array = $this->getAllAirlineInfo('NA');
3852
                }
3853
                if (count($aircraft_array) == 0) 
3854
                {
3855
                        $aircraft_array = $this->getAllAircraftInfo('NA');
3856
                }
3857
                if (count($departure_airport_array) == 0 || $departure_airport_array[0]['icao'] == '' || $departure_airport_icao == '') 
3858
                {
3859
                        $departure_airport_array = $this->getAllAirportInfo('NA');
3860
                }
3861
                if (count($arrival_airport_array) == 0 || $arrival_airport_array[0]['icao'] == '' || $arrival_airport_icao == '') 
3862
                {
3863
                        $arrival_airport_array = $this->getAllAirportInfo('NA');
3864
                }
3865
                if ($registration == '') $registration = 'NA';
3866
                if ($latitude == '' && $longitude == '') {
3867
            		$latitude = 0;
3868
            		$longitude = 0;
3869
            	}
3870
                if ($squawk == '' || $Common->isInteger($squawk) === false) $squawk = NULL;
3871
                if ($verticalrate == '' || $Common->isInteger($verticalrate) === false) $verticalrate = NULL;
3872
                if ($heading == '' || $Common->isInteger($heading) === false) $heading = 0;
3873
                if ($groundspeed == '' || $Common->isInteger($groundspeed) === false) $groundspeed = 0;
3874
                if (!isset($aircraft_owner)) $aircraft_owner = NULL;
3875
                $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) 
3876
                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)";
3877
3878
                $airline_name = $airline_array[0]['name'];
3879
                $airline_icao = $airline_array[0]['icao'];
3880
                $airline_country = $airline_array[0]['country'];
3881
                $airline_type = $airline_array[0]['type'];
3882
		if ($airline_type == '') {
3883
			$timeelapsed = microtime(true);
3884
			$airline_type = $this->getAircraftTypeBymodeS($ModeS);
3885
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftTypeBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3886
		}
3887
		if ($airline_type == null) $airline_type = '';
3888
                $aircraft_type = $aircraft_array[0]['type'];
3889
                $aircraft_manufacturer = $aircraft_array[0]['manufacturer'];
3890
                $departure_airport_name = $departure_airport_array[0]['name'];
3891
	        $departure_airport_city = $departure_airport_array[0]['city'];
3892
            	$departure_airport_country = $departure_airport_array[0]['country'];
3893
                
3894
                $arrival_airport_name = $arrival_airport_array[0]['name'];
3895
                $arrival_airport_city = $arrival_airport_array[0]['city'];
3896
                $arrival_airport_country = $arrival_airport_array[0]['country'];
3897
                $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);
3898
3899
		try {
3900
		        
3901
			$sth = $this->db->prepare($query);
3902
			$sth->execute($query_values);
3903
			$this->db = null;
3904
		} catch (PDOException $e) {
3905
		    return "error : ".$e->getMessage();
3906
		}
3907
		
3908
		return "success";
3909
3910
	}
3911
	
3912
  
3913
	/**
3914
	* Gets the aircraft ident within the last hour
3915
	*
3916
	* @return String the ident
3917
	*
3918
	*/
3919
	public function getIdentFromLastHour($ident)
3920
	{
3921
		global $globalDBdriver, $globalTimezone;
3922
		if ($globalDBdriver == 'mysql') {
3923
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3924
								WHERE spotter_output.ident = :ident 
3925
								AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) 
3926
								AND spotter_output.date < UTC_TIMESTAMP()";
3927
			$query_data = array(':ident' => $ident);
3928
		} else {
3929
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3930
								WHERE spotter_output.ident = :ident 
3931
								AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INTERVAL '1 HOURS'
3932
								AND spotter_output.date < now() AT TIME ZONE 'UTC'";
3933
			$query_data = array(':ident' => $ident);
3934
    		}
3935
		
3936
		$sth = $this->db->prepare($query);
3937
		$sth->execute($query_data);
3938
    		$ident_result='';
3939
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3940
		{
3941
			$ident_result = $row['ident'];
3942
		}
3943
3944
		return $ident_result;
3945
	}
3946
	
3947
	
3948
	/**
3949
	* Gets the aircraft data from the last 20 seconds
3950
	*
3951
	* @return Array the spotter data
3952
	*
3953
	*/
3954
	public function getRealTimeData($q = '')
3955
	{
3956
		global $globalDBdriver;
3957
		$additional_query = '';
3958
		if ($q != "")
3959
		{
3960
			if (!is_string($q))
3961
			{
3962
				return false;
3963
			} else {
3964
				$q_array = explode(" ", $q);
3965
				foreach ($q_array as $q_item){
3966
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
3967
					$additional_query .= " AND (";
3968
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
3969
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
3970
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
3971
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
3972
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
3973
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
3974
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
3975
					$additional_query .= "(spotter_output.ident like '%".$q_item."%')";
3976
					$additional_query .= ")";
3977
				}
3978
			}
3979
		}
3980
		if ($globalDBdriver == 'mysql') {
3981
			$query  = "SELECT spotter_output.* FROM spotter_output 
3982
				WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 20 SECOND) ".$additional_query." 
3983
				AND spotter_output.date < UTC_TIMESTAMP()";
3984
		} else {
3985
			$query  = "SELECT spotter_output.* FROM spotter_output 
3986
				WHERE spotter_output.date::timestamp >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '20 SECONDS' ".$additional_query." 
3987
				AND spotter_output.date::timestamp < CURRENT_TIMESTAMP AT TIME ZONE 'UTC'";
3988
		}
3989
		$spotter_array = $this->getDataFromDB($query, array());
3990
3991
		return $spotter_array;
3992
	}
3993
	
3994
	
3995
	
3996
	 /**
3997
	* Gets all airlines that have flown over
3998
	*
3999
	* @return Array the airline list
4000
	*
4001
	*/
4002
	public function countAllAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(), $year = '', $month = '', $day = '')
4003
	{
4004
		global $globalDBdriver;
4005
		$filter_query = $this->getFilter($filters,true,true);
4006
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4007
		 			FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.airline_icao <> 'NA'";
4008
		if ($olderthanmonths > 0) {
4009
			if ($globalDBdriver == 'mysql') {
4010
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4011
			} else {
4012
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4013
			}
4014
		}
4015
                if ($sincedate != '') {
4016
			if ($globalDBdriver == 'mysql') {
4017
				$query .= " AND spotter_output.date > '".$sincedate."'";
4018
			} else {
4019
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4020
			}
4021
		}
4022
		$query_values = array();
4023
		if ($year != '') {
4024
			if ($globalDBdriver == 'mysql') {
4025
				$query .= " AND YEAR(spotter_output.date) = :year";
4026
				$query_values = array_merge($query_values,array(':year' => $year));
4027
			} else {
4028
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4029
				$query_values = array_merge($query_values,array(':year' => $year));
4030
			}
4031
		}
4032
		if ($month != '') {
4033
			if ($globalDBdriver == 'mysql') {
4034
				$query .= " AND MONTH(spotter_output.date) = :month";
4035
				$query_values = array_merge($query_values,array(':month' => $month));
4036
			} else {
4037
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4038
				$query_values = array_merge($query_values,array(':month' => $month));
4039
			}
4040
		}
4041
		if ($day != '') {
4042
			if ($globalDBdriver == 'mysql') {
4043
				$query .= " AND DAY(spotter_output.date) = :day";
4044
				$query_values = array_merge($query_values,array(':day' => $day));
4045
			} else {
4046
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4047
				$query_values = array_merge($query_values,array(':day' => $day));
4048
			}
4049
		}
4050
		$query .= " GROUP BY spotter_output.airline_name,spotter_output.airline_icao, spotter_output.airline_country ORDER BY airline_count DESC";
4051
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4052
4053
		$sth = $this->db->prepare($query);
4054
		$sth->execute($query_values);
4055
		$airline_array = array();
4056
		$temp_array = array();
4057
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4058
		{
4059
			$temp_array['airline_name'] = $row['airline_name'];
4060
			$temp_array['airline_icao'] = $row['airline_icao'];
4061
			$temp_array['airline_count'] = $row['airline_count'];
4062
			$temp_array['airline_country'] = $row['airline_country'];
4063
			$airline_array[] = $temp_array;
4064
		}
4065
		return $airline_array;
4066
	}
4067
4068
	 /**
4069
	* Gets all pilots that have flown over
4070
	*
4071
	* @return Array the pilots list
4072
	*
4073
	*/
4074
	public function countAllPilots($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '', $month = '',$day = '')
4075
	{
4076
		global $globalDBdriver;
4077
		$filter_query = $this->getFilter($filters,true,true);
4078
		$query  = "SELECT DISTINCT spotter_output.pilot_id, s.pilot_name, COUNT(spotter_output.pilot_id) AS pilot_count, spotter_output.format_source
4079
			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 <> ''";
4080
                if ($olderthanmonths > 0) {
4081
            		if ($globalDBdriver == 'mysql') {
4082
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4083
			} else {
4084
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4085
			}
4086
		}
4087
                if ($sincedate != '') {
4088
            		if ($globalDBdriver == 'mysql') {
4089
				$query .= " AND spotter_output.date > '".$sincedate."'";
4090
			} else {
4091
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4092
			}
4093
		}
4094
		$query_values = array();
4095
		if ($year != '') {
4096
			if ($globalDBdriver == 'mysql') {
4097
				$query .= " AND YEAR(spotter_output.date) = :year";
4098
				$query_values = array_merge($query_values,array(':year' => $year));
4099
			} else {
4100
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4101
				$query_values = array_merge($query_values,array(':year' => $year));
4102
			}
4103
		}
4104
		if ($month != '') {
4105
			if ($globalDBdriver == 'mysql') {
4106
				$query .= " AND MONTH(spotter_output.date) = :month";
4107
				$query_values = array_merge($query_values,array(':month' => $month));
4108
			} else {
4109
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4110
				$query_values = array_merge($query_values,array(':month' => $month));
4111
			}
4112
		}
4113
		if ($day != '') {
4114
			if ($globalDBdriver == 'mysql') {
4115
				$query .= " AND DAY(spotter_output.date) = :day";
4116
				$query_values = array_merge($query_values,array(':day' => $day));
4117
			} else {
4118
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4119
				$query_values = array_merge($query_values,array(':day' => $day));
4120
			}
4121
		}
4122
		
4123
		$query .= " GROUP BY spotter_output.pilot_id,s.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
4124
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4125
      
4126
		
4127
		$sth = $this->db->prepare($query);
4128
		$sth->execute($query_values);
4129
		$airline_array = array();
4130
		$temp_array = array();
4131
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4132
		{
4133
			$temp_array['pilot_name'] = $row['pilot_name'];
4134
			$temp_array['pilot_id'] = $row['pilot_id'];
4135
			$temp_array['pilot_count'] = $row['pilot_count'];
4136
			$temp_array['format_source'] = $row['format_source'];
4137
			$airline_array[] = $temp_array;
4138
		}
4139
		return $airline_array;
4140
	}
4141
	
4142
	/**
4143
	* Gets all pilots that have flown over
4144
	*
4145
	* @return Array the pilots list
4146
	*
4147
	*/
4148
	public function countAllPilotsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '')
4149
	{
4150
		global $globalDBdriver;
4151
		$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
4152
		 			FROM spotter_output WHERE spotter_output.pilot_id <> '' ";
4153
                if ($olderthanmonths > 0) {
4154
            		if ($globalDBdriver == 'mysql') {
4155
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4156
			} else {
4157
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4158
			}
4159
		}
4160
                if ($sincedate != '') {
4161
            		if ($globalDBdriver == 'mysql') {
4162
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4163
			} else {
4164
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4165
			}
4166
		}
4167
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
4168
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4169
      
4170
		
4171
		$sth = $this->db->prepare($query);
4172
		$sth->execute();
4173
      
4174
		$airline_array = array();
4175
		$temp_array = array();
4176
        
4177
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4178
		{
4179
			$temp_array['pilot_name'] = $row['pilot_name'];
4180
			$temp_array['pilot_id'] = $row['pilot_id'];
4181
			$temp_array['pilot_count'] = $row['pilot_count'];
4182
			$temp_array['airline_icao'] = $row['airline_icao'];
4183
			$temp_array['format_source'] = $row['format_source'];
4184
			$airline_array[] = $temp_array;
4185
		}
4186
		return $airline_array;
4187
	}
4188
	
4189
	 /**
4190
	* Gets all owner that have flown over
4191
	*
4192
	* @return Array the pilots list
4193
	*
4194
	*/
4195
	public function countAllOwners($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
4196
	{
4197
		global $globalDBdriver;
4198
		$filter_query = $this->getFilter($filters,true,true);
4199
		$query  = "SELECT DISTINCT spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
4200
					FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL";
4201
                if ($olderthanmonths > 0) {
4202
            		if ($globalDBdriver == 'mysql') {
4203
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4204
			} else {
4205
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4206
			}
4207
		}
4208
                if ($sincedate != '') {
4209
            		if ($globalDBdriver == 'mysql') {
4210
				$query .= " AND spotter_output.date > '".$sincedate."' ";
4211
			} else {
4212
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4213
			}
4214
		}
4215
		$query_values = array();
4216
		if ($year != '') {
4217
			if ($globalDBdriver == 'mysql') {
4218
				$query .= " AND YEAR(spotter_output.date) = :year";
4219
				$query_values = array_merge($query_values,array(':year' => $year));
4220
			} else {
4221
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4222
				$query_values = array_merge($query_values,array(':year' => $year));
4223
			}
4224
		}
4225
		if ($month != '') {
4226
			if ($globalDBdriver == 'mysql') {
4227
				$query .= " AND MONTH(spotter_output.date) = :month";
4228
				$query_values = array_merge($query_values,array(':month' => $month));
4229
			} else {
4230
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4231
				$query_values = array_merge($query_values,array(':month' => $month));
4232
			}
4233
		}
4234
		if ($day != '') {
4235
			if ($globalDBdriver == 'mysql') {
4236
				$query .= " AND DAY(spotter_output.date) = :day";
4237
				$query_values = array_merge($query_values,array(':day' => $day));
4238
			} else {
4239
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4240
				$query_values = array_merge($query_values,array(':day' => $day));
4241
			}
4242
		}
4243
		$query .= " GROUP BY spotter_output.owner_name ORDER BY owner_count DESC";
4244
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4245
		
4246
		$sth = $this->db->prepare($query);
4247
		$sth->execute($query_values);
4248
		$airline_array = array();
4249
		$temp_array = array();
4250
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4251
		{
4252
			$temp_array['owner_name'] = $row['owner_name'];
4253
			$temp_array['owner_count'] = $row['owner_count'];
4254
			$airline_array[] = $temp_array;
4255
		}
4256
		return $airline_array;
4257
	}
4258
	
4259
	 /**
4260
	* Gets all owner that have flown over
4261
	*
4262
	* @return Array the pilots list
4263
	*
4264
	*/
4265
	public function countAllOwnersByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
4266
	{
4267
		global $globalDBdriver;
4268
		$filter_query = $this->getFilter($filters,true,true);
4269
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
4270
		 			FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL ";
4271
                if ($olderthanmonths > 0) {
4272
            		if ($globalDBdriver == 'mysql') {
4273
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4274
			} else {
4275
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4276
			}
4277
		}
4278
                if ($sincedate != '') {
4279
            		if ($globalDBdriver == 'mysql') {
4280
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4281
			} else {
4282
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4283
			}
4284
		}
4285
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.owner_name ORDER BY owner_count DESC";
4286
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4287
      
4288
		
4289
		$sth = $this->db->prepare($query);
4290
		$sth->execute();
4291
      
4292
		$airline_array = array();
4293
		$temp_array = array();
4294
        
4295
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4296
		{
4297
			$temp_array['owner_name'] = $row['owner_name'];
4298
			$temp_array['owner_count'] = $row['owner_count'];
4299
			$temp_array['airline_icao'] = $row['airline_icao'];
4300
			$airline_array[] = $temp_array;
4301
		}
4302
		return $airline_array;
4303
	}
4304
4305
	/**
4306
	* Gets all airlines that have flown over by aircraft
4307
	*
4308
	* @return Array the airline list
4309
	*
4310
	*/
4311
	public function countAllAirlinesByAircraft($aircraft_icao,$filters = array())
4312
	{
4313
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4314
		$filter_query = $this->getFilter($filters,true,true);
4315
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4316
		 	    FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
4317
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
4318
			    ORDER BY airline_count DESC";
4319
      
4320
		
4321
		$sth = $this->db->prepare($query);
4322
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4323
      
4324
		$airline_array = array();
4325
		$temp_array = array();
4326
        
4327
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4328
		{
4329
			$temp_array['airline_name'] = $row['airline_name'];
4330
			$temp_array['airline_icao'] = $row['airline_icao'];
4331
			$temp_array['airline_count'] = $row['airline_count'];
4332
			$temp_array['airline_country'] = $row['airline_country'];
4333
4334
			$airline_array[] = $temp_array;
4335
		}
4336
4337
		return $airline_array;
4338
	}
4339
4340
4341
	/**
4342
	* Gets all airline countries that have flown over by aircraft
4343
	*
4344
	* @return Array the airline country list
4345
	*
4346
	*/
4347
	public function countAllAirlineCountriesByAircraft($aircraft_icao,$filters = array())
4348
	{
4349
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4350
		$filter_query = $this->getFilter($filters,true,true);
4351
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count, countries.iso3 AS airline_country_iso3 
4352
			FROM spotter_output, countries ".$filter_query." countries.name = spotter_output.airline_country AND spotter_output.airline_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
4353
			GROUP BY spotter_output.airline_country, countries.iso3
4354
			ORDER BY airline_country_count DESC
4355
			LIMIT 10 OFFSET 0";
4356
      
4357
		
4358
		$sth = $this->db->prepare($query);
4359
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4360
      
4361
		$airline_country_array = array();
4362
		$temp_array = array();
4363
        
4364
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4365
		{
4366
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4367
			$temp_array['airline_country'] = $row['airline_country'];
4368
			$temp_array['airline_country_iso3'] = $row['airline_country_iso3'];
4369
 
4370
			$airline_country_array[] = $temp_array;
4371
		}
4372
		return $airline_country_array;
4373
	}
4374
4375
4376
	
4377
	
4378
	/**
4379
	* Gets all airlines that have flown over by airport
4380
	*
4381
	* @return Array the airline list
4382
	*
4383
	*/
4384
	public function countAllAirlinesByAirport($airport_icao,$filters = array())
4385
	{
4386
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4387
		$filter_query = $this->getFilter($filters,true,true);
4388
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4389
		    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 ) 
4390
                    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country
4391
		    ORDER BY airline_count DESC";
4392
      
4393
		
4394
		$sth = $this->db->prepare($query);
4395
		$sth->execute(array(':airport_icao' => $airport_icao));
4396
      
4397
		$airline_array = array();
4398
		$temp_array = array();
4399
        
4400
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4401
		{
4402
			$temp_array['airline_name'] = $row['airline_name'];
4403
			$temp_array['airline_icao'] = $row['airline_icao'];
4404
			$temp_array['airline_count'] = $row['airline_count'];
4405
			$temp_array['airline_country'] = $row['airline_country'];
4406
4407
			$airline_array[] = $temp_array;
4408
		}
4409
		return $airline_array;
4410
	}
4411
4412
4413
	/**
4414
	* Gets all airline countries that have flown over by airport icao
4415
	*
4416
	* @return Array the airline country list
4417
	*
4418
	*/
4419
	public function countAllAirlineCountriesByAirport($airport_icao,$filters = array())
4420
	{
4421
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4422
		$filter_query = $this->getFilter($filters,true,true);
4423
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count, countries.iso3 AS airline_country_iso3 
4424
			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 )
4425
			GROUP BY spotter_output.airline_country, countries.iso3
4426
			ORDER BY airline_country_count DESC
4427
			LIMIT 10 OFFSET 0";
4428
4429
		
4430
		$sth = $this->db->prepare($query);
4431
		$sth->execute(array(':airport_icao' => $airport_icao));
4432
4433
		$airline_country_array = array();
4434
		$temp_array = array();
4435
        
4436
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4437
		{
4438
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4439
			$temp_array['airline_country'] = $row['airline_country'];
4440
			$temp_array['airline_country_iso3'] = $row['airline_country_iso3'];
4441
 
4442
			$airline_country_array[] = $temp_array;
4443
		}
4444
		return $airline_country_array;
4445
	}
4446
4447
4448
	/**
4449
	* Gets all airlines that have flown over by aircraft manufacturer
4450
	*
4451
	* @return Array the airline list
4452
	*
4453
	*/
4454
	public function countAllAirlinesByManufacturer($aircraft_manufacturer,$filters = array())
4455
	{
4456
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4457
		$filter_query = $this->getFilter($filters,true,true);
4458
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4459
		 			FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4460
					GROUP BY spotter_output.airline_name
4461
					ORDER BY airline_count DESC";
4462
 
4463
		$sth = $this->db->prepare($query);
4464
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4465
 
4466
		$airline_array = array();
4467
		$temp_array = array();
4468
        
4469
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4470
		{
4471
			$temp_array['airline_name'] = $row['airline_name'];
4472
			$temp_array['airline_icao'] = $row['airline_icao'];
4473
			$temp_array['airline_count'] = $row['airline_count'];
4474
			$temp_array['airline_country'] = $row['airline_country'];
4475
4476
			$airline_array[] = $temp_array;
4477
		}
4478
		return $airline_array;
4479
	}
4480
4481
4482
4483
	/**
4484
	* Gets all airline countries that have flown over by aircraft manufacturer
4485
	*
4486
	* @return Array the airline country list
4487
	*
4488
	*/
4489
	public function countAllAirlineCountriesByManufacturer($aircraft_manufacturer,$filters = array())
4490
	{
4491
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4492
		$filter_query = $this->getFilter($filters,true,true);
4493
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4494
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4495
					GROUP BY spotter_output.airline_country
4496
					ORDER BY airline_country_count DESC
4497
					LIMIT 10 OFFSET 0";
4498
      
4499
		
4500
		$sth = $this->db->prepare($query);
4501
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4502
4503
		$airline_country_array = array();
4504
		$temp_array = array();
4505
        
4506
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4507
		{
4508
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4509
			$temp_array['airline_country'] = $row['airline_country'];
4510
			$airline_country_array[] = $temp_array;
4511
		}
4512
		return $airline_country_array;
4513
	}
4514
4515
4516
	/**
4517
	* Gets all airlines that have flown over by date
4518
	*
4519
	* @return Array the airline list
4520
	*
4521
	*/
4522
	public function countAllAirlinesByDate($date,$filters = array())
4523
	{
4524
		global $globalTimezone, $globalDBdriver;
4525
		$filter_query = $this->getFilter($filters,true,true);
4526
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4527
		if ($globalTimezone != '') {
4528
			date_default_timezone_set($globalTimezone);
4529
			$datetime = new DateTime($date);
4530
			$offset = $datetime->format('P');
4531
		} else $offset = '+00:00';
4532
4533
		if ($globalDBdriver == 'mysql') {
4534
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4535
		 			FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4536
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country 
4537
					ORDER BY airline_count DESC";
4538
		} else {
4539
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4540
		 			FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4541
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country
4542
					ORDER BY airline_count DESC";
4543
		}
4544
		
4545
		$sth = $this->db->prepare($query);
4546
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4547
4548
		$airline_array = array();
4549
		$temp_array = array();
4550
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4551
		{
4552
			$temp_array['airline_name'] = $row['airline_name'];
4553
			$temp_array['airline_icao'] = $row['airline_icao'];
4554
			$temp_array['airline_count'] = $row['airline_count'];
4555
			$temp_array['airline_country'] = $row['airline_country'];
4556
 
4557
			$airline_array[] = $temp_array;
4558
		}
4559
4560
		return $airline_array;
4561
	}	
4562
	
4563
	
4564
	/**
4565
	* Gets all airline countries that have flown over by date
4566
	*
4567
	* @return Array the airline country list
4568
	*
4569
	*/
4570
	public function countAllAirlineCountriesByDate($date,$filters = array())
4571
	{
4572
		global $globalTimezone, $globalDBdriver;
4573
		$filter_query = $this->getFilter($filters,true,true);
4574
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4575
		if ($globalTimezone != '') {
4576
			date_default_timezone_set($globalTimezone);
4577
			$datetime = new DateTime($date);
4578
			$offset = $datetime->format('P');
4579
		} else $offset = '+00:00';
4580
		
4581
		if ($globalDBdriver == 'mysql') {
4582
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4583
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4584
					GROUP BY spotter_output.airline_country
4585
					ORDER BY airline_country_count DESC
4586
					LIMIT 10 OFFSET 0";
4587
		} else {
4588
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4589
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4590
					GROUP BY spotter_output.airline_country
4591
					ORDER BY airline_country_count DESC
4592
					LIMIT 10 OFFSET 0";
4593
		}
4594
4595
		$sth = $this->db->prepare($query);
4596
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4597
 
4598
		$airline_country_array = array();
4599
		$temp_array = array();
4600
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4601
		{
4602
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4603
			$temp_array['airline_country'] = $row['airline_country'];
4604
4605
			$airline_country_array[] = $temp_array;
4606
		}
4607
		return $airline_country_array;
4608
	}
4609
4610
4611
	/**
4612
	* Gets all airlines that have flown over by ident/callsign
4613
	*
4614
	* @return Array the airline list
4615
	*
4616
	*/
4617
	public function countAllAirlinesByIdent($ident,$filters = array())
4618
	{
4619
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
4620
		$filter_query = $this->getFilter($filters,true,true);
4621
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4622
		 		FROM spotter_output".$filter_query." spotter_output.ident = :ident  
4623
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4624
				ORDER BY airline_count DESC";
4625
      
4626
		
4627
		$sth = $this->db->prepare($query);
4628
		$sth->execute(array(':ident' => $ident));
4629
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4630
	}
4631
4632
	/**
4633
	* Gets all airlines by owner
4634
	*
4635
	* @return Array the airline list
4636
	*
4637
	*/
4638
	public function countAllAirlinesByOwner($owner,$filters = array())
4639
	{
4640
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
4641
		$filter_query = $this->getFilter($filters,true,true);
4642
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4643
		 		FROM spotter_output".$filter_query." spotter_output.owner_name = :owner  
4644
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4645
				ORDER BY airline_count DESC";
4646
      
4647
		
4648
		$sth = $this->db->prepare($query);
4649
		$sth->execute(array(':owner' => $owner));
4650
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4651
	}
4652
4653
	/**
4654
	* Gets flight duration by owner
4655
	*
4656
	* @return String Duration of all flights
4657
	*
4658
	*/
4659
	public function getFlightDurationByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
4660
	{
4661
		global $globalDBdriver;
4662
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
4663
		$filter_query = $this->getFilter($filters,true,true);
4664
		$query  = "SELECT SUM(last_seen - date) AS duration 
4665
				FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
4666
				AND last_seen > date";
4667
		$query_values = array();
4668
		if ($year != '') {
4669
			if ($globalDBdriver == 'mysql') {
4670
				$query .= " AND YEAR(spotter_output.date) = :year";
4671
				$query_values = array_merge($query_values,array(':year' => $year));
4672
			} else {
4673
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4674
				$query_values = array_merge($query_values,array(':year' => $year));
4675
			}
4676
		}
4677
		if ($month != '') {
4678
			if ($globalDBdriver == 'mysql') {
4679
				$query .= " AND MONTH(spotter_output.date) = :month";
4680
				$query_values = array_merge($query_values,array(':month' => $month));
4681
			} else {
4682
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4683
				$query_values = array_merge($query_values,array(':month' => $month));
4684
			}
4685
		}
4686
		if ($day != '') {
4687
			if ($globalDBdriver == 'mysql') {
4688
				$query .= " AND DAY(spotter_output.date) = :day";
4689
				$query_values = array_merge($query_values,array(':day' => $day));
4690
			} else {
4691
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4692
				$query_values = array_merge($query_values,array(':day' => $day));
4693
			}
4694
		}
4695
		$query_values = array_merge($query_values,array(':owner' => $owner));
4696
		$sth = $this->db->prepare($query);
4697
		$sth->execute($query_values);
4698
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4699
		if (is_numeric($result[0]['duration'])) return gmdate('H:i:s',$result[0]['duration']);
4700
		elseif ($result[0]['duration'] == '') return 0;
4701
		else return $result[0]['duration'];
4702
	}
4703
4704
	/**
4705
	* Count flights by owner
4706
	*
4707
	* @return String Duration of all flights
4708
	*
4709
	*/
4710
	public function countFlightsByOwner($owner,$filters = array())
4711
	{
4712
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
4713
		$filter_query = $this->getFilter($filters,true,true);
4714
		$query  = "SELECT COUNT(*) AS nb 
4715
				FROM spotter_output".$filter_query." spotter_output.owner_name = :owner";
4716
		$query_values = array();
4717
		$query_values = array_merge($query_values,array(':owner' => $owner));
4718
		$sth = $this->db->prepare($query);
4719
		$sth->execute($query_values);
4720
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4721
		return $result[0]['nb'];
4722
	}
4723
4724
	/**
4725
	* Count flights by pilot
4726
	*
4727
	* @return String Duration of all flights
4728
	*
4729
	*/
4730
	public function countFlightsByPilot($pilot,$filters = array())
4731
	{
4732
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
4733
		$filter_query = $this->getFilter($filters,true,true);
4734
		$query  = "SELECT COUNT(*) AS nb 
4735
				FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilod_id = :pilot)";
4736
		$query_values = array();
4737
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
4738
		$sth = $this->db->prepare($query);
4739
		$sth->execute($query_values);
4740
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4741
		return $result[0]['nb'];
4742
	}
4743
4744
	/**
4745
	* Gets flight duration by pilot
4746
	*
4747
	* @return String Duration of all flights
4748
	*
4749
	*/
4750
	public function getFlightDurationByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
4751
	{
4752
		global $globalDBdriver;
4753
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
4754
		$filter_query = $this->getFilter($filters,true,true);
4755
		$query  = "SELECT SUM(last_seen - date) AS duration 
4756
		 		FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
4757
		 		AND last_seen > date";
4758
		$query_values = array();
4759
		if ($year != '') {
4760
			if ($globalDBdriver == 'mysql') {
4761
				$query .= " AND YEAR(spotter_output.date) = :year";
4762
				$query_values = array_merge($query_values,array(':year' => $year));
4763
			} else {
4764
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4765
				$query_values = array_merge($query_values,array(':year' => $year));
4766
			}
4767
		}
4768
		if ($month != '') {
4769
			if ($globalDBdriver == 'mysql') {
4770
				$query .= " AND MONTH(spotter_output.date) = :month";
4771
				$query_values = array_merge($query_values,array(':month' => $month));
4772
			} else {
4773
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4774
				$query_values = array_merge($query_values,array(':month' => $month));
4775
			}
4776
		}
4777
		if ($day != '') {
4778
			if ($globalDBdriver == 'mysql') {
4779
				$query .= " AND DAY(spotter_output.date) = :day";
4780
				$query_values = array_merge($query_values,array(':day' => $day));
4781
			} else {
4782
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4783
				$query_values = array_merge($query_values,array(':day' => $day));
4784
			}
4785
		}
4786
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
4787
		$sth = $this->db->prepare($query);
4788
		$sth->execute($query_values);
4789
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4790
		if (is_int($result[0]['duration'])) return gmdate('H:i:s',$result[0]['duration']);
4791
		else return $result[0]['duration'];
4792
	}
4793
4794
	/**
4795
	* Gets all airlines used by pilot
4796
	*
4797
	* @return Array the airline list
4798
	*
4799
	*/
4800
	public function countAllAirlinesByPilot($pilot,$filters = array())
4801
	{
4802
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
4803
		$filter_query = $this->getFilter($filters,true,true);
4804
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4805
		 		FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
4806
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4807
				ORDER BY airline_count DESC";
4808
      
4809
		
4810
		$sth = $this->db->prepare($query);
4811
		$sth->execute(array(':pilot' => $pilot));
4812
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4813
	}
4814
4815
	/**
4816
	* Gets all airlines that have flown over by route
4817
	*
4818
	* @return Array the airline list
4819
	*
4820
	*/
4821
	public function countAllAirlinesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
4822
	{
4823
		$filter_query = $this->getFilter($filters,true,true);
4824
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4825
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4826
4827
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4828
		 			FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
4829
					GROUP BY spotter_output.airline_name
4830
					ORDER BY airline_count DESC";
4831
      
4832
		
4833
		$sth = $this->db->prepare($query);
4834
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4835
      
4836
		$airline_array = array();
4837
		$temp_array = array();
4838
        
4839
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4840
		{
4841
			$temp_array['airline_name'] = $row['airline_name'];
4842
			$temp_array['airline_icao'] = $row['airline_icao'];
4843
			$temp_array['airline_count'] = $row['airline_count'];
4844
			$temp_array['airline_country'] = $row['airline_country'];
4845
4846
			$airline_array[] = $temp_array;
4847
		}
4848
		return $airline_array;
4849
	}
4850
4851
	/**
4852
	* Gets all airline countries that have flown over by route
4853
	*
4854
	* @return Array the airline country list
4855
	*
4856
	*/
4857
	public function countAllAirlineCountriesByRoute($departure_airport_icao, $arrival_airport_icao,$filters= array())
4858
	{
4859
		$filter_query = $this->getFilter($filters,true,true);
4860
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4861
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4862
      
4863
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4864
		 		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) 
4865
				GROUP BY spotter_output.airline_country
4866
				ORDER BY airline_country_count DESC
4867
				LIMIT 10 OFFSET 0";
4868
      
4869
		
4870
		$sth = $this->db->prepare($query);
4871
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4872
      
4873
		$airline_country_array = array();
4874
		$temp_array = array();
4875
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4876
		{
4877
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4878
			$temp_array['airline_country'] = $row['airline_country'];
4879
4880
			$airline_country_array[] = $temp_array;
4881
		}
4882
4883
		return $airline_country_array;
4884
	}
4885
4886
4887
	/**
4888
	* Gets all airlines that have flown over by country
4889
	*
4890
	* @return Array the airline list
4891
	*
4892
	*/
4893
	public function countAllAirlinesByCountry($country,$filters = array())
4894
	{
4895
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4896
		$filter_query = $this->getFilter($filters,true,true);
4897
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4898
		 	    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
4899
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
4900
			    ORDER BY airline_count DESC";
4901
      
4902
		
4903
		$sth = $this->db->prepare($query);
4904
		$sth->execute(array(':country' => $country));
4905
4906
		$airline_array = array();
4907
		$temp_array = array();
4908
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4909
		{
4910
			$temp_array['airline_name'] = $row['airline_name'];
4911
			$temp_array['airline_icao'] = $row['airline_icao'];
4912
			$temp_array['airline_count'] = $row['airline_count'];
4913
			$temp_array['airline_country'] = $row['airline_country'];
4914
 
4915
			$airline_array[] = $temp_array;
4916
		}
4917
		return $airline_array;
4918
	}
4919
4920
4921
	/**
4922
	* Gets all airline countries that have flown over by country
4923
	*
4924
	* @return Array the airline country list
4925
	*
4926
	*/
4927
	public function countAllAirlineCountriesByCountry($country,$filters = array())
4928
	{
4929
		$filter_query = $this->getFilter($filters,true,true);
4930
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4931
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count, countries.iso3 AS airline_country_iso3
4932
			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) 
4933
			GROUP BY spotter_output.airline_country, countries.iso3
4934
			ORDER BY airline_country_count DESC
4935
			LIMIT 10 OFFSET 0";
4936
		
4937
		$sth = $this->db->prepare($query);
4938
		$sth->execute(array(':country' => $country));
4939
4940
		$airline_country_array = array();
4941
		$temp_array = array();
4942
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4943
		{
4944
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4945
			$temp_array['airline_country'] = $row['airline_country'];
4946
			$temp_array['airline_country_iso3'] = $row['airline_country_iso3'];
4947
			$airline_country_array[] = $temp_array;
4948
		}
4949
		return $airline_country_array;
4950
	}
4951
4952
4953
	/**
4954
	* Gets all airlines countries
4955
	*
4956
	* @return Array the airline country list
4957
	*
4958
	*/
4959
	public function countAllAirlineCountries($limit = true, $filters = array(), $year = '', $month = '', $day = '')
4960
	{
4961
		global $globalDBdriver;
4962
		$filter_query = $this->getFilter($filters,true,true);
4963
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count, countries.iso3 AS airline_country_iso3
4964
		 			FROM countries, spotter_output".$filter_query." countries.name = spotter_output.airline_country AND spotter_output.airline_country <> '' AND spotter_output.airline_country <> 'NA'";
4965
		$query_values = array();
4966
		if ($year != '') {
4967
			if ($globalDBdriver == 'mysql') {
4968
				$query .= " AND YEAR(spotter_output.date) = :year";
4969
				$query_values = array_merge($query_values,array(':year' => $year));
4970
			} else {
4971
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4972
				$query_values = array_merge($query_values,array(':year' => $year));
4973
			}
4974
		}
4975
		if ($month != '') {
4976
			if ($globalDBdriver == 'mysql') {
4977
				$query .= " AND MONTH(spotter_output.date) = :month";
4978
				$query_values = array_merge($query_values,array(':month' => $month));
4979
			} else {
4980
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4981
				$query_values = array_merge($query_values,array(':month' => $month));
4982
			}
4983
		}
4984
		if ($day != '') {
4985
			if ($globalDBdriver == 'mysql') {
4986
				$query .= " AND DAY(spotter_output.date) = :day";
4987
				$query_values = array_merge($query_values,array(':day' => $day));
4988
			} else {
4989
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4990
				$query_values = array_merge($query_values,array(':day' => $day));
4991
			}
4992
		}
4993
		$query .= " GROUP BY spotter_output.airline_country, countries.iso3
4994
					ORDER BY airline_country_count DESC";
4995
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4996
      
4997
		$sth = $this->db->prepare($query);
4998
		$sth->execute($query_values);
4999
5000
		$airline_array = array();
5001
		$temp_array = array();
5002
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5003
		{
5004
			$temp_array['airline_country_count'] = $row['airline_country_count'];
5005
			$temp_array['airline_country'] = $row['airline_country'];
5006
			$temp_array['airline_country_iso3'] = $row['airline_country_iso3'];
5007
5008
			$airline_array[] = $temp_array;
5009
		}
5010
		return $airline_array;
5011
	}
5012
5013
	/**
5014
	* Gets all number of flight over countries
5015
	*
5016
	* @return Array the airline country list
5017
	*
5018
	*/
5019
	public function countAllFlightOverCountries($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
5020
	{
5021
		global $globalDBdriver;
5022
		//$filter_query = $this->getFilter($filters,true,true);
5023
		$Connection= new Connection($this->db);
5024
		if (!$Connection->tableExists('countries')) return array();
5025
		/*
5026
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
5027
					FROM countries c, spotter_output s
5028
					WHERE Within(GeomFromText(CONCAT('POINT(',s.longitude,' ',s.latitude,')')), ogc_geom) ";
5029
		*/
5030
/*
5031
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
5032
					FROM countries c, spotter_live s
5033
					WHERE c.iso2 = s.over_country ";
5034
		$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 ";
5035
*/
5036
		require_once('class.SpotterLive.php');
5037
		$SpotterLive = new SpotterLive();
5038
		$filter_query = $SpotterLive->getFilter($filters,true,true);
5039
		$filter_query .= ' over_country IS NOT NULL';
5040
                if ($olderthanmonths > 0) {
5041
			if ($globalDBdriver == 'mysql') {
5042
				$filter_query .= ' AND spotter_live.date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5043
			} else {
5044
				$filter_query .= " AND spotter_live.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5045
			}
5046
		}
5047
                if ($sincedate != '') {
5048
            		if ($globalDBdriver == 'mysql') {
5049
				$filter_query .= " AND spotter_live.date > '".$sincedate."' ";
5050
			} else {
5051
				$filter_query .= " AND spotter_live.date > CAST('".$sincedate."' AS TIMESTAMP)";
5052
			}
5053
		}
5054
		$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 ";
5055
		$query .= "GROUP BY c.name,c.iso3,c.iso2 ORDER BY nb DESC";
5056
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5057
      
5058
		
5059
		$sth = $this->db->prepare($query);
5060
		$sth->execute();
5061
 
5062
		$flight_array = array();
5063
		$temp_array = array();
5064
        
5065
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5066
		{
5067
			$temp_array['flight_count'] = $row['nb'];
5068
			$temp_array['flight_country'] = $row['name'];
5069
			$temp_array['flight_country_iso3'] = $row['iso3'];
5070
			$temp_array['flight_country_iso2'] = $row['iso2'];
5071
			$flight_array[] = $temp_array;
5072
		}
5073
		return $flight_array;
5074
	}
5075
	
5076
	
5077
	/**
5078
	* Gets all aircraft types that have flown over
5079
	*
5080
	* @return Array the aircraft list
5081
	*
5082
	*/
5083
	public function countAllAircraftTypes($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
5084
	{
5085
		global $globalDBdriver;
5086
		$filter_query = $this->getFilter($filters,true,true);
5087
		$query  = "SELECT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
5088
		    FROM spotter_output ".$filter_query." spotter_output.aircraft_name  <> '' AND spotter_output.aircraft_icao  <> ''";
5089
		if ($olderthanmonths > 0) {
5090
			if ($globalDBdriver == 'mysql') {
5091
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5092
			} else {
5093
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5094
			}
5095
		}
5096
		if ($sincedate != '') {
5097
			if ($globalDBdriver == 'mysql') {
5098
				$query .= " AND spotter_output.date > '".$sincedate."'";
5099
			} else {
5100
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5101
			}
5102
		}
5103
		$query_values = array();
5104
		if ($year != '') {
5105
			if ($globalDBdriver == 'mysql') {
5106
				$query .= " AND YEAR(spotter_output.date) = :year";
5107
				$query_values = array_merge($query_values,array(':year' => $year));
5108
			} else {
5109
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5110
				$query_values = array_merge($query_values,array(':year' => $year));
5111
			}
5112
		}
5113
		if ($month != '') {
5114
			if ($globalDBdriver == 'mysql') {
5115
				$query .= " AND MONTH(spotter_output.date) = :month";
5116
				$query_values = array_merge($query_values,array(':month' => $month));
5117
			} else {
5118
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5119
				$query_values = array_merge($query_values,array(':month' => $month));
5120
			}
5121
		}
5122
		if ($day != '') {
5123
			if ($globalDBdriver == 'mysql') {
5124
				$query .= " AND DAY(spotter_output.date) = :day";
5125
				$query_values = array_merge($query_values,array(':day' => $day));
5126
			} else {
5127
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5128
				$query_values = array_merge($query_values,array(':day' => $day));
5129
			}
5130
		}
5131
5132
		$query .= " GROUP BY spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer ORDER BY aircraft_icao_count DESC";
5133
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5134
 
5135
		$sth = $this->db->prepare($query);
5136
		$sth->execute($query_values);
5137
5138
		$aircraft_array = array();
5139
		$temp_array = array();
5140
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5141
		{
5142
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5143
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5144
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5145
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5146
			$aircraft_array[] = $temp_array;
5147
		}
5148
		return $aircraft_array;
5149
	}
5150
5151
	/**
5152
	* Gets all aircraft types that have flown over by airline
5153
	*
5154
	* @return Array the aircraft list
5155
	*
5156
	*/
5157
	public function countAllAircraftTypesByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '',$month = '', $day = '')
5158
	{
5159
		global $globalDBdriver;
5160
		$filter_query = $this->getFilter($filters,true,true);
5161
		$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 
5162
		    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'";
5163
		if ($olderthanmonths > 0) {
5164
			if ($globalDBdriver == 'mysql') {
5165
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5166
			} else {
5167
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5168
			}
5169
		}
5170
		if ($sincedate != '') {
5171
			if ($globalDBdriver == 'mysql') {
5172
				$query .= " AND spotter_output.date > '".$sincedate."'";
5173
			} else {
5174
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5175
			}
5176
		}
5177
		$query_values = array();
5178
		if ($year != '') {
5179
			if ($globalDBdriver == 'mysql') {
5180
				$query .= " AND YEAR(spotter_output.date) = :year";
5181
				$query_values = array_merge($query_values,array(':year' => $year));
5182
			} else {
5183
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5184
				$query_values = array_merge($query_values,array(':year' => $year));
5185
			}
5186
		}
5187
		if ($month != '') {
5188
			if ($globalDBdriver == 'mysql') {
5189
				$query .= " AND MONTH(spotter_output.date) = :month";
5190
				$query_values = array_merge($query_values,array(':month' => $month));
5191
			} else {
5192
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5193
				$query_values = array_merge($query_values,array(':month' => $month));
5194
			}
5195
		}
5196
		if ($day != '') {
5197
			if ($globalDBdriver == 'mysql') {
5198
				$query .= " AND DAY(spotter_output.date) = :day";
5199
				$query_values = array_merge($query_values,array(':day' => $day));
5200
			} else {
5201
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5202
				$query_values = array_merge($query_values,array(':day' => $day));
5203
			}
5204
		}
5205
5206
		$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";
5207
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5208
 
5209
		$sth = $this->db->prepare($query);
5210
		$sth->execute($query_values);
5211
5212
		$aircraft_array = array();
5213
		$temp_array = array();
5214
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5215
		{
5216
			$temp_array['airline_icao'] = $row['airline_icao'];
5217
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5218
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5219
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5220
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5221
			$aircraft_array[] = $temp_array;
5222
		}
5223
		return $aircraft_array;
5224
	}
5225
5226
	/**
5227
	* Gets all aircraft types that have flown over by months
5228
	*
5229
	* @return Array the aircraft list
5230
	*
5231
	*/
5232
	public function countAllAircraftTypesByMonths($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
5233
	{
5234
		global $globalDBdriver;
5235
		$filter_query = $this->getFilter($filters,true,true);
5236
		$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 
5237
		    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' ";
5238
		if ($olderthanmonths > 0) {
5239
			if ($globalDBdriver == 'mysql') {
5240
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5241
			} else {
5242
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5243
			}
5244
		}
5245
		if ($sincedate != '') {
5246
			if ($globalDBdriver == 'mysql') {
5247
				$query .= "AND spotter_output.date > '".$sincedate."' ";
5248
			} else {
5249
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5250
			}
5251
		}
5252
5253
		$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";
5254
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5255
 
5256
		$sth = $this->db->prepare($query);
5257
		$sth->execute();
5258
5259
		$aircraft_array = array();
5260
		$temp_array = array();
5261
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5262
		{
5263
			//$temp_array['airline_icao'] = $row['airline_icao'];
5264
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5265
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5266
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5267
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5268
			$aircraft_array[] = $temp_array;
5269
		}
5270
		return $aircraft_array;
5271
	}
5272
5273
5274
	/**
5275
	* Gets all aircraft registration that have flown over by aircaft icao
5276
	*
5277
	* @return Array the aircraft list
5278
	*
5279
	*/
5280
	public function countAllAircraftRegistrationByAircraft($aircraft_icao,$filters = array())
5281
	{
5282
		$Image = new Image($this->db);
5283
		$filter_query = $this->getFilter($filters,true,true);
5284
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
5285
5286
		$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  
5287
				FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_icao = :aircraft_icao  
5288
				GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name  
5289
				ORDER BY registration_count DESC";
5290
5291
		$sth = $this->db->prepare($query);
5292
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
5293
5294
		$aircraft_array = array();
5295
		$temp_array = array();
5296
        
5297
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5298
		{
5299
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5300
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5301
			$temp_array['registration'] = $row['registration'];
5302
			$temp_array['airline_name'] = $row['airline_name'];
5303
			$temp_array['image_thumbnail'] = "";
5304
			if($row['registration'] != "")
5305
			{
5306
				$image_array = $Image->getSpotterImage($row['registration']);
5307
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5308
			}
5309
			$temp_array['registration_count'] = $row['registration_count'];
5310
5311
			$aircraft_array[] = $temp_array;
5312
		}
5313
		return $aircraft_array;
5314
	}
5315
5316
5317
	/**
5318
	* Gets all aircraft types that have flown over by airline icao
5319
	*
5320
	* @return Array the aircraft list
5321
	*
5322
	*/
5323
	public function countAllAircraftTypesByAirline($airline_icao,$filters = array())
5324
	{
5325
		$filter_query = $this->getFilter($filters,true,true);
5326
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5327
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5328
			    FROM spotter_output".$filter_query." spotter_output.aircraft_icao <> '' AND spotter_output.airline_icao = :airline_icao 
5329
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5330
			    ORDER BY aircraft_icao_count DESC";
5331
5332
		$sth = $this->db->prepare($query);
5333
		$sth->execute(array(':airline_icao' => $airline_icao));
5334
5335
		$aircraft_array = array();
5336
		$temp_array = array();
5337
5338
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5339
		{
5340
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5341
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5342
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5343
5344
			$aircraft_array[] = $temp_array;
5345
		}
5346
		return $aircraft_array;
5347
	}
5348
5349
5350
	/**
5351
	* Gets all aircraft registration that have flown over by airline icao
5352
	*
5353
	* @return Array the aircraft list
5354
	*
5355
	*/
5356
	public function countAllAircraftRegistrationByAirline($airline_icao,$filters = array())
5357
	{
5358
		$filter_query = $this->getFilter($filters,true,true);
5359
		$Image = new Image($this->db);
5360
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5361
5362
		$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 
5363
			    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.airline_icao = :airline_icao 
5364
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
5365
			    ORDER BY registration_count DESC";
5366
5367
		$sth = $this->db->prepare($query);
5368
		$sth->execute(array(':airline_icao' => $airline_icao));
5369
5370
		$aircraft_array = array();
5371
		$temp_array = array();
5372
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5373
		{
5374
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5375
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5376
			$temp_array['registration'] = $row['registration'];
5377
			$temp_array['airline_name'] = $row['airline_name'];
5378
			$temp_array['image_thumbnail'] = "";
5379
			if($row['registration'] != "")
5380
			{
5381
				$image_array = $Image->getSpotterImage($row['registration']);
5382
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5383
			}
5384
			$temp_array['registration_count'] = $row['registration_count'];
5385
5386
			$aircraft_array[] = $temp_array;
5387
		}
5388
		return $aircraft_array;
5389
	}
5390
5391
5392
	/**
5393
	* Gets all aircraft manufacturer that have flown over by airline icao
5394
	*
5395
	* @return Array the aircraft list
5396
	*
5397
	*/
5398
	public function countAllAircraftManufacturerByAirline($airline_icao,$filters = array())
5399
	{
5400
		$filter_query = $this->getFilter($filters,true,true);
5401
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5402
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5403
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.airline_icao = :airline_icao 
5404
				GROUP BY spotter_output.aircraft_manufacturer 
5405
				ORDER BY aircraft_manufacturer_count DESC";
5406
5407
		$sth = $this->db->prepare($query);
5408
		$sth->execute(array(':airline_icao' => $airline_icao));
5409
5410
		$aircraft_array = array();
5411
		$temp_array = array();
5412
5413
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5414
		{
5415
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5416
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5417
5418
			$aircraft_array[] = $temp_array;
5419
		}
5420
		return $aircraft_array;
5421
	}
5422
5423
5424
	/**
5425
	* Gets all aircraft types that have flown over by airline icao
5426
	*
5427
	* @return Array the aircraft list
5428
	*
5429
	*/
5430
	public function countAllAircraftTypesByAirport($airport_icao,$filters = array())
5431
	{
5432
		$filter_query = $this->getFilter($filters,true,true);
5433
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5434
5435
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5436
				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) 
5437
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5438
				ORDER BY aircraft_icao_count DESC";
5439
 
5440
		$sth = $this->db->prepare($query);
5441
		$sth->execute(array(':airport_icao' => $airport_icao));
5442
5443
		$aircraft_array = array();
5444
		$temp_array = array();
5445
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5446
		{
5447
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5448
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5449
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5450
5451
			$aircraft_array[] = $temp_array;
5452
		}
5453
		return $aircraft_array;
5454
	}
5455
5456
5457
	/**
5458
	* Gets all aircraft registration that have flown over by airport icao
5459
	*
5460
	* @return Array the aircraft list
5461
	*
5462
	*/
5463
	public function countAllAircraftRegistrationByAirport($airport_icao,$filters = array())
5464
	{
5465
		$filter_query = $this->getFilter($filters,true,true);
5466
		$Image = new Image($this->db);
5467
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5468
5469
		$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  
5470
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)   
5471
                    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5472
		    ORDER BY registration_count DESC";
5473
5474
		$sth = $this->db->prepare($query);
5475
		$sth->execute(array(':airport_icao' => $airport_icao));
5476
5477
		$aircraft_array = array();
5478
		$temp_array = array();
5479
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5480
		{
5481
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5482
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5483
			$temp_array['registration'] = $row['registration'];
5484
			$temp_array['airline_name'] = $row['airline_name'];
5485
			$temp_array['image_thumbnail'] = "";
5486
			if($row['registration'] != "")
5487
			{
5488
				$image_array = $Image->getSpotterImage($row['registration']);
5489
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5490
			}
5491
			$temp_array['registration_count'] = $row['registration_count'];
5492
			$aircraft_array[] = $temp_array;
5493
		}
5494
		return $aircraft_array;
5495
	}
5496
	
5497
	
5498
	/**
5499
	* Gets all aircraft manufacturer that have flown over by airport icao
5500
	*
5501
	* @return Array the aircraft list
5502
	*
5503
	*/
5504
	public function countAllAircraftManufacturerByAirport($airport_icao,$filters = array())
5505
	{
5506
		$filter_query = $this->getFilter($filters,true,true);
5507
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5508
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5509
                    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)  
5510
                    GROUP BY spotter_output.aircraft_manufacturer 
5511
					ORDER BY aircraft_manufacturer_count DESC";
5512
5513
		
5514
		$sth = $this->db->prepare($query);
5515
		$sth->execute(array(':airport_icao' => $airport_icao));
5516
5517
		$aircraft_array = array();
5518
		$temp_array = array();
5519
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5520
		{
5521
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5522
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5523
			$aircraft_array[] = $temp_array;
5524
		}
5525
		return $aircraft_array;
5526
	}
5527
5528
	/**
5529
	* Gets all aircraft types that have flown over by aircraft manufacturer
5530
	*
5531
	* @return Array the aircraft list
5532
	*
5533
	*/
5534
	public function countAllAircraftTypesByManufacturer($aircraft_manufacturer,$filters = array())
5535
	{
5536
		$filter_query = $this->getFilter($filters,true,true);
5537
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5538
5539
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5540
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
5541
                    GROUP BY spotter_output.aircraft_name 
5542
					ORDER BY aircraft_icao_count DESC";
5543
5544
		$sth = $this->db->prepare($query);
5545
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5546
		$aircraft_array = array();
5547
		$temp_array = array();
5548
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5549
		{
5550
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5551
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5552
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5553
			$aircraft_array[] = $temp_array;
5554
		}
5555
		return $aircraft_array;
5556
	}
5557
5558
5559
	/**
5560
	* Gets all aircraft registration that have flown over by aircaft manufacturer
5561
	*
5562
	* @return Array the aircraft list
5563
	*
5564
	*/
5565
	public function countAllAircraftRegistrationByManufacturer($aircraft_manufacturer, $filters = array())
5566
	{
5567
		$filter_query = $this->getFilter($filters,true,true);
5568
		$Image = new Image($this->db);
5569
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5570
5571
		$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   
5572
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
5573
                    GROUP BY spotter_output.registration 
5574
					ORDER BY registration_count DESC";
5575
5576
		
5577
		$sth = $this->db->prepare($query);
5578
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5579
		$aircraft_array = array();
5580
		$temp_array = array();
5581
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5582
		{
5583
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5584
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5585
			$temp_array['registration'] = $row['registration'];
5586
			$temp_array['airline_name'] = $row['airline_name'];
5587
			$temp_array['image_thumbnail'] = "";
5588
			if($row['registration'] != "")
5589
			{
5590
				$image_array = $Image->getSpotterImage($row['registration']);
5591
				$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5592
			}
5593
			$temp_array['registration_count'] = $row['registration_count'];
5594
			$aircraft_array[] = $temp_array;
5595
		}
5596
		return $aircraft_array;
5597
	}
5598
5599
	/**
5600
	* Gets all aircraft types that have flown over by date
5601
	*
5602
	* @return Array the aircraft list
5603
	*
5604
	*/
5605
	public function countAllAircraftTypesByDate($date,$filters = array())
5606
	{
5607
		global $globalTimezone, $globalDBdriver;
5608
		$filter_query = $this->getFilter($filters,true,true);
5609
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5610
		if ($globalTimezone != '') {
5611
			date_default_timezone_set($globalTimezone);
5612
			$datetime = new DateTime($date);
5613
			$offset = $datetime->format('P');
5614
		} else $offset = '+00:00';
5615
5616
		if ($globalDBdriver == 'mysql') {
5617
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5618
					FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
5619
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5620
					ORDER BY aircraft_icao_count DESC";
5621
		} else {
5622
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5623
					FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date
5624
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5625
					ORDER BY aircraft_icao_count DESC";
5626
		}
5627
		
5628
		$sth = $this->db->prepare($query);
5629
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5630
5631
		$aircraft_array = array();
5632
		$temp_array = array();
5633
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5634
		{
5635
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5636
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5637
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5638
5639
			$aircraft_array[] = $temp_array;
5640
		}
5641
		return $aircraft_array;
5642
	}
5643
5644
5645
	/**
5646
	* Gets all aircraft registration that have flown over by date
5647
	*
5648
	* @return Array the aircraft list
5649
	*
5650
	*/
5651
	public function countAllAircraftRegistrationByDate($date,$filters = array())
5652
	{
5653
		global $globalTimezone, $globalDBdriver;
5654
		$filter_query = $this->getFilter($filters,true,true);
5655
		$Image = new Image($this->db);
5656
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5657
		if ($globalTimezone != '') {
5658
			date_default_timezone_set($globalTimezone);
5659
			$datetime = new DateTime($date);
5660
			$offset = $datetime->format('P');
5661
		} else $offset = '+00:00';
5662
5663
		if ($globalDBdriver == 'mysql') {
5664
			$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 
5665
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5666
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5667
					ORDER BY registration_count DESC";
5668
		} else {
5669
			$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    
5670
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5671
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5672
					ORDER BY registration_count DESC";
5673
		}
5674
		
5675
		$sth = $this->db->prepare($query);
5676
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5677
5678
		$aircraft_array = array();
5679
		$temp_array = array();
5680
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5681
		{
5682
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5683
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5684
			$temp_array['registration'] = $row['registration'];
5685
			$temp_array['airline_name'] = $row['airline_name'];
5686
			$temp_array['image_thumbnail'] = "";
5687
			if($row['registration'] != "")
5688
			{
5689
				$image_array = $Image->getSpotterImage($row['registration']);
5690
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5691
			}
5692
			$temp_array['registration_count'] = $row['registration_count'];
5693
 
5694
			$aircraft_array[] = $temp_array;
5695
		}
5696
		return $aircraft_array;
5697
	}
5698
5699
5700
	/**
5701
	* Gets all aircraft manufacturer that have flown over by date
5702
	*
5703
	* @return Array the aircraft manufacturer list
5704
	*
5705
	*/
5706
	public function countAllAircraftManufacturerByDate($date,$filters = array())
5707
	{
5708
		global $globalTimezone, $globalDBdriver;
5709
		$filter_query = $this->getFilter($filters,true,true);
5710
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5711
		if ($globalTimezone != '') {
5712
			date_default_timezone_set($globalTimezone);
5713
			$datetime = new DateTime($date);
5714
			$offset = $datetime->format('P');
5715
		} else $offset = '+00:00';
5716
5717
		if ($globalDBdriver == 'mysql') {
5718
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5719
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5720
				GROUP BY spotter_output.aircraft_manufacturer 
5721
				ORDER BY aircraft_manufacturer_count DESC";
5722
		} else {
5723
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5724
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5725
				GROUP BY spotter_output.aircraft_manufacturer 
5726
				ORDER BY aircraft_manufacturer_count DESC";
5727
		}
5728
		
5729
		$sth = $this->db->prepare($query);
5730
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5731
5732
		$aircraft_array = array();
5733
		$temp_array = array();
5734
5735
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5736
		{
5737
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5738
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5739
5740
			$aircraft_array[] = $temp_array;
5741
		}
5742
		return $aircraft_array;
5743
	}
5744
5745
5746
	/**
5747
	* Gets all aircraft types that have flown over by ident/callsign
5748
	*
5749
	* @return Array the aircraft list
5750
	*
5751
	*/
5752
	public function countAllAircraftTypesByIdent($ident,$filters = array())
5753
	{
5754
		$filter_query = $this->getFilter($filters,true,true);
5755
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5756
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5757
				FROM spotter_output".$filter_query." spotter_output.ident = :ident 
5758
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao
5759
				ORDER BY aircraft_icao_count DESC";
5760
5761
		$sth = $this->db->prepare($query);
5762
		$sth->execute(array(':ident' => $ident));
5763
      
5764
		$aircraft_array = array();
5765
		$temp_array = array();
5766
5767
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5768
		{
5769
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5770
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5771
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5772
5773
			$aircraft_array[] = $temp_array;
5774
		}
5775
		return $aircraft_array;
5776
	}
5777
5778
	/**
5779
	* Gets all aircraft types that have flown over by pilot
5780
	*
5781
	* @return Array the aircraft list
5782
	*
5783
	*/
5784
	public function countAllAircraftTypesByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
5785
	{
5786
		global $globalDBdriver;
5787
		$filter_query = $this->getFilter($filters,true,true);
5788
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
5789
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5790
				FROM spotter_output".$filter_query." (spotter_output.pilot_id = :pilot OR spotter_output.pilot_name = :pilot)";
5791
		$query_values = array();
5792
		if ($year != '') {
5793
			if ($globalDBdriver == 'mysql') {
5794
				$query .= " AND YEAR(spotter_output.date) = :year";
5795
				$query_values = array_merge($query_values,array(':year' => $year));
5796
			} else {
5797
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5798
				$query_values = array_merge($query_values,array(':year' => $year));
5799
			}
5800
		}
5801
		if ($month != '') {
5802
			if ($globalDBdriver == 'mysql') {
5803
				$query .= " AND MONTH(spotter_output.date) = :month";
5804
				$query_values = array_merge($query_values,array(':month' => $month));
5805
			} else {
5806
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5807
				$query_values = array_merge($query_values,array(':month' => $month));
5808
			}
5809
		}
5810
		if ($day != '') {
5811
			if ($globalDBdriver == 'mysql') {
5812
				$query .= " AND DAY(spotter_output.date) = :day";
5813
				$query_values = array_merge($query_values,array(':day' => $day));
5814
			} else {
5815
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5816
				$query_values = array_merge($query_values,array(':day' => $day));
5817
			}
5818
		}
5819
5820
		$query .= " GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao
5821
				ORDER BY aircraft_icao_count DESC";
5822
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
5823
		$sth = $this->db->prepare($query);
5824
		$sth->execute($query_values);
5825
		return $sth->fetchAll(PDO::FETCH_ASSOC);
5826
	}
5827
5828
	/**
5829
	* Gets all aircraft types that have flown over by owner
5830
	*
5831
	* @return Array the aircraft list
5832
	*
5833
	*/
5834
	public function countAllAircraftTypesByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
5835
	{
5836
		global $globalDBdriver;
5837
		$filter_query = $this->getFilter($filters,true,true);
5838
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
5839
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
5840
				FROM spotter_output".$filter_query." spotter_output.owner_name = :owner";
5841
		$query_values = array();
5842
		if ($year != '') {
5843
			if ($globalDBdriver == 'mysql') {
5844
				$query .= " AND YEAR(spotter_output.date) = :year";
5845
				$query_values = array_merge($query_values,array(':year' => $year));
5846
			} else {
5847
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5848
				$query_values = array_merge($query_values,array(':year' => $year));
5849
			}
5850
		}
5851
		if ($month != '') {
5852
			if ($globalDBdriver == 'mysql') {
5853
				$query .= " AND MONTH(spotter_output.date) = :month";
5854
				$query_values = array_merge($query_values,array(':month' => $month));
5855
			} else {
5856
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5857
				$query_values = array_merge($query_values,array(':month' => $month));
5858
			}
5859
		}
5860
		if ($day != '') {
5861
			if ($globalDBdriver == 'mysql') {
5862
				$query .= " AND DAY(spotter_output.date) = :day";
5863
				$query_values = array_merge($query_values,array(':day' => $day));
5864
			} else {
5865
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5866
				$query_values = array_merge($query_values,array(':day' => $day));
5867
			}
5868
		}
5869
		$query .= " GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.aircraft_icao
5870
				ORDER BY aircraft_icao_count DESC";
5871
		$query_values = array_merge($query_values,array(':owner' => $owner));
5872
		$sth = $this->db->prepare($query);
5873
		$sth->execute($query_values);
5874
		return $sth->fetchAll(PDO::FETCH_ASSOC);
5875
	}
5876
5877
	/**
5878
	* Gets all aircraft registration that have flown over by ident/callsign
5879
	*
5880
	* @return Array the aircraft list
5881
	*
5882
	*/
5883
	public function countAllAircraftRegistrationByIdent($ident,$filters = array())
5884
	{
5885
		$filter_query = $this->getFilter($filters,true,true);
5886
		$Image = new Image($this->db);
5887
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5888
5889
		$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  
5890
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.ident = :ident   
5891
                    GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
5892
		    ORDER BY registration_count DESC";
5893
5894
		
5895
		$sth = $this->db->prepare($query);
5896
		$sth->execute(array(':ident' => $ident));
5897
      
5898
		$aircraft_array = array();
5899
		$temp_array = array();
5900
        
5901
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5902
		{
5903
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5904
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5905
			$temp_array['registration'] = $row['registration'];
5906
			$temp_array['airline_name'] = $row['airline_name'];
5907
			$temp_array['image_thumbnail'] = "";
5908
			if($row['registration'] != "")
5909
			{
5910
				$image_array = $Image->getSpotterImage($row['registration']);
5911
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5912
				else $temp_array['image_thumbnail'] = '';
5913
			}
5914
			$temp_array['registration_count'] = $row['registration_count'];
5915
			$aircraft_array[] = $temp_array;
5916
		}
5917
		return $aircraft_array;
5918
	}
5919
5920
	/**
5921
	* Gets all aircraft registration that have flown over by owner
5922
	*
5923
	* @return Array the aircraft list
5924
	*
5925
	*/
5926
	public function countAllAircraftRegistrationByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
5927
	{
5928
		global $globalDBdriver;
5929
		$filter_query = $this->getFilter($filters,true,true);
5930
		$Image = new Image($this->db);
5931
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
5932
5933
		$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  
5934
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.owner_name = :owner";
5935
		$query_values = array();
5936
		if ($year != '') {
5937
			if ($globalDBdriver == 'mysql') {
5938
				$query .= " AND YEAR(spotter_output.date) = :year";
5939
				$query_values = array_merge($query_values,array(':year' => $year));
5940
			} else {
5941
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5942
				$query_values = array_merge($query_values,array(':year' => $year));
5943
			}
5944
		}
5945
		if ($month != '') {
5946
			if ($globalDBdriver == 'mysql') {
5947
				$query .= " AND MONTH(spotter_output.date) = :month";
5948
				$query_values = array_merge($query_values,array(':month' => $month));
5949
			} else {
5950
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5951
				$query_values = array_merge($query_values,array(':month' => $month));
5952
			}
5953
		}
5954
		if ($day != '') {
5955
			if ($globalDBdriver == 'mysql') {
5956
				$query .= " AND DAY(spotter_output.date) = :day";
5957
				$query_values = array_merge($query_values,array(':day' => $day));
5958
			} else {
5959
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5960
				$query_values = array_merge($query_values,array(':day' => $day));
5961
			}
5962
		}
5963
		$query_values = array_merge($query_values,array(':owner' => $owner));
5964
5965
		$query .= " GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.airline_name
5966
		    ORDER BY registration_count DESC";
5967
5968
		
5969
		$sth = $this->db->prepare($query);
5970
		$sth->execute($query_values);
5971
      
5972
		$aircraft_array = array();
5973
		$temp_array = array();
5974
        
5975
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5976
		{
5977
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5978
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5979
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5980
			$temp_array['registration'] = $row['registration'];
5981
			$temp_array['airline_name'] = $row['airline_name'];
5982
			$temp_array['image_thumbnail'] = "";
5983
			if($row['registration'] != "")
5984
			{
5985
				$image_array = $Image->getSpotterImage($row['registration']);
5986
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5987
				else $temp_array['image_thumbnail'] = '';
5988
			}
5989
			$temp_array['registration_count'] = $row['registration_count'];
5990
			$aircraft_array[] = $temp_array;
5991
		}
5992
		return $aircraft_array;
5993
	}
5994
5995
	/**
5996
	* Gets all aircraft registration that have flown over by pilot
5997
	*
5998
	* @return Array the aircraft list
5999
	*
6000
	*/
6001
	public function countAllAircraftRegistrationByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
6002
	{
6003
		global $globalDBdriver;
6004
		$filter_query = $this->getFilter($filters,true,true);
6005
		$Image = new Image($this->db);
6006
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
6007
6008
		$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  
6009
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot)";
6010
		$query_values = array();
6011
		if ($year != '') {
6012
			if ($globalDBdriver == 'mysql') {
6013
				$query .= " AND YEAR(spotter_output.date) = :year";
6014
				$query_values = array_merge($query_values,array(':year' => $year));
6015
			} else {
6016
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6017
				$query_values = array_merge($query_values,array(':year' => $year));
6018
			}
6019
		}
6020
		if ($month != '') {
6021
			if ($globalDBdriver == 'mysql') {
6022
				$query .= " AND MONTH(spotter_output.date) = :month";
6023
				$query_values = array_merge($query_values,array(':month' => $month));
6024
			} else {
6025
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6026
				$query_values = array_merge($query_values,array(':month' => $month));
6027
			}
6028
		}
6029
		if ($day != '') {
6030
			if ($globalDBdriver == 'mysql') {
6031
				$query .= " AND DAY(spotter_output.date) = :day";
6032
				$query_values = array_merge($query_values,array(':day' => $day));
6033
			} else {
6034
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6035
				$query_values = array_merge($query_values,array(':day' => $day));
6036
			}
6037
		}
6038
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
6039
6040
		$query .= " GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.airline_name
6041
		    ORDER BY registration_count DESC";
6042
6043
		
6044
		$sth = $this->db->prepare($query);
6045
		$sth->execute($query_values);
6046
      
6047
		$aircraft_array = array();
6048
		$temp_array = array();
6049
        
6050
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6051
		{
6052
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6053
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6054
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6055
			$temp_array['registration'] = $row['registration'];
6056
			$temp_array['airline_name'] = $row['airline_name'];
6057
			$temp_array['image_thumbnail'] = "";
6058
			if($row['registration'] != "")
6059
			{
6060
				$image_array = $Image->getSpotterImage($row['registration']);
6061
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6062
				else $temp_array['image_thumbnail'] = '';
6063
			}
6064
			$temp_array['registration_count'] = $row['registration_count'];
6065
			$aircraft_array[] = $temp_array;
6066
		}
6067
		return $aircraft_array;
6068
	}
6069
6070
6071
	/**
6072
	* Gets all aircraft manufacturer that have flown over by ident/callsign
6073
	*
6074
	* @return Array the aircraft manufacturer list
6075
	*
6076
	*/
6077
	public function countAllAircraftManufacturerByIdent($ident,$filters = array())
6078
	{
6079
		$filter_query = $this->getFilter($filters,true,true);
6080
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
6081
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6082
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.ident = :ident  
6083
                    GROUP BY spotter_output.aircraft_manufacturer 
6084
					ORDER BY aircraft_manufacturer_count DESC";
6085
6086
		
6087
		$sth = $this->db->prepare($query);
6088
		$sth->execute(array(':ident' => $ident));
6089
		$aircraft_array = array();
6090
		$temp_array = array();
6091
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6092
		{
6093
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6094
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6095
			$aircraft_array[] = $temp_array;
6096
		}
6097
		return $aircraft_array;
6098
	}
6099
6100
	/**
6101
	* Gets all aircraft manufacturer that have flown over by owner
6102
	*
6103
	* @return Array the aircraft manufacturer list
6104
	*
6105
	*/
6106
	public function countAllAircraftManufacturerByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
6107
	{
6108
		global $globalDBdriver;
6109
		$filter_query = $this->getFilter($filters,true,true);
6110
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
6111
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6112
		    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.owner_name = :owner";
6113
		$query_values = array();
6114
		if ($year != '') {
6115
			if ($globalDBdriver == 'mysql') {
6116
				$query .= " AND YEAR(spotter_output.date) = :year";
6117
				$query_values = array_merge($query_values,array(':year' => $year));
6118
			} else {
6119
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6120
				$query_values = array_merge($query_values,array(':year' => $year));
6121
			}
6122
		}
6123
		if ($month != '') {
6124
			if ($globalDBdriver == 'mysql') {
6125
				$query .= " AND MONTH(spotter_output.date) = :month";
6126
				$query_values = array_merge($query_values,array(':month' => $month));
6127
			} else {
6128
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6129
				$query_values = array_merge($query_values,array(':month' => $month));
6130
			}
6131
		}
6132
		if ($day != '') {
6133
			if ($globalDBdriver == 'mysql') {
6134
				$query .= " AND DAY(spotter_output.date) = :day";
6135
				$query_values = array_merge($query_values,array(':day' => $day));
6136
			} else {
6137
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6138
				$query_values = array_merge($query_values,array(':day' => $day));
6139
			}
6140
		}
6141
		$query_values = array_merge($query_values,array(':owner' => $owner));
6142
6143
		$query .= " GROUP BY spotter_output.aircraft_manufacturer 
6144
		    ORDER BY aircraft_manufacturer_count DESC";
6145
6146
		
6147
		$sth = $this->db->prepare($query);
6148
		$sth->execute($query_values);
6149
		return $sth->fetchAll(PDO::FETCH_ASSOC);
6150
	}
6151
6152
	/**
6153
	* Gets all aircraft manufacturer that have flown over by pilot
6154
	*
6155
	* @return Array the aircraft manufacturer list
6156
	*
6157
	*/
6158
	public function countAllAircraftManufacturerByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
6159
	{
6160
		global $globalDBdriver;
6161
		$filter_query = $this->getFilter($filters,true,true);
6162
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
6163
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6164
		    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot)";
6165
		$query_values = array();
6166
		if ($year != '') {
6167
			if ($globalDBdriver == 'mysql') {
6168
				$query .= " AND YEAR(spotter_output.date) = :year";
6169
				$query_values = array_merge($query_values,array(':year' => $year));
6170
			} else {
6171
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6172
				$query_values = array_merge($query_values,array(':year' => $year));
6173
			}
6174
		}
6175
		if ($month != '') {
6176
			if ($globalDBdriver == 'mysql') {
6177
				$query .= " AND MONTH(spotter_output.date) = :month";
6178
				$query_values = array_merge($query_values,array(':month' => $month));
6179
			} else {
6180
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6181
				$query_values = array_merge($query_values,array(':month' => $month));
6182
			}
6183
		}
6184
		if ($day != '') {
6185
			if ($globalDBdriver == 'mysql') {
6186
				$query .= " AND DAY(spotter_output.date) = :day";
6187
				$query_values = array_merge($query_values,array(':day' => $day));
6188
			} else {
6189
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6190
				$query_values = array_merge($query_values,array(':day' => $day));
6191
			}
6192
		}
6193
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
6194
6195
		$query .= " GROUP BY spotter_output.aircraft_manufacturer 
6196
		    ORDER BY aircraft_manufacturer_count DESC";
6197
6198
		
6199
		$sth = $this->db->prepare($query);
6200
		$sth->execute($query_values);
6201
		return $sth->fetchAll(PDO::FETCH_ASSOC);
6202
	}
6203
6204
6205
	/**
6206
	* Gets all aircraft types that have flown over by route
6207
	*
6208
	* @return Array the aircraft list
6209
	*
6210
	*/
6211
	public function countAllAircraftTypesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
6212
	{
6213
		$filter_query = $this->getFilter($filters,true,true);
6214
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
6215
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
6216
		
6217
6218
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
6219
                    FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
6220
                    GROUP BY spotter_output.aircraft_name 
6221
					ORDER BY aircraft_icao_count DESC";
6222
 
6223
		
6224
		$sth = $this->db->prepare($query);
6225
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
6226
		$aircraft_array = array();
6227
		$temp_array = array();
6228
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6229
		{
6230
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6231
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6232
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
6233
			$aircraft_array[] = $temp_array;
6234
		}
6235
		return $aircraft_array;
6236
	}
6237
6238
	/**
6239
	* Gets all aircraft registration that have flown over by route
6240
	*
6241
	* @return Array the aircraft list
6242
	*
6243
	*/
6244
	public function countAllAircraftRegistrationByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
6245
	{
6246
		$filter_query = $this->getFilter($filters,true,true);
6247
		$Image = new Image($this->db);
6248
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
6249
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
6250
6251
		$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   
6252
                    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)   
6253
                    GROUP BY spotter_output.registration 
6254
					ORDER BY registration_count DESC";
6255
6256
		
6257
		$sth = $this->db->prepare($query);
6258
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
6259
      
6260
		$aircraft_array = array();
6261
		$temp_array = array();
6262
        
6263
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6264
		{
6265
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6266
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6267
			$temp_array['registration'] = $row['registration'];
6268
			$temp_array['airline_name'] = $row['airline_name'];
6269
			$temp_array['image_thumbnail'] = "";
6270
			if($row['registration'] != "")
6271
			{
6272
				$image_array = $Image->getSpotterImage($row['registration']);
6273
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6274
			}
6275
			$temp_array['registration_count'] = $row['registration_count'];
6276
          
6277
			$aircraft_array[] = $temp_array;
6278
		}
6279
6280
		return $aircraft_array;
6281
	}
6282
	
6283
	
6284
	/**
6285
	* Gets all aircraft manufacturer that have flown over by route
6286
	*
6287
	* @return Array the aircraft manufacturer list
6288
	*
6289
	*/
6290
	public function countAllAircraftManufacturerByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
6291
	{
6292
		$filter_query = $this->getFilter($filters,true,true);
6293
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
6294
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
6295
6296
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6297
                    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) 
6298
                    GROUP BY spotter_output.aircraft_manufacturer 
6299
					ORDER BY aircraft_manufacturer_count DESC";
6300
6301
		
6302
		$sth = $this->db->prepare($query);
6303
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
6304
      
6305
		$aircraft_array = array();
6306
		$temp_array = array();
6307
        
6308
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6309
		{
6310
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6311
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6312
          
6313
			$aircraft_array[] = $temp_array;
6314
		}
6315
6316
		return $aircraft_array;
6317
	}	
6318
6319
	
6320
	
6321
	
6322
	/**
6323
	* Gets all aircraft types that have flown over by country
6324
	*
6325
	* @return Array the aircraft list
6326
	*
6327
	*/
6328
	public function countAllAircraftTypesByCountry($country,$filters = array())
6329
	{
6330
		$filter_query = $this->getFilter($filters,true,true);
6331
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6332
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
6333
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
6334
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
6335
			    ORDER BY aircraft_icao_count DESC";
6336
 
6337
		
6338
		$sth = $this->db->prepare($query);
6339
		$sth->execute(array(':country' => $country));
6340
      
6341
		$aircraft_array = array();
6342
		$temp_array = array();
6343
        
6344
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6345
		{
6346
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6347
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6348
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
6349
          
6350
			$aircraft_array[] = $temp_array;
6351
		}
6352
6353
		return $aircraft_array;
6354
	}
6355
6356
6357
	/**
6358
	* Gets all aircraft registration that have flown over by country
6359
	*
6360
	* @return Array the aircraft list
6361
	*
6362
	*/
6363
	public function countAllAircraftRegistrationByCountry($country,$filters = array())
6364
	{
6365
		$filter_query = $this->getFilter($filters,true,true);
6366
		$Image = new Image($this->db);
6367
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6368
		$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 
6369
			    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)    
6370
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
6371
			    ORDER BY registration_count DESC";
6372
6373
		
6374
		$sth = $this->db->prepare($query);
6375
		$sth->execute(array(':country' => $country));
6376
      
6377
		$aircraft_array = array();
6378
		$temp_array = array();
6379
        
6380
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6381
		{
6382
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6383
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6384
			$temp_array['registration'] = $row['registration'];
6385
			$temp_array['airline_name'] = $row['airline_name'];
6386
			$temp_array['image_thumbnail'] = "";
6387
			if($row['registration'] != "")
6388
			{
6389
				$image_array = $Image->getSpotterImage($row['registration']);
6390
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6391
			}
6392
			$temp_array['registration_count'] = $row['registration_count'];
6393
          
6394
			$aircraft_array[] = $temp_array;
6395
		}
6396
6397
		return $aircraft_array;
6398
	}
6399
	
6400
	
6401
	/**
6402
	* Gets all aircraft manufacturer that have flown over by country
6403
	*
6404
	* @return Array the aircraft manufacturer list
6405
	*
6406
	*/
6407
	public function countAllAircraftManufacturerByCountry($country,$filters = array())
6408
	{
6409
		$filter_query = $this->getFilter($filters,true,true);
6410
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6411
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6412
                    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) 
6413
                    GROUP BY spotter_output.aircraft_manufacturer 
6414
					ORDER BY aircraft_manufacturer_count DESC";
6415
6416
		
6417
		$sth = $this->db->prepare($query);
6418
		$sth->execute(array(':country' => $country));
6419
      
6420
		$aircraft_array = array();
6421
		$temp_array = array();
6422
        
6423
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6424
		{
6425
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6426
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6427
          
6428
			$aircraft_array[] = $temp_array;
6429
		}
6430
6431
		return $aircraft_array;
6432
	}	
6433
	
6434
	
6435
	
6436
	/**
6437
	* Gets all aircraft manufacturers that have flown over
6438
	*
6439
	* @return Array the aircraft list
6440
	*
6441
	*/
6442
	public function countAllAircraftManufacturers($filters = array(),$year = '',$month = '',$day = '')
6443
	{
6444
		global $globalDBdriver;
6445
		$filter_query = $this->getFilter($filters,true,true);
6446
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6447
                    FROM spotter_output ".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.aircraft_manufacturer <> 'Not Available'";
6448
                $query_values = array();
6449
		if ($year != '') {
6450
			if ($globalDBdriver == 'mysql') {
6451
				$query .= " AND YEAR(spotter_output.date) = :year";
6452
				$query_values = array_merge($query_values,array(':year' => $year));
6453
			} else {
6454
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6455
				$query_values = array_merge($query_values,array(':year' => $year));
6456
			}
6457
		}
6458
		if ($month != '') {
6459
			if ($globalDBdriver == 'mysql') {
6460
				$query .= " AND MONTH(spotter_output.date) = :month";
6461
				$query_values = array_merge($query_values,array(':month' => $month));
6462
			} else {
6463
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6464
				$query_values = array_merge($query_values,array(':month' => $month));
6465
			}
6466
		}
6467
		if ($day != '') {
6468
			if ($globalDBdriver == 'mysql') {
6469
				$query .= " AND DAY(spotter_output.date) = :day";
6470
				$query_values = array_merge($query_values,array(':day' => $day));
6471
			} else {
6472
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6473
				$query_values = array_merge($query_values,array(':day' => $day));
6474
			}
6475
		}
6476
		$query .= " GROUP BY spotter_output.aircraft_manufacturer
6477
					ORDER BY aircraft_manufacturer_count DESC
6478
					LIMIT 10";
6479
      
6480
		
6481
		$sth = $this->db->prepare($query);
6482
		$sth->execute($query_values);
6483
      
6484
		$manufacturer_array = array();
6485
		$temp_array = array();
6486
        
6487
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6488
		{
6489
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6490
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6491
          
6492
			$manufacturer_array[] = $temp_array;
6493
		}
6494
6495
		return $manufacturer_array;
6496
	}
6497
	
6498
	
6499
	
6500
	/**
6501
	* Gets all aircraft registrations that have flown over
6502
	*
6503
	* @return Array the aircraft list
6504
	*
6505
	*/
6506
	public function countAllAircraftRegistrations($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '', $month = '', $day = '')
6507
	{
6508
		global $globalDBdriver;
6509
		$Image = new Image($this->db);
6510
		$filter_query = $this->getFilter($filters,true,true);
6511
		$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    
6512
                    FROM spotter_output ".$filter_query." spotter_output.registration <> '' AND spotter_output.registration <> 'NA'";
6513
                if ($olderthanmonths > 0) {
6514
            		if ($globalDBdriver == 'mysql') {
6515
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6516
			} else {
6517
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6518
			}
6519
		}
6520
                if ($sincedate != '') {
6521
            		if ($globalDBdriver == 'mysql') {
6522
				$query .= " AND spotter_output.date > '".$sincedate."'";
6523
			} else {
6524
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6525
			}
6526
		}
6527
		$query_values = array();
6528
		if ($year != '') {
6529
			if ($globalDBdriver == 'mysql') {
6530
				$query .= " AND YEAR(spotter_output.date) = :year";
6531
				$query_values = array_merge($query_values,array(':year' => $year));
6532
			} else {
6533
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6534
				$query_values = array_merge($query_values,array(':year' => $year));
6535
			}
6536
		}
6537
		if ($month != '') {
6538
			if ($globalDBdriver == 'mysql') {
6539
				$query .= " AND MONTH(spotter_output.date) = :month";
6540
				$query_values = array_merge($query_values,array(':month' => $month));
6541
			} else {
6542
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6543
				$query_values = array_merge($query_values,array(':month' => $month));
6544
			}
6545
		}
6546
		if ($day != '') {
6547
			if ($globalDBdriver == 'mysql') {
6548
				$query .= " AND DAY(spotter_output.date) = :day";
6549
				$query_values = array_merge($query_values,array(':day' => $day));
6550
			} else {
6551
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6552
				$query_values = array_merge($query_values,array(':day' => $day));
6553
			}
6554
		}
6555
		$query .= " GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name ORDER BY aircraft_registration_count DESC";
6556
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6557
		
6558
		$sth = $this->db->prepare($query);
6559
		$sth->execute($query_values);
6560
      
6561
		$aircraft_array = array();
6562
		$temp_array = array();
6563
        
6564
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6565
		{
6566
			$temp_array['registration'] = $row['registration'];
6567
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
6568
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6569
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6570
			$temp_array['airline_name'] = $row['airline_name'];
6571
			$temp_array['image_thumbnail'] = "";
6572
			if($row['registration'] != "")
6573
			{
6574
				$image_array = $Image->getSpotterImage($row['registration']);
6575
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6576
			}
6577
          
6578
			$aircraft_array[] = $temp_array;
6579
		}
6580
6581
		return $aircraft_array;
6582
	}
6583
6584
6585
	/**
6586
	* Gets all aircraft registrations that have flown over
6587
	*
6588
	* @return Array the aircraft list
6589
	*
6590
	*/
6591
	public function countAllAircraftRegistrationsByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
6592
	{
6593
		global $globalDBdriver;
6594
		$filter_query = $this->getFilter($filters,true,true);
6595
		$Image = new Image($this->db);
6596
		$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    
6597
                    FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.registration <> '' AND spotter_output.registration <> 'NA' ";
6598
                if ($olderthanmonths > 0) {
6599
            		if ($globalDBdriver == 'mysql') {
6600
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6601
			} else {
6602
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6603
			}
6604
		}
6605
                if ($sincedate != '') {
6606
            		if ($globalDBdriver == 'mysql') {
6607
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6608
			} else {
6609
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6610
			}
6611
		}
6612
6613
		// if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6614
		//if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6615
                $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";
6616
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6617
		
6618
		$sth = $this->db->prepare($query);
6619
		$sth->execute();
6620
      
6621
		$aircraft_array = array();
6622
		$temp_array = array();
6623
        
6624
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6625
		{
6626
			$temp_array['registration'] = $row['registration'];
6627
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
6628
			$temp_array['airline_icao'] = $row['airline_icao'];
6629
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6630
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6631
			$temp_array['airline_name'] = $row['airline_name'];
6632
			$temp_array['image_thumbnail'] = "";
6633
			if($row['registration'] != "")
6634
			{
6635
				$image_array = $Image->getSpotterImage($row['registration']);
6636
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6637
			}
6638
          
6639
			$aircraft_array[] = $temp_array;
6640
		}
6641
6642
		return $aircraft_array;
6643
	}
6644
	
6645
	
6646
	/**
6647
	* Gets all departure airports of the airplanes that have flown over
6648
	*
6649
	* @return Array the airport list
6650
	*
6651
	*/
6652
	public function countAllDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
6653
	{
6654
		global $globalDBdriver;
6655
		$filter_query = $this->getFilter($filters,true,true);
6656
		$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
6657
				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 <> ''";
6658
                if ($olderthanmonths > 0) {
6659
            		if ($globalDBdriver == 'mysql') {
6660
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6661
			} else {
6662
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6663
			}
6664
                }
6665
                if ($sincedate != '') {
6666
            		if ($globalDBdriver == 'mysql') {
6667
				$query .= " AND spotter_output.date > '".$sincedate."'";
6668
			} else {
6669
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6670
			}
6671
		}
6672
		$query_values = array();
6673
		if ($year != '') {
6674
			if ($globalDBdriver == 'mysql') {
6675
				$query .= " AND YEAR(spotter_output.date) = :year";
6676
				$query_values = array_merge($query_values,array(':year' => $year));
6677
			} else {
6678
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6679
				$query_values = array_merge($query_values,array(':year' => $year));
6680
			}
6681
		}
6682
		if ($month != '') {
6683
			if ($globalDBdriver == 'mysql') {
6684
				$query .= " AND MONTH(spotter_output.date) = :month";
6685
				$query_values = array_merge($query_values,array(':month' => $month));
6686
			} else {
6687
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6688
				$query_values = array_merge($query_values,array(':month' => $month));
6689
			}
6690
		}
6691
		if ($day != '') {
6692
			if ($globalDBdriver == 'mysql') {
6693
				$query .= " AND DAY(spotter_output.date) = :day";
6694
				$query_values = array_merge($query_values,array(':day' => $day));
6695
			} else {
6696
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6697
				$query_values = array_merge($query_values,array(':day' => $day));
6698
			}
6699
		}
6700
                $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
6701
				ORDER BY airport_departure_icao_count DESC";
6702
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6703
6704
		$sth = $this->db->prepare($query);
6705
		$sth->execute($query_values);
6706
6707
		$airport_array = array();
6708
		$temp_array = array();
6709
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6710
		{
6711
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6712
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6713
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6714
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6715
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6716
			$temp_array['airport_departure_latitude'] = $row['latitude'];
6717
			$temp_array['airport_departure_longitude'] = $row['longitude'];
6718
			$airport_array[] = $temp_array;
6719
		}
6720
		return $airport_array;
6721
	}
6722
6723
	/**
6724
	* Gets all departure airports of the airplanes that have flown over
6725
	*
6726
	* @return Array the airport list
6727
	*
6728
	*/
6729
	public function countAllDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
6730
	{
6731
		global $globalDBdriver;
6732
		$filter_query = $this->getFilter($filters,true,true);
6733
		$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 
6734
			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 <> '' ";
6735
                if ($olderthanmonths > 0) {
6736
            		if ($globalDBdriver == 'mysql') {
6737
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6738
			} else {
6739
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6740
			}
6741
                }
6742
                if ($sincedate != '') {
6743
            		if ($globalDBdriver == 'mysql') {
6744
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6745
			} else {
6746
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6747
			}
6748
		}
6749
6750
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6751
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6752
                $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
6753
				ORDER BY airport_departure_icao_count DESC";
6754
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6755
      
6756
		$sth = $this->db->prepare($query);
6757
		$sth->execute();
6758
      
6759
		$airport_array = array();
6760
		$temp_array = array();
6761
        
6762
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6763
		{
6764
			$temp_array['airline_icao'] = $row['airline_icao'];
6765
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6766
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6767
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6768
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6769
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6770
          
6771
			$airport_array[] = $temp_array;
6772
		}
6773
		return $airport_array;
6774
	}
6775
6776
	/**
6777
	* Gets all detected departure airports of the airplanes that have flown over
6778
	*
6779
	* @return Array the airport list
6780
	*
6781
	*/
6782
	public function countAllDetectedDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
6783
	{
6784
		global $globalDBdriver;
6785
		$filter_query = $this->getFilter($filters,true,true);
6786
		$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
6787
				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";
6788
                if ($olderthanmonths > 0) {
6789
            		if ($globalDBdriver == 'mysql') {
6790
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6791
			} else {
6792
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6793
			}
6794
                }
6795
                if ($sincedate != '') {
6796
            		if ($globalDBdriver == 'mysql') {
6797
				$query .= " AND spotter_output.date > '".$sincedate."'";
6798
			} else {
6799
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6800
			}
6801
		}
6802
		$query_values = array();
6803
		if ($year != '') {
6804
			if ($globalDBdriver == 'mysql') {
6805
				$query .= " AND YEAR(spotter_output.date) = :year";
6806
				$query_values = array_merge($query_values,array(':year' => $year));
6807
			} else {
6808
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6809
				$query_values = array_merge($query_values,array(':year' => $year));
6810
			}
6811
		}
6812
		if ($month != '') {
6813
			if ($globalDBdriver == 'mysql') {
6814
				$query .= " AND MONTH(spotter_output.date) = :month";
6815
				$query_values = array_merge($query_values,array(':month' => $month));
6816
			} else {
6817
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6818
				$query_values = array_merge($query_values,array(':month' => $month));
6819
			}
6820
		}
6821
		if ($day != '') {
6822
			if ($globalDBdriver == 'mysql') {
6823
				$query .= " AND DAY(spotter_output.date) = :day";
6824
				$query_values = array_merge($query_values,array(':day' => $day));
6825
			} else {
6826
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6827
				$query_values = array_merge($query_values,array(':day' => $day));
6828
			}
6829
		}
6830
                $query .= " GROUP BY spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country, airport.latitude, airport.longitude
6831
				ORDER BY airport_departure_icao_count DESC";
6832
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6833
    		//echo $query;
6834
		$sth = $this->db->prepare($query);
6835
		$sth->execute($query_values);
6836
      
6837
		$airport_array = array();
6838
		$temp_array = array();
6839
        
6840
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6841
		{
6842
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6843
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6844
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6845
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6846
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6847
			$temp_array['airport_departure_latitude'] = $row['departure_airport_latitude'];
6848
			$temp_array['airport_departure_longitude'] = $row['departure_airport_longitude'];
6849
          
6850
			$airport_array[] = $temp_array;
6851
		}
6852
		return $airport_array;
6853
	}
6854
	
6855
	/**
6856
	* Gets all detected departure airports of the airplanes that have flown over
6857
	*
6858
	* @return Array the airport list
6859
	*
6860
	*/
6861
	public function countAllDetectedDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
6862
	{
6863
		global $globalDBdriver;
6864
		$filter_query = $this->getFilter($filters,true,true);
6865
		$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
6866
				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 ";
6867
                if ($olderthanmonths > 0) {
6868
            		if ($globalDBdriver == 'mysql') {
6869
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6870
			} else {
6871
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6872
			}
6873
                }
6874
                if ($sincedate != '') {
6875
            		if ($globalDBdriver == 'mysql') {
6876
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6877
			} else {
6878
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
6879
			}
6880
		}
6881
6882
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6883
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6884
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
6885
				ORDER BY airport_departure_icao_count DESC";
6886
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6887
      
6888
		$sth = $this->db->prepare($query);
6889
		$sth->execute();
6890
      
6891
		$airport_array = array();
6892
		$temp_array = array();
6893
        
6894
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6895
		{
6896
			$temp_array['airline_icao'] = $row['airline_icao'];
6897
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6898
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6899
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6900
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6901
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6902
          
6903
			$airport_array[] = $temp_array;
6904
		}
6905
		return $airport_array;
6906
	}	
6907
	
6908
	/**
6909
	* Gets all departure airports of the airplanes that have flown over based on an airline icao
6910
	*
6911
	* @return Array the airport list
6912
	*
6913
	*/
6914
	public function countAllDepartureAirportsByAirline($airline_icao,$filters = array())
6915
	{
6916
		$filter_query = $this->getFilter($filters,true,true);
6917
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6918
		$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 
6919
			    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 <> '' 
6920
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6921
			    ORDER BY airport_departure_icao_count DESC";
6922
      
6923
		
6924
		$sth = $this->db->prepare($query);
6925
		$sth->execute(array(':airline_icao' => $airline_icao));
6926
      
6927
		$airport_array = array();
6928
		$temp_array = array();
6929
        
6930
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6931
		{
6932
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6933
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6934
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6935
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6936
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6937
          
6938
			$airport_array[] = $temp_array;
6939
		}
6940
6941
		return $airport_array;
6942
	}
6943
	
6944
	
6945
	
6946
	/**
6947
	* Gets all departure airports by country of the airplanes that have flown over based on an airline icao
6948
	*
6949
	* @return Array the airport list
6950
	*
6951
	*/
6952
	public function countAllDepartureAirportCountriesByAirline($airline_icao,$filters = array())
6953
	{
6954
		$filter_query = $this->getFilter($filters,true,true);
6955
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6956
		$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 
6957
			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 
6958
			GROUP BY spotter_output.departure_airport_country, countries.iso3
6959
			ORDER BY airport_departure_country_count DESC";
6960
		
6961
		$sth = $this->db->prepare($query);
6962
		$sth->execute(array(':airline_icao' => $airline_icao));
6963
      
6964
		$airport_array = array();
6965
		$temp_array = array();
6966
        
6967
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6968
		{
6969
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6970
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6971
			$temp_array['departure_airport_country_iso3'] = $row['departure_airport_country_iso3'];
6972
			$airport_array[] = $temp_array;
6973
		}
6974
		return $airport_array;
6975
	}
6976
	
6977
	
6978
	
6979
	/**
6980
	* Gets all departure airports of the airplanes that have flown over based on an aircraft icao
6981
	*
6982
	* @return Array the airport list
6983
	*
6984
	*/
6985
	public function countAllDepartureAirportsByAircraft($aircraft_icao,$filters = array())
6986
	{
6987
		$filter_query = $this->getFilter($filters,true,true);
6988
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
6989
		$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 
6990
			    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 <> '' 
6991
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6992
			    ORDER BY airport_departure_icao_count DESC";
6993
      
6994
		
6995
		$sth = $this->db->prepare($query);
6996
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
6997
      
6998
		$airport_array = array();
6999
		$temp_array = array();
7000
        
7001
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7002
		{
7003
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7004
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7005
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7006
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7007
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7008
          
7009
			$airport_array[] = $temp_array;
7010
		}
7011
7012
		return $airport_array;
7013
	}
7014
	
7015
	
7016
	/**
7017
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
7018
	*
7019
	* @return Array the airport list
7020
	*
7021
	*/
7022
	public function countAllDepartureAirportCountriesByAircraft($aircraft_icao,$filters = array())
7023
	{
7024
		$filter_query = $this->getFilter($filters,true,true);
7025
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7026
		$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 
7027
			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
7028
			GROUP BY spotter_output.departure_airport_country, countries.iso3
7029
			ORDER BY airport_departure_country_count DESC";
7030
      
7031
		
7032
		$sth = $this->db->prepare($query);
7033
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7034
      
7035
		$airport_array = array();
7036
		$temp_array = array();
7037
        
7038
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7039
		{
7040
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7041
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7042
			$temp_array['departure_airport_country_iso3'] = $row['departure_airport_country_iso3'];
7043
			$airport_array[] = $temp_array;
7044
		}
7045
7046
		return $airport_array;
7047
	}
7048
	
7049
	
7050
	/**
7051
	* Gets all departure airports of the airplanes that have flown over based on an aircraft registration
7052
	*
7053
	* @return Array the airport list
7054
	*
7055
	*/
7056
	public function countAllDepartureAirportsByRegistration($registration,$filters = array())
7057
	{
7058
		$filter_query = $this->getFilter($filters,true,true);
7059
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
7060
		$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 
7061
			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 <> '' 
7062
                    GROUP BY spotter_output.departure_airport_icao
7063
					ORDER BY airport_departure_icao_count DESC";
7064
      
7065
		
7066
		$sth = $this->db->prepare($query);
7067
		$sth->execute(array(':registration' => $registration));
7068
      
7069
		$airport_array = array();
7070
		$temp_array = array();
7071
        
7072
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7073
		{
7074
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7075
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7076
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7077
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7078
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7079
          
7080
			$airport_array[] = $temp_array;
7081
		}
7082
7083
		return $airport_array;
7084
	}
7085
	
7086
	
7087
	/**
7088
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft registration
7089
	*
7090
	* @return Array the airport list
7091
	*
7092
	*/
7093
	public function countAllDepartureAirportCountriesByRegistration($registration,$filters = array())
7094
	{
7095
		$filter_query = $this->getFilter($filters,true,true);
7096
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
7097
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7098
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.registration = :registration 
7099
                    GROUP BY spotter_output.departure_airport_country
7100
					ORDER BY airport_departure_country_count DESC";
7101
      
7102
		
7103
		$sth = $this->db->prepare($query);
7104
		$sth->execute(array(':registration' => $registration));
7105
      
7106
		$airport_array = array();
7107
		$temp_array = array();
7108
        
7109
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7110
		{
7111
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7112
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7113
          
7114
			$airport_array[] = $temp_array;
7115
		}
7116
7117
		return $airport_array;
7118
	}
7119
	
7120
	
7121
	/**
7122
	* Gets all departure airports of the airplanes that have flown over based on an arrivl airport icao
7123
	*
7124
	* @return Array the airport list
7125
	*
7126
	*/
7127
	public function countAllDepartureAirportsByAirport($airport_icao,$filters = array())
7128
	{
7129
		$filter_query = $this->getFilter($filters,true,true);
7130
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7131
		$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 
7132
			    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 <> '' 
7133
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7134
			    ORDER BY airport_departure_icao_count DESC";
7135
      
7136
		
7137
		$sth = $this->db->prepare($query);
7138
		$sth->execute(array(':airport_icao' => $airport_icao));
7139
      
7140
		$airport_array = array();
7141
		$temp_array = array();
7142
        
7143
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7144
		{
7145
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7146
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7147
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7148
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7149
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7150
          
7151
			$airport_array[] = $temp_array;
7152
		}
7153
7154
		return $airport_array;
7155
	}
7156
	
7157
	
7158
	/**
7159
	* Gets all departure airports by country of the airplanes that have flown over based on an airport icao
7160
	*
7161
	* @return Array the airport list
7162
	*
7163
	*/
7164
	public function countAllDepartureAirportCountriesByAirport($airport_icao,$filters = array())
7165
	{
7166
		$filter_query = $this->getFilter($filters,true,true);
7167
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7168
		$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 
7169
			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 
7170
			GROUP BY spotter_output.departure_airport_country, countries.iso3
7171
			ORDER BY airport_departure_country_count DESC";
7172
		
7173
		$sth = $this->db->prepare($query);
7174
		$sth->execute(array(':airport_icao' => $airport_icao));
7175
      
7176
		$airport_array = array();
7177
		$temp_array = array();
7178
        
7179
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7180
		{
7181
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7182
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7183
			$temp_array['departure_airport_country_iso3'] = $row['departure_airport_country_iso3'];
7184
			$airport_array[] = $temp_array;
7185
		}
7186
		return $airport_array;
7187
	}
7188
	
7189
	
7190
	
7191
	/**
7192
	* Gets all departure airports of the airplanes that have flown over based on an aircraft manufacturer
7193
	*
7194
	* @return Array the airport list
7195
	*
7196
	*/
7197
	public function countAllDepartureAirportsByManufacturer($aircraft_manufacturer,$filters = array())
7198
	{
7199
		$filter_query = $this->getFilter($filters,true,true);
7200
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7201
		$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 
7202
			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 <> '' 
7203
                    GROUP BY spotter_output.departure_airport_icao
7204
					ORDER BY airport_departure_icao_count DESC";
7205
      
7206
		
7207
		$sth = $this->db->prepare($query);
7208
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7209
      
7210
		$airport_array = array();
7211
		$temp_array = array();
7212
        
7213
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7214
		{
7215
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7216
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7217
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7218
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7219
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7220
          
7221
			$airport_array[] = $temp_array;
7222
		}
7223
7224
		return $airport_array;
7225
	}
7226
	
7227
	
7228
	/**
7229
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft manufacturer
7230
	*
7231
	* @return Array the airport list
7232
	*
7233
	*/
7234
	public function countAllDepartureAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
7235
	{
7236
		$filter_query = $this->getFilter($filters,true,true);
7237
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7238
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7239
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
7240
                    GROUP BY spotter_output.departure_airport_country
7241
					ORDER BY airport_departure_country_count DESC";
7242
      
7243
		
7244
		$sth = $this->db->prepare($query);
7245
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7246
      
7247
		$airport_array = array();
7248
		$temp_array = array();
7249
        
7250
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7251
		{
7252
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7253
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7254
          
7255
			$airport_array[] = $temp_array;
7256
		}
7257
7258
		return $airport_array;
7259
	}
7260
	
7261
	
7262
	/**
7263
	* Gets all departure airports of the airplanes that have flown over based on a date
7264
	*
7265
	* @return Array the airport list
7266
	*
7267
	*/
7268
	public function countAllDepartureAirportsByDate($date,$filters = array())
7269
	{
7270
		global $globalTimezone, $globalDBdriver;
7271
		$filter_query = $this->getFilter($filters,true,true);
7272
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7273
		if ($globalTimezone != '') {
7274
			date_default_timezone_set($globalTimezone);
7275
			$datetime = new DateTime($date);
7276
			$offset = $datetime->format('P');
7277
		} else $offset = '+00:00';
7278
7279
		if ($globalDBdriver == 'mysql') {
7280
			$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 
7281
					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
7282
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7283
					ORDER BY airport_departure_icao_count DESC";
7284
		} else {
7285
			$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 
7286
					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
7287
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7288
					ORDER BY airport_departure_icao_count DESC";
7289
		}
7290
7291
		$sth = $this->db->prepare($query);
7292
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7293
      
7294
		$airport_array = array();
7295
		$temp_array = array();
7296
        
7297
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7298
		{
7299
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7300
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7301
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7302
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7303
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7304
          
7305
			$airport_array[] = $temp_array;
7306
		}
7307
		return $airport_array;
7308
	}
7309
	
7310
	
7311
	
7312
	/**
7313
	* Gets all departure airports by country of the airplanes that have flown over based on a date
7314
	*
7315
	* @return Array the airport list
7316
	*
7317
	*/
7318
	public function countAllDepartureAirportCountriesByDate($date,$filters = array())
7319
	{
7320
		global $globalTimezone, $globalDBdriver;
7321
		$filter_query = $this->getFilter($filters,true,true);
7322
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7323
		if ($globalTimezone != '') {
7324
			date_default_timezone_set($globalTimezone);
7325
			$datetime = new DateTime($date);
7326
			$offset = $datetime->format('P');
7327
		} else $offset = '+00:00';
7328
7329
		if ($globalDBdriver == 'mysql') {
7330
			$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
7331
					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 
7332
					GROUP BY spotter_output.departure_airport_country, countries.iso3
7333
					ORDER BY airport_departure_country_count DESC";
7334
		} else {
7335
			$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 
7336
					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 
7337
					GROUP BY spotter_output.departure_airport_country, countries.iso3
7338
					ORDER BY airport_departure_country_count DESC";
7339
		}
7340
		
7341
		$sth = $this->db->prepare($query);
7342
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7343
      
7344
		$airport_array = array();
7345
		$temp_array = array();
7346
        
7347
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7348
		{
7349
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7350
			$temp_array['departure_airport_country_iso3'] = $row['departure_airport_country_iso3'];
7351
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7352
          
7353
			$airport_array[] = $temp_array;
7354
		}
7355
		return $airport_array;
7356
	}
7357
	
7358
	
7359
	
7360
	/**
7361
	* Gets all departure airports of the airplanes that have flown over based on a ident/callsign
7362
	*
7363
	* @return Array the airport list
7364
	*
7365
	*/
7366
	public function countAllDepartureAirportsByIdent($ident,$filters = array())
7367
	{
7368
		$filter_query = $this->getFilter($filters,true,true);
7369
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7370
		$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 
7371
		    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 
7372
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7373
		    ORDER BY airport_departure_icao_count DESC";
7374
      
7375
		
7376
		$sth = $this->db->prepare($query);
7377
		$sth->execute(array(':ident' => $ident));
7378
      
7379
		$airport_array = array();
7380
		$temp_array = array();
7381
        
7382
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7383
		{
7384
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7385
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7386
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7387
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7388
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7389
          
7390
			$airport_array[] = $temp_array;
7391
		}
7392
7393
		return $airport_array;
7394
	}
7395
	
7396
	/**
7397
	* Gets all departure airports of the airplanes that have flown over based on a owner
7398
	*
7399
	* @return Array the airport list
7400
	*
7401
	*/
7402
	public function countAllDepartureAirportsByOwner($owner,$filters = array())
7403
	{
7404
		$filter_query = $this->getFilter($filters,true,true);
7405
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
7406
		$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 
7407
		    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 
7408
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7409
		    ORDER BY airport_departure_icao_count DESC";
7410
      
7411
		
7412
		$sth = $this->db->prepare($query);
7413
		$sth->execute(array(':owner' => $owner));
7414
      
7415
		$airport_array = array();
7416
		$temp_array = array();
7417
        
7418
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7419
		{
7420
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7421
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7422
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7423
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7424
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7425
          
7426
			$airport_array[] = $temp_array;
7427
		}
7428
7429
		return $airport_array;
7430
	}
7431
	
7432
	/**
7433
	* Gets all departure airports of the airplanes that have flown over based on a pilot
7434
	*
7435
	* @return Array the airport list
7436
	*
7437
	*/
7438
	public function countAllDepartureAirportsByPilot($pilot,$filters = array())
7439
	{
7440
		$filter_query = $this->getFilter($filters,true,true);
7441
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
7442
		$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 
7443
		    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) 
7444
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7445
		    ORDER BY airport_departure_icao_count DESC";
7446
		
7447
		$sth = $this->db->prepare($query);
7448
		$sth->execute(array(':pilot' => $pilot));
7449
      
7450
		$airport_array = array();
7451
		$temp_array = array();
7452
        
7453
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7454
		{
7455
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7456
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7457
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7458
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7459
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7460
          
7461
			$airport_array[] = $temp_array;
7462
		}
7463
7464
		return $airport_array;
7465
	}
7466
	
7467
	
7468
	
7469
	/**
7470
	* Gets all departure airports by country of the airplanes that have flown over based on a callsign/ident
7471
	*
7472
	* @return Array the airport list
7473
	*
7474
	*/
7475
	public function countAllDepartureAirportCountriesByIdent($ident,$filters = array())
7476
	{
7477
		$filter_query = $this->getFilter($filters,true,true);
7478
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7479
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7480
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.ident = :ident 
7481
                    GROUP BY spotter_output.departure_airport_country
7482
					ORDER BY airport_departure_country_count DESC";
7483
      
7484
		
7485
		$sth = $this->db->prepare($query);
7486
		$sth->execute(array(':ident' => $ident));
7487
      
7488
		$airport_array = array();
7489
		$temp_array = array();
7490
        
7491
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7492
		{
7493
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7494
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7495
          
7496
			$airport_array[] = $temp_array;
7497
		}
7498
7499
		return $airport_array;
7500
	}
7501
	
7502
	/**
7503
	* Gets all departure airports by country of the airplanes that have flown over based on owner
7504
	*
7505
	* @return Array the airport list
7506
	*
7507
	*/
7508
	public function countAllDepartureAirportCountriesByOwner($owner,$filters = array())
7509
	{
7510
		$filter_query = $this->getFilter($filters,true,true);
7511
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
7512
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7513
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.owner_name = :owner 
7514
			GROUP BY spotter_output.departure_airport_country
7515
			ORDER BY airport_departure_country_count DESC";
7516
		
7517
		$sth = $this->db->prepare($query);
7518
		$sth->execute(array(':owner' => $owner));
7519
		return $sth->fetchAll(PDO::FETCH_ASSOC);
7520
	}
7521
	
7522
	/**
7523
	* Gets all departure airports by country of the airplanes that have flown over based on pilot
7524
	*
7525
	* @return Array the airport list
7526
	*
7527
	*/
7528
	public function countAllDepartureAirportCountriesByPilot($pilot,$filters = array())
7529
	{
7530
		$filter_query = $this->getFilter($filters,true,true);
7531
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
7532
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7533
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
7534
			GROUP BY spotter_output.departure_airport_country
7535
			ORDER BY airport_departure_country_count DESC";
7536
		
7537
		$sth = $this->db->prepare($query);
7538
		$sth->execute(array(':pilot' => $pilot));
7539
		return $sth->fetchAll(PDO::FETCH_ASSOC);
7540
	}
7541
	
7542
	
7543
	
7544
	/**
7545
	* Gets all departure airports of the airplanes that have flown over based on a country
7546
	*
7547
	* @return Array the airport list
7548
	*
7549
	*/
7550
	public function countAllDepartureAirportsByCountry($country,$filters = array())
7551
	{
7552
		$filter_query = $this->getFilter($filters,true,true);
7553
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7554
7555
		$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 
7556
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
7557
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7558
			    ORDER BY airport_departure_icao_count DESC";
7559
      
7560
		
7561
		$sth = $this->db->prepare($query);
7562
		$sth->execute(array(':country' => $country));
7563
      
7564
		$airport_array = array();
7565
		$temp_array = array();
7566
        
7567
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7568
		{
7569
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7570
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7571
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7572
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7573
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7574
          
7575
			$airport_array[] = $temp_array;
7576
		}
7577
7578
		return $airport_array;
7579
	}
7580
7581
7582
	/**
7583
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
7584
	*
7585
	* @return Array the airport list
7586
	*
7587
	*/
7588
	public function countAllDepartureAirportCountriesByCountry($country,$filters = array())
7589
	{
7590
		$filter_query = $this->getFilter($filters,true,true);
7591
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7592
		$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 
7593
			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) 
7594
			GROUP BY spotter_output.departure_airport_country, countries.iso3
7595
			ORDER BY airport_departure_country_count DESC";
7596
		
7597
		$sth = $this->db->prepare($query);
7598
		$sth->execute(array(':country' => $country));
7599
		$airport_array = array();
7600
		$temp_array = array();
7601
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7602
		{
7603
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7604
			$temp_array['departure_airport_country_iso3'] = $row['departure_airport_country_iso3'];
7605
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7606
			$airport_array[] = $temp_array;
7607
		}
7608
		return $airport_array;
7609
	}
7610
	
7611
7612
	/**
7613
	* Gets all arrival airports of the airplanes that have flown over
7614
	*
7615
	* @param Boolean $limit Limit result to 10 or not
7616
	* @param Integer $olderthanmonths Only show result older than x months
7617
	* @param String $sincedate Only show result since x date
7618
	* @param Boolean $icaoaskey Show result by ICAO
7619
	* @param Array $filters Filter used here
7620
	* @return Array the airport list
7621
	*
7622
	*/
7623
	public function countAllArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array(),$year = '',$month = '',$day = '')
7624
	{
7625
		global $globalDBdriver;
7626
		$filter_query = $this->getFilter($filters,true,true);
7627
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country, airport.latitude as arrival_airport_latitude, airport.longitude as arrival_airport_longitude 
7628
				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 <> ''";
7629
                if ($olderthanmonths > 0) {
7630
            		if ($globalDBdriver == 'mysql') {
7631
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
7632
			} else {
7633
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
7634
			}
7635
		}
7636
                if ($sincedate != '') {
7637
            		if ($globalDBdriver == 'mysql') {
7638
				$query .= " AND spotter_output.date > '".$sincedate."'";
7639
			} else {
7640
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7641
			}
7642
		}
7643
		$query_values = array();
7644
		if ($year != '') {
7645
			if ($globalDBdriver == 'mysql') {
7646
				$query .= " AND YEAR(spotter_output.date) = :year";
7647
				$query_values = array_merge($query_values,array(':year' => $year));
7648
			} else {
7649
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
7650
				$query_values = array_merge($query_values,array(':year' => $year));
7651
			}
7652
		}
7653
		if ($month != '') {
7654
			if ($globalDBdriver == 'mysql') {
7655
				$query .= " AND MONTH(spotter_output.date) = :month";
7656
				$query_values = array_merge($query_values,array(':month' => $month));
7657
			} else {
7658
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
7659
				$query_values = array_merge($query_values,array(':month' => $month));
7660
			}
7661
		}
7662
		if ($day != '') {
7663
			if ($globalDBdriver == 'mysql') {
7664
				$query .= " AND DAY(spotter_output.date) = :day";
7665
				$query_values = array_merge($query_values,array(':day' => $day));
7666
			} else {
7667
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
7668
				$query_values = array_merge($query_values,array(':day' => $day));
7669
			}
7670
		}
7671
                $query .= " GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country, airport.latitude, airport.longitude
7672
					ORDER BY airport_arrival_icao_count DESC";
7673
		if ($limit) $query .= " LIMIT 10";
7674
      
7675
		
7676
		$sth = $this->db->prepare($query);
7677
		$sth->execute($query_values);
7678
      
7679
		$airport_array = array();
7680
		$temp_array = array();
7681
        
7682
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7683
		{
7684
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7685
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7686
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7687
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7688
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7689
			$temp_array['airport_arrival_latitude'] = $row['arrival_airport_latitude'];
7690
			$temp_array['airport_arrival_longitude'] = $row['arrival_airport_longitude'];
7691
          
7692
			if ($icaoaskey) {
7693
				$icao = $row['arrival_airport_icao'];
7694
				$airport_array[$icao] = $temp_array;
7695
			} else $airport_array[] = $temp_array;
7696
		}
7697
7698
		return $airport_array;
7699
	}
7700
7701
	/**
7702
	* Gets all arrival airports of the airplanes that have flown over
7703
	*
7704
	* @return Array the airport list
7705
	*
7706
	*/
7707
	public function countAllArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array())
7708
	{
7709
		global $globalDBdriver;
7710
		$filter_query = $this->getFilter($filters,true,true);
7711
		$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 
7712
			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 <> '' ";
7713
                if ($olderthanmonths > 0) {
7714
            		if ($globalDBdriver == 'mysql') {
7715
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
7716
			} else {
7717
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
7718
			}
7719
		}
7720
                if ($sincedate != '') {
7721
            		if ($globalDBdriver == 'mysql') {
7722
				$query .= "AND spotter_output.date > '".$sincedate."' ";
7723
			} else {
7724
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7725
			}
7726
		}
7727
7728
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
7729
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
7730
                $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
7731
					ORDER BY airport_arrival_icao_count DESC";
7732
		if ($limit) $query .= " LIMIT 10";
7733
      
7734
		
7735
		$sth = $this->db->prepare($query);
7736
		$sth->execute();
7737
      
7738
		$airport_array = array();
7739
		$temp_array = array();
7740
        
7741
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7742
		{
7743
			$temp_array['airline_icao'] = $row['airline_icao'];
7744
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7745
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7746
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7747
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7748
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7749
			$temp_array['airport_arrival_country_iso3'] = $row['arrival_airport_country_iso3'];
7750
          
7751
			if ($icaoaskey) {
7752
				$icao = $row['arrival_airport_icao'];
7753
				$airport_array[$icao] = $temp_array;
7754
			} else $airport_array[] = $temp_array;
7755
		}
7756
7757
		return $airport_array;
7758
	}
7759
7760
7761
	/**
7762
	* Gets all detected arrival airports of the airplanes that have flown over
7763
	*
7764
	* @return Array the airport list
7765
	*
7766
	*/
7767
	public function countAllDetectedArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array(),$year = '',$month = '',$day = '')
7768
	{
7769
		global $globalDBdriver;
7770
		$filter_query = $this->getFilter($filters,true,true);
7771
		$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 
7772
			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";
7773
                if ($olderthanmonths > 0) {
7774
            		if ($globalDBdriver == 'mysql') {
7775
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
7776
			} else {
7777
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
7778
			}
7779
		}
7780
                if ($sincedate != '') {
7781
            		if ($globalDBdriver == 'mysql') {
7782
				$query .= " AND spotter_output.date > '".$sincedate."'";
7783
			} else {
7784
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7785
			}
7786
		}
7787
		$query_values = array();
7788
		if ($year != '') {
7789
			if ($globalDBdriver == 'mysql') {
7790
				$query .= " AND YEAR(spotter_output.date) = :year";
7791
				$query_values = array_merge($query_values,array(':year' => $year));
7792
			} else {
7793
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
7794
				$query_values = array_merge($query_values,array(':year' => $year));
7795
			}
7796
		}
7797
		if ($month != '') {
7798
			if ($globalDBdriver == 'mysql') {
7799
				$query .= " AND MONTH(spotter_output.date) = :month";
7800
				$query_values = array_merge($query_values,array(':month' => $month));
7801
			} else {
7802
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
7803
				$query_values = array_merge($query_values,array(':month' => $month));
7804
			}
7805
		}
7806
		if ($day != '') {
7807
			if ($globalDBdriver == 'mysql') {
7808
				$query .= " AND DAY(spotter_output.date) = :day";
7809
				$query_values = array_merge($query_values,array(':day' => $day));
7810
			} else {
7811
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
7812
				$query_values = array_merge($query_values,array(':day' => $day));
7813
			}
7814
		}
7815
		$query .= " GROUP BY spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country, airport.latitude, airport.longitude
7816
					ORDER BY airport_arrival_icao_count DESC";
7817
		if ($limit) $query .= " LIMIT 10";
7818
      
7819
		
7820
		$sth = $this->db->prepare($query);
7821
		$sth->execute($query_values);
7822
      
7823
		$airport_array = array();
7824
		$temp_array = array();
7825
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7826
		{
7827
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7828
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7829
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7830
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7831
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7832
          
7833
			if ($icaoaskey) {
7834
				$icao = $row['arrival_airport_icao'];
7835
				$airport_array[$icao] = $temp_array;
7836
			} else $airport_array[] = $temp_array;
7837
		}
7838
7839
		return $airport_array;
7840
	}
7841
	
7842
	/**
7843
	* Gets all detected arrival airports of the airplanes that have flown over
7844
	*
7845
	* @return Array the airport list
7846
	*
7847
	*/
7848
	public function countAllDetectedArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array())
7849
	{
7850
		global $globalDBdriver;
7851
		$filter_query = $this->getFilter($filters,true,true);
7852
		$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 
7853
			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 ";
7854
                if ($olderthanmonths > 0) {
7855
            		if ($globalDBdriver == 'mysql') {
7856
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
7857
			} else {
7858
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
7859
			}
7860
		}
7861
                if ($sincedate != '') {
7862
            		if ($globalDBdriver == 'mysql') {
7863
				$query .= "AND spotter_output.date > '".$sincedate."' ";
7864
			} else {
7865
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7866
			}
7867
		}
7868
7869
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
7870
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
7871
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
7872
					ORDER BY airport_arrival_icao_count DESC";
7873
		if ($limit) $query .= " LIMIT 10";
7874
      
7875
		
7876
		$sth = $this->db->prepare($query);
7877
		$sth->execute();
7878
      
7879
		$airport_array = array();
7880
		$temp_array = array();
7881
        
7882
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7883
		{
7884
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7885
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7886
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7887
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7888
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7889
			$temp_array['airline_icao'] = $row['airline_icao'];
7890
          
7891
			if ($icaoaskey) {
7892
				$icao = $row['arrival_airport_icao'];
7893
				$airport_array[$icao] = $temp_array;
7894
			} else $airport_array[] = $temp_array;
7895
		}
7896
7897
		return $airport_array;
7898
	}	
7899
	
7900
	/**
7901
	* Gets all arrival airports of the airplanes that have flown over based on an airline icao
7902
	*
7903
	* @return Array the airport list
7904
	*
7905
	*/
7906
	public function countAllArrivalAirportsByAirline($airline_icao, $filters = array())
7907
	{
7908
		$filter_query = $this->getFilter($filters,true,true);
7909
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7910
		$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 
7911
			    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 
7912
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7913
			    ORDER BY airport_arrival_icao_count DESC";
7914
		
7915
		$sth = $this->db->prepare($query);
7916
		$sth->execute(array(':airline_icao' => $airline_icao));
7917
      
7918
		$airport_array = array();
7919
		$temp_array = array();
7920
        
7921
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7922
		{
7923
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7924
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7925
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7926
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7927
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7928
          
7929
			$airport_array[] = $temp_array;
7930
		}
7931
7932
		return $airport_array;
7933
	}
7934
	
7935
	
7936
	/**
7937
	* Gets all arrival airports by country of the airplanes that have flown over based on an airline icao
7938
	*
7939
	* @return Array the airport list
7940
	*
7941
	*/
7942
	public function countAllArrivalAirportCountriesByAirline($airline_icao,$filters = array())
7943
	{
7944
		$filter_query = $this->getFilter($filters,true,true);
7945
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7946
		
7947
		$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 
7948
			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 
7949
			GROUP BY spotter_output.arrival_airport_country, countries.iso3
7950
			ORDER BY airport_arrival_country_count DESC";
7951
      
7952
		
7953
		$sth = $this->db->prepare($query);
7954
		$sth->execute(array(':airline_icao' => $airline_icao));
7955
      
7956
		$airport_array = array();
7957
		$temp_array = array();
7958
        
7959
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7960
		{
7961
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7962
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7963
			$temp_array['arrival_airport_country_iso3'] = $row['arrival_airport_country_iso3'];
7964
			$airport_array[] = $temp_array;
7965
		}
7966
		return $airport_array;
7967
	}
7968
	
7969
	
7970
	/**
7971
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft icao
7972
	*
7973
	* @return Array the airport list
7974
	*
7975
	*/
7976
	public function countAllArrivalAirportsByAircraft($aircraft_icao,$filters = array())
7977
	{
7978
		$filter_query = $this->getFilter($filters,true,true);
7979
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7980
		$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 
7981
			    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 
7982
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7983
			    ORDER BY airport_arrival_icao_count DESC";
7984
      
7985
		
7986
		$sth = $this->db->prepare($query);
7987
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7988
      
7989
		$airport_array = array();
7990
		$temp_array = array();
7991
        
7992
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7993
		{
7994
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7995
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7996
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7997
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7998
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7999
          
8000
			$airport_array[] = $temp_array;
8001
		}
8002
8003
		return $airport_array;
8004
	}
8005
	
8006
	
8007
	
8008
	/**
8009
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft icao
8010
	*
8011
	* @return Array the airport list
8012
	*
8013
	*/
8014
	public function countAllArrivalAirportCountriesByAircraft($aircraft_icao,$filters = array())
8015
	{
8016
		$filter_query = $this->getFilter($filters,true,true);
8017
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
8018
		$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 
8019
			    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
8020
			    GROUP BY spotter_output.arrival_airport_country, countries.iso3
8021
			    ORDER BY airport_arrival_country_count DESC";
8022
      
8023
		
8024
		$sth = $this->db->prepare($query);
8025
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
8026
      
8027
		$airport_array = array();
8028
		$temp_array = array();
8029
        
8030
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8031
		{
8032
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8033
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8034
			$temp_array['arrival_airport_country_iso3'] = $row['airport_arrival_country_iso3'];
8035
			$airport_array[] = $temp_array;
8036
		}
8037
8038
		return $airport_array;
8039
	}
8040
	
8041
	
8042
	/**
8043
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft registration
8044
	*
8045
	* @return Array the airport list
8046
	*
8047
	*/
8048
	public function countAllArrivalAirportsByRegistration($registration,$filters = array())
8049
	{
8050
		$filter_query = $this->getFilter($filters,true,true);
8051
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
8052
8053
		$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 
8054
			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 
8055
                    GROUP BY spotter_output.arrival_airport_icao
8056
					ORDER BY airport_arrival_icao_count DESC";
8057
      
8058
		
8059
		$sth = $this->db->prepare($query);
8060
		$sth->execute(array(':registration' => $registration));
8061
      
8062
		$airport_array = array();
8063
		$temp_array = array();
8064
        
8065
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8066
		{
8067
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8068
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8069
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8070
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8071
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8072
          
8073
			$airport_array[] = $temp_array;
8074
		}
8075
8076
		return $airport_array;
8077
	}
8078
	
8079
	
8080
	/**
8081
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft registration
8082
	*
8083
	* @return Array the airport list
8084
	*
8085
	*/
8086
	public function countAllArrivalAirportCountriesByRegistration($registration,$filters = array())
8087
	{
8088
		$filter_query = $this->getFilter($filters,true,true);
8089
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
8090
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8091
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.registration = :registration 
8092
                    GROUP BY spotter_output.arrival_airport_country
8093
					ORDER BY airport_arrival_country_count DESC";
8094
      
8095
		
8096
		$sth = $this->db->prepare($query);
8097
		$sth->execute(array(':registration' => $registration));
8098
      
8099
		$airport_array = array();
8100
		$temp_array = array();
8101
        
8102
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8103
		{
8104
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8105
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8106
          
8107
			$airport_array[] = $temp_array;
8108
		}
8109
8110
		return $airport_array;
8111
	}
8112
	
8113
	
8114
	
8115
	/**
8116
	* Gets all arrival airports of the airplanes that have flown over based on an departure airport
8117
	*
8118
	* @return Array the airport list
8119
	*
8120
	*/
8121
	public function countAllArrivalAirportsByAirport($airport_icao,$filters = array())
8122
	{
8123
		$filter_query = $this->getFilter($filters,true,true);
8124
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8125
		$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 
8126
			    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 
8127
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8128
			    ORDER BY airport_arrival_icao_count DESC";
8129
      
8130
		
8131
		$sth = $this->db->prepare($query);
8132
		$sth->execute(array(':airport_icao' => $airport_icao));
8133
      
8134
		$airport_array = array();
8135
		$temp_array = array();
8136
        
8137
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8138
		{
8139
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8140
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8141
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8142
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8143
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8144
          
8145
			$airport_array[] = $temp_array;
8146
		}
8147
8148
		return $airport_array;
8149
	}
8150
	
8151
	
8152
	/**
8153
	* Gets all arrival airports by country of the airplanes that have flown over based on an airport icao
8154
	*
8155
	* @return Array the airport list
8156
	*
8157
	*/
8158
	public function countAllArrivalAirportCountriesByAirport($airport_icao,$filters = array())
8159
	{
8160
		$filter_query = $this->getFilter($filters,true,true);
8161
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8162
		$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 
8163
			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 
8164
			GROUP BY spotter_output.arrival_airport_country, countries.iso3
8165
			ORDER BY airport_arrival_country_count DESC";
8166
		
8167
		$sth = $this->db->prepare($query);
8168
		$sth->execute(array(':airport_icao' => $airport_icao));
8169
      
8170
		$airport_array = array();
8171
		$temp_array = array();
8172
        
8173
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8174
		{
8175
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8176
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8177
			$temp_array['arrival_airport_country_iso3'] = $row['arrival_airport_country_iso3'];
8178
			$airport_array[] = $temp_array;
8179
		}
8180
		return $airport_array;
8181
	}
8182
	
8183
	
8184
	/**
8185
	* Gets all arrival airports of the airplanes that have flown over based on a aircraft manufacturer
8186
	*
8187
	* @return Array the airport list
8188
	*
8189
	*/
8190
	public function countAllArrivalAirportsByManufacturer($aircraft_manufacturer,$filters = array())
8191
	{
8192
		$filter_query = $this->getFilter($filters,true,true);
8193
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
8194
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8195
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
8196
                    GROUP BY spotter_output.arrival_airport_icao
8197
					ORDER BY airport_arrival_icao_count DESC";
8198
      
8199
		
8200
		$sth = $this->db->prepare($query);
8201
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
8202
      
8203
		$airport_array = array();
8204
		$temp_array = array();
8205
        
8206
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8207
		{
8208
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8209
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8210
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8211
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8212
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8213
          
8214
			$airport_array[] = $temp_array;
8215
		}
8216
8217
		return $airport_array;
8218
	}
8219
	
8220
	
8221
	
8222
	/**
8223
	* Gets all arrival airports by country of the airplanes that have flown over based on a aircraft manufacturer
8224
	*
8225
	* @return Array the airport list
8226
	*
8227
	*/
8228
	public function countAllArrivalAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
8229
	{
8230
		$filter_query = $this->getFilter($filters,true,true);
8231
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
8232
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8233
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
8234
                    GROUP BY spotter_output.arrival_airport_country
8235
					ORDER BY airport_arrival_country_count DESC";
8236
      
8237
		
8238
		$sth = $this->db->prepare($query);
8239
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
8240
      
8241
		$airport_array = array();
8242
		$temp_array = array();
8243
        
8244
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8245
		{
8246
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8247
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8248
          
8249
			$airport_array[] = $temp_array;
8250
		}
8251
8252
		return $airport_array;
8253
	}
8254
	
8255
	
8256
	
8257
	/**
8258
	* Gets all arrival airports of the airplanes that have flown over based on a date
8259
	*
8260
	* @return Array the airport list
8261
	*
8262
	*/
8263
	public function countAllArrivalAirportsByDate($date,$filters = array())
8264
	{
8265
		global $globalTimezone, $globalDBdriver;
8266
		$filter_query = $this->getFilter($filters,true,true);
8267
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8268
		if ($globalTimezone != '') {
8269
			date_default_timezone_set($globalTimezone);
8270
			$datetime = new DateTime($date);
8271
			$offset = $datetime->format('P');
8272
		} else $offset = '+00:00';
8273
8274
		if ($globalDBdriver == 'mysql') {
8275
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8276
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date  
8277
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8278
					ORDER BY airport_arrival_icao_count DESC";
8279
		} else {
8280
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8281
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date  
8282
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8283
					ORDER BY airport_arrival_icao_count DESC";
8284
		}
8285
		
8286
		$sth = $this->db->prepare($query);
8287
		$sth->execute(array(':date' => $date, ':offset' => $offset));
8288
      
8289
		$airport_array = array();
8290
		$temp_array = array();
8291
        
8292
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8293
		{
8294
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8295
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8296
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8297
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8298
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8299
          
8300
			$airport_array[] = $temp_array;
8301
		}
8302
		return $airport_array;
8303
	}
8304
	
8305
	
8306
	
8307
	/**
8308
	* Gets all arrival airports by country of the airplanes that have flown over based on a date
8309
	*
8310
	* @return Array the airport list
8311
	*
8312
	*/
8313
	public function countAllArrivalAirportCountriesByDate($date, $filters = array())
8314
	{
8315
		global $globalTimezone, $globalDBdriver;
8316
		$filter_query = $this->getFilter($filters,true,true);
8317
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8318
		if ($globalTimezone != '') {
8319
			date_default_timezone_set($globalTimezone);
8320
			$datetime = new DateTime($date);
8321
			$offset = $datetime->format('P');
8322
		} else $offset = '+00:00';
8323
8324
		if ($globalDBdriver == 'mysql') {
8325
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count, countries.iso3 AS arrival_airport_country_iso3 
8326
					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 
8327
					GROUP BY spotter_output.arrival_airport_country, countries.iso3
8328
					ORDER BY airport_arrival_country_count DESC";
8329
		} else {
8330
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count, countries.iso3 AS arrival_airport_country_iso3 
8331
					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 
8332
					GROUP BY spotter_output.arrival_airport_country, countries.iso3
8333
					ORDER BY airport_arrival_country_count DESC";
8334
		}
8335
		
8336
		$sth = $this->db->prepare($query);
8337
		$sth->execute(array(':date' => $date, ':offset' => $offset));
8338
      
8339
		$airport_array = array();
8340
		$temp_array = array();
8341
        
8342
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8343
		{
8344
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8345
			$temp_array['arrival_airport_country_iso3'] = $row['arrival_airport_country_iso3'];
8346
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8347
			$airport_array[] = $temp_array;
8348
		}
8349
		return $airport_array;
8350
	}
8351
	
8352
	
8353
	
8354
	/**
8355
	* Gets all arrival airports of the airplanes that have flown over based on a ident/callsign
8356
	*
8357
	* @return Array the airport list
8358
	*
8359
	*/
8360
	public function countAllArrivalAirportsByIdent($ident,$filters = array())
8361
	{
8362
		$filter_query = $this->getFilter($filters,true,true);
8363
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
8364
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8365
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.ident = :ident  
8366
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8367
		    ORDER BY airport_arrival_icao_count DESC";
8368
      
8369
		
8370
		$sth = $this->db->prepare($query);
8371
		$sth->execute(array(':ident' => $ident));
8372
      
8373
		$airport_array = array();
8374
		$temp_array = array();
8375
        
8376
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8377
		{
8378
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8379
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8380
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8381
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8382
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8383
          
8384
			$airport_array[] = $temp_array;
8385
		}
8386
8387
		return $airport_array;
8388
	}
8389
	
8390
	/**
8391
	* Gets all arrival airports of the airplanes that have flown over based on a owner
8392
	*
8393
	* @return Array the airport list
8394
	*
8395
	*/
8396
	public function countAllArrivalAirportsByOwner($owner,$filters = array())
8397
	{
8398
		$filter_query = $this->getFilter($filters,true,true);
8399
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
8400
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8401
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.owner_name = :owner 
8402
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8403
		    ORDER BY airport_arrival_icao_count DESC";
8404
      
8405
		
8406
		$sth = $this->db->prepare($query);
8407
		$sth->execute(array(':owner' => $owner));
8408
		$airport_array = array();
8409
		$temp_array = array();
8410
        
8411
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8412
		{
8413
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8414
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8415
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8416
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8417
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8418
          
8419
			$airport_array[] = $temp_array;
8420
		}
8421
8422
		return $airport_array;
8423
	}
8424
8425
	/**
8426
	* Gets all arrival airports of the airplanes that have flown over based on a pilot
8427
	*
8428
	* @return Array the airport list
8429
	*
8430
	*/
8431
	public function countAllArrivalAirportsByPilot($pilot,$filters = array())
8432
	{
8433
		$filter_query = $this->getFilter($filters,true,true);
8434
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
8435
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8436
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
8437
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8438
		    ORDER BY airport_arrival_icao_count DESC";
8439
      
8440
		
8441
		$sth = $this->db->prepare($query);
8442
		$sth->execute(array(':pilot' => $pilot));
8443
		$airport_array = array();
8444
		$temp_array = array();
8445
        
8446
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8447
		{
8448
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8449
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8450
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8451
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8452
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8453
          
8454
			$airport_array[] = $temp_array;
8455
		}
8456
8457
		return $airport_array;
8458
	}
8459
	
8460
	/**
8461
	* Gets all arrival airports by country of the airplanes that have flown over based on a callsign/ident
8462
	*
8463
	* @return Array the airport list
8464
	*
8465
	*/
8466
	public function countAllArrivalAirportCountriesByIdent($ident, $filters = array())
8467
	{
8468
		$filter_query = $this->getFilter($filters,true,true);
8469
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
8470
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count, countries.iso3 AS arrival_airport_country_iso3 
8471
			FROM countries,spotter_output".$filter_query." countries.name = spotter_output.arrival_airport_country AND spotter_output.arrival_airport_country <> '' AND spotter_output.ident = :ident 
8472
			GROUP BY spotter_output.arrival_airport_country, countries.iso3
8473
			ORDER BY airport_arrival_country_count DESC";
8474
		
8475
		$sth = $this->db->prepare($query);
8476
		$sth->execute(array(':ident' => $ident));
8477
		$airport_array = array();
8478
		$temp_array = array();
8479
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8480
		{
8481
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8482
			$temp_array['arrival_airport_country_iso3'] = $row['arrival_airport_country_iso3'];
8483
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8484
			$airport_array[] = $temp_array;
8485
		}
8486
		return $airport_array;
8487
	}
8488
	
8489
	/**
8490
	* Gets all arrival airports by country of the airplanes that have flown over based on a owner
8491
	*
8492
	* @return Array the airport list
8493
	*
8494
	*/
8495
	public function countAllArrivalAirportCountriesByOwner($owner, $filters = array())
8496
	{
8497
		$filter_query = $this->getFilter($filters,true,true);
8498
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
8499
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8500
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.owner_name = :owner 
8501
                    GROUP BY spotter_output.arrival_airport_country
8502
		    ORDER BY airport_arrival_country_count DESC";
8503
8504
		$sth = $this->db->prepare($query);
8505
		$sth->execute(array(':owner' => $owner));
8506
		return $sth->fetchAll(PDO::FETCH_ASSOC);
8507
	}
8508
	
8509
	/**
8510
	* Gets all arrival airports by country of the airplanes that have flown over based on a pilot
8511
	*
8512
	* @return Array the airport list
8513
	*
8514
	*/
8515
	public function countAllArrivalAirportCountriesByPilot($pilot, $filters = array())
8516
	{
8517
		$filter_query = $this->getFilter($filters,true,true);
8518
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
8519
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8520
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
8521
                    GROUP BY spotter_output.arrival_airport_country
8522
		    ORDER BY airport_arrival_country_count DESC";
8523
8524
		$sth = $this->db->prepare($query);
8525
		$sth->execute(array(':pilot' => $pilot));
8526
		return $sth->fetchAll(PDO::FETCH_ASSOC);
8527
	}
8528
	
8529
	
8530
	
8531
	/**
8532
	* Gets all arrival airports of the airplanes that have flown over based on a country
8533
	*
8534
	* @return Array the airport list
8535
	*
8536
	*/
8537
	public function countAllArrivalAirportsByCountry($country,$filters = array())
8538
	{
8539
		$filter_query = $this->getFilter($filters,true,true);
8540
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8541
		$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 
8542
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
8543
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8544
			    ORDER BY airport_arrival_icao_count DESC";
8545
      
8546
		
8547
		$sth = $this->db->prepare($query);
8548
		$sth->execute(array(':country' => $country));
8549
      
8550
		$airport_array = array();
8551
		$temp_array = array();
8552
        
8553
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8554
		{
8555
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8556
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8557
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8558
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8559
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8560
          
8561
			$airport_array[] = $temp_array;
8562
		}
8563
8564
		return $airport_array;
8565
	}
8566
	
8567
	
8568
	/**
8569
	* Gets all arrival airports by country of the airplanes that have flown over based on a country
8570
	*
8571
	* @return Array the airport list
8572
	*
8573
	*/
8574
	public function countAllArrivalAirportCountriesByCountry($country,$filters = array())
8575
	{
8576
		global $globalDBdriver;
8577
		$filter_query = $this->getFilter($filters,true,true);
8578
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8579
		$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 
8580
			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) 
8581
			GROUP BY spotter_output.arrival_airport_country, countries.iso3
8582
			ORDER BY airport_arrival_country_count DESC";
8583
		
8584
		$sth = $this->db->prepare($query);
8585
		$sth->execute(array(':country' => $country));
8586
		$airport_array = array();
8587
		$temp_array = array();
8588
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8589
		{
8590
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8591
			$temp_array['arrival_airport_country_iso3'] = $row['arrival_airport_country_iso3'];
8592
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8593
			$airport_array[] = $temp_array;
8594
		}
8595
		return $airport_array;
8596
	}
8597
8598
8599
8600
	/**
8601
	* Counts all airport departure countries
8602
	*
8603
	* @return Array the airport departure list
8604
	*
8605
	*/
8606
	public function countAllDepartureCountries($filters = array(),$year = '',$month = '', $day = '')
8607
	{
8608
		global $globalDBdriver;
8609
		$filter_query = $this->getFilter($filters,true,true);
8610
		$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 
8611
				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 <> ''";
8612
		$query_values = array();
8613
		if ($year != '') {
8614
			if ($globalDBdriver == 'mysql') {
8615
				$query .= " AND YEAR(spotter_output.date) = :year";
8616
				$query_values = array_merge($query_values,array(':year' => $year));
8617
			} else {
8618
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
8619
				$query_values = array_merge($query_values,array(':year' => $year));
8620
			}
8621
		}
8622
		if ($month != '') {
8623
			if ($globalDBdriver == 'mysql') {
8624
				$query .= " AND MONTH(spotter_output.date) = :month";
8625
				$query_values = array_merge($query_values,array(':month' => $month));
8626
			} else {
8627
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
8628
				$query_values = array_merge($query_values,array(':month' => $month));
8629
			}
8630
		}
8631
		if ($day != '') {
8632
			if ($globalDBdriver == 'mysql') {
8633
				$query .= " AND DAY(spotter_output.date) = :day";
8634
				$query_values = array_merge($query_values,array(':day' => $day));
8635
			} else {
8636
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
8637
				$query_values = array_merge($query_values,array(':day' => $day));
8638
			}
8639
		}
8640
		$query .= " GROUP BY spotter_output.departure_airport_country, countries.iso3
8641
					ORDER BY airport_departure_country_count DESC
8642
					LIMIT 10 OFFSET 0";
8643
      
8644
		
8645
		$sth = $this->db->prepare($query);
8646
		$sth->execute($query_values);
8647
      
8648
		$airport_array = array();
8649
		$temp_array = array();
8650
        
8651
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8652
		{
8653
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
8654
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
8655
          
8656
			$airport_array[] = $temp_array;
8657
		}
8658
8659
		return $airport_array;
8660
	}
8661
	
8662
	
8663
	/**
8664
	* Counts all airport arrival countries
8665
	*
8666
	* @return Array the airport arrival list
8667
	*
8668
	*/
8669
	public function countAllArrivalCountries($limit = true,$filters = array(),$year = '',$month = '',$day = '')
8670
	{
8671
		global $globalDBdriver;
8672
		$filter_query = $this->getFilter($filters,true,true);
8673
		$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 
8674
			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 <> ''";
8675
		$query_values = array();
8676
		if ($year != '') {
8677
			if ($globalDBdriver == 'mysql') {
8678
				$query .= " AND YEAR(spotter_output.date) = :year";
8679
				$query_values = array_merge($query_values,array(':year' => $year));
8680
			} else {
8681
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
8682
				$query_values = array_merge($query_values,array(':year' => $year));
8683
			}
8684
		}
8685
		if ($month != '') {
8686
			if ($globalDBdriver == 'mysql') {
8687
				$query .= " AND MONTH(spotter_output.date) = :month";
8688
				$query_values = array_merge($query_values,array(':month' => $month));
8689
			} else {
8690
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
8691
				$query_values = array_merge($query_values,array(':month' => $month));
8692
			}
8693
		}
8694
		if ($day != '') {
8695
			if ($globalDBdriver == 'mysql') {
8696
				$query .= " AND DAY(spotter_output.date) = :day";
8697
				$query_values = array_merge($query_values,array(':day' => $day));
8698
			} else {
8699
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
8700
				$query_values = array_merge($query_values,array(':day' => $day));
8701
			}
8702
		}
8703
		$query .= " GROUP BY spotter_output.arrival_airport_country, countries.iso3
8704
					ORDER BY airport_arrival_country_count DESC";
8705
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
8706
      
8707
		
8708
		$sth = $this->db->prepare($query);
8709
		$sth->execute($query_values);
8710
      
8711
		$airport_array = array();
8712
		$temp_array = array();
8713
        
8714
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8715
		{
8716
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8717
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8718
			$temp_array['airport_arrival_country_iso3'] = $row['airport_arrival_country_iso3'];
8719
          
8720
			$airport_array[] = $temp_array;
8721
		}
8722
8723
		return $airport_array;
8724
	}
8725
8726
8727
8728
8729
8730
	/**
8731
	* Gets all route combinations
8732
	*
8733
	* @return Array the route list
8734
	*
8735
	*/
8736
	public function countAllRoutes($filters = array())
8737
	{
8738
		$filter_query = $this->getFilter($filters,true,true);
8739
		$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
8740
		    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 <> ''
8741
                    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
8742
                    ORDER BY route_count DESC
8743
		    LIMIT 10 OFFSET 0";
8744
      
8745
		
8746
		$sth = $this->db->prepare($query);
8747
		$sth->execute();
8748
      
8749
		$routes_array = array();
8750
		$temp_array = array();
8751
        
8752
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8753
		{
8754
			$temp_array['route_count'] = $row['route_count'];
8755
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8756
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8757
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8758
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8759
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8760
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8761
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8762
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8763
          
8764
			$routes_array[] = $temp_array;
8765
		}
8766
8767
		return $routes_array;
8768
	}
8769
	
8770
	
8771
	
8772
	
8773
	/**
8774
	* Gets all route combinations based on an aircraft
8775
	*
8776
	* @return Array the route list
8777
	*
8778
	*/
8779
	public function countAllRoutesByAircraft($aircraft_icao,$filters = array())
8780
	{
8781
		$filter_query = $this->getFilter($filters,true,true);
8782
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
8783
		$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
8784
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
8785
			    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 
8786
			    ORDER BY route_count DESC";
8787
		
8788
		$sth = $this->db->prepare($query);
8789
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
8790
      
8791
		$routes_array = array();
8792
		$temp_array = array();
8793
        
8794
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8795
		{
8796
			$temp_array['route_count'] = $row['route_count'];
8797
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8798
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8799
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8800
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8801
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8802
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8803
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8804
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8805
          
8806
			$routes_array[] = $temp_array;
8807
		}
8808
8809
		return $routes_array;
8810
	}
8811
	
8812
	
8813
	/**
8814
	* Gets all route combinations based on an aircraft registration
8815
	*
8816
	* @return Array the route list
8817
	*
8818
	*/
8819
	public function countAllRoutesByRegistration($registration, $filters = array())
8820
	{
8821
		$filter_query = $this->getFilter($filters,true,true);
8822
		$registration = filter_var($registration, FILTER_SANITIZE_STRING);
8823
		$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
8824
			FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.registration = :registration 
8825
                    GROUP BY route
8826
                    ORDER BY route_count DESC";
8827
      
8828
		
8829
		$sth = $this->db->prepare($query);
8830
		$sth->execute(array(':registration' => $registration));
8831
      
8832
		$routes_array = array();
8833
		$temp_array = array();
8834
        
8835
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8836
		{
8837
			$temp_array['route_count'] = $row['route_count'];
8838
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8839
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8840
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8841
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8842
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8843
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8844
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8845
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8846
          
8847
			$routes_array[] = $temp_array;
8848
		}
8849
8850
		return $routes_array;
8851
	}
8852
	
8853
	
8854
	
8855
	/**
8856
	* Gets all route combinations based on an airline
8857
	*
8858
	* @return Array the route list
8859
	*
8860
	*/
8861
	public function countAllRoutesByAirline($airline_icao, $filters = array())
8862
	{
8863
		$filter_query = $this->getFilter($filters,true,true);
8864
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
8865
		$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
8866
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.airline_icao = :airline_icao 
8867
			    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 
8868
			    ORDER BY route_count DESC";
8869
      
8870
		
8871
		$sth = $this->db->prepare($query);
8872
		$sth->execute(array(':airline_icao' => $airline_icao));
8873
      
8874
		$routes_array = array();
8875
		$temp_array = array();
8876
        
8877
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8878
		{
8879
			$temp_array['route_count'] = $row['route_count'];
8880
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8881
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8882
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8883
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8884
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8885
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8886
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8887
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8888
          
8889
			$routes_array[] = $temp_array;
8890
		}
8891
8892
		return $routes_array;
8893
	}
8894
	
8895
	
8896
	
8897
	/**
8898
	* Gets all route combinations based on an airport
8899
	*
8900
	* @return Array the route list
8901
	*
8902
	*/
8903
	public function countAllRoutesByAirport($airport_icao, $filters = array())
8904
	{
8905
		$filter_query = $this->getFilter($filters,true,true);
8906
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8907
		$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
8908
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
8909
			    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 
8910
			    ORDER BY route_count DESC";
8911
		
8912
		$sth = $this->db->prepare($query);
8913
		$sth->execute(array(':airport_icao' => $airport_icao));
8914
      
8915
		$routes_array = array();
8916
		$temp_array = array();
8917
        
8918
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8919
		{
8920
			$temp_array['route_count'] = $row['route_count'];
8921
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8922
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8923
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8924
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8925
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8926
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8927
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8928
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8929
          
8930
			$routes_array[] = $temp_array;
8931
		}
8932
8933
		return $routes_array;
8934
	}
8935
	
8936
	
8937
	
8938
	/**
8939
	* Gets all route combinations based on an country
8940
	*
8941
	* @return Array the route list
8942
	*
8943
	*/
8944
	public function countAllRoutesByCountry($country, $filters = array())
8945
	{
8946
		$filter_query = $this->getFilter($filters,true,true);
8947
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8948
		$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
8949
			    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 
8950
			    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 
8951
			    ORDER BY route_count DESC";
8952
		
8953
		$sth = $this->db->prepare($query);
8954
		$sth->execute(array(':country' => $country));
8955
      
8956
		$routes_array = array();
8957
		$temp_array = array();
8958
        
8959
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8960
		{
8961
			$temp_array['route_count'] = $row['route_count'];
8962
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8963
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8964
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8965
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8966
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8967
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8968
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8969
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8970
          
8971
			$routes_array[] = $temp_array;
8972
		}
8973
8974
		return $routes_array;
8975
	}
8976
8977
8978
	/**
8979
	* Gets all route combinations based on an date
8980
	*
8981
	* @return Array the route list
8982
	*
8983
	*/
8984
	public function countAllRoutesByDate($date, $filters = array())
8985
	{
8986
		global $globalTimezone, $globalDBdriver;
8987
		$filter_query = $this->getFilter($filters,true,true);
8988
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8989
		if ($globalTimezone != '') {
8990
			date_default_timezone_set($globalTimezone);
8991
			$datetime = new DateTime($date);
8992
			$offset = $datetime->format('P');
8993
		} else $offset = '+00:00';
8994
		
8995
		if ($globalDBdriver == 'mysql') {
8996
			$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
8997
				    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date  
8998
				    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
8999
				    ORDER BY route_count DESC";
9000
		} else {
9001
			$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
9002
				    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date  
9003
				    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
9004
				    ORDER BY route_count DESC";
9005
		}
9006
		
9007
		$sth = $this->db->prepare($query);
9008
		$sth->execute(array(':date' => $date, ':offset' => $offset));
9009
      
9010
		$routes_array = array();
9011
		$temp_array = array();
9012
        
9013
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9014
		{
9015
			$temp_array['route_count'] = $row['route_count'];
9016
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9017
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9018
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9019
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9020
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9021
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9022
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9023
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9024
          
9025
			$routes_array[] = $temp_array;
9026
		}
9027
9028
		return $routes_array;
9029
	}
9030
	
9031
	
9032
	/**
9033
	* Gets all route combinations based on an ident/callsign
9034
	*
9035
	* @return Array the route list
9036
	*
9037
	*/
9038
	public function countAllRoutesByIdent($ident, $filters = array())
9039
	{
9040
		$filter_query = $this->getFilter($filters,true,true);
9041
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
9042
		$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
9043
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.ident = :ident   
9044
                    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
9045
                    ORDER BY route_count DESC";
9046
      
9047
		
9048
		$sth = $this->db->prepare($query);
9049
		$sth->execute(array(':ident' => $ident));
9050
      
9051
		$routes_array = array();
9052
		$temp_array = array();
9053
        
9054
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9055
		{
9056
			$temp_array['route_count'] = $row['route_count'];
9057
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9058
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9059
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9060
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9061
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9062
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9063
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9064
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9065
          
9066
			$routes_array[] = $temp_array;
9067
		}
9068
9069
		return $routes_array;
9070
	}
9071
	
9072
	/**
9073
	* Gets all route combinations based on an owner
9074
	*
9075
	* @return Array the route list
9076
	*
9077
	*/
9078
	public function countAllRoutesByOwner($owner,$filters = array())
9079
	{
9080
		$filter_query = $this->getFilter($filters,true,true);
9081
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
9082
		$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
9083
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.owner_name = :owner 
9084
                    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
9085
                    ORDER BY route_count DESC";
9086
      
9087
		
9088
		$sth = $this->db->prepare($query);
9089
		$sth->execute(array(':owner' => $owner));
9090
      
9091
		$routes_array = array();
9092
		$temp_array = array();
9093
        
9094
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9095
		{
9096
			$temp_array['route_count'] = $row['route_count'];
9097
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9098
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9099
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9100
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9101
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9102
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9103
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9104
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9105
          
9106
			$routes_array[] = $temp_array;
9107
		}
9108
9109
		return $routes_array;
9110
	}
9111
	
9112
	/**
9113
	* Gets all route combinations based on a pilot
9114
	*
9115
	* @return Array the route list
9116
	*
9117
	*/
9118
	public function countAllRoutesByPilot($pilot,$filters = array())
9119
	{
9120
		$filter_query = $this->getFilter($filters,true,true);
9121
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
9122
		$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
9123
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
9124
                    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
9125
                    ORDER BY route_count DESC";
9126
      
9127
		
9128
		$sth = $this->db->prepare($query);
9129
		$sth->execute(array(':pilot' => $pilot));
9130
      
9131
		$routes_array = array();
9132
		$temp_array = array();
9133
        
9134
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9135
		{
9136
			$temp_array['route_count'] = $row['route_count'];
9137
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9138
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9139
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9140
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9141
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9142
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9143
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9144
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9145
          
9146
			$routes_array[] = $temp_array;
9147
		}
9148
9149
		return $routes_array;
9150
	}
9151
	
9152
	
9153
	/**
9154
	* Gets all route combinations based on an manufacturer
9155
	*
9156
	* @return Array the route list
9157
	*
9158
	*/
9159
	public function countAllRoutesByManufacturer($aircraft_manufacturer, $filters = array())
9160
	{
9161
		$filter_query = $this->getFilter($filters,true,true);
9162
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
9163
		$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
9164
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
9165
                    GROUP BY route
9166
                    ORDER BY route_count DESC";
9167
      
9168
		
9169
		$sth = $this->db->prepare($query);
9170
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
9171
      
9172
		$routes_array = array();
9173
		$temp_array = array();
9174
        
9175
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9176
		{
9177
			$temp_array['route_count'] = $row['route_count'];
9178
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9179
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9180
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9181
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9182
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9183
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9184
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9185
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9186
          
9187
			$routes_array[] = $temp_array;
9188
		}
9189
9190
		return $routes_array;
9191
	}
9192
9193
	
9194
	
9195
	/**
9196
	* Gets all route combinations with waypoints
9197
	*
9198
	* @return Array the route list
9199
	*
9200
	*/
9201
	public function countAllRoutesWithWaypoints($filters = array())
9202
	{
9203
		$filter_query = $this->getFilter($filters,true,true);
9204
		$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
9205
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.waypoints <> '' 
9206
                    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
9207
                    ORDER BY route_count DESC
9208
		    LIMIT 10 OFFSET 0";
9209
      
9210
		
9211
		$sth = $this->db->prepare($query);
9212
		$sth->execute();
9213
      
9214
		$routes_array = array();
9215
		$temp_array = array();
9216
        
9217
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9218
		{
9219
			$temp_array['spotter_id'] = $row['spotter_id'];
9220
			$temp_array['route_count'] = $row['route_count'];
9221
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9222
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9223
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9224
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9225
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9226
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9227
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9228
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9229
          
9230
			$routes_array[] = $temp_array;
9231
		}
9232
9233
		return $routes_array;
9234
	}
9235
	
9236
	/**
9237
	* Gets all callsigns that have flown over
9238
	*
9239
	* @return Array the callsign list
9240
	*
9241
	*/
9242
	public function countAllCallsigns($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '', $month = '', $day = '')
9243
	{
9244
		global $globalDBdriver;
9245
		$filter_query = $this->getFilter($filters,true,true);
9246
		$query  = "SELECT DISTINCT spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name, spotter_output.airline_icao  
9247
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''";
9248
		 if ($olderthanmonths > 0) {
9249
			if ($globalDBdriver == 'mysql') $query .= ' AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH)';
9250
			else $query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
9251
		}
9252
		if ($sincedate != '') {
9253
			if ($globalDBdriver == 'mysql') $query .= " AND spotter_output.date > '".$sincedate."'";
9254
			else $query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
9255
		}
9256
		$query_values = array();
9257
		if ($year != '') {
9258
			if ($globalDBdriver == 'mysql') {
9259
				$query .= " AND YEAR(spotter_output.date) = :year";
9260
				$query_values = array_merge($query_values,array(':year' => $year));
9261
			} else {
9262
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
9263
				$query_values = array_merge($query_values,array(':year' => $year));
9264
			}
9265
		}
9266
		if ($month != '') {
9267
			if ($globalDBdriver == 'mysql') {
9268
				$query .= " AND MONTH(spotter_output.date) = :month";
9269
				$query_values = array_merge($query_values,array(':month' => $month));
9270
			} else {
9271
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
9272
				$query_values = array_merge($query_values,array(':month' => $month));
9273
			}
9274
		}
9275
		if ($day != '') {
9276
			if ($globalDBdriver == 'mysql') {
9277
				$query .= " AND DAY(spotter_output.date) = :day";
9278
				$query_values = array_merge($query_values,array(':day' => $day));
9279
			} else {
9280
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
9281
				$query_values = array_merge($query_values,array(':day' => $day));
9282
			}
9283
		}
9284
		$query .= " GROUP BY spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
9285
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
9286
      		
9287
		$sth = $this->db->prepare($query);
9288
		$sth->execute($query_values);
9289
      
9290
		$callsign_array = array();
9291
		$temp_array = array();
9292
        
9293
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9294
		{
9295
			$temp_array['callsign_icao'] = $row['ident'];
9296
			$temp_array['airline_name'] = $row['airline_name'];
9297
			$temp_array['airline_icao'] = $row['airline_icao'];
9298
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
9299
          
9300
			$callsign_array[] = $temp_array;
9301
		}
9302
9303
		return $callsign_array;
9304
	}
9305
9306
	/**
9307
	* Gets all callsigns that have flown over
9308
	*
9309
	* @return Array the callsign list
9310
	*
9311
	*/
9312
	public function countAllCallsignsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $filters = array())
9313
	{
9314
		global $globalDBdriver;
9315
		$filter_query = $this->getFilter($filters,true,true);
9316
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name  
9317
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''  AND spotter_output.airline_icao <> '' ";
9318
		 if ($olderthanmonths > 0) {
9319
			if ($globalDBdriver == 'mysql') $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
9320
			else $query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
9321
		}
9322
		if ($sincedate != '') {
9323
			if ($globalDBdriver == 'mysql') $query .= "AND spotter_output.date > '".$sincedate."' ";
9324
			else $query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
9325
		}
9326
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
9327
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
9328
      		
9329
		$sth = $this->db->prepare($query);
9330
		$sth->execute();
9331
      
9332
		$callsign_array = array();
9333
		$temp_array = array();
9334
        
9335
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9336
		{
9337
			$temp_array['callsign_icao'] = $row['ident'];
9338
			$temp_array['airline_name'] = $row['airline_name'];
9339
			$temp_array['airline_icao'] = $row['airline_icao'];
9340
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
9341
          
9342
			$callsign_array[] = $temp_array;
9343
		}
9344
9345
		return $callsign_array;
9346
	}
9347
9348
9349
9350
9351
	/**
9352
	* Counts all dates
9353
	*
9354
	* @return Array the date list
9355
	*
9356
	*/
9357
	public function countAllDates($filters = array())
9358
	{
9359
		global $globalTimezone, $globalDBdriver;
9360
		if ($globalTimezone != '') {
9361
			date_default_timezone_set($globalTimezone);
9362
			$datetime = new DateTime();
9363
			$offset = $datetime->format('P');
9364
		} else $offset = '+00:00';
9365
9366
		if ($globalDBdriver == 'mysql') {
9367
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9368
								FROM spotter_output";
9369
			$query .= $this->getFilter($filters);
9370
			$query .= " GROUP BY date_name 
9371
								ORDER BY date_count DESC
9372
								LIMIT 10 OFFSET 0";
9373
		} else {
9374
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9375
								FROM spotter_output";
9376
			$query .= $this->getFilter($filters);
9377
			$query .= " GROUP BY date_name 
9378
								ORDER BY date_count DESC
9379
								LIMIT 10 OFFSET 0";
9380
		}
9381
      
9382
		
9383
		$sth = $this->db->prepare($query);
9384
		$sth->execute(array(':offset' => $offset));
9385
      
9386
		$date_array = array();
9387
		$temp_array = array();
9388
        
9389
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9390
		{
9391
			$temp_array['date_name'] = $row['date_name'];
9392
			$temp_array['date_count'] = $row['date_count'];
9393
9394
			$date_array[] = $temp_array;
9395
		}
9396
9397
		return $date_array;
9398
	}
9399
	
9400
	/**
9401
	* Counts all dates
9402
	*
9403
	* @return Array the date list
9404
	*
9405
	*/
9406
	public function countAllDatesByAirlines($filters = array())
9407
	{
9408
		global $globalTimezone, $globalDBdriver;
9409
		if ($globalTimezone != '') {
9410
			date_default_timezone_set($globalTimezone);
9411
			$datetime = new DateTime();
9412
			$offset = $datetime->format('P');
9413
		} else $offset = '+00:00';
9414
		$filter_query = $this->getFilter($filters,true,true);
9415
		if ($globalDBdriver == 'mysql') {
9416
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9417
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9418
								GROUP BY spotter_output.airline_icao, date_name 
9419
								ORDER BY date_count DESC
9420
								LIMIT 10 OFFSET 0";
9421
		} else {
9422
			$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
9423
								FROM spotter_output 
9424
								WHERE spotter_output.airline_icao <> '' 
9425
								GROUP BY spotter_output.airline_icao, date_name 
9426
								ORDER BY date_count DESC
9427
								LIMIT 10 OFFSET 0";
9428
		}
9429
      
9430
		
9431
		$sth = $this->db->prepare($query);
9432
		$sth->execute(array(':offset' => $offset));
9433
      
9434
		$date_array = array();
9435
		$temp_array = array();
9436
        
9437
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9438
		{
9439
			$temp_array['date_name'] = $row['date_name'];
9440
			$temp_array['date_count'] = $row['date_count'];
9441
			$temp_array['airline_icao'] = $row['airline_icao'];
9442
9443
			$date_array[] = $temp_array;
9444
		}
9445
9446
		return $date_array;
9447
	}	
9448
	
9449
	/**
9450
	* Counts all dates during the last 7 days
9451
	*
9452
	* @return Array the date list
9453
	*
9454
	*/
9455
	public function countAllDatesLast7Days($filters = array())
9456
	{
9457
		global $globalTimezone, $globalDBdriver;
9458
		if ($globalTimezone != '') {
9459
			date_default_timezone_set($globalTimezone);
9460
			$datetime = new DateTime();
9461
			$offset = $datetime->format('P');
9462
		} else $offset = '+00:00';
9463
		$filter_query = $this->getFilter($filters,true,true);
9464
		if ($globalDBdriver == 'mysql') {
9465
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9466
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY)";
9467
			$query .= " GROUP BY date_name 
9468
								ORDER BY spotter_output.date ASC";
9469
			$query_data = array(':offset' => $offset);
9470
		} else {
9471
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9472
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '7 DAYS'";
9473
			$query .= " GROUP BY date_name 
9474
								ORDER BY date_name ASC";
9475
			$query_data = array(':offset' => $offset);
9476
    		}
9477
		
9478
		$sth = $this->db->prepare($query);
9479
		$sth->execute($query_data);
9480
      
9481
		$date_array = array();
9482
		$temp_array = array();
9483
        
9484
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9485
		{
9486
			$temp_array['date_name'] = $row['date_name'];
9487
			$temp_array['date_count'] = $row['date_count'];
9488
          
9489
			$date_array[] = $temp_array;
9490
		}
9491
9492
		return $date_array;
9493
	}
9494
9495
	/**
9496
	* Counts all dates during the last month
9497
	*
9498
	* @return Array the date list
9499
	*
9500
	*/
9501
	public function countAllDatesLastMonth($filters = array())
9502
	{
9503
		global $globalTimezone, $globalDBdriver;
9504
		if ($globalTimezone != '') {
9505
			date_default_timezone_set($globalTimezone);
9506
			$datetime = new DateTime();
9507
			$offset = $datetime->format('P');
9508
		} else $offset = '+00:00';
9509
		$filter_query = $this->getFilter($filters,true,true);
9510
		if ($globalDBdriver == 'mysql') {
9511
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9512
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)";
9513
			$query .= " GROUP BY date_name 
9514
								ORDER BY spotter_output.date ASC";
9515
			$query_data = array(':offset' => $offset);
9516
		} else {
9517
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9518
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'";
9519
			$query .= " GROUP BY date_name 
9520
								ORDER BY date_name ASC";
9521
			$query_data = array(':offset' => $offset);
9522
    		}
9523
		
9524
		$sth = $this->db->prepare($query);
9525
		$sth->execute($query_data);
9526
      
9527
		$date_array = array();
9528
		$temp_array = array();
9529
        
9530
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9531
		{
9532
			$temp_array['date_name'] = $row['date_name'];
9533
			$temp_array['date_count'] = $row['date_count'];
9534
          
9535
			$date_array[] = $temp_array;
9536
		}
9537
9538
		return $date_array;
9539
	}
9540
9541
9542
	/**
9543
	* Counts all dates during the last month
9544
	*
9545
	* @return Array the date list
9546
	*
9547
	*/
9548
	public function countAllDatesLastMonthByAirlines($filters = array())
9549
	{
9550
		global $globalTimezone, $globalDBdriver;
9551
		$filter_query = $this->getFilter($filters,true,true);
9552
		if ($globalTimezone != '') {
9553
			date_default_timezone_set($globalTimezone);
9554
			$datetime = new DateTime();
9555
			$offset = $datetime->format('P');
9556
		} else $offset = '+00:00';
9557
		
9558
		if ($globalDBdriver == 'mysql') {
9559
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9560
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)
9561
								GROUP BY spotter_output.airline_icao, date_name 
9562
								ORDER BY spotter_output.date ASC";
9563
			$query_data = array(':offset' => $offset);
9564
		} else {
9565
			$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
9566
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'
9567
								GROUP BY spotter_output.airline_icao, date_name 
9568
								ORDER BY date_name ASC";
9569
			$query_data = array(':offset' => $offset);
9570
    		}
9571
		
9572
		$sth = $this->db->prepare($query);
9573
		$sth->execute($query_data);
9574
      
9575
		$date_array = array();
9576
		$temp_array = array();
9577
        
9578
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9579
		{
9580
			$temp_array['date_name'] = $row['date_name'];
9581
			$temp_array['date_count'] = $row['date_count'];
9582
			$temp_array['airline_icao'] = $row['airline_icao'];
9583
          
9584
			$date_array[] = $temp_array;
9585
		}
9586
9587
		return $date_array;
9588
	}
9589
	
9590
9591
	/**
9592
	* Counts all month
9593
	*
9594
	* @return Array the month list
9595
	*
9596
	*/
9597
	public function countAllMonths($filters = array())
9598
	{
9599
		global $globalTimezone, $globalDBdriver;
9600
		if ($globalTimezone != '') {
9601
			date_default_timezone_set($globalTimezone);
9602
			$datetime = new DateTime();
9603
			$offset = $datetime->format('P');
9604
		} else $offset = '+00:00';
9605
9606
		if ($globalDBdriver == 'mysql') {
9607
			$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
9608
								FROM spotter_output";
9609
			$query .= $this->getFilter($filters);
9610
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
9611
		} else {
9612
			$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
9613
								FROM spotter_output";
9614
			$query .= $this->getFilter($filters);
9615
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
9616
		}
9617
      
9618
		
9619
		$sth = $this->db->prepare($query);
9620
		$sth->execute(array(':offset' => $offset));
9621
      
9622
		$date_array = array();
9623
		$temp_array = array();
9624
        
9625
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9626
		{
9627
			$temp_array['month_name'] = $row['month_name'];
9628
			$temp_array['year_name'] = $row['year_name'];
9629
			$temp_array['date_count'] = $row['date_count'];
9630
9631
			$date_array[] = $temp_array;
9632
		}
9633
9634
		return $date_array;
9635
	}
9636
9637
	/**
9638
	* Counts all month
9639
	*
9640
	* @return Array the month list
9641
	*
9642
	*/
9643
	public function countAllMonthsByAirlines($filters = array())
9644
	{
9645
		global $globalTimezone, $globalDBdriver;
9646
		$filter_query = $this->getFilter($filters,true,true);
9647
		if ($globalTimezone != '') {
9648
			date_default_timezone_set($globalTimezone);
9649
			$datetime = new DateTime();
9650
			$offset = $datetime->format('P');
9651
		} else $offset = '+00:00';
9652
9653
		if ($globalDBdriver == 'mysql') {
9654
			$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
9655
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9656
								GROUP BY spotter_output.airline_icao, year_name, month_name 
9657
								ORDER BY date_count DESC";
9658
		} else {
9659
			$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
9660
								FROM spotter_output 
9661
								WHERE spotter_output.airline_icao <> '' 
9662
								GROUP BY spotter_output.airline_icao, year_name, month_name 
9663
								ORDER BY date_count DESC";
9664
		}
9665
      
9666
		
9667
		$sth = $this->db->prepare($query);
9668
		$sth->execute(array(':offset' => $offset));
9669
      
9670
		$date_array = array();
9671
		$temp_array = array();
9672
        
9673
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9674
		{
9675
			$temp_array['month_name'] = $row['month_name'];
9676
			$temp_array['year_name'] = $row['year_name'];
9677
			$temp_array['date_count'] = $row['date_count'];
9678
			$temp_array['airline_icao'] = $row['airline_icao'];
9679
9680
			$date_array[] = $temp_array;
9681
		}
9682
9683
		return $date_array;
9684
	}
9685
9686
	/**
9687
	* Counts all military month
9688
	*
9689
	* @return Array the month list
9690
	*
9691
	*/
9692
	public function countAllMilitaryMonths($filters = array())
9693
	{
9694
		global $globalTimezone, $globalDBdriver;
9695
		if ($globalTimezone != '') {
9696
			date_default_timezone_set($globalTimezone);
9697
			$datetime = new DateTime();
9698
			$offset = $datetime->format('P');
9699
		} else $offset = '+00:00';
9700
		$filter_query = $this->getFilter($filters,true,true);
9701
		if ($globalDBdriver == 'mysql') {
9702
			$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
9703
								FROM spotter_output".$filter_query." spotter_output.airline_type = 'military'
9704
								GROUP BY year_name, month_name 
9705
								ORDER BY date_count DESC";
9706
		} else {
9707
			$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
9708
								FROM spotter_output".$filter_query." spotter_output.airline_type = 'military'
9709
								GROUP BY year_name, month_name 
9710
								ORDER BY date_count DESC";
9711
		}
9712
		
9713
		$sth = $this->db->prepare($query);
9714
		$sth->execute(array(':offset' => $offset));
9715
      
9716
		$date_array = array();
9717
		$temp_array = array();
9718
        
9719
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9720
		{
9721
			$temp_array['month_name'] = $row['month_name'];
9722
			$temp_array['year_name'] = $row['year_name'];
9723
			$temp_array['date_count'] = $row['date_count'];
9724
9725
			$date_array[] = $temp_array;
9726
		}
9727
9728
		return $date_array;
9729
	}
9730
	
9731
	/**
9732
	* Counts all month owners
9733
	*
9734
	* @return Array the month list
9735
	*
9736
	*/
9737
	public function countAllMonthsOwners($filters = array())
9738
	{
9739
		global $globalTimezone, $globalDBdriver;
9740
		if ($globalTimezone != '') {
9741
			date_default_timezone_set($globalTimezone);
9742
			$datetime = new DateTime();
9743
			$offset = $datetime->format('P');
9744
		} else $offset = '+00:00';
9745
		$filter_query = $this->getFilter($filters,true,true);
9746
9747
		if ($globalDBdriver == 'mysql') {
9748
			$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
9749
								FROM spotter_output".$filter_query." owner_name <> ''
9750
								GROUP BY year_name, month_name
9751
								ORDER BY date_count DESC";
9752
		} else {
9753
			$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
9754
								FROM spotter_output".$filter_query." owner_name <> ''
9755
								GROUP BY year_name, month_name
9756
								ORDER BY date_count DESC";
9757
		}
9758
		
9759
		$sth = $this->db->prepare($query);
9760
		$sth->execute(array(':offset' => $offset));
9761
      
9762
		$date_array = array();
9763
		$temp_array = array();
9764
        
9765
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9766
		{
9767
			$temp_array['month_name'] = $row['month_name'];
9768
			$temp_array['year_name'] = $row['year_name'];
9769
			$temp_array['date_count'] = $row['date_count'];
9770
9771
			$date_array[] = $temp_array;
9772
		}
9773
9774
		return $date_array;
9775
	}
9776
	
9777
	/**
9778
	* Counts all month owners
9779
	*
9780
	* @return Array the month list
9781
	*
9782
	*/
9783
	public function countAllMonthsOwnersByAirlines($filters = array())
9784
	{
9785
		global $globalTimezone, $globalDBdriver;
9786
		$filter_query = $this->getFilter($filters,true,true);
9787
		if ($globalTimezone != '') {
9788
			date_default_timezone_set($globalTimezone);
9789
			$datetime = new DateTime();
9790
			$offset = $datetime->format('P');
9791
		} else $offset = '+00:00';
9792
9793
		if ($globalDBdriver == 'mysql') {
9794
			$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
9795
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
9796
								GROUP BY spotter_output.airline_icao, year_name, month_name
9797
								ORDER BY date_count DESC";
9798
		} else {
9799
			$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
9800
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
9801
								GROUP BY spotter_output.airline_icao, year_name, month_name
9802
								ORDER BY date_count DESC";
9803
		}
9804
		
9805
		$sth = $this->db->prepare($query);
9806
		$sth->execute(array(':offset' => $offset));
9807
      
9808
		$date_array = array();
9809
		$temp_array = array();
9810
        
9811
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9812
		{
9813
			$temp_array['month_name'] = $row['month_name'];
9814
			$temp_array['year_name'] = $row['year_name'];
9815
			$temp_array['date_count'] = $row['date_count'];
9816
			$temp_array['airline_icao'] = $row['airline_icao'];
9817
9818
			$date_array[] = $temp_array;
9819
		}
9820
9821
		return $date_array;
9822
	}
9823
9824
	/**
9825
	* Counts all month pilot
9826
	*
9827
	* @return Array the month list
9828
	*
9829
	*/
9830
	public function countAllMonthsPilots($filters = array())
9831
	{
9832
		global $globalTimezone, $globalDBdriver;
9833
		if ($globalTimezone != '') {
9834
			date_default_timezone_set($globalTimezone);
9835
			$datetime = new DateTime();
9836
			$offset = $datetime->format('P');
9837
		} else $offset = '+00:00';
9838
		$filter_query = $this->getFilter($filters,true,true);
9839
9840
		if ($globalDBdriver == 'mysql') {
9841
			$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
9842
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
9843
								GROUP BY year_name, month_name
9844
								ORDER BY date_count DESC";
9845
		} else {
9846
			$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
9847
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
9848
								GROUP BY year_name, month_name
9849
								ORDER BY date_count DESC";
9850
		}
9851
		
9852
		$sth = $this->db->prepare($query);
9853
		$sth->execute(array(':offset' => $offset));
9854
      
9855
		$date_array = array();
9856
		$temp_array = array();
9857
        
9858
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9859
		{
9860
			$temp_array['month_name'] = $row['month_name'];
9861
			$temp_array['year_name'] = $row['year_name'];
9862
			$temp_array['date_count'] = $row['date_count'];
9863
9864
			$date_array[] = $temp_array;
9865
		}
9866
9867
		return $date_array;
9868
	}
9869
	
9870
	/**
9871
	* Counts all month pilot
9872
	*
9873
	* @return Array the month list
9874
	*
9875
	*/
9876
	public function countAllMonthsPilotsByAirlines($filters = array())
9877
	{
9878
		global $globalTimezone, $globalDBdriver;
9879
		$filter_query = $this->getFilter($filters,true,true);
9880
		if ($globalTimezone != '') {
9881
			date_default_timezone_set($globalTimezone);
9882
			$datetime = new DateTime();
9883
			$offset = $datetime->format('P');
9884
		} else $offset = '+00:00';
9885
9886
		if ($globalDBdriver == 'mysql') {
9887
			$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
9888
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
9889
								GROUP BY spotter_output.airline_icao,year_name, month_name
9890
								ORDER BY date_count DESC";
9891
		} else {
9892
			$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
9893
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
9894
								GROUP BY spotter_output.airline_icao, year_name, month_name
9895
								ORDER BY date_count DESC";
9896
		}
9897
		
9898
		$sth = $this->db->prepare($query);
9899
		$sth->execute(array(':offset' => $offset));
9900
      
9901
		$date_array = array();
9902
		$temp_array = array();
9903
        
9904
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9905
		{
9906
			$temp_array['month_name'] = $row['month_name'];
9907
			$temp_array['year_name'] = $row['year_name'];
9908
			$temp_array['date_count'] = $row['date_count'];
9909
			$temp_array['airline_icao'] = $row['airline_icao'];
9910
9911
			$date_array[] = $temp_array;
9912
		}
9913
9914
		return $date_array;
9915
	}
9916
9917
	/**
9918
	* Counts all month airline
9919
	*
9920
	* @return Array the month list
9921
	*
9922
	*/
9923
	public function countAllMonthsAirlines($filters = array())
9924
	{
9925
		global $globalTimezone, $globalDBdriver;
9926
		$filter_query = $this->getFilter($filters,true,true);
9927
		if ($globalTimezone != '') {
9928
			date_default_timezone_set($globalTimezone);
9929
			$datetime = new DateTime();
9930
			$offset = $datetime->format('P');
9931
		} else $offset = '+00:00';
9932
9933
		if ($globalDBdriver == 'mysql') {
9934
			$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
9935
								FROM spotter_output".$filter_query." airline_icao <> '' 
9936
								GROUP BY year_name, month_name
9937
								ORDER BY date_count DESC";
9938
		} else {
9939
			$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
9940
								FROM spotter_output".$filter_query." airline_icao <> '' 
9941
								GROUP BY year_name, month_name
9942
								ORDER BY date_count DESC";
9943
		}
9944
		
9945
		$sth = $this->db->prepare($query);
9946
		$sth->execute(array(':offset' => $offset));
9947
      
9948
		$date_array = array();
9949
		$temp_array = array();
9950
        
9951
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9952
		{
9953
			$temp_array['month_name'] = $row['month_name'];
9954
			$temp_array['year_name'] = $row['year_name'];
9955
			$temp_array['date_count'] = $row['date_count'];
9956
9957
			$date_array[] = $temp_array;
9958
		}
9959
9960
		return $date_array;
9961
	}
9962
	
9963
	/**
9964
	* Counts all month aircraft
9965
	*
9966
	* @return Array the month list
9967
	*
9968
	*/
9969
	public function countAllMonthsAircrafts($filters = array())
9970
	{
9971
		global $globalTimezone, $globalDBdriver;
9972
		if ($globalTimezone != '') {
9973
			date_default_timezone_set($globalTimezone);
9974
			$datetime = new DateTime();
9975
			$offset = $datetime->format('P');
9976
		} else $offset = '+00:00';
9977
		$filter_query = $this->getFilter($filters,true,true);
9978
9979
		if ($globalDBdriver == 'mysql') {
9980
			$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
9981
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
9982
								GROUP BY year_name, month_name
9983
								ORDER BY date_count DESC";
9984
		} else {
9985
			$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
9986
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
9987
								GROUP BY year_name, month_name
9988
								ORDER BY date_count DESC";
9989
		}
9990
		
9991
		$sth = $this->db->prepare($query);
9992
		$sth->execute(array(':offset' => $offset));
9993
      
9994
		$date_array = array();
9995
		$temp_array = array();
9996
        
9997
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9998
		{
9999
			$temp_array['month_name'] = $row['month_name'];
10000
			$temp_array['year_name'] = $row['year_name'];
10001
			$temp_array['date_count'] = $row['date_count'];
10002
10003
			$date_array[] = $temp_array;
10004
		}
10005
10006
		return $date_array;
10007
	}
10008
	
10009
10010
	/**
10011
	* Counts all month aircraft
10012
	*
10013
	* @return Array the month list
10014
	*
10015
	*/
10016
	public function countAllMonthsAircraftsByAirlines($filters = array())
10017
	{
10018
		global $globalTimezone, $globalDBdriver;
10019
		$filter_query = $this->getFilter($filters,true,true);
10020
		if ($globalTimezone != '') {
10021
			date_default_timezone_set($globalTimezone);
10022
			$datetime = new DateTime();
10023
			$offset = $datetime->format('P');
10024
		} else $offset = '+00:00';
10025
10026
		if ($globalDBdriver == 'mysql') {
10027
			$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
10028
								FROM spotter_output".$filter_query." aircraft_icao <> ''  AND spotter_output.airline_icao <> '' 
10029
								GROUP BY spotter_output.airline_icao, year_name, month_name
10030
								ORDER BY date_count DESC";
10031
		} else {
10032
			$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
10033
								FROM spotter_output".$filter_query." aircraft_icao <> '' AND spotter_output.airline_icao <> '' 
10034
								GROUP BY spotter_output.airline_icao, year_name, month_name
10035
								ORDER BY date_count DESC";
10036
		}
10037
		
10038
		$sth = $this->db->prepare($query);
10039
		$sth->execute(array(':offset' => $offset));
10040
      
10041
		$date_array = array();
10042
		$temp_array = array();
10043
        
10044
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10045
		{
10046
			$temp_array['month_name'] = $row['month_name'];
10047
			$temp_array['year_name'] = $row['year_name'];
10048
			$temp_array['date_count'] = $row['date_count'];
10049
			$temp_array['airline_icao'] = $row['airline_icao'];
10050
10051
			$date_array[] = $temp_array;
10052
		}
10053
10054
		return $date_array;
10055
	}
10056
10057
	/**
10058
	* Counts all month real arrival
10059
	*
10060
	* @return Array the month list
10061
	*
10062
	*/
10063
	public function countAllMonthsRealArrivals($filters = array())
10064
	{
10065
		global $globalTimezone, $globalDBdriver;
10066
		if ($globalTimezone != '') {
10067
			date_default_timezone_set($globalTimezone);
10068
			$datetime = new DateTime();
10069
			$offset = $datetime->format('P');
10070
		} else $offset = '+00:00';
10071
		$filter_query = $this->getFilter($filters,true,true);
10072
10073
		if ($globalDBdriver == 'mysql') {
10074
			$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
10075
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
10076
								GROUP BY year_name, month_name
10077
								ORDER BY date_count DESC";
10078
		} else {
10079
			$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
10080
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
10081
								GROUP BY year_name, month_name
10082
								ORDER BY date_count DESC";
10083
		}
10084
		
10085
		$sth = $this->db->prepare($query);
10086
		$sth->execute(array(':offset' => $offset));
10087
      
10088
		$date_array = array();
10089
		$temp_array = array();
10090
        
10091
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10092
		{
10093
			$temp_array['month_name'] = $row['month_name'];
10094
			$temp_array['year_name'] = $row['year_name'];
10095
			$temp_array['date_count'] = $row['date_count'];
10096
10097
			$date_array[] = $temp_array;
10098
		}
10099
10100
		return $date_array;
10101
	}
10102
	
10103
10104
	/**
10105
	* Counts all month real arrival
10106
	*
10107
	* @return Array the month list
10108
	*
10109
	*/
10110
	public function countAllMonthsRealArrivalsByAirlines($filters = array())
10111
	{
10112
		global $globalTimezone, $globalDBdriver;
10113
		$filter_query = $this->getFilter($filters,true,true);
10114
		if ($globalTimezone != '') {
10115
			date_default_timezone_set($globalTimezone);
10116
			$datetime = new DateTime();
10117
			$offset = $datetime->format('P');
10118
		} else $offset = '+00:00';
10119
10120
		if ($globalDBdriver == 'mysql') {
10121
			$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
10122
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
10123
								GROUP BY spotter_output.airline_icao, year_name, month_name
10124
								ORDER BY date_count DESC";
10125
		} else {
10126
			$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
10127
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
10128
								GROUP BY spotter_output.airline_icao, year_name, month_name
10129
								ORDER BY date_count DESC";
10130
		}
10131
		
10132
		$sth = $this->db->prepare($query);
10133
		$sth->execute(array(':offset' => $offset));
10134
      
10135
		$date_array = array();
10136
		$temp_array = array();
10137
        
10138
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10139
		{
10140
			$temp_array['month_name'] = $row['month_name'];
10141
			$temp_array['year_name'] = $row['year_name'];
10142
			$temp_array['date_count'] = $row['date_count'];
10143
			$temp_array['airline_icao'] = $row['airline_icao'];
10144
10145
			$date_array[] = $temp_array;
10146
		}
10147
10148
		return $date_array;
10149
	}
10150
	
10151
10152
	/**
10153
	* Counts all dates during the last year
10154
	*
10155
	* @return Array the date list
10156
	*
10157
	*/
10158
	public function countAllMonthsLastYear($filters)
10159
	{
10160
		global $globalTimezone, $globalDBdriver;
10161
		if ($globalTimezone != '') {
10162
			date_default_timezone_set($globalTimezone);
10163
			$datetime = new DateTime();
10164
			$offset = $datetime->format('P');
10165
		} else $offset = '+00:00';
10166
		$filter_query = $this->getFilter($filters,true,true);
10167
		if ($globalDBdriver == 'mysql') {
10168
			$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
10169
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 YEAR)";
10170
			$query .= " GROUP BY year_name, month_name
10171
								ORDER BY year_name, month_name ASC";
10172
			$query_data = array(':offset' => $offset);
10173
		} else {
10174
			$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
10175
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 YEARS'";
10176
			$query .= " GROUP BY year_name, month_name
10177
								ORDER BY year_name, month_name ASC";
10178
			$query_data = array(':offset' => $offset);
10179
    		}
10180
		
10181
		$sth = $this->db->prepare($query);
10182
		$sth->execute($query_data);
10183
      
10184
		$date_array = array();
10185
		$temp_array = array();
10186
        
10187
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10188
		{
10189
			$temp_array['year_name'] = $row['year_name'];
10190
			$temp_array['month_name'] = $row['month_name'];
10191
			$temp_array['date_count'] = $row['date_count'];
10192
          
10193
			$date_array[] = $temp_array;
10194
		}
10195
10196
		return $date_array;
10197
	}
10198
	
10199
	
10200
	
10201
	/**
10202
	* Counts all hours
10203
	*
10204
	* @return Array the hour list
10205
	*
10206
	*/
10207
	public function countAllHours($orderby,$filters = array())
10208
	{
10209
		global $globalTimezone, $globalDBdriver;
10210
		if ($globalTimezone != '') {
10211
			date_default_timezone_set($globalTimezone);
10212
			$datetime = new DateTime();
10213
			$offset = $datetime->format('P');
10214
		} else $offset = '+00:00';
10215
10216
		$orderby_sql = '';
10217
		if ($orderby == "hour")
10218
		{
10219
			$orderby_sql = "ORDER BY hour_name ASC";
10220
		}
10221
		if ($orderby == "count")
10222
		{
10223
			$orderby_sql = "ORDER BY hour_count DESC";
10224
		}
10225
		
10226
		if ($globalDBdriver == 'mysql') {
10227
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10228
								FROM spotter_output";
10229
			$query .= $this->getFilter($filters);
10230
			$query .= " GROUP BY hour_name 
10231
								".$orderby_sql;
10232
10233
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
10234
								FROM spotter_output 
10235
								GROUP BY hour_name 
10236
								".$orderby_sql."
10237
								LIMIT 10 OFFSET 00";
10238
  */    
10239
		$query_data = array(':offset' => $offset);
10240
		} else {
10241
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10242
								FROM spotter_output";
10243
			$query .= $this->getFilter($filters);
10244
			$query .= " GROUP BY hour_name 
10245
								".$orderby_sql;
10246
			$query_data = array(':offset' => $offset);
10247
		}
10248
		
10249
		$sth = $this->db->prepare($query);
10250
		$sth->execute($query_data);
10251
      
10252
		$hour_array = array();
10253
		$temp_array = array();
10254
        
10255
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10256
		{
10257
			$temp_array['hour_name'] = $row['hour_name'];
10258
			$temp_array['hour_count'] = $row['hour_count'];
10259
          
10260
			$hour_array[] = $temp_array;
10261
		}
10262
10263
		return $hour_array;
10264
	}
10265
	
10266
	/**
10267
	* Counts all hours
10268
	*
10269
	* @return Array the hour list
10270
	*
10271
	*/
10272
	public function countAllHoursByAirlines($orderby, $filters = array())
10273
	{
10274
		global $globalTimezone, $globalDBdriver;
10275
		$filter_query = $this->getFilter($filters,true,true);
10276
		if ($globalTimezone != '') {
10277
			date_default_timezone_set($globalTimezone);
10278
			$datetime = new DateTime();
10279
			$offset = $datetime->format('P');
10280
		} else $offset = '+00:00';
10281
10282
		$orderby_sql = '';
10283
		if ($orderby == "hour")
10284
		{
10285
			$orderby_sql = "ORDER BY hour_name ASC";
10286
		}
10287
		if ($orderby == "count")
10288
		{
10289
			$orderby_sql = "ORDER BY hour_count DESC";
10290
		}
10291
		
10292
		if ($globalDBdriver == 'mysql') {
10293
			$query  = "SELECT spotter_output.airline_icao, HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10294
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
10295
								GROUP BY spotter_output.airline_icao, hour_name 
10296
								".$orderby_sql;
10297
10298
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
10299
								FROM spotter_output 
10300
								GROUP BY hour_name 
10301
								".$orderby_sql."
10302
								LIMIT 10 OFFSET 00";
10303
  */    
10304
		$query_data = array(':offset' => $offset);
10305
		} else {
10306
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10307
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
10308
								GROUP BY spotter_output.airline_icao, hour_name 
10309
								".$orderby_sql;
10310
			$query_data = array(':offset' => $offset);
10311
		}
10312
		
10313
		$sth = $this->db->prepare($query);
10314
		$sth->execute($query_data);
10315
      
10316
		$hour_array = array();
10317
		$temp_array = array();
10318
        
10319
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10320
		{
10321
			$temp_array['hour_name'] = $row['hour_name'];
10322
			$temp_array['hour_count'] = $row['hour_count'];
10323
			$temp_array['airline_icao'] = $row['airline_icao'];
10324
          
10325
			$hour_array[] = $temp_array;
10326
		}
10327
10328
		return $hour_array;
10329
	}
10330
10331
10332
10333
	/**
10334
	* Counts all hours by airline
10335
	*
10336
	* @return Array the hour list
10337
	*
10338
	*/
10339
	public function countAllHoursByAirline($airline_icao, $filters = array())
10340
	{
10341
		global $globalTimezone, $globalDBdriver;
10342
		$filter_query = $this->getFilter($filters,true,true);
10343
		if ($globalTimezone != '') {
10344
			date_default_timezone_set($globalTimezone);
10345
			$datetime = new DateTime();
10346
			$offset = $datetime->format('P');
10347
		} else $offset = '+00:00';
10348
10349
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
10350
10351
		if ($globalDBdriver == 'mysql') {
10352
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10353
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
10354
								GROUP BY hour_name 
10355
								ORDER BY hour_name ASC";
10356
		} else {
10357
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10358
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
10359
								GROUP BY hour_name 
10360
								ORDER BY hour_name ASC";
10361
		}
10362
		
10363
		$sth = $this->db->prepare($query);
10364
		$sth->execute(array(':airline_icao' => $airline_icao,':offset' => $offset));
10365
      
10366
		$hour_array = array();
10367
		$temp_array = array();
10368
        
10369
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10370
		{
10371
			$temp_array['hour_name'] = $row['hour_name'];
10372
			$temp_array['hour_count'] = $row['hour_count'];
10373
          
10374
			$hour_array[] = $temp_array;
10375
		}
10376
10377
		return $hour_array;
10378
	}
10379
	
10380
	
10381
	
10382
	
10383
	/**
10384
	* Counts all hours by aircraft
10385
	*
10386
	* @return Array the hour list
10387
	*
10388
	*/
10389
	public function countAllHoursByAircraft($aircraft_icao, $filters = array())
10390
	{
10391
		global $globalTimezone, $globalDBdriver;
10392
		$filter_query = $this->getFilter($filters,true,true);
10393
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
10394
		if ($globalTimezone != '') {
10395
			date_default_timezone_set($globalTimezone);
10396
			$datetime = new DateTime();
10397
			$offset = $datetime->format('P');
10398
		} else $offset = '+00:00';
10399
10400
		if ($globalDBdriver == 'mysql') {
10401
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10402
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
10403
								GROUP BY hour_name 
10404
								ORDER BY hour_name ASC";
10405
		} else {
10406
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10407
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
10408
								GROUP BY hour_name 
10409
								ORDER BY hour_name ASC";
10410
		}
10411
		
10412
		$sth = $this->db->prepare($query);
10413
		$sth->execute(array(':aircraft_icao' => $aircraft_icao,':offset' => $offset));
10414
      
10415
		$hour_array = array();
10416
		$temp_array = array();
10417
        
10418
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10419
		{
10420
			$temp_array['hour_name'] = $row['hour_name'];
10421
			$temp_array['hour_count'] = $row['hour_count'];
10422
          
10423
			$hour_array[] = $temp_array;
10424
		}
10425
10426
		return $hour_array;
10427
	}
10428
	
10429
	
10430
	/**
10431
	* Counts all hours by aircraft registration
10432
	*
10433
	* @return Array the hour list
10434
	*
10435
	*/
10436
	public function countAllHoursByRegistration($registration, $filters = array())
10437
	{
10438
		global $globalTimezone, $globalDBdriver;
10439
		$filter_query = $this->getFilter($filters,true,true);
10440
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
10441
		if ($globalTimezone != '') {
10442
			date_default_timezone_set($globalTimezone);
10443
			$datetime = new DateTime();
10444
			$offset = $datetime->format('P');
10445
		} else $offset = '+00:00';
10446
10447
		if ($globalDBdriver == 'mysql') {
10448
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10449
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
10450
								GROUP BY hour_name 
10451
								ORDER BY hour_name ASC";
10452
		} else {
10453
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10454
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
10455
								GROUP BY hour_name 
10456
								ORDER BY hour_name ASC";
10457
		}
10458
		
10459
		$sth = $this->db->prepare($query);
10460
		$sth->execute(array(':registration' => $registration,':offset' => $offset));
10461
      
10462
		$hour_array = array();
10463
		$temp_array = array();
10464
        
10465
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10466
		{
10467
			$temp_array['hour_name'] = $row['hour_name'];
10468
			$temp_array['hour_count'] = $row['hour_count'];
10469
          
10470
			$hour_array[] = $temp_array;
10471
		}
10472
10473
		return $hour_array;
10474
	}
10475
	
10476
	
10477
	/**
10478
	* Counts all hours by airport
10479
	*
10480
	* @return Array the hour list
10481
	*
10482
	*/
10483
	public function countAllHoursByAirport($airport_icao, $filters = array())
10484
	{
10485
		global $globalTimezone, $globalDBdriver;
10486
		$filter_query = $this->getFilter($filters,true,true);
10487
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
10488
		if ($globalTimezone != '') {
10489
			date_default_timezone_set($globalTimezone);
10490
			$datetime = new DateTime();
10491
			$offset = $datetime->format('P');
10492
		} else $offset = '+00:00';
10493
10494
		if ($globalDBdriver == 'mysql') {
10495
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10496
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
10497
								GROUP BY hour_name 
10498
								ORDER BY hour_name ASC";
10499
		} else {
10500
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10501
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
10502
								GROUP BY hour_name 
10503
								ORDER BY hour_name ASC";
10504
		}
10505
		
10506
		$sth = $this->db->prepare($query);
10507
		$sth->execute(array(':airport_icao' => $airport_icao,':offset' => $offset));
10508
      
10509
		$hour_array = array();
10510
		$temp_array = array();
10511
        
10512
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10513
		{
10514
			$temp_array['hour_name'] = $row['hour_name'];
10515
			$temp_array['hour_count'] = $row['hour_count'];
10516
          
10517
			$hour_array[] = $temp_array;
10518
		}
10519
10520
		return $hour_array;
10521
	}
10522
	
10523
	
10524
	
10525
	/**
10526
	* Counts all hours by manufacturer
10527
	*
10528
	* @return Array the hour list
10529
	*
10530
	*/
10531
	public function countAllHoursByManufacturer($aircraft_manufacturer,$filters =array())
10532
	{
10533
		global $globalTimezone, $globalDBdriver;
10534
		$filter_query = $this->getFilter($filters,true,true);
10535
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
10536
		if ($globalTimezone != '') {
10537
			date_default_timezone_set($globalTimezone);
10538
			$datetime = new DateTime();
10539
			$offset = $datetime->format('P');
10540
		} else $offset = '+00:00';
10541
10542
		if ($globalDBdriver == 'mysql') {
10543
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10544
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
10545
								GROUP BY hour_name 
10546
								ORDER BY hour_name ASC";
10547
		} else {
10548
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10549
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
10550
								GROUP BY hour_name 
10551
								ORDER BY hour_name ASC";
10552
		}
10553
		
10554
		$sth = $this->db->prepare($query);
10555
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer,':offset' => $offset));
10556
      
10557
		$hour_array = array();
10558
		$temp_array = array();
10559
        
10560
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10561
		{
10562
			$temp_array['hour_name'] = $row['hour_name'];
10563
			$temp_array['hour_count'] = $row['hour_count'];
10564
          
10565
			$hour_array[] = $temp_array;
10566
		}
10567
10568
		return $hour_array;
10569
	}
10570
	
10571
	
10572
	
10573
	/**
10574
	* Counts all hours by date
10575
	*
10576
	* @return Array the hour list
10577
	*
10578
	*/
10579
	public function countAllHoursByDate($date, $filters = array())
10580
	{
10581
		global $globalTimezone, $globalDBdriver;
10582
		$filter_query = $this->getFilter($filters,true,true);
10583
		$date = filter_var($date,FILTER_SANITIZE_STRING);
10584
		if ($globalTimezone != '') {
10585
			date_default_timezone_set($globalTimezone);
10586
			$datetime = new DateTime($date);
10587
			$offset = $datetime->format('P');
10588
		} else $offset = '+00:00';
10589
10590
		if ($globalDBdriver == 'mysql') {
10591
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10592
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
10593
								GROUP BY hour_name 
10594
								ORDER BY hour_name ASC";
10595
		} else {
10596
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10597
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset, 'YYYY-mm-dd') = :date
10598
								GROUP BY hour_name 
10599
								ORDER BY hour_name ASC";
10600
		}
10601
		
10602
		$sth = $this->db->prepare($query);
10603
		$sth->execute(array(':date' => $date, ':offset' => $offset));
10604
      
10605
		$hour_array = array();
10606
		$temp_array = array();
10607
        
10608
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10609
		{
10610
			$temp_array['hour_name'] = $row['hour_name'];
10611
			$temp_array['hour_count'] = $row['hour_count'];
10612
          
10613
			$hour_array[] = $temp_array;
10614
		}
10615
10616
		return $hour_array;
10617
	}
10618
	
10619
	
10620
	
10621
	/**
10622
	* Counts all hours by a ident/callsign
10623
	*
10624
	* @return Array the hour list
10625
	*
10626
	*/
10627
	public function countAllHoursByIdent($ident, $filters = array())
10628
	{
10629
		global $globalTimezone, $globalDBdriver;
10630
		$filter_query = $this->getFilter($filters,true,true);
10631
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
10632
		if ($globalTimezone != '') {
10633
			date_default_timezone_set($globalTimezone);
10634
			$datetime = new DateTime();
10635
			$offset = $datetime->format('P');
10636
		} else $offset = '+00:00';
10637
10638
		if ($globalDBdriver == 'mysql') {
10639
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10640
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
10641
								GROUP BY hour_name 
10642
								ORDER BY hour_name ASC";
10643
		} else {
10644
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10645
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
10646
								GROUP BY hour_name 
10647
								ORDER BY hour_name ASC";
10648
		}
10649
      
10650
		
10651
		$sth = $this->db->prepare($query);
10652
		$sth->execute(array(':ident' => $ident,':offset' => $offset));
10653
      
10654
		$hour_array = array();
10655
		$temp_array = array();
10656
        
10657
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10658
		{
10659
			$temp_array['hour_name'] = $row['hour_name'];
10660
			$temp_array['hour_count'] = $row['hour_count'];
10661
          
10662
			$hour_array[] = $temp_array;
10663
		}
10664
10665
		return $hour_array;
10666
	}
10667
	
10668
	/**
10669
	* Counts all hours by a owner
10670
	*
10671
	* @return Array the hour list
10672
	*
10673
	*/
10674
	public function countAllHoursByOwner($owner, $filters = array())
10675
	{
10676
		global $globalTimezone, $globalDBdriver;
10677
		$filter_query = $this->getFilter($filters,true,true);
10678
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
10679
		if ($globalTimezone != '') {
10680
			date_default_timezone_set($globalTimezone);
10681
			$datetime = new DateTime();
10682
			$offset = $datetime->format('P');
10683
		} else $offset = '+00:00';
10684
10685
		if ($globalDBdriver == 'mysql') {
10686
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10687
								FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
10688
								GROUP BY hour_name 
10689
								ORDER BY hour_name ASC";
10690
		} else {
10691
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10692
								FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
10693
								GROUP BY hour_name 
10694
								ORDER BY hour_name ASC";
10695
		}
10696
      
10697
		
10698
		$sth = $this->db->prepare($query);
10699
		$sth->execute(array(':owner' => $owner,':offset' => $offset));
10700
      
10701
		$hour_array = array();
10702
		$temp_array = array();
10703
        
10704
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10705
		{
10706
			$temp_array['hour_name'] = $row['hour_name'];
10707
			$temp_array['hour_count'] = $row['hour_count'];
10708
          
10709
			$hour_array[] = $temp_array;
10710
		}
10711
10712
		return $hour_array;
10713
	}
10714
	
10715
	/**
10716
	* Counts all hours by a pilot
10717
	*
10718
	* @return Array the hour list
10719
	*
10720
	*/
10721
	public function countAllHoursByPilot($pilot, $filters = array())
10722
	{
10723
		global $globalTimezone, $globalDBdriver;
10724
		$filter_query = $this->getFilter($filters,true,true);
10725
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
10726
		if ($globalTimezone != '') {
10727
			date_default_timezone_set($globalTimezone);
10728
			$datetime = new DateTime();
10729
			$offset = $datetime->format('P');
10730
		} else $offset = '+00:00';
10731
10732
		if ($globalDBdriver == 'mysql') {
10733
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10734
								FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
10735
								GROUP BY hour_name 
10736
								ORDER BY hour_name ASC";
10737
		} else {
10738
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10739
								FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
10740
								GROUP BY hour_name 
10741
								ORDER BY hour_name ASC";
10742
		}
10743
      
10744
		
10745
		$sth = $this->db->prepare($query);
10746
		$sth->execute(array(':pilot' => $pilot,':offset' => $offset));
10747
      
10748
		$hour_array = array();
10749
		$temp_array = array();
10750
        
10751
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10752
		{
10753
			$temp_array['hour_name'] = $row['hour_name'];
10754
			$temp_array['hour_count'] = $row['hour_count'];
10755
          
10756
			$hour_array[] = $temp_array;
10757
		}
10758
10759
		return $hour_array;
10760
	}
10761
	
10762
	
10763
	
10764
	/**
10765
	* Counts all hours by route
10766
	*
10767
	* @return Array the hour list
10768
	*
10769
	*/
10770
	public function countAllHoursByRoute($departure_airport_icao, $arrival_airport_icao, $filters =array())
10771
	{
10772
		global $globalTimezone, $globalDBdriver;
10773
		$filter_query = $this->getFilter($filters,true,true);
10774
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
10775
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
10776
		if ($globalTimezone != '') {
10777
			date_default_timezone_set($globalTimezone);
10778
			$datetime = new DateTime();
10779
			$offset = $datetime->format('P');
10780
		} else $offset = '+00:00';
10781
10782
		if ($globalDBdriver == 'mysql') {
10783
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10784
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
10785
								GROUP BY hour_name 
10786
								ORDER BY hour_name ASC";
10787
		} else {
10788
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10789
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
10790
								GROUP BY hour_name 
10791
								ORDER BY hour_name ASC";
10792
		}
10793
		
10794
		$sth = $this->db->prepare($query);
10795
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao,':offset' => $offset));
10796
      
10797
		$hour_array = array();
10798
		$temp_array = array();
10799
        
10800
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10801
		{
10802
			$temp_array['hour_name'] = $row['hour_name'];
10803
			$temp_array['hour_count'] = $row['hour_count'];
10804
          
10805
			$hour_array[] = $temp_array;
10806
		}
10807
10808
		return $hour_array;
10809
	}
10810
	
10811
	
10812
	/**
10813
	* Counts all hours by country
10814
	*
10815
	* @return Array the hour list
10816
	*
10817
	*/
10818
	public function countAllHoursByCountry($country, $filters = array())
10819
	{
10820
		global $globalTimezone, $globalDBdriver;
10821
		$filter_query = $this->getFilter($filters,true,true);
10822
		$country = filter_var($country,FILTER_SANITIZE_STRING);
10823
		if ($globalTimezone != '') {
10824
			date_default_timezone_set($globalTimezone);
10825
			$datetime = new DateTime();
10826
			$offset = $datetime->format('P');
10827
		} else $offset = '+00:00';
10828
10829
		if ($globalDBdriver == 'mysql') {
10830
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10831
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
10832
								GROUP BY hour_name 
10833
								ORDER BY hour_name ASC";
10834
		} else {
10835
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10836
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
10837
								GROUP BY hour_name 
10838
								ORDER BY hour_name ASC";
10839
		}
10840
		
10841
		$sth = $this->db->prepare($query);
10842
		$sth->execute(array(':country' => $country,':offset' => $offset));
10843
      
10844
		$hour_array = array();
10845
		$temp_array = array();
10846
        
10847
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10848
		{
10849
			$temp_array['hour_name'] = $row['hour_name'];
10850
			$temp_array['hour_count'] = $row['hour_count'];
10851
          
10852
			$hour_array[] = $temp_array;
10853
		}
10854
10855
		return $hour_array;
10856
	}
10857
10858
10859
10860
10861
	/**
10862
	* Counts all aircraft that have flown over
10863
	*
10864
	* @return Integer the number of aircrafts
10865
	*
10866
	*/
10867
	public function countOverallAircrafts($filters = array(),$year = '',$month = '')
10868
	{
10869
		global $globalDBdriver;
10870
		$filter_query = $this->getFilter($filters,true,true);
10871
		$query  = "SELECT COUNT(DISTINCT spotter_output.aircraft_icao) AS aircraft_count  
10872
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''";
10873
		$query_values = array();
10874
		if ($year != '') {
10875
			if ($globalDBdriver == 'mysql') {
10876
				$query .= " AND YEAR(spotter_output.date) = :year";
10877
				$query_values = array_merge($query_values,array(':year' => $year));
10878
			} else {
10879
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10880
				$query_values = array_merge($query_values,array(':year' => $year));
10881
			}
10882
		}
10883
		if ($month != '') {
10884
			if ($globalDBdriver == 'mysql') {
10885
				$query .= " AND MONTH(spotter_output.date) = :month";
10886
				$query_values = array_merge($query_values,array(':month' => $month));
10887
			} else {
10888
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10889
				$query_values = array_merge($query_values,array(':month' => $month));
10890
			}
10891
		}
10892
10893
		$sth = $this->db->prepare($query);
10894
		$sth->execute($query_values);
10895
		return $sth->fetchColumn();
10896
	}
10897
10898
	/**
10899
	* Counts all flight that really arrival
10900
	*
10901
	* @return Integer the number of aircrafts
10902
	*
10903
	*/
10904
	public function countOverallArrival($filters = array(),$year = '',$month = '')
10905
	{
10906
		global $globalDBdriver;
10907
		$filter_query = $this->getFilter($filters,true,true);
10908
		$query  = "SELECT COUNT(spotter_output.real_arrival_airport_icao) AS arrival_count  
10909
                    FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> ''";
10910
		$query_values = array();
10911
		if ($year != '') {
10912
			if ($globalDBdriver == 'mysql') {
10913
				$query .= " AND YEAR(spotter_output.date) = :year";
10914
				$query_values = array_merge($query_values,array(':year' => $year));
10915
			} else {
10916
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10917
				$query_values = array_merge($query_values,array(':year' => $year));
10918
			}
10919
		}
10920
		if ($month != '') {
10921
			if ($globalDBdriver == 'mysql') {
10922
				$query .= " AND MONTH(spotter_output.date) = :month";
10923
				$query_values = array_merge($query_values,array(':month' => $month));
10924
			} else {
10925
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10926
				$query_values = array_merge($query_values,array(':month' => $month));
10927
			}
10928
		}
10929
		
10930
		$sth = $this->db->prepare($query);
10931
		$sth->execute($query_values);
10932
		return $sth->fetchColumn();
10933
	}
10934
10935
	/**
10936
	* Counts all pilots that have flown over
10937
	*
10938
	* @return Integer the number of pilots
10939
	*
10940
	*/
10941
	public function countOverallPilots($filters = array(),$year = '',$month = '')
10942
	{
10943
		global $globalDBdriver;
10944
		$filter_query = $this->getFilter($filters,true,true);
10945
		$query  = "SELECT COUNT(DISTINCT spotter_output.pilot_id) AS pilot_count  
10946
                    FROM spotter_output".$filter_query." spotter_output.pilot_id <> ''";
10947
		$query_values = array();
10948
		if ($year != '') {
10949
			if ($globalDBdriver == 'mysql') {
10950
				$query .= " AND YEAR(spotter_output.date) = :year";
10951
				$query_values = array_merge($query_values,array(':year' => $year));
10952
			} else {
10953
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10954
				$query_values = array_merge($query_values,array(':year' => $year));
10955
			}
10956
		}
10957
		if ($month != '') {
10958
			if ($globalDBdriver == 'mysql') {
10959
				$query .= " AND MONTH(spotter_output.date) = :month";
10960
				$query_values = array_merge($query_values,array(':month' => $month));
10961
			} else {
10962
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10963
				$query_values = array_merge($query_values,array(':month' => $month));
10964
			}
10965
		}
10966
		$sth = $this->db->prepare($query);
10967
		$sth->execute($query_values);
10968
		return $sth->fetchColumn();
10969
	}
10970
10971
	/**
10972
	* Counts all owners that have flown over
10973
	*
10974
	* @return Integer the number of owners
10975
	*
10976
	*/
10977
	public function countOverallOwners($filters = array(),$year = '',$month = '')
10978
	{
10979
		global $globalDBdriver;
10980
		$filter_query = $this->getFilter($filters,true,true);
10981
		$query  = "SELECT COUNT(DISTINCT spotter_output.owner_name) AS owner_count  
10982
                    FROM spotter_output".$filter_query." spotter_output.owner_name <> ''";
10983
		$query_values = array();
10984
		if ($year != '') {
10985
			if ($globalDBdriver == 'mysql') {
10986
				$query .= " AND YEAR(spotter_output.date) = :year";
10987
				$query_values = array_merge($query_values,array(':year' => $year));
10988
			} else {
10989
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10990
				$query_values = array_merge($query_values,array(':year' => $year));
10991
			}
10992
		}
10993
		if ($month != '') {
10994
			if ($globalDBdriver == 'mysql') {
10995
				$query .= " AND MONTH(spotter_output.date) = :month";
10996
				$query_values = array_merge($query_values,array(':month' => $month));
10997
			} else {
10998
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10999
				$query_values = array_merge($query_values,array(':month' => $month));
11000
			}
11001
		}
11002
		$sth = $this->db->prepare($query);
11003
		$sth->execute($query_values);
11004
		return $sth->fetchColumn();
11005
	}
11006
	
11007
	
11008
	/**
11009
	* Counts all flights that have flown over
11010
	*
11011
	* @return Integer the number of flights
11012
	*
11013
	*/
11014
	public function countOverallFlights($filters = array(),$year = '',$month = '')
11015
	{
11016
		global $globalDBdriver;
11017
		$queryi  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count FROM spotter_output";
11018
		$query_values = array();
11019
		$query = '';
11020
		if ($year != '') {
11021
			if ($globalDBdriver == 'mysql') {
11022
				$query .= " AND YEAR(spotter_output.date) = :year";
11023
				$query_values = array_merge($query_values,array(':year' => $year));
11024
			} else {
11025
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
11026
				$query_values = array_merge($query_values,array(':year' => $year));
11027
			}
11028
		}
11029
		if ($month != '') {
11030
			if ($globalDBdriver == 'mysql') {
11031
				$query .= " AND MONTH(spotter_output.date) = :month";
11032
				$query_values = array_merge($query_values,array(':month' => $month));
11033
			} else {
11034
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
11035
				$query_values = array_merge($query_values,array(':month' => $month));
11036
			}
11037
		}
11038
		if (empty($query_values)) $queryi .= $this->getFilter($filters);
11039
		else $queryi .= $this->getFilter($filters,true,true).substr($query,4);
11040
		
11041
		$sth = $this->db->prepare($queryi);
11042
		$sth->execute($query_values);
11043
		return $sth->fetchColumn();
11044
	}
11045
	
11046
	/**
11047
	* Counts all military flights that have flown over
11048
	*
11049
	* @return Integer the number of flights
11050
	*
11051
	*/
11052
	public function countOverallMilitaryFlights($filters = array(),$year = '',$month = '')
11053
	{
11054
		global $globalDBdriver;
11055
		$filter_query = $this->getFilter($filters,true,true);
11056
		$query  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count  
11057
                    FROM airlines,spotter_output".$filter_query." spotter_output.airline_icao = airlines.icao AND airlines.type = 'military'";
11058
		$query_values = array();
11059
		if ($year != '') {
11060
			if ($globalDBdriver == 'mysql') {
11061
				$query .= " AND YEAR(spotter_output.date) = :year";
11062
				$query_values = array_merge($query_values,array(':year' => $year));
11063
			} else {
11064
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
11065
				$query_values = array_merge($query_values,array(':year' => $year));
11066
			}
11067
		}
11068
		if ($month != '') {
11069
			if ($globalDBdriver == 'mysql') {
11070
				$query .= " AND MONTH(spotter_output.date) = :month";
11071
				$query_values = array_merge($query_values,array(':month' => $month));
11072
			} else {
11073
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
11074
				$query_values = array_merge($query_values,array(':month' => $month));
11075
			}
11076
		}
11077
      
11078
		$sth = $this->db->prepare($query);
11079
		$sth->execute($query_values);
11080
		return $sth->fetchColumn();
11081
	}
11082
	
11083
	
11084
	
11085
	/**
11086
	* Counts all airlines that have flown over
11087
	*
11088
	* @return Integer the number of airlines
11089
	*
11090
	*/
11091
	public function countOverallAirlines($filters = array(),$year = '',$month = '')
11092
	{
11093
		global $globalDBdriver;
11094
		$queryi  = "SELECT COUNT(DISTINCT spotter_output.airline_name) AS airline_count 
11095
							FROM spotter_output";
11096
      
11097
		$query_values = array();
11098
		$query = '';
11099
		if ($year != '') {
11100
			if ($globalDBdriver == 'mysql') {
11101
				$query .= " AND YEAR(spotter_output.date) = :year";
11102
				$query_values = array_merge($query_values,array(':year' => $year));
11103
			} else {
11104
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
11105
				$query_values = array_merge($query_values,array(':year' => $year));
11106
			}
11107
		}
11108
		if ($month != '') {
11109
			if ($globalDBdriver == 'mysql') {
11110
				$query .= " AND MONTH(spotter_output.date) = :month";
11111
				$query_values = array_merge($query_values,array(':month' => $month));
11112
			} else {
11113
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
11114
				$query_values = array_merge($query_values,array(':month' => $month));
11115
			}
11116
		}
11117
                if ($query == '') $queryi .= $this->getFilter($filters);
11118
                else $queryi .= $this->getFilter($filters,true,true).substr($query,4);
11119
11120
11121
		$sth = $this->db->prepare($queryi);
11122
		$sth->execute($query_values);
11123
		return $sth->fetchColumn();
11124
	}
11125
11126
  
11127
	/**
11128
	* Counts all hours of today
11129
	*
11130
	* @return Array the hour list
11131
	*
11132
	*/
11133
	public function countAllHoursFromToday($filters = array())
11134
	{
11135
		global $globalTimezone, $globalDBdriver;
11136
		$filter_query = $this->getFilter($filters,true,true);
11137
		if ($globalTimezone != '') {
11138
			date_default_timezone_set($globalTimezone);
11139
			$datetime = new DateTime();
11140
			$offset = $datetime->format('P');
11141
		} else $offset = '+00:00';
11142
11143
		if ($globalDBdriver == 'mysql') {
11144
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
11145
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = CURDATE()
11146
								GROUP BY hour_name 
11147
								ORDER BY hour_name ASC";
11148
		} else {
11149
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
11150
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = CAST(NOW() AS date)
11151
								GROUP BY hour_name 
11152
								ORDER BY hour_name ASC";
11153
		}
11154
		
11155
		$sth = $this->db->prepare($query);
11156
		$sth->execute(array(':offset' => $offset));
11157
      
11158
		$hour_array = array();
11159
		$temp_array = array();
11160
        
11161
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11162
		{
11163
			$temp_array['hour_name'] = $row['hour_name'];
11164
			$temp_array['hour_count'] = $row['hour_count'];
11165
			$hour_array[] = $temp_array;
11166
		}
11167
11168
		return $hour_array;
11169
	}
11170
    
11171
	/**
11172
	* Gets all the spotter information based on calculated upcoming flights
11173
	*
11174
	* @return Array the spotter information
11175
	*
11176
	*/
11177
	public function getUpcomingFlights($limit = '', $sort = '', $filters = array())
11178
	{
11179
		global $global_query, $globalDBdriver, $globalTimezone;
11180
		$filter_query = $this->getFilter($filters,true,true);
11181
		date_default_timezone_set('UTC');
11182
		$limit_query = '';
11183
		if ($limit != "")
11184
		{
11185
			$limit_array = explode(",", $limit);
11186
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
11187
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
11188
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
11189
			{
11190
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
11191
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
11192
			}
11193
		}
11194
		$currentHour = date("G");
11195
		$next3Hours = date("G", strtotime("+3 hour"));
11196
		//if the next 3 hours is already equal to/past midnight, we limit it to stay there, otherwise the query will fail
11197
		if ($currentHour >= 21 && $next3Hours >= 00)
11198
		{
11199
			$next3Hours = 24;
11200
		}
11201
		$currentDayofWeek = date("l");
11202
		if ($globalDBdriver == 'mysql') {
11203
			if ($sort != "")
11204
			{
11205
				$search_orderby_array = $this->getOrderBy();
11206
				$orderby_query = $search_orderby_array[$sort]['sql'];
11207
			} else {
11208
				$orderby_query = " ORDER BY HOUR(spotter_output.date) ASC";
11209
			}
11210
/*
11211
			$query = "SELECT spotter_output.*, count(spotter_output.ident) as ident_count
11212
			    FROM spotter_output
11213
			    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'
11214
			    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";
11215
*/
11216
/*			$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
11217
			    FROM spotter_output
11218
			    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'
11219
			    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";
11220
*/
11221
			$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 
11222
			    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'
11223
			    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
11224
			    HAVING count(spotter_output.ident) > 5$orderby_query";
11225
11226
			$spotter_array = $this->getDataFromDB($query.$limit_query);
11227
		} else {
11228
			if ($sort != "")
11229
			{
11230
				$search_orderby_array = $this->getOrderBy();
11231
				$orderby_query = $search_orderby_array[$sort]['sql'];
11232
			} else {
11233
				$orderby_query = " ORDER BY to_char(spotter_output.date,'HH') ASC";
11234
			}
11235
			$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') 
11236
			    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 <> '' 
11237
			    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')
11238
			    HAVING count(spotter_output.ident) > 5$orderby_query";
11239
			//echo $query;
11240
			$spotter_array = $this->getDataFromDB($query.$limit_query,array(':timezone' => $globalTimezone));
11241
			/*
11242
			$sth = $this->db->prepare($query);
11243
			$sth->execute(array(':timezone' => $globalTimezone));
11244
			return $sth->fetchAll(PDO::FETCH_ASSOC);
11245
			*/
11246
		}
11247
		return $spotter_array;
11248
	}
11249
    
11250
    
11251
     /**
11252
	* Gets the Barrie Spotter ID based on the FlightAware ID
11253
	*
11254
	* @return Integer the Barrie Spotter ID
11255
q	*
11256
	*/
11257
	public function getSpotterIDBasedOnFlightAwareID($flightaware_id)
11258
	{
11259
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
11260
11261
		$query  = "SELECT spotter_output.spotter_id
11262
								FROM spotter_output 
11263
								WHERE spotter_output.flightaware_id = '".$flightaware_id."'";
11264
        
11265
		
11266
		$sth = $this->db->prepare($query);
11267
		$sth->execute();
11268
11269
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11270
		{
11271
			return $row['spotter_id'];
11272
		}
11273
	}
11274
  
11275
 
11276
	/**
11277
	* Parses a date string
11278
	*
11279
	* @param String $dateString the date string
11280
	* @param String $timezone the timezone of a user
11281
	* @return Array the time information
11282
	*
11283
	*/
11284
	public function parseDateString($dateString, $timezone = '')
11285
	{
11286
		$time_array = array();
11287
	
11288
		if ($timezone != "")
11289
		{
11290
			date_default_timezone_set($timezone);
11291
		}
11292
		
11293
		$current_date = date("Y-m-d H:i:s");
11294
		$date = date("Y-m-d H:i:s",strtotime($dateString." UTC"));
11295
		
11296
		$diff = abs(strtotime($current_date) - strtotime($date));
11297
11298
		$time_array['years'] = floor($diff / (365*60*60*24)); 
11299
		$years = $time_array['years'];
11300
		
11301
		$time_array['months'] = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
11302
		$months = $time_array['months'];
11303
		
11304
		$time_array['days'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
11305
		$days = $time_array['days'];
11306
		$time_array['hours'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24)/ (60*60));
11307
		$hours = $time_array['hours'];
11308
		$time_array['minutes'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60)/ 60);
11309
		$minutes = $time_array['minutes'];
11310
		$time_array['seconds'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60 - $minutes*60));  
11311
		
11312
		return $time_array;	
11313
	}	
11314
	
11315
	
11316
	
11317
	
11318
	/**
11319
	* Parses the direction degrees to working
11320
	*
11321
	* @param Float $direction the direction in degrees
11322
	* @return Array the direction information
11323
	*
11324
	*/
11325
	public function parseDirection($direction = 0)
11326
	{
11327
		if ($direction == '') $direction = 0;
11328
		$direction_array = array();
11329
		$temp_array = array();
11330
11331
		if ($direction == 360 || ($direction >= 0 && $direction < 22.5))
11332
		{
11333
			$temp_array['direction_degree'] = $direction;
11334
			$temp_array['direction_shortname'] = "N";
11335
			$temp_array['direction_fullname'] = "North";
11336
		} elseif ($direction >= 22.5 && $direction < 45){
11337
			$temp_array['direction_degree'] = $direction;
11338
			$temp_array['direction_shortname'] = "NNE";
11339
			$temp_array['direction_fullname'] = "North-Northeast";
11340
		} elseif ($direction >= 45 && $direction < 67.5){
11341
			$temp_array['direction_degree'] = $direction;
11342
			$temp_array['direction_shortname'] = "NE";
11343
			$temp_array['direction_fullname'] = "Northeast";
11344
		} elseif ($direction >= 67.5 && $direction < 90){
11345
			$temp_array['direction_degree'] = $direction;
11346
			$temp_array['direction_shortname'] = "ENE";
11347
			$temp_array['direction_fullname'] = "East-Northeast";
11348
		} elseif ($direction >= 90 && $direction < 112.5){
11349
			$temp_array['direction_degree'] = $direction;
11350
			$temp_array['direction_shortname'] = "E";
11351
			$temp_array['direction_fullname'] = "East";
11352
		} elseif ($direction >= 112.5 && $direction < 135){
11353
			$temp_array['direction_degree'] = $direction;
11354
			$temp_array['direction_shortname'] = "ESE";
11355
			$temp_array['direction_fullname'] = "East-Southeast";
11356
		} elseif ($direction >= 135 && $direction < 157.5){
11357
			$temp_array['direction_degree'] = $direction;
11358
			$temp_array['direction_shortname'] = "SE";
11359
			$temp_array['direction_fullname'] = "Southeast";
11360
		} elseif ($direction >= 157.5 && $direction < 180){
11361
			$temp_array['direction_degree'] = $direction;
11362
			$temp_array['direction_shortname'] = "SSE";
11363
			$temp_array['direction_fullname'] = "South-Southeast";
11364
		} elseif ($direction >= 180 && $direction < 202.5){
11365
			$temp_array['direction_degree'] = $direction;
11366
			$temp_array['direction_shortname'] = "S";
11367
			$temp_array['direction_fullname'] = "South";
11368
		} elseif ($direction >= 202.5 && $direction < 225){
11369
			$temp_array['direction_degree'] = $direction;
11370
			$temp_array['direction_shortname'] = "SSW";
11371
			$temp_array['direction_fullname'] = "South-Southwest";
11372
		} elseif ($direction >= 225 && $direction < 247.5){
11373
			$temp_array['direction_degree'] = $direction;
11374
			$temp_array['direction_shortname'] = "SW";
11375
			$temp_array['direction_fullname'] = "Southwest";
11376
		} elseif ($direction >= 247.5 && $direction < 270){
11377
			$temp_array['direction_degree'] = $direction;
11378
			$temp_array['direction_shortname'] = "WSW";
11379
			$temp_array['direction_fullname'] = "West-Southwest";
11380
		} elseif ($direction >= 270 && $direction < 292.5){
11381
			$temp_array['direction_degree'] = $direction;
11382
			$temp_array['direction_shortname'] = "W";
11383
			$temp_array['direction_fullname'] = "West";
11384
		} elseif ($direction >= 292.5 && $direction < 315){
11385
			$temp_array['direction_degree'] = $direction;
11386
			$temp_array['direction_shortname'] = "WNW";
11387
			$temp_array['direction_fullname'] = "West-Northwest";
11388
		} elseif ($direction >= 315 && $direction < 337.5){
11389
			$temp_array['direction_degree'] = $direction;
11390
			$temp_array['direction_shortname'] = "NW";
11391
			$temp_array['direction_fullname'] = "Northwest";
11392
		} elseif ($direction >= 337.5 && $direction < 360){
11393
			$temp_array['direction_degree'] = $direction;
11394
			$temp_array['direction_shortname'] = "NNW";
11395
			$temp_array['direction_fullname'] = "North-Northwest";
11396
		}
11397
		$direction_array[] = $temp_array;
11398
		return $direction_array;
11399
	}
11400
	
11401
	
11402
	/**
11403
	* Gets the aircraft registration
11404
	*
11405
	* @param String $flightaware_id the flight aware id
11406
	* @return String the aircraft registration
11407
	*
11408
	*/
11409
	
11410
	public function getAircraftRegistration($flightaware_id)
11411
	{
11412
		global $globalFlightAwareUsername, $globalFlightAwarePassword;
11413
        
11414
		$options = array(
11415
			'trace' => true,
11416
			'exceptions' => 0,
11417
			'login' => $globalFlightAwareUsername,
11418
			'password' => $globalFlightAwarePassword,
11419
		);
11420
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
11421
		
11422
		$params = array('faFlightID' => $flightaware_id);
11423
		$result = $client->AirlineFlightInfo($params);
11424
		
11425
		if (isset($result->AirlineFlightInfoResult))
11426
		{
11427
			$registration = $result->AirlineFlightInfoResult->tailnumber;
11428
		} else return '';
11429
		
11430
		$registration = $this->convertAircraftRegistration($registration);
11431
		
11432
		return $registration;
11433
	}
11434
11435
11436
	/**
11437
	* Gets the aircraft registration from ModeS
11438
	*
11439
	* @param String $aircraft_modes the flight ModeS in hex
11440
	* @return String the aircraft registration
11441
	*
11442
	*/
11443
	public function getAircraftRegistrationBymodeS($aircraft_modes, $source_type = '')
11444
	{
11445
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
11446
		$source_type = filter_var($source_type,FILTER_SANITIZE_STRING);
11447
		if ($source_type == '' || $source_type == 'modes') {
11448
			$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";
11449
		} else {
11450
			$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";
11451
		}
11452
		$sth = $this->db->prepare($query);
11453
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
11454
    
11455
		$row = $sth->fetch(PDO::FETCH_ASSOC);
11456
		$sth->closeCursor();
11457
		if (count($row) > 0) {
11458
		    //return $row['Registration'];
11459
		    return $row['registration'];
11460
		} elseif ($source_type == 'flarm') {
11461
			return $this->getAircraftRegistrationBymodeS($aircraft_modes);
11462
		} else return '';
11463
	
11464
	}
11465
11466
	/**
11467
	* Gets the aircraft type from ModeS
11468
	*
11469
	* @param String $aircraft_modes the flight ModeS in hex
11470
	* @return String the aircraft type
11471
	*
11472
	*/
11473
	public function getAircraftTypeBymodeS($aircraft_modes,$source_type = '')
11474
	{
11475
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
11476
		$source_type = filter_var($source_type,FILTER_SANITIZE_STRING);
11477
		if ($source_type == '' || $source_type == 'modes') {
11478
			$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";
11479
		} else {
11480
			$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";
11481
		}
11482
		
11483
		$sth = $this->db->prepare($query);
11484
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
11485
    
11486
		$row = $sth->fetch(PDO::FETCH_ASSOC);
11487
		$sth->closeCursor();
11488
		if (count($row) > 0) {
11489
			if ($row['type_flight'] == null) return '';
11490
			else return $row['type_flight'];
11491
		} elseif ($source_type == 'flarm') {
11492
			return $this->getAircraftTypeBymodeS($aircraft_modes);
11493
		} else return '';
11494
	
11495
	}
11496
11497
	/**
11498
	* Gets Country from latitude/longitude
11499
	*
11500
	* @param Float $latitude latitute of the flight
11501
	* @param Float $longitude longitute of the flight
11502
	* @return String the countrie
11503
	*/
11504
	public function getCountryFromLatitudeLongitude($latitude,$longitude)
11505
	{
11506
		global $globalDBdriver, $globalDebug;
11507
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
11508
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
11509
	
11510
		$Connection = new Connection($this->db);
11511
		if (!$Connection->tableExists('countries')) return '';
11512
	
11513
		try {
11514
			/*
11515
			if ($globalDBdriver == 'mysql') {
11516
				//$query  = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(:latitude :longitude)'), ogc_geom) LIMIT 1";
11517
				$query = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(".$longitude.' '.$latitude.")'), ogc_geom) LIMIT 1";
11518
			}
11519
			*/
11520
			// This query seems to work both for MariaDB and PostgreSQL
11521
			$query = "SELECT name,iso2,iso3 FROM countries WHERE ST_Within(ST_GeomFromText('POINT(".$longitude." ".$latitude.")',4326), ogc_geom) LIMIT 1";
11522
		
11523
			$sth = $this->db->prepare($query);
11524
			//$sth->execute(array(':latitude' => $latitude,':longitude' => $longitude));
11525
			$sth->execute();
11526
    
11527
			$row = $sth->fetch(PDO::FETCH_ASSOC);
11528
			$sth->closeCursor();
11529
			if (count($row) > 0) {
11530
				return $row;
11531
			} else return '';
11532
		} catch (PDOException $e) {
11533
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
11534
			return '';
11535
		}
11536
	
11537
	}
11538
11539
	/**
11540
	* Gets Country from iso2
11541
	*
11542
	* @param String $iso2 ISO2 country code
11543
	* @return String the countrie
11544
	*/
11545
	public function getCountryFromISO2($iso2)
11546
	{
11547
		global $globalDBdriver, $globalDebug;
11548
		$iso2 = filter_var($iso2,FILTER_SANITIZE_STRING);
11549
	
11550
		$Connection = new Connection($this->db);
11551
		if (!$Connection->tableExists('countries')) return '';
11552
	
11553
		try {
11554
			$query = "SELECT name,iso2,iso3 FROM countries WHERE iso2 = :iso2 LIMIT 1";
11555
		
11556
			$sth = $this->db->prepare($query);
11557
			$sth->execute(array(':iso2' => $iso2));
11558
    
11559
			$row = $sth->fetch(PDO::FETCH_ASSOC);
11560
			$sth->closeCursor();
11561
			if (count($row) > 0) {
11562
				return $row;
11563
			} else return '';
11564
		} catch (PDOException $e) {
11565
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
11566
			return '';
11567
		}
11568
	
11569
	}
11570
11571
	/**
11572
	* converts the registration code using the country prefix
11573
	*
11574
	* @param String $registration the aircraft registration
11575
	* @return String the aircraft registration
11576
	*
11577
	*/
11578
	public function convertAircraftRegistration($registration)
11579
	{
11580
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11581
		$registration_prefix = '';
11582
		$registration_1 = substr($registration, 0, 1);
11583
		$registration_2 = substr($registration, 0, 2);
11584
11585
		//first get the prefix based on two characters
11586
		$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_2";
11587
      
11588
		
11589
		$sth = $this->db->prepare($query);
11590
		$sth->execute(array(':registration_2' => $registration_2));
11591
        
11592
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11593
		{
11594
			$registration_prefix = $row['registration_prefix'];
11595
		}
11596
11597
		//if we didn't find a two chracter prefix lets just search the one with one character
11598
		if ($registration_prefix == '')
11599
		{
11600
			$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_1";
11601
			$sth = $this->db->prepare($query);
11602
			$sth->execute(array(':registration_1' => $registration_1));
11603
	        
11604
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11605
			{
11606
				$registration_prefix = $row['registration_prefix'];
11607
			}
11608
		}
11609
11610
		//determine which characters are being used and convert the registration code appropiately
11611
		if (strlen($registration_prefix) == 1)
11612
		{
11613
			if (0 === strpos($registration, 'N')) {
11614
				$registration = preg_replace("/^(.{1})/", "$1", $registration);
11615
			} else {
11616
				$registration = preg_replace("/^(.{1})/", "$1-", $registration);
11617
			}
11618
		} else if(strlen($registration_prefix) == 2){
11619
			if (0 === strpos($registration, 'N')) {
11620
				$registration = preg_replace("/^(.{2})/", "$1", $registration);
11621
			} else {
11622
				$registration = preg_replace("/^(.{2})/", "$1-", $registration);
11623
			}
11624
		}
11625
		return $registration;
11626
	}
11627
11628
	/**
11629
	* Country from the registration code
11630
	*
11631
	* @param String $registration the aircraft registration
11632
	* @return String the country
11633
	*
11634
	*/
11635
	public function countryFromAircraftRegistration($registration)
11636
	{
11637
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11638
		
11639
		$registration_prefix = '';
11640
		$registration_test = explode('-',$registration);
11641
		$country = '';
11642
		if ($registration_test[0] != $registration) {
11643
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11644
	      
11645
			$sth = $this->db->prepare($query);
11646
			$sth->execute(array(':registration_1' => $registration_test[0]));
11647
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11648
			{
11649
				//$registration_prefix = $row['registration_prefix'];
11650
				$country = $row['country'];
11651
			}
11652
		} else {
11653
    			$registration_1 = substr($registration, 0, 1);
11654
		        $registration_2 = substr($registration, 0, 2);
11655
11656
			$country = '';
11657
			//first get the prefix based on two characters
11658
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
11659
      
11660
			
11661
			$sth = $this->db->prepare($query);
11662
			$sth->execute(array(':registration_2' => $registration_2));
11663
        
11664
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11665
			{
11666
				$registration_prefix = $row['registration_prefix'];
11667
				$country = $row['country'];
11668
			}
11669
11670
			//if we didn't find a two chracter prefix lets just search the one with one character
11671
			if ($registration_prefix == "")
11672
			{
11673
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11674
	      
11675
				$sth = $this->db->prepare($query);
11676
				$sth->execute(array(':registration_1' => $registration_1));
11677
	        
11678
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
11679
				{
11680
					//$registration_prefix = $row['registration_prefix'];
11681
					$country = $row['country'];
11682
				}
11683
			}
11684
		}
11685
    
11686
		return $country;
11687
	}
11688
11689
	/**
11690
	* Registration prefix from the registration code
11691
	*
11692
	* @param String $registration the aircraft registration
11693
	* @return String the registration prefix
11694
	*
11695
	*/
11696
	public function registrationPrefixFromAircraftRegistration($registration)
11697
	{
11698
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11699
		
11700
		$registration_prefix = '';
11701
		$registration_test = explode('-',$registration);
11702
		//$country = '';
11703
		if ($registration_test[0] != $registration) {
11704
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11705
	      
11706
			$sth = $this->db->prepare($query);
11707
			$sth->execute(array(':registration_1' => $registration_test[0]));
11708
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11709
			{
11710
				$registration_prefix = $row['registration_prefix'];
11711
				//$country = $row['country'];
11712
			}
11713
		} else {
11714
    			$registration_1 = substr($registration, 0, 1);
11715
		        $registration_2 = substr($registration, 0, 2);
11716
11717
			//first get the prefix based on two characters
11718
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
11719
      
11720
			
11721
			$sth = $this->db->prepare($query);
11722
			$sth->execute(array(':registration_2' => $registration_2));
11723
        
11724
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11725
			{
11726
				$registration_prefix = $row['registration_prefix'];
11727
				//$country = $row['country'];
11728
			}
11729
11730
			//if we didn't find a two chracter prefix lets just search the one with one character
11731
			if ($registration_prefix == "")
11732
			{
11733
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11734
	      
11735
				$sth = $this->db->prepare($query);
11736
				$sth->execute(array(':registration_1' => $registration_1));
11737
	        
11738
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
11739
				{
11740
					$registration_prefix = $row['registration_prefix'];
11741
					//$country = $row['country'];
11742
				}
11743
			}
11744
		}
11745
    
11746
		return $registration_prefix;
11747
	}
11748
11749
11750
	/**
11751
	* Country from the registration code
11752
	*
11753
	* @param String $registration the aircraft registration
11754
	* @return String the country
11755
	*
11756
	*/
11757
	public function countryFromAircraftRegistrationCode($registration)
11758
	{
11759
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11760
		
11761
		$country = '';
11762
		$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration LIMIT 1";
11763
		$sth = $this->db->prepare($query);
11764
		$sth->execute(array(':registration' => $registration));
11765
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11766
		{
11767
			$country = $row['country'];
11768
		}
11769
		return $country;
11770
	}
11771
	
11772
	/**
11773
	* Set a new highlight value for a flight
11774
	*
11775
	* @param String $flightaware_id flightaware_id from spotter_output table
11776
	* @param String $highlight New highlight value
11777
	*/
11778
	public function setHighlightFlight($flightaware_id,$highlight) {
11779
		
11780
		$query  = "UPDATE spotter_output SET highlight = :highlight WHERE flightaware_id = :flightaware_id";
11781
		$sth = $this->db->prepare($query);
11782
		$sth->execute(array(':flightaware_id' => $flightaware_id, ':highlight' => $highlight));
11783
	}
11784
11785
	/**
11786
	* Set a new highlight value for a flight by Registration
11787
	*
11788
	* @param String $registration Registration of the aircraft
11789
	* @param String $date Date of spotted aircraft
11790
	* @param String $highlight New highlight value
11791
	*/
11792
	public function setHighlightFlightByRegistration($registration,$highlight, $date = '') {
11793
		if ($date == '') {
11794
			$query  = "UPDATE spotter_output SET highlight = :highlight WHERE spotter_id IN (SELECT MAX(spotter_id) FROM spotter_output WHERE registration = :registration)";
11795
			$query_values = array(':registration' => $registration, ':highlight' => $highlight);
11796
		} else {
11797
			$query  = "UPDATE spotter_output SET highlight = :highlight WHERE registration = :registration AND date(date) = :date";
11798
			$query_values = array(':registration' => $registration, ':highlight' => $highlight,':date' => $date);
11799
		}
11800
		$sth = $this->db->prepare($query);
11801
		$sth->execute($query_values);
11802
	}
11803
	
11804
	/**
11805
	* Gets the short url from bit.ly
11806
	*
11807
	* @param String $url the full url
11808
	* @return String the bit.ly url
11809
	*
11810
	*/
11811
	public function getBitlyURL($url)
11812
	{
11813
		global $globalBitlyAccessToken;
11814
		
11815
		if ($globalBitlyAccessToken == '') return $url;
11816
        
11817
		$google_url = 'https://api-ssl.bitly.com/v3/shorten?access_token='.$globalBitlyAccessToken.'&longUrl='.$url;
11818
		
11819
		$ch = curl_init();
11820
		curl_setopt($ch, CURLOPT_HEADER, 0);
11821
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
11822
		curl_setopt($ch, CURLOPT_URL, $google_url);
11823
		$bitly_data = curl_exec($ch);
11824
		curl_close($ch);
11825
		
11826
		$bitly_data = json_decode($bitly_data);
11827
		$bitly_url = '';
11828
		if ($bitly_data->status_txt = "OK"){
11829
			$bitly_url = $bitly_data->data->url;
11830
		}
11831
11832
		return $bitly_url;
11833
	}
11834
11835
11836
	public function getOrderBy()
11837
	{
11838
		$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"));
11839
		
11840
		return $orderby;
11841
		
11842
	}
11843
    
11844
/*
11845
	public function importFromFlightAware()
11846
	{
11847
		global $globalFlightAwareUsername, $globalFlightAwarePassword, $globalLatitudeMax, $globalLatitudeMin, $globalLongitudeMax, $globalLongitudeMin, $globalAirportIgnore;
11848
		$Spotter = new Spotter($this->db);
11849
		$SpotterLive = new SpotterLive($this->db);
11850
		$options = array(
11851
		            'trace' => true,
11852
		            'exceptions' => 0,
11853
		            'login' => $globalFlightAwareUsername,
11854
		            'password' => $globalFlightAwarePassword,
11855
		);
11856
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
11857
		$params = array('query' => '{range lat '.$globalLatitudeMin.' '.$globalLatitudeMax.'} {range lon '.$globalLongitudeMax.' '.$globalLongitudeMin.'} {true inAir}', 'howMany' => '15', 'offset' => '0');
11858
		$result = $client->SearchBirdseyeInFlight($params);
11859
		$dataFound = false;
11860
		$ignoreImport = false;
11861
		if (isset($result->SearchBirdseyeInFlightResult))
11862
		{
11863
			if (is_array($result->SearchBirdseyeInFlightResult->aircraft))
11864
			{
11865
				foreach($result->SearchBirdseyeInFlightResult->aircraft as $aircraft)
11866
				{
11867
					if (!strstr($aircraft->origin, 'L ') && !strstr($aircraft->destination, 'L '))
11868
					{
11869
						foreach($globalAirportIgnore as $airportIgnore)
11870
						{
11871
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
11872
							{
11873
								$ignoreImport = true; 
11874
							}
11875
						}
11876
						if ($ignoreImport == false)
11877
						{
11878
							$flightaware_id = $aircraft->faFlightID;
11879
							$ident = $aircraft->ident;
11880
							$aircraft_type = $aircraft->type;
11881
							$departure_airport = $aircraft->origin;
11882
							$arrival_airport = $aircraft->destination;
11883
							$latitude = $aircraft->latitude;
11884
							$longitude = $aircraft->longitude;
11885
							$waypoints = $aircraft->waypoints;
11886
							$altitude = $aircraft->altitude;
11887
							$heading = $aircraft->heading;
11888
							$groundspeed = $aircraft->groundspeed;
11889
							$dataFound = true;
11890
							//gets the callsign from the last hour
11891
							$last_hour_ident = $this->getIdentFromLastHour($ident);
11892
							//change the departure/arrival airport to NA if its not available
11893
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
11894
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
11895
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
11896
							if($last_hour_ident == "")
11897
							{
11898
								//adds the spotter data for the archive
11899
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11900
							}
11901
11902
							//adds the spotter LIVE data
11903
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11904
						}
11905
					}
11906
					$ignoreImport = false;
11907
				}
11908
			} else {
11909
				if (!strstr($result->SearchBirdseyeInFlightResult->aircraft->origin, 'L ') && !strstr($result->SearchBirdseyeInFlightResult->aircraft->destination, 'L '))
11910
				{
11911
					foreach($globalAirportIgnore as $airportIgnore)
11912
					{
11913
						foreach($globalAirportIgnore as $airportIgnore)
11914
						{
11915
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
11916
							{
11917
								$ignoreImport = true; 
11918
							}
11919
						}
11920
						if ($ignoreImport == false)
11921
						{
11922
							$flightaware_id = $result->SearchBirdseyeInFlightResult->aircraft->faFlightID;
11923
							$ident = $result->SearchBirdseyeInFlightResult->aircraft->ident;
11924
							$aircraft_type = $result->SearchBirdseyeInFlightResult->aircraft->type;
11925
							$departure_airport = $result->SearchBirdseyeInFlightResult->aircraft->origin;
11926
							$arrival_airport = $result->SearchBirdseyeInFlightResult->aircraft->destination;
11927
							$latitude = $result->SearchBirdseyeInFlightResult->aircraft->latitude;
11928
							$longitude = $result->SearchBirdseyeInFlightResult->aircraft->longitude;
11929
							$waypoints = $result->SearchBirdseyeInFlightResult->aircraft->waypoints;
11930
							$altitude = $result->SearchBirdseyeInFlightResult->aircraft->altitude;
11931
							$heading = $result->SearchBirdseyeInFlightResult->aircraft->heading;
11932
							$groundspeed = $result->SearchBirdseyeInFlightResult->aircraft->groundspeed;
11933
							$dataFound = true;
11934
							//gets the callsign from the last hour
11935
							$last_hour_ident = $this->getIdentFromLastHour($ident);
11936
							//change the departure/arrival airport to NA if its not available
11937
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
11938
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
11939
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
11940
							if($last_hour_ident == "")
11941
							{
11942
								//adds the spotter data for the archive
11943
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11944
							}
11945
							//adds the spotter LIVE data
11946
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11947
						}
11948
						$ignoreImport = false;
11949
					}
11950
				}
11951
			}
11952
		} 
11953
	}
11954
*/
11955
11956
	// Update flights data when new data in DB
11957
	public function updateFieldsFromOtherTables()
11958
	{
11959
		global $globalDebug, $globalDBdriver;
11960
		$Image = new Image($this->db);
11961
		
11962
11963
		// routes
11964
		if ($globalDebug) print "Routes...\n";
11965
		if ($globalDBdriver == 'mysql') {
11966
			$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)";
11967
		} else {
11968
			$query = "SELECT spotter_output.spotter_id, routes.FromAirport_ICAO, routes.ToAirport_ICAO FROM spotter_output, routes WHERE spotter_output.ident = routes.CallSign AND ( spotter_output.departure_airport_icao != routes.FromAirport_ICAO OR spotter_output.arrival_airport_icao != routes.ToAirport_ICAO) AND routes.FromAirport_ICAO != '' AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INTERVAL '15 DAYS'";
11969
		}
11970
		$sth = $this->db->prepare($query);
11971
		$sth->execute();
11972
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11973
		{
11974
			$departure_airport_array = $this->getAllAirportInfo($row['fromairport_icao']);
11975
			$arrival_airport_array = $this->getAllAirportInfo($row['toairport_icao']);
11976
			if (count($departure_airport_array) > 0 && count($arrival_airport_array) > 0) {
11977
				$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";
11978
				$sthu = $this->db->prepare($update_query);
11979
				$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']));
11980
			}
11981
		}
11982
		
11983
		if ($globalDebug) print "Airlines...\n";
11984
		//airlines
11985
		if ($globalDBdriver == 'mysql') {
11986
			$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)";
11987
		} elseif ($globalDBdriver == 'pgsql') {
11988
			$query  = "SELECT spotter_output.spotter_id, spotter_output.ident FROM spotter_output WHERE (spotter_output.airline_name = '' OR spotter_output.airline_name = 'Not Available') AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INTERVAL '15 DAYS'";
11989
		}
11990
		$sth = $this->db->prepare($query);
11991
		$sth->execute();
11992
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11993
		{
11994
			if (is_numeric(substr($row['ident'], -1, 1)))
11995
			{
11996
				$fromsource = NULL;
11997
				if (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
11998
				elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
11999
				elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
12000
				elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
12001
				$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
12002
				if (isset($airline_array[0]['name'])) {
12003
					$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";
12004
					$sthu = $this->db->prepare($update_query);
12005
					$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']));
12006
				}
12007
			}
12008
		}
12009
12010
		if ($globalDebug) print "Remove Duplicate in aircraft_modes...\n";
12011
		//duplicate modes
12012
		$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";
12013
		$sth = $this->db->prepare($query);
12014
		$sth->execute();
12015
		
12016
		if ($globalDebug) print "Aircraft...\n";
12017
		//aircraft
12018
		if ($globalDBdriver == 'mysql') {
12019
			$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)";
12020
		} elseif ($globalDBdriver == 'pgsql') {
12021
			$query  = "SELECT spotter_output.spotter_id, spotter_output.aircraft_icao, spotter_output.registration FROM spotter_output WHERE (spotter_output.aircraft_name = '' OR spotter_output.aircraft_name = 'Not Available') AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INERVAL '15 DAYS'";
12022
		}
12023
		$sth = $this->db->prepare($query);
12024
		$sth->execute();
12025
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
12026
		{
12027
			if ($row['aircraft_icao'] != '') {
12028
				$aircraft_name = $this->getAllAircraftInfo($row['aircraft_icao']);
12029
				if ($row['registration'] != ""){
12030
					$image_array = $Image->getSpotterImage($row['registration']);
12031
					if (!isset($image_array[0]['registration'])) {
12032
						$Image->addSpotterImage($row['registration']);
12033
					}
12034
				}
12035
				if (count($aircraft_name) > 0) {
12036
					$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";
12037
					$sthu = $this->db->prepare($update_query);
12038
					$sthu->execute(array(':aircraft_name' => $aircraft_name[0]['type'], ':aircraft_manufacturer' => $aircraft_name[0]['manufacturer'], ':spotter_id' => $row['spotter_id']));
12039
				}
12040
			}
12041
		}
12042
	}	
12043
12044
	// Update arrival airports for data already in DB
12045
	public function updateArrivalAirports()
12046
	{
12047
		global $globalDebug, $globalDBdriver, $globalClosestMinDist;
12048
		$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";
12049
		$sth = $this->db->prepare($query);
12050
		$sth->execute();
12051
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
12052
		{
12053
			if ($row['last_latitude'] != '' && $row['last_longitude'] != '') {
12054
				$closestAirports = $this->closestAirports($row['last_latitude'],$row['last_longitude'],$globalClosestMinDist);
12055
				$airport_icao = '';
12056
				 if (isset($closestAirports[0])) {
12057
					if ($row['arrival_airport_icao'] == $closestAirports[0]['icao']) {
12058
						$airport_icao = $closestAirports[0]['icao'];
12059
						if ($globalDebug) echo "\o/ 1st ---++ Find arrival airport. airport_icao : ".$airport_icao."\n";
12060
					} elseif (count($closestAirports > 1) && $row['arrival_airport_icao'] != '' && $row['arrival_airport_icao'] != 'NA') {
12061
						foreach ($closestAirports as $airport) {
12062
							if ($row['arrival_airport_icao'] == $airport['icao']) {
12063
								$airport_icao = $airport['icao'];
12064
								if ($globalDebug) echo "\o/ try --++ Find arrival airport. airport_icao : ".$airport_icao."\n";
12065
								break;
12066
							}
12067
						}
12068
					} elseif ($row['last_altitude'] == 0 || ($row['last_altitude'] != '' && ($closestAirports[0]['altitude'] <= $row['last_altitude']*100+1000 && $row['last_altitude']*100 < $closestAirports[0]['altitude']+5000))) {
12069
						$airport_icao = $closestAirports[0]['icao'];
12070
						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";
12071
					} else {
12072
						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";
12073
					}
12074
				} else {
12075
					if ($globalDebug) echo "----- No Airport near last coord. Latitude : ".$row['last_latitude'].' - Longitude : '.$row['last_longitude'].' - MinDist : '.$globalClosestMinDist."\n";
12076
				}
12077
				if ($row['real_arrival_airport_icao'] != $airport_icao) {
12078
					if ($globalDebug) echo "Updating airport to ".$airport_icao."...\n";
12079
					$update_query="UPDATE spotter_output SET real_arrival_airport_icao = :airport_icao WHERE spotter_id = :spotter_id";
12080
					$sthu = $this->db->prepare($update_query);
12081
					$sthu->execute(array(':airport_icao' => $airport_icao,':spotter_id' => $row['spotter_id']));
12082
				}
12083
			}
12084
		}
12085
	}
12086
	
12087
	public function closestAirports($origLat,$origLon,$dist = 10) {
12088
		global $globalDBdriver;
12089
		$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
12090
/*
12091
		$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 
12092
                      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)) 
12093
                      having distance < $dist ORDER BY distance limit 100;";
12094
*/
12095
		if ($globalDBdriver == 'mysql') {
12096
			$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 
12097
	                      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)) 
12098
	                      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;";
12099
                } else {
12100
			$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 
12101
	                      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)) 
12102
	                      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;";
12103
    		}
12104
		$sth = $this->db->prepare($query);
12105
		$sth->execute();
12106
		return $sth->fetchAll(PDO::FETCH_ASSOC);
12107
	}
12108
}
12109
/*
12110
$Spotter = new Spotter();
12111
print_r($Spotter->closestAirports('-19.9813','-47.8286',10));
12112
*/
12113
/*
12114
$Spotter = new Spotter();
12115
$da = $Spotter->countAllDetectedArrivalAirports(true,0,'',true);
12116
$aa = $Spotter->countAllArrivalAirports(true,0,'',true);
12117
print_r($da);
12118
print_r($aa);
12119
print_r(array_merge($da,$aa));
12120
*/
12121
?>