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

Spotter::getLast7DaysAirportsArrival()   B

Complexity

Conditions 5
Paths 8

Size

Total Lines 28
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

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

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

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

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

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

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

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

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

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

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

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

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

Loading history...
2835
		$alliance_array = $sth->fetchAll(PDO::FETCH_ASSOC);
2836
		return $alliance_array;
2837
	}
2838
	
2839
	/**
2840
	* Gets a list of all airline countries
2841
	*
2842
	* @return Array list of airline countries
2843
	*
2844
	*/
2845
	public function getAllAirlineCountries($filters = array())
2846
	{
2847
		$filter_query = $this->getFilter($filters,true,true);
2848
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
2849
				FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
2850
				ORDER BY spotter_output.airline_country ASC";
2851
		
2852
		//$query = "SELECT DISTINCT country AS airline_country FROM airlines WHERE country <> '' AND active = 'Y' ORDER BY country ASC";
2853
		$sth = $this->db->prepare($query);
2854
		$sth->execute();
2855
2856
		$airline_array = array();
2857
		$temp_array = array();
2858
		
2859
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2860
		{
2861
			$temp_array['airline_country'] = $row['airline_country'];
2862
2863
			$airline_array[] = $temp_array;
2864
		}
2865
2866
		return $airline_array;
2867
	}
2868
2869
	
2870
	
2871
	/**
2872
	* Gets a list of all departure & arrival names
2873
	*
2874
	* @return Array list of airport names
2875
	*
2876
	*/
2877
	public function getAllAirportNames($filters = array())
2878
	{
2879
		$filter_query = $this->getFilter($filters,true,true);
2880
		$airport_array = array();
2881
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao AS airport_icao, spotter_output.departure_airport_name AS airport_name, spotter_output.departure_airport_city AS airport_city, spotter_output.departure_airport_country AS airport_country
2882
				FROM spotter_output".$filter_query." spotter_output.departure_airport_icao <> '' AND spotter_output.departure_airport_icao <> 'NA' 
2883
				ORDER BY spotter_output.departure_airport_city ASC";
2884
		
2885
		//$query = "SELECT DISTINCT icao AS airport_icao, name AS airport_name, city AS airport_city, country AS airport_country FROM airport ORDER BY city ASC";
2886
		$sth = $this->db->prepare($query);
2887
		$sth->execute();
2888
2889
		$temp_array = array();
2890
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2891
		{
2892
			$temp_array['airport_icao'] = $row['airport_icao'];
2893
			$temp_array['airport_name'] = $row['airport_name'];
2894
			$temp_array['airport_city'] = $row['airport_city'];
2895
			$temp_array['airport_country'] = $row['airport_country'];
2896
2897
			$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2898
		}
2899
2900
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao AS airport_icao, spotter_output.arrival_airport_name AS airport_name, spotter_output.arrival_airport_city AS airport_city, spotter_output.arrival_airport_country AS airport_country
2901
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> '' AND spotter_output.arrival_airport_icao <> 'NA' 
2902
								ORDER BY spotter_output.arrival_airport_city ASC";
2903
					
2904
		$sth = $this->db->prepare($query);
2905
		$sth->execute();
2906
2907
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2908
			{
2909
		//	if ($airport_array[$row['airport_city'].",".$row['airport_name']]['airport_icao'] != $row['airport_icao'])
2910
		//	{
2911
				$temp_array['airport_icao'] = $row['airport_icao'];
2912
				$temp_array['airport_name'] = $row['airport_name'];
2913
				$temp_array['airport_city'] = $row['airport_city'];
2914
				$temp_array['airport_country'] = $row['airport_country'];
2915
				
2916
				$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2917
		//	}
2918
		}
2919
2920
		return $airport_array;
2921
	} 
2922
2923
	/**
2924
	* Gets a list of all owner names
2925
	*
2926
	* @return Array list of owner names
2927
	*
2928
	*/
2929
	public function getAllOwnerNames($filters = array())
2930
	{
2931
		$filter_query = $this->getFilter($filters,true,true);
2932
		$query  = "SELECT DISTINCT spotter_output.owner_name
2933
				FROM spotter_output".$filter_query." spotter_output.owner_name <> '' 
2934
				ORDER BY spotter_output.owner_name ASC";
2935
		
2936
		$sth = $this->db->prepare($query);
2937
		$sth->execute();
2938
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2939
	} 
2940
2941
	/**
2942
	* Gets a list of all pilot names and pilot ids
2943
	*
2944
	* @return Array list of pilot names and pilot ids
2945
	*
2946
	*/
2947
	public function getAllPilotNames($filters = array())
2948
	{
2949
		$filter_query = $this->getFilter($filters,true,true);
2950
		$query  = "SELECT DISTINCT spotter_output.pilot_name, spotter_output.pilot_id
2951
				FROM spotter_output".$filter_query." spotter_output.pilot_name <> '' 
2952
				ORDER BY spotter_output.pilot_name ASC";
2953
		
2954
		$sth = $this->db->prepare($query);
2955
		$sth->execute();
2956
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2957
	} 
2958
	
2959
	
2960
	/**
2961
	* Gets a list of all departure & arrival airport countries
2962
	*
2963
	* @return Array list of airport countries
2964
	*
2965
	*/
2966
	public function getAllAirportCountries($filters = array())
2967
	{
2968
		$airport_array = array();
2969
					
2970
		  /*
2971
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
2972
								FROM spotter_output
2973
								WHERE spotter_output.departure_airport_country <> '' 
2974
								ORDER BY spotter_output.departure_airport_country ASC";
2975
		*/
2976
		$query = "SELECT DISTINCT country AS airport_country FROM airport ORDER BY country ASC";
2977
		
2978
		$sth = $this->db->prepare($query);
2979
		$sth->execute();
2980
   
2981
		$temp_array = array();
2982
		
2983
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2984
		{
2985
			$temp_array['airport_country'] = $row['airport_country'];
2986
2987
			$airport_array[$row['airport_country']] = $temp_array;
2988
		}
2989
		$filter_query = $this->getFilter($filters,true,true);
2990
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
2991
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
2992
								ORDER BY spotter_output.arrival_airport_country ASC";
2993
					
2994
		$sth = $this->db->prepare($query);
2995
		$sth->execute();
2996
		
2997
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2998
		{
2999
			if (isset($airport_array[$row['airport_country']]['airport_country']) && $airport_array[$row['airport_country']]['airport_country'] != $row['airport_country'])
3000
			{
3001
				$temp_array['airport_country'] = $row['airport_country'];
3002
				$airport_array[$row['airport_country']] = $temp_array;
3003
			}
3004
		}
3005
3006
		return $airport_array;
3007
	} 
3008
	
3009
	
3010
	
3011
	
3012
	/**
3013
	* Gets a list of all countries (airline, departure airport & arrival airport)
3014
	*
3015
	* @return Array list of countries
3016
	*
3017
	*/
3018
	public function getAllCountries($filters = array())
3019
	{
3020
		$Connection= new Connection($this->db);
3021
		if ($Connection->tableExists('countries')) {
3022
			$query  = "SELECT countries.name AS airport_country
3023
				FROM countries
3024
				ORDER BY countries.name ASC";
3025
			$sth = $this->db->prepare($query);
3026
			$sth->execute();
3027
   
3028
			$temp_array = array();
3029
			$country_array = array();
3030
		
3031
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
3032
			{
3033
				$temp_array['country'] = $row['airport_country'];
3034
				$country_array[$row['airport_country']] = $temp_array;
3035
			}
3036
		} else {
3037
			$filter_query = $this->getFilter($filters,true,true);
3038
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
3039
								FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' 
3040
								ORDER BY spotter_output.departure_airport_country ASC";
3041
3042
			$sth = $this->db->prepare($query);
3043
			$sth->execute();
3044
   
3045
			$temp_array = array();
3046
			$country_array = array();
3047
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
3048
			{
3049
				$temp_array['country'] = $row['airport_country'];
3050
				$country_array[$row['airport_country']] = $temp_array;
3051
			}
3052
3053
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
3054
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
3055
								ORDER BY spotter_output.arrival_airport_country ASC";
3056
					
3057
		$sth = $this->db->prepare($query);
3058
		$sth->execute();
3059
		
3060
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3061
		{
3062
			if ($country_array[$row['airport_country']]['country'] != $row['airport_country'])
3063
			{
3064
				$temp_array['country'] = $row['airport_country'];
3065
				
3066
				$country_array[$row['country']] = $temp_array;
3067
			}
3068
		}
3069
		
3070
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
3071
								FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
3072
								ORDER BY spotter_output.airline_country ASC";
3073
					
3074
		$sth = $this->db->prepare($query);
3075
		$sth->execute();
3076
		
3077
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3078
		{
3079
			if (isset($country_array[$row['airline_country']]['country']) && $country_array[$row['airline_country']]['country'] != $row['airline_country'])
3080
			{
3081
				$temp_array['country'] = $row['airline_country'];
3082
				
3083
				$country_array[$row['country']] = $temp_array;
3084
			}
3085
		}
3086
		}  
3087
		return $country_array;
3088
	} 
3089
	
3090
	
3091
	
3092
	
3093
	/**
3094
	* Gets a list of all idents/callsigns
3095
	*
3096
	* @return Array list of ident/callsign names
3097
	*
3098
	*/
3099
	public function getAllIdents($filters = array())
3100
	{
3101
		$filter_query = $this->getFilter($filters,true,true);
3102
		$query  = "SELECT DISTINCT spotter_output.ident
3103
								FROM spotter_output".$filter_query." spotter_output.ident <> '' 
3104
								ORDER BY spotter_output.date ASC LIMIT 700 OFFSET 0";
3105
3106
		$sth = $this->db->prepare($query);
3107
		$sth->execute();
3108
    
3109
		$ident_array = array();
3110
		$temp_array = array();
3111
		
3112
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3113
		{
3114
			$temp_array['ident'] = $row['ident'];
3115
			$ident_array[] = $temp_array;
3116
		}
3117
3118
		return $ident_array;
3119
	}
3120
3121
	/**
3122
	* Get a list of flights from airport since 7 days
3123
	* @return Array number, icao, name and city of airports
3124
	*/
3125
3126
	public function getLast7DaysAirportsDeparture($airport_icao = '',$filters = array()) {
3127
		global $globalTimezone, $globalDBdriver;
3128
		$filter_query = $this->getFilter($filters,true,true);
3129
		if ($globalTimezone != '') {
3130
			date_default_timezone_set($globalTimezone);
3131
			$datetime = new DateTime();
3132
			$offset = $datetime->format('P');
3133
		} else $offset = '+00:00';
3134
		if ($airport_icao == '') {
3135
			if ($globalDBdriver == 'mysql') {
3136
				$query = "SELECT COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output`".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND departure_airport_icao <> 'NA' AND departure_airport_icao <> '' GROUP BY departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
3137
			} else {
3138
				$query = "SELECT COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND departure_airport_icao <> 'NA' AND departure_airport_icao <> '' GROUP BY departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
3139
			}
3140
			$sth = $this->db->prepare($query);
3141
			$sth->execute(array(':offset' => $offset));
3142
		} else {
3143
			if ($globalDBdriver == 'mysql') {
3144
				$query = "SELECT COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output`".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND departure_airport_icao = :airport_icao GROUP BY departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
3145
			} else {
3146
				$query = "SELECT COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND departure_airport_icao = :airport_icao GROUP BY departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
3147
			}
3148
			$sth = $this->db->prepare($query);
3149
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3150
		}
3151
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3152
	}
3153
3154
	/**
3155
	* Get a list of flights from airport since 7 days
3156
	* @return Array number, icao, name and city of airports
3157
	*/
3158
3159
	public function getLast7DaysAirportsDepartureByAirlines($airport_icao = '') {
3160
		global $globalTimezone, $globalDBdriver;
3161
		if ($globalTimezone != '') {
3162
			date_default_timezone_set($globalTimezone);
3163
			$datetime = new DateTime();
3164
			$offset = $datetime->format('P');
3165
		} else $offset = '+00:00';
3166
		if ($airport_icao == '') {
3167
			if ($globalDBdriver == 'mysql') {
3168
				$query = "SELECT spotter_output.airline_icao, COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output` WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND departure_airport_icao <> 'NA' AND departure_airport_icao <> '' AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
3169
			} else {
3170
				$query = "SELECT spotter_output.airline_icao, COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output WHERE spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND departure_airport_icao <> 'NA' AND departure_airport_icao <> '' AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
3171
			}
3172
			$sth = $this->db->prepare($query);
3173
			$sth->execute(array(':offset' => $offset));
3174
		} else {
3175
			if ($globalDBdriver == 'mysql') {
3176
				$query = "SELECT spotter_output.airline_icao, COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output` WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND departure_airport_icao = :airport_icao AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
3177
			} else {
3178
				$query = "SELECT spotter_output.airline_icao, COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output WHERE spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND departure_airport_icao = :airport_icao AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
3179
			}
3180
			$sth = $this->db->prepare($query);
3181
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3182
		}
3183
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3184
	}
3185
3186
	/**
3187
	* Get a list of flights from detected airport since 7 days
3188
	* @return Array number, icao, name and city of airports
3189
	*/
3190
3191
	public function getLast7DaysDetectedAirportsDeparture($airport_icao = '', $filters = array()) {
3192
		global $globalTimezone, $globalDBdriver;
3193
		$filter_query = $this->getFilter($filters,true,true);
3194
		if ($globalTimezone != '') {
3195
			date_default_timezone_set($globalTimezone);
3196
			$datetime = new DateTime();
3197
			$offset = $datetime->format('P');
3198
		} else $offset = '+00:00';
3199
		if ($airport_icao == '') {
3200
			if ($globalDBdriver == 'mysql') {
3201
				$query = "SELECT COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
3202
				FROM airport, spotter_output".$filter_query." airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND real_departure_airport_icao <> 'NA' AND real_departure_airport_icao <> '' 
3203
				GROUP BY real_departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
3204
			} else {
3205
				$query = "SELECT COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
3206
				FROM airport, spotter_output".$filter_query." airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND real_departure_airport_icao <> 'NA' AND real_departure_airport_icao <> '' 
3207
				GROUP BY real_departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
3208
			}
3209
			$sth = $this->db->prepare($query);
3210
			$sth->execute(array(':offset' => $offset));
3211
		} else {
3212
			if ($globalDBdriver == 'mysql') {
3213
				$query = "SELECT COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
3214
				FROM airport,spotter_output".$filter_query." airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND real_departure_airport_icao = :airport_icao 
3215
				GROUP BY departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
3216
			} else {
3217
				$query = "SELECT COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
3218
				FROM airport,spotter_output".$filter_query." airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND real_departure_airport_icao = :airport_icao GROUP BY departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
3219
			}
3220
			$sth = $this->db->prepare($query);
3221
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3222
		}
3223
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3224
	}
3225
3226
	/**
3227
	* Get a list of flights from detected airport since 7 days
3228
	* @return Array number, icao, name and city of airports
3229
	*/
3230
3231
	public function getLast7DaysDetectedAirportsDepartureByAirlines($airport_icao = '') {
3232
		global $globalTimezone, $globalDBdriver;
3233
		if ($globalTimezone != '') {
3234
			date_default_timezone_set($globalTimezone);
3235
			$datetime = new DateTime();
3236
			$offset = $datetime->format('P');
3237
		} else $offset = '+00:00';
3238
		if ($airport_icao == '') {
3239
			if ($globalDBdriver == 'mysql') {
3240
				$query = "SELECT spotter_output.airline_icao, COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
3241
				FROM `spotter_output`, airport 
3242
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND real_departure_airport_icao <> 'NA' AND real_departure_airport_icao <> '' 
3243
				GROUP BY spotter_output.airline_icao, real_departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
3244
			} else {
3245
				$query = "SELECT spotter_output.airline_icao, COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
3246
				FROM spotter_output, airport 
3247
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND real_departure_airport_icao <> 'NA' AND real_departure_airport_icao <> '' 
3248
				GROUP BY spotter_output.airline_icao, real_departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
3249
			}
3250
			$sth = $this->db->prepare($query);
3251
			$sth->execute(array(':offset' => $offset));
3252
		} else {
3253
			if ($globalDBdriver == 'mysql') {
3254
				$query = "SELECT spotter_output.airline_icao, COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
3255
				FROM `spotter_output`, airport 
3256
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND real_departure_airport_icao = :airport_icao 
3257
				GROUP BY spotter_output.airline_icao, departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
3258
			} else {
3259
				$query = "SELECT spotter_output.airline_icao, COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
3260
				FROM spotter_output, airport 
3261
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND real_departure_airport_icao = :airport_icao GROUP BY spotter_output.airline_icao, departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
3262
			}
3263
			$sth = $this->db->prepare($query);
3264
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3265
		}
3266
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3267
	}
3268
3269
3270
	/**
3271
	* Get a list of flights to airport since 7 days
3272
	* @return Array number, icao, name and city of airports
3273
	*/
3274
3275
	public function getLast7DaysAirportsArrival($airport_icao = '', $filters = array()) {
3276
		global $globalTimezone, $globalDBdriver;
3277
		$filter_query = $this->getFilter($filters,true,true);
3278
		if ($globalTimezone != '') {
3279
			date_default_timezone_set($globalTimezone);
3280
			$datetime = new DateTime();
3281
			$offset = $datetime->format('P');
3282
		} else $offset = '+00:00';
3283
		if ($airport_icao == '') {
3284
			if ($globalDBdriver == 'mysql') {
3285
				$query = "SELECT COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output`".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao <> 'NA' AND arrival_airport_icao <> '' GROUP BY arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
3286
			} else {
3287
				$query = "SELECT COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao <> 'NA' AND arrival_airport_icao <> '' GROUP BY arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
3288
			}
3289
			$sth = $this->db->prepare($query);
3290
			$sth->execute(array(':offset' => $offset));
3291
		} else {
3292
			if ($globalDBdriver == 'mysql') {
3293
				$query = "SELECT COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output`".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao = :airport_icao GROUP BY arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'),arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
3294
			} else {
3295
				$query = "SELECT COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao = :airport_icao GROUP BY arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
3296
			}
3297
			$sth = $this->db->prepare($query);
3298
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3299
		}
3300
		
3301
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3302
	}
3303
3304
3305
	/**
3306
	* Get a list of flights detected to airport since 7 days
3307
	* @return Array number, icao, name and city of airports
3308
	*/
3309
3310
	public function getLast7DaysDetectedAirportsArrival($airport_icao = '',$filters = array()) {
3311
		global $globalTimezone, $globalDBdriver;
3312
		$filter_query = $this->getFilter($filters,true,true);
3313
		if ($globalTimezone != '') {
3314
			date_default_timezone_set($globalTimezone);
3315
			$datetime = new DateTime();
3316
			$offset = $datetime->format('P');
3317
		} else $offset = '+00:00';
3318
		if ($airport_icao == '') {
3319
			if ($globalDBdriver == 'mysql') {
3320
				$query = "SELECT COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
3321
				FROM airport,spotter_output".$filter_query." airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao <> 'NA' AND arrival_airport_icao <> '' 
3322
				GROUP BY real_arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
3323
			} else {
3324
				$query = "SELECT COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
3325
				FROM airport,spotter_output".$filter_query." airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao <> 'NA' AND arrival_airport_icao <> '' 
3326
				GROUP BY real_arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
3327
			}
3328
			$sth = $this->db->prepare($query);
3329
			$sth->execute(array(':offset' => $offset));
3330
		} else {
3331
			if ($globalDBdriver == 'mysql') {
3332
				$query = "SELECT COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
3333
				FROM airport,spotter_output".$filter_query." airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao = :airport_icao 
3334
				GROUP BY real_arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'),airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
3335
			} else {
3336
				$query = "SELECT COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
3337
				FROM airport, spotter_output".$filter_query." airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao = :airport_icao 
3338
				GROUP BY real_arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
3339
			}
3340
			$sth = $this->db->prepare($query);
3341
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3342
		}
3343
		
3344
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3345
	}
3346
3347
3348
	/**
3349
	* Get a list of flights to airport since 7 days
3350
	* @return Array number, icao, name and city of airports
3351
	*/
3352
3353
	public function getLast7DaysAirportsArrivalByAirlines($airport_icao = '') {
3354
		global $globalTimezone, $globalDBdriver;
3355
		if ($globalTimezone != '') {
3356
			date_default_timezone_set($globalTimezone);
3357
			$datetime = new DateTime();
3358
			$offset = $datetime->format('P');
3359
		} else $offset = '+00:00';
3360
		if ($airport_icao == '') {
3361
			if ($globalDBdriver == 'mysql') {
3362
				$query = "SELECT spotter_output.airline_icao, COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output` WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao <> 'NA' AND arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
3363
			} else {
3364
				$query = "SELECT spotter_output.airline_icao, COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output WHERE spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao <> 'NA' AND arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
3365
			}
3366
			$sth = $this->db->prepare($query);
3367
			$sth->execute(array(':offset' => $offset));
3368
		} else {
3369
			if ($globalDBdriver == 'mysql') {
3370
				$query = "SELECT spotter_output.airline_icao, COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output` WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao = :airport_icao AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'),arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
3371
			} else {
3372
				$query = "SELECT spotter_output.airline_icao, COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output WHERE spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao = :airport_icao AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
3373
			}
3374
			$sth = $this->db->prepare($query);
3375
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3376
		}
3377
		
3378
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3379
	}
3380
3381
3382
	/**
3383
	* Get a list of flights detected to airport since 7 days
3384
	* @return Array number, icao, name and city of airports
3385
	*/
3386
3387
	public function getLast7DaysDetectedAirportsArrivalByAirlines($airport_icao = '') {
3388
		global $globalTimezone, $globalDBdriver;
3389
		if ($globalTimezone != '') {
3390
			date_default_timezone_set($globalTimezone);
3391
			$datetime = new DateTime();
3392
			$offset = $datetime->format('P');
3393
		} else $offset = '+00:00';
3394
		if ($airport_icao == '') {
3395
			if ($globalDBdriver == 'mysql') {
3396
				$query = "SELECT spotter_output.airline_icao, COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
3397
				FROM `spotter_output`, airport 
3398
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao <> 'NA' AND arrival_airport_icao <> '' 
3399
				GROUP BY spotter_output.airline_icao, real_arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
3400
			} else {
3401
				$query = "SELECT spotter_output.airline_icao, COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
3402
				FROM spotter_output, airport 
3403
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao <> 'NA' AND arrival_airport_icao <> '' 
3404
				GROUP BY spotter_output.airline_icao, real_arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
3405
			}
3406
			$sth = $this->db->prepare($query);
3407
			$sth->execute(array(':offset' => $offset));
3408
		} else {
3409
			if ($globalDBdriver == 'mysql') {
3410
				$query = "SELECT spotter_output.airline_icao, COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
3411
				FROM `spotter_output`, airport 
3412
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao = :airport_icao 
3413
				GROUP BY spotter_output.airline_icao, real_arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'),airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
3414
			} else {
3415
				$query = "SELECT spotter_output.airline_icao, COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
3416
				FROM spotter_output, airport 
3417
				WHERE spotter_output.airline_icao <> '' AND  airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao = :airport_icao 
3418
				GROUP BY spotter_output.airline_icao,real_arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
3419
			}
3420
			$sth = $this->db->prepare($query);
3421
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3422
		}
3423
		
3424
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3425
	}
3426
3427
3428
	/**
3429
	* Gets a list of all dates
3430
	*
3431
	* @return Array list of date names
3432
	*
3433
	*/
3434
	public function getAllDates()
3435
	{
3436
		global $globalTimezone, $globalDBdriver;
3437
		if ($globalTimezone != '') {
3438
			date_default_timezone_set($globalTimezone);
3439
			$datetime = new DateTime();
3440
			$offset = $datetime->format('P');
3441
		} else $offset = '+00:00';
3442
3443
		if ($globalDBdriver == 'mysql') {
3444
			$query  = "SELECT DISTINCT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) as date
3445
								FROM spotter_output
3446
								WHERE spotter_output.date <> '' 
3447
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3448
		} else {
3449
			$query  = "SELECT DISTINCT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date
3450
								FROM spotter_output
3451
								WHERE spotter_output.date <> '' 
3452
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3453
		}
3454
		
3455
		$sth = $this->db->prepare($query);
3456
		$sth->execute(array(':offset' => $offset));
3457
    
3458
		$date_array = array();
3459
		$temp_array = array();
3460
		
3461
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3462
		{
3463
			$temp_array['date'] = $row['date'];
3464
3465
			$date_array[] = $temp_array;
3466
		}
3467
3468
		return $date_array;
3469
	}
3470
	
3471
	
3472
	
3473
	/**
3474
	* Gets all route combinations
3475
	*
3476
	* @return Array the route list
3477
	*
3478
	*/
3479
	public function getAllRoutes()
3480
	{
3481
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route,  spotter_output.departure_airport_icao, spotter_output.arrival_airport_icao 
3482
				FROM spotter_output
3483
				WHERE spotter_output.ident <> '' 
3484
				GROUP BY route
3485
				ORDER BY route ASC";
3486
3487
		$sth = $this->db->prepare($query);
3488
		$sth->execute();
3489
3490
		$routes_array = array();
3491
		$temp_array = array();
3492
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3493
		{
3494
			$temp_array['route'] = $row['route'];
3495
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
3496
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
3497
3498
			$routes_array[] = $temp_array;
3499
		}
3500
		return $routes_array;
3501
	}
3502
3503
	/**
3504
	* Update ident spotter data
3505
	*
3506
	* @param String $flightaware_id the ID from flightaware
3507
	* @param String $ident the flight ident
3508
	* @return String success or false
3509
	*
3510
	*/	
3511
	public function updateIdentSpotterData($flightaware_id = '', $ident = '',$fromsource = NULL)
3512
	{
3513
		if (!is_numeric(substr($ident, 0, 3)))
3514
		{
3515
			if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3516
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3517
			} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3518
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3519
			} else {
3520
				$airline_array = $this->getAllAirlineInfo("NA");
3521
			}
3522
			if (count($airline_array) == 0) {
3523
				$airline_array = $this->getAllAirlineInfo("NA");
3524
			}
3525
			if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3526
				$airline_array = $this->getAllAirlineInfo("NA");
3527
			}
3528
		} else {
3529
			$airline_array = $this->getAllAirlineInfo("NA");
3530
		}
3531
                $airline_name = $airline_array[0]['name'];
3532
                $airline_icao = $airline_array[0]['icao'];
3533
                $airline_country = $airline_array[0]['country'];
3534
                $airline_type = $airline_array[0]['type'];
3535
3536
3537
		$query = 'UPDATE spotter_output SET ident = :ident, airline_name = :airline_name, airline_icao = :airline_icao, airline_country = :airline_country, airline_type = :airline_type WHERE flightaware_id = :flightaware_id';
3538
                $query_values = array(':flightaware_id' => $flightaware_id,':ident' => $ident,':airline_name' => $airline_name,':airline_icao' => $airline_icao,':airline_country' => $airline_country,':airline_type' => $airline_type);
3539
3540
		try {
3541
			$sth = $this->db->prepare($query);
3542
			$sth->execute($query_values);
3543
		} catch (PDOException $e) {
3544
			return "error : ".$e->getMessage();
3545
		}
3546
		
3547
		return "success";
3548
3549
	}
3550
	/**
3551
	* Update latest spotter data
3552
	*
3553
	* @param String $flightaware_id the ID from flightaware
3554
	* @param String $ident the flight ident
3555
	* @param String $arrival_airport_icao the arrival airport
3556
	* @return String success or false
3557
	*
3558
	*/	
3559
	public function updateLatestSpotterData($flightaware_id = '', $ident = '', $latitude = '', $longitude = '', $altitude = '', $ground = false, $groundspeed = NULL, $date = '', $arrival_airport_icao = '',$arrival_airport_time = '')
3560
	{
3561
		if ($groundspeed == '') $groundspeed = NULL;
3562
		$query = 'UPDATE spotter_output SET ident = :ident, last_latitude = :last_latitude, last_longitude = :last_longitude, last_altitude = :last_altitude, last_ground = :last_ground, last_seen = :last_seen, real_arrival_airport_icao = :real_arrival_airport_icao, real_arrival_airport_time = :real_arrival_airport_time, last_ground_speed = :last_ground_speed WHERE flightaware_id = :flightaware_id';
3563
                $query_values = array(':flightaware_id' => $flightaware_id,':real_arrival_airport_icao' => $arrival_airport_icao,':last_latitude' => $latitude,':last_longitude' => $longitude, ':last_altitude' => $altitude,':last_ground_speed' => $groundspeed,':last_seen' => $date,':real_arrival_airport_time' => $arrival_airport_time, ':last_ground' => $ground, ':ident' => $ident);
3564
3565
		try {
3566
			$sth = $this->db->prepare($query);
3567
			$sth->execute($query_values);
3568
		} catch (PDOException $e) {
3569
			return "error : ".$e->getMessage();
3570
		}
3571
		
3572
		return "success";
3573
3574
	}
3575
3576
	/**
3577
	* Adds a new spotter data
3578
	*
3579
	* @param String $flightaware_id the ID from flightaware
3580
	* @param String $ident the flight ident
3581
	* @param String $aircraft_icao the aircraft type
3582
	* @param String $departure_airport_icao the departure airport
3583
	* @param String $arrival_airport_icao the arrival airport
3584
	* @param String $latitude latitude of flight
3585
	* @param String $longitude latitude of flight
3586
	* @param String $waypoints waypoints of flight
3587
	* @param String $altitude altitude of flight
3588
	* @param String $heading heading of flight
3589
	* @param String $groundspeed speed of flight
3590
	* @param String $date date of flight
3591
	* @param String $departure_airport_time departure time of flight
3592
	* @param String $arrival_airport_time arrival time of flight
3593
	* @param String $squawk squawk code of flight
3594
	* @param String $route_stop route stop of flight
3595
	* @param String $highlight highlight or not
3596
	* @param String $ModeS ModesS code of flight
3597
	* @param String $registration registration code of flight
3598
	* @param String $pilot_id pilot id of flight (for virtual airlines)
3599
	* @param String $pilot_name pilot name of flight (for virtual airlines)
3600
	* @param String $verticalrate vertival rate of flight
3601
	* @return String success or false
3602
	*/
3603
	public function addSpotterData($flightaware_id = '', $ident = '', $aircraft_icao = '', $departure_airport_icao = '', $arrival_airport_icao = '', $latitude = '', $longitude = '', $waypoints = '', $altitude = '', $heading = '', $groundspeed = '', $date = '', $departure_airport_time = '', $arrival_airport_time = '',$squawk = '', $route_stop = '', $highlight = '', $ModeS = '', $registration = '',$pilot_id = '', $pilot_name = '', $verticalrate = '', $ground = false,$format_source = '', $source_name = '',$source_type = '')
3604
	{
3605
		global $globalURL, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalDebugTimeElapsed, $globalAirlinesSource, $globalVAM;
3606
		
3607
		//if (isset($globalDebugTimeElapsed) || $globalDebugTimeElapsed == '') $globalDebugTimeElapsed = FALSE;
3608
		$Image = new Image($this->db);
3609
		$Common = new Common();
3610
		
3611
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
3612
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
3613
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
3614
		if (!isset($globalVAM)) $globalVAM = FALSE;
3615
		date_default_timezone_set('UTC');
3616
		
3617
		//getting the registration
3618
		if ($flightaware_id != "" && $registration == '')
3619
		{
3620
			if (!is_string($flightaware_id))
3621
			{
3622
				return false;
3623
			} else {
3624
				if ($ModeS != '') {
3625
					$timeelapsed = microtime(true);
3626
					$registration = $this->getAircraftRegistrationBymodeS($ModeS,$source_type);
3627
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3628
				} else {
3629
					$myhex = explode('-',$flightaware_id);
3630
					if (count($myhex) > 0) {
3631
						$timeelapsed = microtime(true);
3632
						$registration = $this->getAircraftRegistrationBymodeS($myhex[0],$source_type);
3633
						if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3634
					}
3635
				}
3636
			}
3637
		}
3638
		$fromsource = NULL;
3639
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
3640
		elseif ($format_source == 'vatsimtxt') $fromsource = 'vatsim';
3641
		elseif ($format_source == 'whazzup') $fromsource = 'ivao';
3642
		elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
3643
		elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
3644
		//getting the airline information
3645
		if ($ident != "")
3646
		{
3647
			if (!is_string($ident))
3648
			{
3649
				return false;
3650
			} else {
3651
				if (!is_numeric(substr($ident, 0, 3)) && !((substr($ident, 0, 3) == 'OGN' || substr($ident, 0, 3) == 'FLR' || substr($ident, 0, 3) == 'ICA') && $format_source == 'aprs'))
3652
				{
3653
					$timeelapsed = microtime(true);
3654
					if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3655
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3656
					} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3657
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3658
					} else {
3659
						$airline_array = $this->getAllAirlineInfo("NA");
3660
					}
3661
					if (count($airline_array) == 0) {
3662
						$airline_array = $this->getAllAirlineInfo("NA");
3663
					}
3664
					if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3665
						$airline_array = $this->getAllAirlineInfo("NA");
3666
					}
3667
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3668
3669
				} else {
3670
					$timeelapsed = microtime(true);
3671
					$airline_array = $this->getAllAirlineInfo("NA");
3672
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3673
				}
3674
			}
3675
		} else $airline_array = array();
3676
		
3677
		//getting the aircraft information
3678
		$aircraft_array = array();
3679
		if ($aircraft_icao != '')
3680
		{
3681
			if (!is_string($aircraft_icao))
3682
			{
3683
				return false;
3684
			} else {
3685
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3686
				{
3687
					$timeelapsed = microtime(true);
3688
					$aircraft_array = $this->getAllAircraftInfo("NA");
3689
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3690
				} else {
3691
					$timeelapsed = microtime(true);
3692
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3693
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3694
				}
3695
			}
3696
		} else {
3697
			if ($ModeS != '') {
3698
				$timeelapsed = microtime(true);
3699
				$aircraft_icao = $this->getAllAircraftType($ModeS,$source_type);
3700
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAircraftType : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3701
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3702
				{
3703
					$timeelapsed = microtime(true);
3704
					$aircraft_array = $this->getAllAircraftInfo("NA");
3705
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3706
				} else {
3707
					$timeelapsed = microtime(true);
3708
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3709
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3710
				}
3711
			}
3712
		}
3713
		
3714
		//getting the departure airport information
3715
		$departure_airport_array = array();
3716
		$departure_airport_icao = trim($departure_airport_icao);
3717
		if ($departure_airport_icao != '')
3718
		{
3719
			if (!is_string($departure_airport_icao))
3720
			{
3721
				return false;
3722
			} else {
3723
				$timeelapsed = microtime(true);
3724
				$departure_airport_array = $this->getAllAirportInfo($departure_airport_icao);
3725
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3726
			}
3727
		}
3728
		
3729
		//getting the arrival airport information
3730
		$arrival_airport_array = array();
3731
		$arrival_airport_icao = trim($arrival_airport_icao);
3732
		if ($arrival_airport_icao != '')
3733
		{
3734
			if (!is_string($arrival_airport_icao))
3735
			{
3736
				return false;
3737
			} else {
3738
				$timeelapsed = microtime(true);
3739
				$arrival_airport_array = $this->getAllAirportInfo($arrival_airport_icao);
3740
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3741
			}
3742
		}
3743
3744
		if ($latitude != "")
3745
		{
3746
			if (!is_numeric($latitude))
3747
			{
3748
				return false;
3749
			}
3750
		}
3751
		
3752
		if ($longitude != "")
3753
		{
3754
			if (!is_numeric($longitude))
3755
			{
3756
				return false;
3757
			}
3758
		}
3759
		
3760
		if ($waypoints != "")
3761
		{
3762
			if (!is_string($waypoints))
3763
			{
3764
				return false;
3765
			}
3766
		}
3767
		
3768
		if ($altitude != "")
3769
		{
3770
			if (!is_numeric($altitude))
3771
			{
3772
				return false;
3773
			}
3774
		} else $altitude = 0;
3775
		
3776
		if ($heading != "")
3777
		{
3778
			if (!is_numeric($heading))
3779
			{
3780
				return false;
3781
			}
3782
		}
3783
		
3784
		if ($groundspeed != "")
3785
		{
3786
			if (!is_numeric($groundspeed))
3787
			{
3788
				return false;
3789
			}
3790
		}
3791
3792
    
3793
		if ($date == "" || strtotime($date) < time()-20*60)
3794
		{
3795
			$date = date("Y-m-d H:i:s", time());
3796
		}
3797
3798
		//getting the aircraft image
3799
		if (($registration != "" || $registration != 'NA') && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM)
3800
		{
3801
			$timeelapsed = microtime(true);
3802
			$image_array = $Image->getSpotterImage($registration);
3803
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getSpotterImage : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3804
			if (!isset($image_array[0]['registration']))
3805
			{
3806
				//echo "Add image !!!! \n";
3807
				$Image->addSpotterImage($registration);
3808
			}
3809
			$timeelapsed = microtime(true);
3810
			$owner_info = $this->getAircraftOwnerByRegistration($registration);
3811
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftOwnerByRegistration : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3812
			if ($owner_info['owner'] != '') $aircraft_owner = ucwords(strtolower($owner_info['owner']));
3813
		}
3814
    
3815
		if ($globalIVAO && $aircraft_icao != '')
3816
		{
3817
            		if (isset($airline_array[0]['icao'])) $airline_icao = $airline_array[0]['icao'];
3818
            		else $airline_icao = '';
3819
			$image_array = $Image->getSpotterImage('',$aircraft_icao,$airline_icao);
3820
			if (!isset($image_array[0]['registration']))
3821
			{
3822
				//echo "Add image !!!! \n";
3823
				$Image->addSpotterImage('',$aircraft_icao,$airline_icao);
3824
			}
3825
		}
3826
    
3827
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
3828
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
3829
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
3830
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
3831
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
3832
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
3833
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3834
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3835
		$waypoints = filter_var($waypoints,FILTER_SANITIZE_STRING);
3836
		$altitude = filter_var($altitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3837
		$heading = filter_var($heading,FILTER_SANITIZE_NUMBER_INT);
3838
		$groundspeed = filter_var($groundspeed,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3839
		$squawk = filter_var($squawk,FILTER_SANITIZE_NUMBER_INT);
3840
		$route_stop = filter_var($route_stop,FILTER_SANITIZE_STRING);
3841
		$ModeS = filter_var($ModeS,FILTER_SANITIZE_STRING);
3842
		$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_STRING);
3843
		$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
3844
		$format_source = filter_var($format_source,FILTER_SANITIZE_STRING);
3845
		$verticalrate = filter_var($verticalrate,FILTER_SANITIZE_NUMBER_INT);
3846
	
3847
		if (count($airline_array) == 0) 
3848
		{
3849
                        $airline_array = $this->getAllAirlineInfo('NA');
3850
                }
3851
                if (count($aircraft_array) == 0) 
3852
                {
3853
                        $aircraft_array = $this->getAllAircraftInfo('NA');
3854
                }
3855
                if (count($departure_airport_array) == 0 || $departure_airport_array[0]['icao'] == '' || $departure_airport_icao == '') 
3856
                {
3857
                        $departure_airport_array = $this->getAllAirportInfo('NA');
3858
                }
3859
                if (count($arrival_airport_array) == 0 || $arrival_airport_array[0]['icao'] == '' || $arrival_airport_icao == '') 
3860
                {
3861
                        $arrival_airport_array = $this->getAllAirportInfo('NA');
3862
                }
3863
                if ($registration == '') $registration = 'NA';
3864
                if ($latitude == '' && $longitude == '') {
3865
            		$latitude = 0;
3866
            		$longitude = 0;
3867
            	}
3868
                if ($squawk == '' || $Common->isInteger($squawk) === false) $squawk = NULL;
3869
                if ($verticalrate == '' || $Common->isInteger($verticalrate) === false) $verticalrate = NULL;
3870
                if ($heading == '' || $Common->isInteger($heading) === false) $heading = 0;
3871
                if ($groundspeed == '' || $Common->isInteger($groundspeed) === false) $groundspeed = 0;
3872
                if (!isset($aircraft_owner)) $aircraft_owner = NULL;
3873
                $query  = "INSERT INTO spotter_output (flightaware_id, ident, registration, airline_name, airline_icao, airline_country, airline_type, aircraft_icao, aircraft_name, aircraft_manufacturer, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, latitude, longitude, waypoints, altitude, heading, ground_speed, date, departure_airport_time, arrival_airport_time, squawk, route_stop,highlight,ModeS, pilot_id, pilot_name, verticalrate, owner_name, ground, format_source, source_name) 
3874
                VALUES (:flightaware_id,:ident,:registration,:airline_name,:airline_icao,:airline_country,:airline_type,:aircraft_icao,:aircraft_type,:aircraft_manufacturer,:departure_airport_icao,:departure_airport_name,:departure_airport_city,:departure_airport_country, :arrival_airport_icao, :arrival_airport_name, :arrival_airport_city, :arrival_airport_country, :latitude,:longitude,:waypoints,:altitude,:heading,:groundspeed,:date, :departure_airport_time, :arrival_airport_time, :squawk, :route_stop, :highlight, :ModeS, :pilot_id, :pilot_name, :verticalrate, :owner_name,:ground, :format_source, :source_name)";
3875
3876
                $airline_name = $airline_array[0]['name'];
3877
                $airline_icao = $airline_array[0]['icao'];
3878
                $airline_country = $airline_array[0]['country'];
3879
                $airline_type = $airline_array[0]['type'];
3880
		if ($airline_type == '') {
3881
			$timeelapsed = microtime(true);
3882
			$airline_type = $this->getAircraftTypeBymodeS($ModeS);
3883
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftTypeBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3884
		}
3885
		if ($airline_type == null) $airline_type = '';
3886
                $aircraft_type = $aircraft_array[0]['type'];
3887
                $aircraft_manufacturer = $aircraft_array[0]['manufacturer'];
3888
                $departure_airport_name = $departure_airport_array[0]['name'];
3889
	        $departure_airport_city = $departure_airport_array[0]['city'];
3890
            	$departure_airport_country = $departure_airport_array[0]['country'];
3891
                
3892
                $arrival_airport_name = $arrival_airport_array[0]['name'];
3893
                $arrival_airport_city = $arrival_airport_array[0]['city'];
3894
                $arrival_airport_country = $arrival_airport_array[0]['country'];
3895
                $query_values = array(':flightaware_id' => $flightaware_id,':ident' => $ident, ':registration' => $registration,':airline_name' => $airline_name,':airline_icao' => $airline_icao,':airline_country' => $airline_country,':airline_type' => $airline_type,':aircraft_icao' => $aircraft_icao,':aircraft_type' => $aircraft_type,':aircraft_manufacturer' => $aircraft_manufacturer,':departure_airport_icao' => $departure_airport_icao,':departure_airport_name' => $departure_airport_name,':departure_airport_city' => $departure_airport_city,':departure_airport_country' => $departure_airport_country,':arrival_airport_icao' => $arrival_airport_icao,':arrival_airport_name' => $arrival_airport_name,':arrival_airport_city' => $arrival_airport_city,':arrival_airport_country' => $arrival_airport_country,':latitude' => $latitude,':longitude' => $longitude, ':waypoints' => $waypoints,':altitude' => $altitude,':heading' => $heading,':groundspeed' => $groundspeed,':date' => $date,':departure_airport_time' => $departure_airport_time,':arrival_airport_time' => $arrival_airport_time, ':squawk' => $squawk, ':route_stop' => $route_stop, ':highlight' => $highlight, ':ModeS' => $ModeS, ':pilot_id' => $pilot_id, ':pilot_name' => $pilot_name, ':verticalrate' => $verticalrate, ':owner_name' => $aircraft_owner, ':format_source' => $format_source, ':ground' => $ground, ':source_name' => $source_name);
3896
3897
		try {
3898
		        
3899
			$sth = $this->db->prepare($query);
3900
			$sth->execute($query_values);
3901
			$this->db = null;
3902
		} catch (PDOException $e) {
3903
		    return "error : ".$e->getMessage();
3904
		}
3905
		
3906
		return "success";
3907
3908
	}
3909
	
3910
  
3911
	/**
3912
	* Gets the aircraft ident within the last hour
3913
	*
3914
	* @return String the ident
3915
	*
3916
	*/
3917
	public function getIdentFromLastHour($ident)
3918
	{
3919
		global $globalDBdriver, $globalTimezone;
3920
		if ($globalDBdriver == 'mysql') {
3921
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3922
								WHERE spotter_output.ident = :ident 
3923
								AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) 
3924
								AND spotter_output.date < UTC_TIMESTAMP()";
3925
			$query_data = array(':ident' => $ident);
3926
		} else {
3927
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3928
								WHERE spotter_output.ident = :ident 
3929
								AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INTERVAL '1 HOURS'
3930
								AND spotter_output.date < now() AT TIME ZONE 'UTC'";
3931
			$query_data = array(':ident' => $ident);
3932
    		}
3933
		
3934
		$sth = $this->db->prepare($query);
3935
		$sth->execute($query_data);
3936
    		$ident_result='';
3937
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3938
		{
3939
			$ident_result = $row['ident'];
3940
		}
3941
3942
		return $ident_result;
3943
	}
3944
	
3945
	
3946
	/**
3947
	* Gets the aircraft data from the last 20 seconds
3948
	*
3949
	* @return Array the spotter data
3950
	*
3951
	*/
3952
	public function getRealTimeData($q = '')
3953
	{
3954
		global $globalDBdriver;
3955
		$additional_query = '';
3956
		if ($q != "")
3957
		{
3958
			if (!is_string($q))
3959
			{
3960
				return false;
3961
			} else {
3962
				$q_array = explode(" ", $q);
3963
				foreach ($q_array as $q_item){
3964
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
3965
					$additional_query .= " AND (";
3966
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
3967
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
3968
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
3969
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
3970
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
3971
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
3972
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
3973
					$additional_query .= "(spotter_output.ident like '%".$q_item."%')";
3974
					$additional_query .= ")";
3975
				}
3976
			}
3977
		}
3978
		if ($globalDBdriver == 'mysql') {
3979
			$query  = "SELECT spotter_output.* FROM spotter_output 
3980
				WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 20 SECOND) ".$additional_query." 
3981
				AND spotter_output.date < UTC_TIMESTAMP()";
3982
		} else {
3983
			$query  = "SELECT spotter_output.* FROM spotter_output 
3984
				WHERE spotter_output.date::timestamp >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '20 SECONDS' ".$additional_query." 
3985
				AND spotter_output.date::timestamp < CURRENT_TIMESTAMP AT TIME ZONE 'UTC'";
3986
		}
3987
		$spotter_array = $this->getDataFromDB($query, array());
3988
3989
		return $spotter_array;
3990
	}
3991
	
3992
	
3993
	
3994
	 /**
3995
	* Gets all airlines that have flown over
3996
	*
3997
	* @return Array the airline list
3998
	*
3999
	*/
4000
	public function countAllAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(), $year = '', $month = '', $day = '')
4001
	{
4002
		global $globalDBdriver;
4003
		$filter_query = $this->getFilter($filters,true,true);
4004
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4005
		 			FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.airline_icao <> 'NA'";
4006
		if ($olderthanmonths > 0) {
4007
			if ($globalDBdriver == 'mysql') {
4008
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4009
			} else {
4010
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4011
			}
4012
		}
4013
                if ($sincedate != '') {
4014
			if ($globalDBdriver == 'mysql') {
4015
				$query .= " AND spotter_output.date > '".$sincedate."'";
4016
			} else {
4017
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4018
			}
4019
		}
4020
		$query_values = array();
4021
		if ($year != '') {
4022
			if ($globalDBdriver == 'mysql') {
4023
				$query .= " AND YEAR(spotter_output.date) = :year";
4024
				$query_values = array_merge($query_values,array(':year' => $year));
4025
			} else {
4026
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4027
				$query_values = array_merge($query_values,array(':year' => $year));
4028
			}
4029
		}
4030
		if ($month != '') {
4031
			if ($globalDBdriver == 'mysql') {
4032
				$query .= " AND MONTH(spotter_output.date) = :month";
4033
				$query_values = array_merge($query_values,array(':month' => $month));
4034
			} else {
4035
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4036
				$query_values = array_merge($query_values,array(':month' => $month));
4037
			}
4038
		}
4039
		if ($day != '') {
4040
			if ($globalDBdriver == 'mysql') {
4041
				$query .= " AND DAY(spotter_output.date) = :day";
4042
				$query_values = array_merge($query_values,array(':day' => $day));
4043
			} else {
4044
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4045
				$query_values = array_merge($query_values,array(':day' => $day));
4046
			}
4047
		}
4048
		$query .= " GROUP BY spotter_output.airline_name,spotter_output.airline_icao, spotter_output.airline_country ORDER BY airline_count DESC";
4049
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4050
4051
		$sth = $this->db->prepare($query);
4052
		$sth->execute($query_values);
4053
		$airline_array = array();
4054
		$temp_array = array();
4055
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4056
		{
4057
			$temp_array['airline_name'] = $row['airline_name'];
4058
			$temp_array['airline_icao'] = $row['airline_icao'];
4059
			$temp_array['airline_count'] = $row['airline_count'];
4060
			$temp_array['airline_country'] = $row['airline_country'];
4061
			$airline_array[] = $temp_array;
4062
		}
4063
		return $airline_array;
4064
	}
4065
4066
	 /**
4067
	* Gets all pilots that have flown over
4068
	*
4069
	* @return Array the pilots list
4070
	*
4071
	*/
4072
	public function countAllPilots($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '', $month = '',$day = '')
4073
	{
4074
		global $globalDBdriver;
4075
		$filter_query = $this->getFilter($filters,true,true);
4076
		$query  = "SELECT DISTINCT spotter_output.pilot_id, s.pilot_name, COUNT(spotter_output.pilot_id) AS pilot_count, spotter_output.format_source
4077
			FROM spotter_output LEFT JOIN (SELECT DISTINCT pilot_id, pilot_name, max(date) as date FROM spotter_output GROUP BY pilot_id, pilot_name) s ON s.pilot_id = spotter_output.pilot_id".$filter_query." spotter_output.pilot_id <> ''";
4078
                if ($olderthanmonths > 0) {
4079
            		if ($globalDBdriver == 'mysql') {
4080
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4081
			} else {
4082
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4083
			}
4084
		}
4085
                if ($sincedate != '') {
4086
            		if ($globalDBdriver == 'mysql') {
4087
				$query .= " AND spotter_output.date > '".$sincedate."'";
4088
			} else {
4089
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4090
			}
4091
		}
4092
		$query_values = array();
4093
		if ($year != '') {
4094
			if ($globalDBdriver == 'mysql') {
4095
				$query .= " AND YEAR(spotter_output.date) = :year";
4096
				$query_values = array_merge($query_values,array(':year' => $year));
4097
			} else {
4098
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4099
				$query_values = array_merge($query_values,array(':year' => $year));
4100
			}
4101
		}
4102
		if ($month != '') {
4103
			if ($globalDBdriver == 'mysql') {
4104
				$query .= " AND MONTH(spotter_output.date) = :month";
4105
				$query_values = array_merge($query_values,array(':month' => $month));
4106
			} else {
4107
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4108
				$query_values = array_merge($query_values,array(':month' => $month));
4109
			}
4110
		}
4111
		if ($day != '') {
4112
			if ($globalDBdriver == 'mysql') {
4113
				$query .= " AND DAY(spotter_output.date) = :day";
4114
				$query_values = array_merge($query_values,array(':day' => $day));
4115
			} else {
4116
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4117
				$query_values = array_merge($query_values,array(':day' => $day));
4118
			}
4119
		}
4120
		
4121
		$query .= " GROUP BY spotter_output.pilot_id,s.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
4122
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4123
      
4124
		
4125
		$sth = $this->db->prepare($query);
4126
		$sth->execute($query_values);
4127
		$airline_array = array();
4128
		$temp_array = array();
4129
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4130
		{
4131
			$temp_array['pilot_name'] = $row['pilot_name'];
4132
			$temp_array['pilot_id'] = $row['pilot_id'];
4133
			$temp_array['pilot_count'] = $row['pilot_count'];
4134
			$temp_array['format_source'] = $row['format_source'];
4135
			$airline_array[] = $temp_array;
4136
		}
4137
		return $airline_array;
4138
	}
4139
	
4140
	/**
4141
	* Gets all pilots that have flown over
4142
	*
4143
	* @return Array the pilots list
4144
	*
4145
	*/
4146
	public function countAllPilotsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '')
4147
	{
4148
		global $globalDBdriver;
4149
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.pilot_id, spotter_output.pilot_name, COUNT(spotter_output.pilot_id) AS pilot_count, spotter_output.format_source
4150
		 			FROM spotter_output WHERE spotter_output.pilot_id <> '' ";
4151
                if ($olderthanmonths > 0) {
4152
            		if ($globalDBdriver == 'mysql') {
4153
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4154
			} else {
4155
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4156
			}
4157
		}
4158
                if ($sincedate != '') {
4159
            		if ($globalDBdriver == 'mysql') {
4160
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4161
			} else {
4162
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4163
			}
4164
		}
4165
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
4166
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4167
      
4168
		
4169
		$sth = $this->db->prepare($query);
4170
		$sth->execute();
4171
      
4172
		$airline_array = array();
4173
		$temp_array = array();
4174
        
4175
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4176
		{
4177
			$temp_array['pilot_name'] = $row['pilot_name'];
4178
			$temp_array['pilot_id'] = $row['pilot_id'];
4179
			$temp_array['pilot_count'] = $row['pilot_count'];
4180
			$temp_array['airline_icao'] = $row['airline_icao'];
4181
			$temp_array['format_source'] = $row['format_source'];
4182
			$airline_array[] = $temp_array;
4183
		}
4184
		return $airline_array;
4185
	}
4186
	
4187
	 /**
4188
	* Gets all owner that have flown over
4189
	*
4190
	* @return Array the pilots list
4191
	*
4192
	*/
4193
	public function countAllOwners($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
4194
	{
4195
		global $globalDBdriver;
4196
		$filter_query = $this->getFilter($filters,true,true);
4197
		$query  = "SELECT DISTINCT spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
4198
					FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL";
4199
                if ($olderthanmonths > 0) {
4200
            		if ($globalDBdriver == 'mysql') {
4201
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4202
			} else {
4203
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4204
			}
4205
		}
4206
                if ($sincedate != '') {
4207
            		if ($globalDBdriver == 'mysql') {
4208
				$query .= " AND spotter_output.date > '".$sincedate."' ";
4209
			} else {
4210
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4211
			}
4212
		}
4213
		$query_values = array();
4214
		if ($year != '') {
4215
			if ($globalDBdriver == 'mysql') {
4216
				$query .= " AND YEAR(spotter_output.date) = :year";
4217
				$query_values = array_merge($query_values,array(':year' => $year));
4218
			} else {
4219
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4220
				$query_values = array_merge($query_values,array(':year' => $year));
4221
			}
4222
		}
4223
		if ($month != '') {
4224
			if ($globalDBdriver == 'mysql') {
4225
				$query .= " AND MONTH(spotter_output.date) = :month";
4226
				$query_values = array_merge($query_values,array(':month' => $month));
4227
			} else {
4228
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4229
				$query_values = array_merge($query_values,array(':month' => $month));
4230
			}
4231
		}
4232
		if ($day != '') {
4233
			if ($globalDBdriver == 'mysql') {
4234
				$query .= " AND DAY(spotter_output.date) = :day";
4235
				$query_values = array_merge($query_values,array(':day' => $day));
4236
			} else {
4237
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4238
				$query_values = array_merge($query_values,array(':day' => $day));
4239
			}
4240
		}
4241
		$query .= " GROUP BY spotter_output.owner_name ORDER BY owner_count DESC";
4242
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4243
		
4244
		$sth = $this->db->prepare($query);
4245
		$sth->execute($query_values);
4246
		$airline_array = array();
4247
		$temp_array = array();
4248
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4249
		{
4250
			$temp_array['owner_name'] = $row['owner_name'];
4251
			$temp_array['owner_count'] = $row['owner_count'];
4252
			$airline_array[] = $temp_array;
4253
		}
4254
		return $airline_array;
4255
	}
4256
	
4257
	 /**
4258
	* Gets all owner that have flown over
4259
	*
4260
	* @return Array the pilots list
4261
	*
4262
	*/
4263
	public function countAllOwnersByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
4264
	{
4265
		global $globalDBdriver;
4266
		$filter_query = $this->getFilter($filters,true,true);
4267
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
4268
		 			FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL ";
4269
                if ($olderthanmonths > 0) {
4270
            		if ($globalDBdriver == 'mysql') {
4271
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4272
			} else {
4273
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4274
			}
4275
		}
4276
                if ($sincedate != '') {
4277
            		if ($globalDBdriver == 'mysql') {
4278
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4279
			} else {
4280
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4281
			}
4282
		}
4283
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.owner_name ORDER BY owner_count DESC";
4284
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4285
      
4286
		
4287
		$sth = $this->db->prepare($query);
4288
		$sth->execute();
4289
      
4290
		$airline_array = array();
4291
		$temp_array = array();
4292
        
4293
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4294
		{
4295
			$temp_array['owner_name'] = $row['owner_name'];
4296
			$temp_array['owner_count'] = $row['owner_count'];
4297
			$temp_array['airline_icao'] = $row['airline_icao'];
4298
			$airline_array[] = $temp_array;
4299
		}
4300
		return $airline_array;
4301
	}
4302
4303
	/**
4304
	* Gets all airlines that have flown over by aircraft
4305
	*
4306
	* @return Array the airline list
4307
	*
4308
	*/
4309
	public function countAllAirlinesByAircraft($aircraft_icao,$filters = array())
4310
	{
4311
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4312
		$filter_query = $this->getFilter($filters,true,true);
4313
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4314
		 	    FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
4315
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
4316
			    ORDER BY airline_count DESC";
4317
      
4318
		
4319
		$sth = $this->db->prepare($query);
4320
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4321
      
4322
		$airline_array = array();
4323
		$temp_array = array();
4324
        
4325
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4326
		{
4327
			$temp_array['airline_name'] = $row['airline_name'];
4328
			$temp_array['airline_icao'] = $row['airline_icao'];
4329
			$temp_array['airline_count'] = $row['airline_count'];
4330
			$temp_array['airline_country'] = $row['airline_country'];
4331
4332
			$airline_array[] = $temp_array;
4333
		}
4334
4335
		return $airline_array;
4336
	}
4337
4338
4339
	/**
4340
	* Gets all airline countries that have flown over by aircraft
4341
	*
4342
	* @return Array the airline country list
4343
	*
4344
	*/
4345
	public function countAllAirlineCountriesByAircraft($aircraft_icao,$filters = array())
4346
	{
4347
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4348
		$filter_query = $this->getFilter($filters,true,true);
4349
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4350
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
4351
                    GROUP BY spotter_output.airline_country
4352
					ORDER BY airline_country_count DESC
4353
					LIMIT 10 OFFSET 0";
4354
      
4355
		
4356
		$sth = $this->db->prepare($query);
4357
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4358
      
4359
		$airline_country_array = array();
4360
		$temp_array = array();
4361
        
4362
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4363
		{
4364
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4365
			$temp_array['airline_country'] = $row['airline_country'];
4366
 
4367
			$airline_country_array[] = $temp_array;
4368
		}
4369
		return $airline_country_array;
4370
	}
4371
4372
4373
	
4374
	
4375
	/**
4376
	* Gets all airlines that have flown over by airport
4377
	*
4378
	* @return Array the airline list
4379
	*
4380
	*/
4381
	public function countAllAirlinesByAirport($airport_icao,$filters = array())
4382
	{
4383
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4384
		$filter_query = $this->getFilter($filters,true,true);
4385
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4386
		    FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao ) 
4387
                    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country
4388
		    ORDER BY airline_count DESC";
4389
      
4390
		
4391
		$sth = $this->db->prepare($query);
4392
		$sth->execute(array(':airport_icao' => $airport_icao));
4393
      
4394
		$airline_array = array();
4395
		$temp_array = array();
4396
        
4397
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4398
		{
4399
			$temp_array['airline_name'] = $row['airline_name'];
4400
			$temp_array['airline_icao'] = $row['airline_icao'];
4401
			$temp_array['airline_count'] = $row['airline_count'];
4402
			$temp_array['airline_country'] = $row['airline_country'];
4403
4404
			$airline_array[] = $temp_array;
4405
		}
4406
		return $airline_array;
4407
	}
4408
4409
4410
	/**
4411
	* Gets all airline countries that have flown over by airport icao
4412
	*
4413
	* @return Array the airline country list
4414
	*
4415
	*/
4416
	public function countAllAirlineCountriesByAirport($airport_icao,$filters = array())
4417
	{
4418
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4419
		$filter_query = $this->getFilter($filters,true,true);
4420
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4421
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao )
4422
					GROUP BY spotter_output.airline_country
4423
					ORDER BY airline_country_count DESC
4424
					LIMIT 10 OFFSET 0";
4425
4426
		
4427
		$sth = $this->db->prepare($query);
4428
		$sth->execute(array(':airport_icao' => $airport_icao));
4429
4430
		$airline_country_array = array();
4431
		$temp_array = array();
4432
        
4433
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4434
		{
4435
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4436
			$temp_array['airline_country'] = $row['airline_country'];
4437
 
4438
			$airline_country_array[] = $temp_array;
4439
		}
4440
		return $airline_country_array;
4441
	}
4442
4443
4444
	/**
4445
	* Gets all airlines that have flown over by aircraft manufacturer
4446
	*
4447
	* @return Array the airline list
4448
	*
4449
	*/
4450
	public function countAllAirlinesByManufacturer($aircraft_manufacturer,$filters = array())
4451
	{
4452
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4453
		$filter_query = $this->getFilter($filters,true,true);
4454
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4455
		 			FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4456
					GROUP BY spotter_output.airline_name
4457
					ORDER BY airline_count DESC";
4458
 
4459
		$sth = $this->db->prepare($query);
4460
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4461
 
4462
		$airline_array = array();
4463
		$temp_array = array();
4464
        
4465
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4466
		{
4467
			$temp_array['airline_name'] = $row['airline_name'];
4468
			$temp_array['airline_icao'] = $row['airline_icao'];
4469
			$temp_array['airline_count'] = $row['airline_count'];
4470
			$temp_array['airline_country'] = $row['airline_country'];
4471
4472
			$airline_array[] = $temp_array;
4473
		}
4474
		return $airline_array;
4475
	}
4476
4477
4478
4479
	/**
4480
	* Gets all airline countries that have flown over by aircraft manufacturer
4481
	*
4482
	* @return Array the airline country list
4483
	*
4484
	*/
4485
	public function countAllAirlineCountriesByManufacturer($aircraft_manufacturer,$filters = array())
4486
	{
4487
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4488
		$filter_query = $this->getFilter($filters,true,true);
4489
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4490
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4491
					GROUP BY spotter_output.airline_country
4492
					ORDER BY airline_country_count DESC
4493
					LIMIT 10 OFFSET 0";
4494
      
4495
		
4496
		$sth = $this->db->prepare($query);
4497
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4498
4499
		$airline_country_array = array();
4500
		$temp_array = array();
4501
        
4502
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4503
		{
4504
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4505
			$temp_array['airline_country'] = $row['airline_country'];
4506
			$airline_country_array[] = $temp_array;
4507
		}
4508
		return $airline_country_array;
4509
	}
4510
4511
4512
	/**
4513
	* Gets all airlines that have flown over by date
4514
	*
4515
	* @return Array the airline list
4516
	*
4517
	*/
4518
	public function countAllAirlinesByDate($date,$filters = array())
4519
	{
4520
		global $globalTimezone, $globalDBdriver;
4521
		$filter_query = $this->getFilter($filters,true,true);
4522
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4523
		if ($globalTimezone != '') {
4524
			date_default_timezone_set($globalTimezone);
4525
			$datetime = new DateTime($date);
4526
			$offset = $datetime->format('P');
4527
		} else $offset = '+00:00';
4528
4529
		if ($globalDBdriver == 'mysql') {
4530
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4531
		 			FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4532
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country 
4533
					ORDER BY airline_count DESC";
4534
		} else {
4535
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4536
		 			FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4537
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country
4538
					ORDER BY airline_count DESC";
4539
		}
4540
		
4541
		$sth = $this->db->prepare($query);
4542
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4543
4544
		$airline_array = array();
4545
		$temp_array = array();
4546
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4547
		{
4548
			$temp_array['airline_name'] = $row['airline_name'];
4549
			$temp_array['airline_icao'] = $row['airline_icao'];
4550
			$temp_array['airline_count'] = $row['airline_count'];
4551
			$temp_array['airline_country'] = $row['airline_country'];
4552
 
4553
			$airline_array[] = $temp_array;
4554
		}
4555
4556
		return $airline_array;
4557
	}	
4558
	
4559
	
4560
	/**
4561
	* Gets all airline countries that have flown over by date
4562
	*
4563
	* @return Array the airline country list
4564
	*
4565
	*/
4566
	public function countAllAirlineCountriesByDate($date,$filters = array())
4567
	{
4568
		global $globalTimezone, $globalDBdriver;
4569
		$filter_query = $this->getFilter($filters,true,true);
4570
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4571
		if ($globalTimezone != '') {
4572
			date_default_timezone_set($globalTimezone);
4573
			$datetime = new DateTime($date);
4574
			$offset = $datetime->format('P');
4575
		} else $offset = '+00:00';
4576
		
4577
		if ($globalDBdriver == 'mysql') {
4578
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4579
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4580
					GROUP BY spotter_output.airline_country
4581
					ORDER BY airline_country_count DESC
4582
					LIMIT 10 OFFSET 0";
4583
		} else {
4584
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4585
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4586
					GROUP BY spotter_output.airline_country
4587
					ORDER BY airline_country_count DESC
4588
					LIMIT 10 OFFSET 0";
4589
		}
4590
4591
		$sth = $this->db->prepare($query);
4592
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4593
 
4594
		$airline_country_array = array();
4595
		$temp_array = array();
4596
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4597
		{
4598
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4599
			$temp_array['airline_country'] = $row['airline_country'];
4600
4601
			$airline_country_array[] = $temp_array;
4602
		}
4603
		return $airline_country_array;
4604
	}
4605
4606
4607
	/**
4608
	* Gets all airlines that have flown over by ident/callsign
4609
	*
4610
	* @return Array the airline list
4611
	*
4612
	*/
4613
	public function countAllAirlinesByIdent($ident,$filters = array())
4614
	{
4615
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
4616
		$filter_query = $this->getFilter($filters,true,true);
4617
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4618
		 		FROM spotter_output".$filter_query." spotter_output.ident = :ident  
4619
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4620
				ORDER BY airline_count DESC";
4621
      
4622
		
4623
		$sth = $this->db->prepare($query);
4624
		$sth->execute(array(':ident' => $ident));
4625
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4626
	}
4627
4628
	/**
4629
	* Gets all airlines by owner
4630
	*
4631
	* @return Array the airline list
4632
	*
4633
	*/
4634
	public function countAllAirlinesByOwner($owner,$filters = array())
4635
	{
4636
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
4637
		$filter_query = $this->getFilter($filters,true,true);
4638
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4639
		 		FROM spotter_output".$filter_query." spotter_output.owner_name = :owner  
4640
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4641
				ORDER BY airline_count DESC";
4642
      
4643
		
4644
		$sth = $this->db->prepare($query);
4645
		$sth->execute(array(':owner' => $owner));
4646
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4647
	}
4648
4649
	/**
4650
	* Gets flight duration by owner
4651
	*
4652
	* @return String Duration of all flights
4653
	*
4654
	*/
4655
	public function getFlightDurationByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
4656
	{
4657
		global $globalDBdriver;
4658
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
4659
		$filter_query = $this->getFilter($filters,true,true);
4660
		$query  = "SELECT SUM(last_seen - date) AS duration 
4661
				FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
4662
				AND last_seen > date";
4663
		$query_values = array();
4664
		if ($year != '') {
4665
			if ($globalDBdriver == 'mysql') {
4666
				$query .= " AND YEAR(spotter_output.date) = :year";
4667
				$query_values = array_merge($query_values,array(':year' => $year));
4668
			} else {
4669
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4670
				$query_values = array_merge($query_values,array(':year' => $year));
4671
			}
4672
		}
4673
		if ($month != '') {
4674
			if ($globalDBdriver == 'mysql') {
4675
				$query .= " AND MONTH(spotter_output.date) = :month";
4676
				$query_values = array_merge($query_values,array(':month' => $month));
4677
			} else {
4678
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4679
				$query_values = array_merge($query_values,array(':month' => $month));
4680
			}
4681
		}
4682
		if ($day != '') {
4683
			if ($globalDBdriver == 'mysql') {
4684
				$query .= " AND DAY(spotter_output.date) = :day";
4685
				$query_values = array_merge($query_values,array(':day' => $day));
4686
			} else {
4687
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4688
				$query_values = array_merge($query_values,array(':day' => $day));
4689
			}
4690
		}
4691
		$query_values = array_merge($query_values,array(':owner' => $owner));
4692
		$sth = $this->db->prepare($query);
4693
		$sth->execute($query_values);
4694
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4695
		if (is_numeric($result[0]['duration'])) return gmdate('H:i:s',$result[0]['duration']);
4696
		elseif ($result[0]['duration'] == '') return 0;
4697
		else return $result[0]['duration'];
4698
	}
4699
4700
	/**
4701
	* Count flights by owner
4702
	*
4703
	* @return String Duration of all flights
4704
	*
4705
	*/
4706
	public function countFlightsByOwner($owner,$filters = array())
4707
	{
4708
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
4709
		$filter_query = $this->getFilter($filters,true,true);
4710
		$query  = "SELECT COUNT(*) AS nb 
4711
				FROM spotter_output".$filter_query." spotter_output.owner_name = :owner";
4712
		$query_values = array();
4713
		$query_values = array_merge($query_values,array(':owner' => $owner));
4714
		$sth = $this->db->prepare($query);
4715
		$sth->execute($query_values);
4716
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4717
		return $result[0]['nb'];
4718
	}
4719
4720
	/**
4721
	* Count flights by pilot
4722
	*
4723
	* @return String Duration of all flights
4724
	*
4725
	*/
4726
	public function countFlightsByPilot($pilot,$filters = array())
4727
	{
4728
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
4729
		$filter_query = $this->getFilter($filters,true,true);
4730
		$query  = "SELECT COUNT(*) AS nb 
4731
				FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilod_id = :pilot)";
4732
		$query_values = array();
4733
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
4734
		$sth = $this->db->prepare($query);
4735
		$sth->execute($query_values);
4736
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4737
		return $result[0]['nb'];
4738
	}
4739
4740
	/**
4741
	* Gets flight duration by pilot
4742
	*
4743
	* @return String Duration of all flights
4744
	*
4745
	*/
4746
	public function getFlightDurationByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
4747
	{
4748
		global $globalDBdriver;
4749
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
4750
		$filter_query = $this->getFilter($filters,true,true);
4751
		$query  = "SELECT SUM(last_seen - date) AS duration 
4752
		 		FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
4753
		 		AND last_seen > date";
4754
		$query_values = array();
4755
		if ($year != '') {
4756
			if ($globalDBdriver == 'mysql') {
4757
				$query .= " AND YEAR(spotter_output.date) = :year";
4758
				$query_values = array_merge($query_values,array(':year' => $year));
4759
			} else {
4760
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4761
				$query_values = array_merge($query_values,array(':year' => $year));
4762
			}
4763
		}
4764
		if ($month != '') {
4765
			if ($globalDBdriver == 'mysql') {
4766
				$query .= " AND MONTH(spotter_output.date) = :month";
4767
				$query_values = array_merge($query_values,array(':month' => $month));
4768
			} else {
4769
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4770
				$query_values = array_merge($query_values,array(':month' => $month));
4771
			}
4772
		}
4773
		if ($day != '') {
4774
			if ($globalDBdriver == 'mysql') {
4775
				$query .= " AND DAY(spotter_output.date) = :day";
4776
				$query_values = array_merge($query_values,array(':day' => $day));
4777
			} else {
4778
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4779
				$query_values = array_merge($query_values,array(':day' => $day));
4780
			}
4781
		}
4782
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
4783
		$sth = $this->db->prepare($query);
4784
		$sth->execute($query_values);
4785
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4786
		if (is_int($result[0]['duration'])) return gmdate('H:i:s',$result[0]['duration']);
4787
		else return $result[0]['duration'];
4788
	}
4789
4790
	/**
4791
	* Gets all airlines used by pilot
4792
	*
4793
	* @return Array the airline list
4794
	*
4795
	*/
4796
	public function countAllAirlinesByPilot($pilot,$filters = array())
4797
	{
4798
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
4799
		$filter_query = $this->getFilter($filters,true,true);
4800
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4801
		 		FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
4802
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4803
				ORDER BY airline_count DESC";
4804
      
4805
		
4806
		$sth = $this->db->prepare($query);
4807
		$sth->execute(array(':pilot' => $pilot));
4808
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4809
	}
4810
4811
	/**
4812
	* Gets all airlines that have flown over by route
4813
	*
4814
	* @return Array the airline list
4815
	*
4816
	*/
4817
	public function countAllAirlinesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
4818
	{
4819
		$filter_query = $this->getFilter($filters,true,true);
4820
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4821
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4822
4823
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4824
		 			FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
4825
					GROUP BY spotter_output.airline_name
4826
					ORDER BY airline_count DESC";
4827
      
4828
		
4829
		$sth = $this->db->prepare($query);
4830
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4831
      
4832
		$airline_array = array();
4833
		$temp_array = array();
4834
        
4835
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4836
		{
4837
			$temp_array['airline_name'] = $row['airline_name'];
4838
			$temp_array['airline_icao'] = $row['airline_icao'];
4839
			$temp_array['airline_count'] = $row['airline_count'];
4840
			$temp_array['airline_country'] = $row['airline_country'];
4841
4842
			$airline_array[] = $temp_array;
4843
		}
4844
		return $airline_array;
4845
	}
4846
4847
	/**
4848
	* Gets all airline countries that have flown over by route
4849
	*
4850
	* @return Array the airline country list
4851
	*
4852
	*/
4853
	public function countAllAirlineCountriesByRoute($departure_airport_icao, $arrival_airport_icao,$filters= array())
4854
	{
4855
		$filter_query = $this->getFilter($filters,true,true);
4856
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4857
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4858
      
4859
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4860
		 		FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
4861
				GROUP BY spotter_output.airline_country
4862
				ORDER BY airline_country_count DESC
4863
				LIMIT 10 OFFSET 0";
4864
      
4865
		
4866
		$sth = $this->db->prepare($query);
4867
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4868
      
4869
		$airline_country_array = array();
4870
		$temp_array = array();
4871
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4872
		{
4873
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4874
			$temp_array['airline_country'] = $row['airline_country'];
4875
4876
			$airline_country_array[] = $temp_array;
4877
		}
4878
4879
		return $airline_country_array;
4880
	}
4881
4882
4883
	/**
4884
	* Gets all airlines that have flown over by country
4885
	*
4886
	* @return Array the airline list
4887
	*
4888
	*/
4889
	public function countAllAirlinesByCountry($country,$filters = array())
4890
	{
4891
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4892
		$filter_query = $this->getFilter($filters,true,true);
4893
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4894
		 	    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
4895
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
4896
			    ORDER BY airline_count DESC";
4897
      
4898
		
4899
		$sth = $this->db->prepare($query);
4900
		$sth->execute(array(':country' => $country));
4901
4902
		$airline_array = array();
4903
		$temp_array = array();
4904
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4905
		{
4906
			$temp_array['airline_name'] = $row['airline_name'];
4907
			$temp_array['airline_icao'] = $row['airline_icao'];
4908
			$temp_array['airline_count'] = $row['airline_count'];
4909
			$temp_array['airline_country'] = $row['airline_country'];
4910
 
4911
			$airline_array[] = $temp_array;
4912
		}
4913
		return $airline_array;
4914
	}
4915
4916
4917
	/**
4918
	* Gets all airline countries that have flown over by country
4919
	*
4920
	* @return Array the airline country list
4921
	*
4922
	*/
4923
	public function countAllAirlineCountriesByCountry($country,$filters = array())
4924
	{
4925
		$filter_query = $this->getFilter($filters,true,true);
4926
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4927
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4928
		 		FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
4929
				GROUP BY spotter_output.airline_country
4930
				ORDER BY airline_country_count DESC
4931
				LIMIT 10 OFFSET 0";
4932
      
4933
		
4934
		$sth = $this->db->prepare($query);
4935
		$sth->execute(array(':country' => $country));
4936
4937
		$airline_country_array = array();
4938
		$temp_array = array();
4939
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4940
		{
4941
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4942
			$temp_array['airline_country'] = $row['airline_country'];
4943
4944
			$airline_country_array[] = $temp_array;
4945
		}
4946
		return $airline_country_array;
4947
	}
4948
4949
4950
	/**
4951
	* Gets all airlines countries
4952
	*
4953
	* @return Array the airline country list
4954
	*
4955
	*/
4956
	public function countAllAirlineCountries($limit = true, $filters = array(), $year = '', $month = '', $day = '')
4957
	{
4958
		global $globalDBdriver;
4959
		$filter_query = $this->getFilter($filters,true,true);
4960
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4961
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.airline_country <> 'NA'";
4962
		$query_values = array();
4963
		if ($year != '') {
4964
			if ($globalDBdriver == 'mysql') {
4965
				$query .= " AND YEAR(spotter_output.date) = :year";
4966
				$query_values = array_merge($query_values,array(':year' => $year));
4967
			} else {
4968
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4969
				$query_values = array_merge($query_values,array(':year' => $year));
4970
			}
4971
		}
4972
		if ($month != '') {
4973
			if ($globalDBdriver == 'mysql') {
4974
				$query .= " AND MONTH(spotter_output.date) = :month";
4975
				$query_values = array_merge($query_values,array(':month' => $month));
4976
			} else {
4977
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4978
				$query_values = array_merge($query_values,array(':month' => $month));
4979
			}
4980
		}
4981
		if ($day != '') {
4982
			if ($globalDBdriver == 'mysql') {
4983
				$query .= " AND DAY(spotter_output.date) = :day";
4984
				$query_values = array_merge($query_values,array(':day' => $day));
4985
			} else {
4986
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4987
				$query_values = array_merge($query_values,array(':day' => $day));
4988
			}
4989
		}
4990
		$query .= " GROUP BY spotter_output.airline_country
4991
					ORDER BY airline_country_count DESC";
4992
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4993
      
4994
		$sth = $this->db->prepare($query);
4995
		$sth->execute($query_values);
4996
4997
		$airline_array = array();
4998
		$temp_array = array();
4999
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5000
		{
5001
			$temp_array['airline_country_count'] = $row['airline_country_count'];
5002
			$temp_array['airline_country'] = $row['airline_country'];
5003
5004
			$airline_array[] = $temp_array;
5005
		}
5006
		return $airline_array;
5007
	}
5008
5009
	/**
5010
	* Gets all number of flight over countries
5011
	*
5012
	* @return Array the airline country list
5013
	*
5014
	*/
5015
	public function countAllFlightOverCountries($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
5016
	{
5017
		global $globalDBdriver;
5018
		//$filter_query = $this->getFilter($filters,true,true);
5019
		$Connection= new Connection($this->db);
5020
		if (!$Connection->tableExists('countries')) return array();
5021
		/*
5022
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
5023
					FROM countries c, spotter_output s
5024
					WHERE Within(GeomFromText(CONCAT('POINT(',s.longitude,' ',s.latitude,')')), ogc_geom) ";
5025
		*/
5026
/*
5027
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
5028
					FROM countries c, spotter_live s
5029
					WHERE c.iso2 = s.over_country ";
5030
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb FROM countries c INNER JOIN (SELECT DISTINCT flightaware_id,over_country FROM spottrer_live) l ON c.iso2 = l.over_country ";
5031
*/
5032
		require_once('class.SpotterLive.php');
5033
		$SpotterLive = new SpotterLive();
5034
		$filter_query = $SpotterLive->getFilter($filters,true,true);
5035
		$filter_query .= ' over_country IS NOT NULL';
5036
                if ($olderthanmonths > 0) {
5037
			if ($globalDBdriver == 'mysql') {
5038
				$filter_query .= ' AND spotter_live.date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5039
			} else {
5040
				$filter_query .= " AND spotter_live.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5041
			}
5042
		}
5043
                if ($sincedate != '') {
5044
            		if ($globalDBdriver == 'mysql') {
5045
				$filter_query .= " AND spotter_live.date > '".$sincedate."' ";
5046
			} else {
5047
				$filter_query .= " AND spotter_live.date > CAST('".$sincedate."' AS TIMESTAMP)";
5048
			}
5049
		}
5050
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb FROM countries c INNER JOIN (SELECT DISTINCT flightaware_id,over_country FROM spotter_live".$filter_query.") l ON c.iso2 = l.over_country ";
5051
		$query .= "GROUP BY c.name,c.iso3,c.iso2 ORDER BY nb DESC";
5052
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5053
      
5054
		
5055
		$sth = $this->db->prepare($query);
5056
		$sth->execute();
5057
 
5058
		$flight_array = array();
5059
		$temp_array = array();
5060
        
5061
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5062
		{
5063
			$temp_array['flight_count'] = $row['nb'];
5064
			$temp_array['flight_country'] = $row['name'];
5065
			$temp_array['flight_country_iso3'] = $row['iso3'];
5066
			$temp_array['flight_country_iso2'] = $row['iso2'];
5067
			$flight_array[] = $temp_array;
5068
		}
5069
		return $flight_array;
5070
	}
5071
	
5072
	
5073
	/**
5074
	* Gets all aircraft types that have flown over
5075
	*
5076
	* @return Array the aircraft list
5077
	*
5078
	*/
5079
	public function countAllAircraftTypes($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
5080
	{
5081
		global $globalDBdriver;
5082
		$filter_query = $this->getFilter($filters,true,true);
5083
		$query  = "SELECT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
5084
		    FROM spotter_output ".$filter_query." spotter_output.aircraft_name  <> '' AND spotter_output.aircraft_icao  <> ''";
5085
		if ($olderthanmonths > 0) {
5086
			if ($globalDBdriver == 'mysql') {
5087
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5088
			} else {
5089
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5090
			}
5091
		}
5092
		if ($sincedate != '') {
5093
			if ($globalDBdriver == 'mysql') {
5094
				$query .= " AND spotter_output.date > '".$sincedate."'";
5095
			} else {
5096
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5097
			}
5098
		}
5099
		$query_values = array();
5100
		if ($year != '') {
5101
			if ($globalDBdriver == 'mysql') {
5102
				$query .= " AND YEAR(spotter_output.date) = :year";
5103
				$query_values = array_merge($query_values,array(':year' => $year));
5104
			} else {
5105
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5106
				$query_values = array_merge($query_values,array(':year' => $year));
5107
			}
5108
		}
5109
		if ($month != '') {
5110
			if ($globalDBdriver == 'mysql') {
5111
				$query .= " AND MONTH(spotter_output.date) = :month";
5112
				$query_values = array_merge($query_values,array(':month' => $month));
5113
			} else {
5114
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5115
				$query_values = array_merge($query_values,array(':month' => $month));
5116
			}
5117
		}
5118
		if ($day != '') {
5119
			if ($globalDBdriver == 'mysql') {
5120
				$query .= " AND DAY(spotter_output.date) = :day";
5121
				$query_values = array_merge($query_values,array(':day' => $day));
5122
			} else {
5123
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5124
				$query_values = array_merge($query_values,array(':day' => $day));
5125
			}
5126
		}
5127
5128
		$query .= " GROUP BY spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer ORDER BY aircraft_icao_count DESC";
5129
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5130
 
5131
		$sth = $this->db->prepare($query);
5132
		$sth->execute($query_values);
5133
5134
		$aircraft_array = array();
5135
		$temp_array = array();
5136
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5137
		{
5138
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5139
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5140
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5141
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5142
			$aircraft_array[] = $temp_array;
5143
		}
5144
		return $aircraft_array;
5145
	}
5146
5147
	/**
5148
	* Gets all aircraft types that have flown over by airline
5149
	*
5150
	* @return Array the aircraft list
5151
	*
5152
	*/
5153
	public function countAllAircraftTypesByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '',$month = '', $day = '')
5154
	{
5155
		global $globalDBdriver;
5156
		$filter_query = $this->getFilter($filters,true,true);
5157
		$query  = "SELECT spotter_output.airline_icao, spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
5158
		    FROM spotter_output".$filter_query." spotter_output.aircraft_name  <> '' AND spotter_output.aircraft_icao  <> '' AND spotter_output.airline_icao <>'' AND spotter_output.airline_icao <> 'NA'";
5159
		if ($olderthanmonths > 0) {
5160
			if ($globalDBdriver == 'mysql') {
5161
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5162
			} else {
5163
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5164
			}
5165
		}
5166
		if ($sincedate != '') {
5167
			if ($globalDBdriver == 'mysql') {
5168
				$query .= " AND spotter_output.date > '".$sincedate."'";
5169
			} else {
5170
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5171
			}
5172
		}
5173
		$query_values = array();
5174
		if ($year != '') {
5175
			if ($globalDBdriver == 'mysql') {
5176
				$query .= " AND YEAR(spotter_output.date) = :year";
5177
				$query_values = array_merge($query_values,array(':year' => $year));
5178
			} else {
5179
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5180
				$query_values = array_merge($query_values,array(':year' => $year));
5181
			}
5182
		}
5183
		if ($month != '') {
5184
			if ($globalDBdriver == 'mysql') {
5185
				$query .= " AND MONTH(spotter_output.date) = :month";
5186
				$query_values = array_merge($query_values,array(':month' => $month));
5187
			} else {
5188
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5189
				$query_values = array_merge($query_values,array(':month' => $month));
5190
			}
5191
		}
5192
		if ($day != '') {
5193
			if ($globalDBdriver == 'mysql') {
5194
				$query .= " AND DAY(spotter_output.date) = :day";
5195
				$query_values = array_merge($query_values,array(':day' => $day));
5196
			} else {
5197
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5198
				$query_values = array_merge($query_values,array(':day' => $day));
5199
			}
5200
		}
5201
5202
		$query .= " GROUP BY spotter_output.airline_icao, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer ORDER BY aircraft_icao_count DESC";
5203
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5204
 
5205
		$sth = $this->db->prepare($query);
5206
		$sth->execute($query_values);
5207
5208
		$aircraft_array = array();
5209
		$temp_array = array();
5210
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5211
		{
5212
			$temp_array['airline_icao'] = $row['airline_icao'];
5213
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5214
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5215
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5216
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5217
			$aircraft_array[] = $temp_array;
5218
		}
5219
		return $aircraft_array;
5220
	}
5221
5222
	/**
5223
	* Gets all aircraft types that have flown over by months
5224
	*
5225
	* @return Array the aircraft list
5226
	*
5227
	*/
5228
	public function countAllAircraftTypesByMonths($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
5229
	{
5230
		global $globalDBdriver;
5231
		$filter_query = $this->getFilter($filters,true,true);
5232
		$query  = "SELECT EXTRACT(month from spotter_output.date) as month, EXTRACT(year from spotter_output.date) as year,spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
5233
		    FROM spotter_output".$filter_query." spotter_output.aircraft_name  <> '' AND spotter_output.aircraft_icao  <> '' AND spotter_output.airline_icao <>'' AND spotter_output.airline_icao <> 'NA' ";
5234
		if ($olderthanmonths > 0) {
5235
			if ($globalDBdriver == 'mysql') {
5236
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5237
			} else {
5238
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5239
			}
5240
		}
5241
		if ($sincedate != '') {
5242
			if ($globalDBdriver == 'mysql') {
5243
				$query .= "AND spotter_output.date > '".$sincedate."' ";
5244
			} else {
5245
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5246
			}
5247
		}
5248
5249
		$query .= "GROUP BY EXTRACT(month from spotter_output.date), EXTRACT(year from spotter_output.date), spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer ORDER BY aircraft_icao_count DESC";
5250
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5251
 
5252
		$sth = $this->db->prepare($query);
5253
		$sth->execute();
5254
5255
		$aircraft_array = array();
5256
		$temp_array = array();
5257
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5258
		{
5259
			//$temp_array['airline_icao'] = $row['airline_icao'];
5260
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5261
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5262
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5263
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5264
			$aircraft_array[] = $temp_array;
5265
		}
5266
		return $aircraft_array;
5267
	}
5268
5269
5270
	/**
5271
	* Gets all aircraft registration that have flown over by aircaft icao
5272
	*
5273
	* @return Array the aircraft list
5274
	*
5275
	*/
5276
	public function countAllAircraftRegistrationByAircraft($aircraft_icao,$filters = array())
5277
	{
5278
		$Image = new Image($this->db);
5279
		$filter_query = $this->getFilter($filters,true,true);
5280
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
5281
5282
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name  
5283
				FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_icao = :aircraft_icao  
5284
				GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name  
5285
				ORDER BY registration_count DESC";
5286
5287
		$sth = $this->db->prepare($query);
5288
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
5289
5290
		$aircraft_array = array();
5291
		$temp_array = array();
5292
        
5293
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5294
		{
5295
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5296
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5297
			$temp_array['registration'] = $row['registration'];
5298
			$temp_array['airline_name'] = $row['airline_name'];
5299
			$temp_array['image_thumbnail'] = "";
5300
			if($row['registration'] != "")
5301
			{
5302
				$image_array = $Image->getSpotterImage($row['registration']);
5303
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5304
			}
5305
			$temp_array['registration_count'] = $row['registration_count'];
5306
5307
			$aircraft_array[] = $temp_array;
5308
		}
5309
		return $aircraft_array;
5310
	}
5311
5312
5313
	/**
5314
	* Gets all aircraft types that have flown over by airline icao
5315
	*
5316
	* @return Array the aircraft list
5317
	*
5318
	*/
5319
	public function countAllAircraftTypesByAirline($airline_icao,$filters = array())
5320
	{
5321
		$filter_query = $this->getFilter($filters,true,true);
5322
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5323
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5324
			    FROM spotter_output".$filter_query." spotter_output.aircraft_icao <> '' AND spotter_output.airline_icao = :airline_icao 
5325
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5326
			    ORDER BY aircraft_icao_count DESC";
5327
5328
		$sth = $this->db->prepare($query);
5329
		$sth->execute(array(':airline_icao' => $airline_icao));
5330
5331
		$aircraft_array = array();
5332
		$temp_array = array();
5333
5334
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5335
		{
5336
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5337
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5338
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5339
5340
			$aircraft_array[] = $temp_array;
5341
		}
5342
		return $aircraft_array;
5343
	}
5344
5345
5346
	/**
5347
	* Gets all aircraft registration that have flown over by airline icao
5348
	*
5349
	* @return Array the aircraft list
5350
	*
5351
	*/
5352
	public function countAllAircraftRegistrationByAirline($airline_icao,$filters = array())
5353
	{
5354
		$filter_query = $this->getFilter($filters,true,true);
5355
		$Image = new Image($this->db);
5356
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5357
5358
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name 
5359
			    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.airline_icao = :airline_icao 
5360
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
5361
			    ORDER BY registration_count DESC";
5362
5363
		$sth = $this->db->prepare($query);
5364
		$sth->execute(array(':airline_icao' => $airline_icao));
5365
5366
		$aircraft_array = array();
5367
		$temp_array = array();
5368
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5369
		{
5370
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5371
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5372
			$temp_array['registration'] = $row['registration'];
5373
			$temp_array['airline_name'] = $row['airline_name'];
5374
			$temp_array['image_thumbnail'] = "";
5375
			if($row['registration'] != "")
5376
			{
5377
				$image_array = $Image->getSpotterImage($row['registration']);
5378
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5379
			}
5380
			$temp_array['registration_count'] = $row['registration_count'];
5381
5382
			$aircraft_array[] = $temp_array;
5383
		}
5384
		return $aircraft_array;
5385
	}
5386
5387
5388
	/**
5389
	* Gets all aircraft manufacturer that have flown over by airline icao
5390
	*
5391
	* @return Array the aircraft list
5392
	*
5393
	*/
5394
	public function countAllAircraftManufacturerByAirline($airline_icao,$filters = array())
5395
	{
5396
		$filter_query = $this->getFilter($filters,true,true);
5397
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5398
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5399
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.airline_icao = :airline_icao 
5400
				GROUP BY spotter_output.aircraft_manufacturer 
5401
				ORDER BY aircraft_manufacturer_count DESC";
5402
5403
		$sth = $this->db->prepare($query);
5404
		$sth->execute(array(':airline_icao' => $airline_icao));
5405
5406
		$aircraft_array = array();
5407
		$temp_array = array();
5408
5409
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5410
		{
5411
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5412
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5413
5414
			$aircraft_array[] = $temp_array;
5415
		}
5416
		return $aircraft_array;
5417
	}
5418
5419
5420
	/**
5421
	* Gets all aircraft types that have flown over by airline icao
5422
	*
5423
	* @return Array the aircraft list
5424
	*
5425
	*/
5426
	public function countAllAircraftTypesByAirport($airport_icao,$filters = array())
5427
	{
5428
		$filter_query = $this->getFilter($filters,true,true);
5429
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5430
5431
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5432
				FROM spotter_output".$filter_query." spotter_output.aircraft_icao <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao) 
5433
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5434
				ORDER BY aircraft_icao_count DESC";
5435
 
5436
		$sth = $this->db->prepare($query);
5437
		$sth->execute(array(':airport_icao' => $airport_icao));
5438
5439
		$aircraft_array = array();
5440
		$temp_array = array();
5441
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5442
		{
5443
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5444
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5445
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5446
5447
			$aircraft_array[] = $temp_array;
5448
		}
5449
		return $aircraft_array;
5450
	}
5451
5452
5453
	/**
5454
	* Gets all aircraft registration that have flown over by airport icao
5455
	*
5456
	* @return Array the aircraft list
5457
	*
5458
	*/
5459
	public function countAllAircraftRegistrationByAirport($airport_icao,$filters = array())
5460
	{
5461
		$filter_query = $this->getFilter($filters,true,true);
5462
		$Image = new Image($this->db);
5463
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5464
5465
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name  
5466
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)   
5467
                    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5468
		    ORDER BY registration_count DESC";
5469
5470
		$sth = $this->db->prepare($query);
5471
		$sth->execute(array(':airport_icao' => $airport_icao));
5472
5473
		$aircraft_array = array();
5474
		$temp_array = array();
5475
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5476
		{
5477
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5478
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5479
			$temp_array['registration'] = $row['registration'];
5480
			$temp_array['airline_name'] = $row['airline_name'];
5481
			$temp_array['image_thumbnail'] = "";
5482
			if($row['registration'] != "")
5483
			{
5484
				$image_array = $Image->getSpotterImage($row['registration']);
5485
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5486
			}
5487
			$temp_array['registration_count'] = $row['registration_count'];
5488
			$aircraft_array[] = $temp_array;
5489
		}
5490
		return $aircraft_array;
5491
	}
5492
	
5493
	
5494
	/**
5495
	* Gets all aircraft manufacturer that have flown over by airport icao
5496
	*
5497
	* @return Array the aircraft list
5498
	*
5499
	*/
5500
	public function countAllAircraftManufacturerByAirport($airport_icao,$filters = array())
5501
	{
5502
		$filter_query = $this->getFilter($filters,true,true);
5503
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5504
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5505
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)  
5506
                    GROUP BY spotter_output.aircraft_manufacturer 
5507
					ORDER BY aircraft_manufacturer_count DESC";
5508
5509
		
5510
		$sth = $this->db->prepare($query);
5511
		$sth->execute(array(':airport_icao' => $airport_icao));
5512
5513
		$aircraft_array = array();
5514
		$temp_array = array();
5515
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5516
		{
5517
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5518
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5519
			$aircraft_array[] = $temp_array;
5520
		}
5521
		return $aircraft_array;
5522
	}
5523
5524
	/**
5525
	* Gets all aircraft types that have flown over by aircraft manufacturer
5526
	*
5527
	* @return Array the aircraft list
5528
	*
5529
	*/
5530
	public function countAllAircraftTypesByManufacturer($aircraft_manufacturer,$filters = array())
5531
	{
5532
		$filter_query = $this->getFilter($filters,true,true);
5533
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5534
5535
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5536
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
5537
                    GROUP BY spotter_output.aircraft_name 
5538
					ORDER BY aircraft_icao_count DESC";
5539
5540
		$sth = $this->db->prepare($query);
5541
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5542
		$aircraft_array = array();
5543
		$temp_array = array();
5544
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5545
		{
5546
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5547
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5548
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5549
			$aircraft_array[] = $temp_array;
5550
		}
5551
		return $aircraft_array;
5552
	}
5553
5554
5555
	/**
5556
	* Gets all aircraft registration that have flown over by aircaft manufacturer
5557
	*
5558
	* @return Array the aircraft list
5559
	*
5560
	*/
5561
	public function countAllAircraftRegistrationByManufacturer($aircraft_manufacturer, $filters = array())
5562
	{
5563
		$filter_query = $this->getFilter($filters,true,true);
5564
		$Image = new Image($this->db);
5565
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5566
5567
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name   
5568
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
5569
                    GROUP BY spotter_output.registration 
5570
					ORDER BY registration_count DESC";
5571
5572
		
5573
		$sth = $this->db->prepare($query);
5574
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5575
		$aircraft_array = array();
5576
		$temp_array = array();
5577
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5578
		{
5579
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5580
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5581
			$temp_array['registration'] = $row['registration'];
5582
			$temp_array['airline_name'] = $row['airline_name'];
5583
			$temp_array['image_thumbnail'] = "";
5584
			if($row['registration'] != "")
5585
			{
5586
				$image_array = $Image->getSpotterImage($row['registration']);
5587
				$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5588
			}
5589
			$temp_array['registration_count'] = $row['registration_count'];
5590
			$aircraft_array[] = $temp_array;
5591
		}
5592
		return $aircraft_array;
5593
	}
5594
5595
	/**
5596
	* Gets all aircraft types that have flown over by date
5597
	*
5598
	* @return Array the aircraft list
5599
	*
5600
	*/
5601
	public function countAllAircraftTypesByDate($date,$filters = array())
5602
	{
5603
		global $globalTimezone, $globalDBdriver;
5604
		$filter_query = $this->getFilter($filters,true,true);
5605
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5606
		if ($globalTimezone != '') {
5607
			date_default_timezone_set($globalTimezone);
5608
			$datetime = new DateTime($date);
5609
			$offset = $datetime->format('P');
5610
		} else $offset = '+00:00';
5611
5612
		if ($globalDBdriver == 'mysql') {
5613
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5614
					FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
5615
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5616
					ORDER BY aircraft_icao_count DESC";
5617
		} else {
5618
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5619
					FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date
5620
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5621
					ORDER BY aircraft_icao_count DESC";
5622
		}
5623
		
5624
		$sth = $this->db->prepare($query);
5625
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5626
5627
		$aircraft_array = array();
5628
		$temp_array = array();
5629
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5630
		{
5631
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5632
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5633
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5634
5635
			$aircraft_array[] = $temp_array;
5636
		}
5637
		return $aircraft_array;
5638
	}
5639
5640
5641
	/**
5642
	* Gets all aircraft registration that have flown over by date
5643
	*
5644
	* @return Array the aircraft list
5645
	*
5646
	*/
5647
	public function countAllAircraftRegistrationByDate($date,$filters = array())
5648
	{
5649
		global $globalTimezone, $globalDBdriver;
5650
		$filter_query = $this->getFilter($filters,true,true);
5651
		$Image = new Image($this->db);
5652
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5653
		if ($globalTimezone != '') {
5654
			date_default_timezone_set($globalTimezone);
5655
			$datetime = new DateTime($date);
5656
			$offset = $datetime->format('P');
5657
		} else $offset = '+00:00';
5658
5659
		if ($globalDBdriver == 'mysql') {
5660
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name 
5661
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5662
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5663
					ORDER BY registration_count DESC";
5664
		} else {
5665
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name    
5666
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5667
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5668
					ORDER BY registration_count DESC";
5669
		}
5670
		
5671
		$sth = $this->db->prepare($query);
5672
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5673
5674
		$aircraft_array = array();
5675
		$temp_array = array();
5676
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5677
		{
5678
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5679
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5680
			$temp_array['registration'] = $row['registration'];
5681
			$temp_array['airline_name'] = $row['airline_name'];
5682
			$temp_array['image_thumbnail'] = "";
5683
			if($row['registration'] != "")
5684
			{
5685
				$image_array = $Image->getSpotterImage($row['registration']);
5686
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5687
			}
5688
			$temp_array['registration_count'] = $row['registration_count'];
5689
 
5690
			$aircraft_array[] = $temp_array;
5691
		}
5692
		return $aircraft_array;
5693
	}
5694
5695
5696
	/**
5697
	* Gets all aircraft manufacturer that have flown over by date
5698
	*
5699
	* @return Array the aircraft manufacturer list
5700
	*
5701
	*/
5702
	public function countAllAircraftManufacturerByDate($date,$filters = array())
5703
	{
5704
		global $globalTimezone, $globalDBdriver;
5705
		$filter_query = $this->getFilter($filters,true,true);
5706
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5707
		if ($globalTimezone != '') {
5708
			date_default_timezone_set($globalTimezone);
5709
			$datetime = new DateTime($date);
5710
			$offset = $datetime->format('P');
5711
		} else $offset = '+00:00';
5712
5713
		if ($globalDBdriver == 'mysql') {
5714
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5715
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5716
				GROUP BY spotter_output.aircraft_manufacturer 
5717
				ORDER BY aircraft_manufacturer_count DESC";
5718
		} else {
5719
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5720
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5721
				GROUP BY spotter_output.aircraft_manufacturer 
5722
				ORDER BY aircraft_manufacturer_count DESC";
5723
		}
5724
		
5725
		$sth = $this->db->prepare($query);
5726
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5727
5728
		$aircraft_array = array();
5729
		$temp_array = array();
5730
5731
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5732
		{
5733
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5734
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5735
5736
			$aircraft_array[] = $temp_array;
5737
		}
5738
		return $aircraft_array;
5739
	}
5740
5741
5742
	/**
5743
	* Gets all aircraft types that have flown over by ident/callsign
5744
	*
5745
	* @return Array the aircraft list
5746
	*
5747
	*/
5748
	public function countAllAircraftTypesByIdent($ident,$filters = array())
5749
	{
5750
		$filter_query = $this->getFilter($filters,true,true);
5751
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5752
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5753
				FROM spotter_output".$filter_query." spotter_output.ident = :ident 
5754
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao
5755
				ORDER BY aircraft_icao_count DESC";
5756
5757
		$sth = $this->db->prepare($query);
5758
		$sth->execute(array(':ident' => $ident));
5759
      
5760
		$aircraft_array = array();
5761
		$temp_array = array();
5762
5763
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5764
		{
5765
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5766
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5767
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5768
5769
			$aircraft_array[] = $temp_array;
5770
		}
5771
		return $aircraft_array;
5772
	}
5773
5774
	/**
5775
	* Gets all aircraft types that have flown over by pilot
5776
	*
5777
	* @return Array the aircraft list
5778
	*
5779
	*/
5780
	public function countAllAircraftTypesByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
5781
	{
5782
		global $globalDBdriver;
5783
		$filter_query = $this->getFilter($filters,true,true);
5784
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
5785
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5786
				FROM spotter_output".$filter_query." (spotter_output.pilot_id = :pilot OR spotter_output.pilot_name = :pilot)";
5787
		$query_values = array();
5788
		if ($year != '') {
5789
			if ($globalDBdriver == 'mysql') {
5790
				$query .= " AND YEAR(spotter_output.date) = :year";
5791
				$query_values = array_merge($query_values,array(':year' => $year));
5792
			} else {
5793
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5794
				$query_values = array_merge($query_values,array(':year' => $year));
5795
			}
5796
		}
5797
		if ($month != '') {
5798
			if ($globalDBdriver == 'mysql') {
5799
				$query .= " AND MONTH(spotter_output.date) = :month";
5800
				$query_values = array_merge($query_values,array(':month' => $month));
5801
			} else {
5802
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5803
				$query_values = array_merge($query_values,array(':month' => $month));
5804
			}
5805
		}
5806
		if ($day != '') {
5807
			if ($globalDBdriver == 'mysql') {
5808
				$query .= " AND DAY(spotter_output.date) = :day";
5809
				$query_values = array_merge($query_values,array(':day' => $day));
5810
			} else {
5811
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5812
				$query_values = array_merge($query_values,array(':day' => $day));
5813
			}
5814
		}
5815
5816
		$query .= " GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao
5817
				ORDER BY aircraft_icao_count DESC";
5818
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
5819
		$sth = $this->db->prepare($query);
5820
		$sth->execute($query_values);
5821
		return $sth->fetchAll(PDO::FETCH_ASSOC);
5822
	}
5823
5824
	/**
5825
	* Gets all aircraft types that have flown over by owner
5826
	*
5827
	* @return Array the aircraft list
5828
	*
5829
	*/
5830
	public function countAllAircraftTypesByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
5831
	{
5832
		global $globalDBdriver;
5833
		$filter_query = $this->getFilter($filters,true,true);
5834
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
5835
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
5836
				FROM spotter_output".$filter_query." spotter_output.owner_name = :owner";
5837
		$query_values = array();
5838
		if ($year != '') {
5839
			if ($globalDBdriver == 'mysql') {
5840
				$query .= " AND YEAR(spotter_output.date) = :year";
5841
				$query_values = array_merge($query_values,array(':year' => $year));
5842
			} else {
5843
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5844
				$query_values = array_merge($query_values,array(':year' => $year));
5845
			}
5846
		}
5847
		if ($month != '') {
5848
			if ($globalDBdriver == 'mysql') {
5849
				$query .= " AND MONTH(spotter_output.date) = :month";
5850
				$query_values = array_merge($query_values,array(':month' => $month));
5851
			} else {
5852
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5853
				$query_values = array_merge($query_values,array(':month' => $month));
5854
			}
5855
		}
5856
		if ($day != '') {
5857
			if ($globalDBdriver == 'mysql') {
5858
				$query .= " AND DAY(spotter_output.date) = :day";
5859
				$query_values = array_merge($query_values,array(':day' => $day));
5860
			} else {
5861
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5862
				$query_values = array_merge($query_values,array(':day' => $day));
5863
			}
5864
		}
5865
		$query .= " GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.aircraft_icao
5866
				ORDER BY aircraft_icao_count DESC";
5867
		$query_values = array_merge($query_values,array(':owner' => $owner));
5868
		$sth = $this->db->prepare($query);
5869
		$sth->execute($query_values);
5870
		return $sth->fetchAll(PDO::FETCH_ASSOC);
5871
	}
5872
5873
	/**
5874
	* Gets all aircraft registration that have flown over by ident/callsign
5875
	*
5876
	* @return Array the aircraft list
5877
	*
5878
	*/
5879
	public function countAllAircraftRegistrationByIdent($ident,$filters = array())
5880
	{
5881
		$filter_query = $this->getFilter($filters,true,true);
5882
		$Image = new Image($this->db);
5883
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5884
5885
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name  
5886
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.ident = :ident   
5887
                    GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
5888
		    ORDER BY registration_count DESC";
5889
5890
		
5891
		$sth = $this->db->prepare($query);
5892
		$sth->execute(array(':ident' => $ident));
5893
      
5894
		$aircraft_array = array();
5895
		$temp_array = array();
5896
        
5897
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5898
		{
5899
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5900
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5901
			$temp_array['registration'] = $row['registration'];
5902
			$temp_array['airline_name'] = $row['airline_name'];
5903
			$temp_array['image_thumbnail'] = "";
5904
			if($row['registration'] != "")
5905
			{
5906
				$image_array = $Image->getSpotterImage($row['registration']);
5907
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5908
				else $temp_array['image_thumbnail'] = '';
5909
			}
5910
			$temp_array['registration_count'] = $row['registration_count'];
5911
			$aircraft_array[] = $temp_array;
5912
		}
5913
		return $aircraft_array;
5914
	}
5915
5916
	/**
5917
	* Gets all aircraft registration that have flown over by owner
5918
	*
5919
	* @return Array the aircraft list
5920
	*
5921
	*/
5922
	public function countAllAircraftRegistrationByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
5923
	{
5924
		global $globalDBdriver;
5925
		$filter_query = $this->getFilter($filters,true,true);
5926
		$Image = new Image($this->db);
5927
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
5928
5929
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.registration, spotter_output.airline_name  
5930
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.owner_name = :owner";
5931
		$query_values = array();
5932
		if ($year != '') {
5933
			if ($globalDBdriver == 'mysql') {
5934
				$query .= " AND YEAR(spotter_output.date) = :year";
5935
				$query_values = array_merge($query_values,array(':year' => $year));
5936
			} else {
5937
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5938
				$query_values = array_merge($query_values,array(':year' => $year));
5939
			}
5940
		}
5941
		if ($month != '') {
5942
			if ($globalDBdriver == 'mysql') {
5943
				$query .= " AND MONTH(spotter_output.date) = :month";
5944
				$query_values = array_merge($query_values,array(':month' => $month));
5945
			} else {
5946
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5947
				$query_values = array_merge($query_values,array(':month' => $month));
5948
			}
5949
		}
5950
		if ($day != '') {
5951
			if ($globalDBdriver == 'mysql') {
5952
				$query .= " AND DAY(spotter_output.date) = :day";
5953
				$query_values = array_merge($query_values,array(':day' => $day));
5954
			} else {
5955
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5956
				$query_values = array_merge($query_values,array(':day' => $day));
5957
			}
5958
		}
5959
		$query_values = array_merge($query_values,array(':owner' => $owner));
5960
5961
		$query .= " GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.airline_name
5962
		    ORDER BY registration_count DESC";
5963
5964
		
5965
		$sth = $this->db->prepare($query);
5966
		$sth->execute($query_values);
5967
      
5968
		$aircraft_array = array();
5969
		$temp_array = array();
5970
        
5971
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5972
		{
5973
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5974
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5975
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5976
			$temp_array['registration'] = $row['registration'];
5977
			$temp_array['airline_name'] = $row['airline_name'];
5978
			$temp_array['image_thumbnail'] = "";
5979
			if($row['registration'] != "")
5980
			{
5981
				$image_array = $Image->getSpotterImage($row['registration']);
5982
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5983
				else $temp_array['image_thumbnail'] = '';
5984
			}
5985
			$temp_array['registration_count'] = $row['registration_count'];
5986
			$aircraft_array[] = $temp_array;
5987
		}
5988
		return $aircraft_array;
5989
	}
5990
5991
	/**
5992
	* Gets all aircraft registration that have flown over by pilot
5993
	*
5994
	* @return Array the aircraft list
5995
	*
5996
	*/
5997
	public function countAllAircraftRegistrationByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
5998
	{
5999
		global $globalDBdriver;
6000
		$filter_query = $this->getFilter($filters,true,true);
6001
		$Image = new Image($this->db);
6002
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
6003
6004
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.registration, spotter_output.airline_name  
6005
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot)";
6006
		$query_values = array();
6007
		if ($year != '') {
6008
			if ($globalDBdriver == 'mysql') {
6009
				$query .= " AND YEAR(spotter_output.date) = :year";
6010
				$query_values = array_merge($query_values,array(':year' => $year));
6011
			} else {
6012
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6013
				$query_values = array_merge($query_values,array(':year' => $year));
6014
			}
6015
		}
6016
		if ($month != '') {
6017
			if ($globalDBdriver == 'mysql') {
6018
				$query .= " AND MONTH(spotter_output.date) = :month";
6019
				$query_values = array_merge($query_values,array(':month' => $month));
6020
			} else {
6021
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6022
				$query_values = array_merge($query_values,array(':month' => $month));
6023
			}
6024
		}
6025
		if ($day != '') {
6026
			if ($globalDBdriver == 'mysql') {
6027
				$query .= " AND DAY(spotter_output.date) = :day";
6028
				$query_values = array_merge($query_values,array(':day' => $day));
6029
			} else {
6030
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6031
				$query_values = array_merge($query_values,array(':day' => $day));
6032
			}
6033
		}
6034
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
6035
6036
		$query .= " GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.airline_name
6037
		    ORDER BY registration_count DESC";
6038
6039
		
6040
		$sth = $this->db->prepare($query);
6041
		$sth->execute($query_values);
6042
      
6043
		$aircraft_array = array();
6044
		$temp_array = array();
6045
        
6046
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6047
		{
6048
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6049
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6050
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6051
			$temp_array['registration'] = $row['registration'];
6052
			$temp_array['airline_name'] = $row['airline_name'];
6053
			$temp_array['image_thumbnail'] = "";
6054
			if($row['registration'] != "")
6055
			{
6056
				$image_array = $Image->getSpotterImage($row['registration']);
6057
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6058
				else $temp_array['image_thumbnail'] = '';
6059
			}
6060
			$temp_array['registration_count'] = $row['registration_count'];
6061
			$aircraft_array[] = $temp_array;
6062
		}
6063
		return $aircraft_array;
6064
	}
6065
6066
6067
	/**
6068
	* Gets all aircraft manufacturer that have flown over by ident/callsign
6069
	*
6070
	* @return Array the aircraft manufacturer list
6071
	*
6072
	*/
6073
	public function countAllAircraftManufacturerByIdent($ident,$filters = array())
6074
	{
6075
		$filter_query = $this->getFilter($filters,true,true);
6076
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
6077
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6078
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.ident = :ident  
6079
                    GROUP BY spotter_output.aircraft_manufacturer 
6080
					ORDER BY aircraft_manufacturer_count DESC";
6081
6082
		
6083
		$sth = $this->db->prepare($query);
6084
		$sth->execute(array(':ident' => $ident));
6085
		$aircraft_array = array();
6086
		$temp_array = array();
6087
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6088
		{
6089
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6090
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6091
			$aircraft_array[] = $temp_array;
6092
		}
6093
		return $aircraft_array;
6094
	}
6095
6096
	/**
6097
	* Gets all aircraft manufacturer that have flown over by owner
6098
	*
6099
	* @return Array the aircraft manufacturer list
6100
	*
6101
	*/
6102
	public function countAllAircraftManufacturerByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
6103
	{
6104
		global $globalDBdriver;
6105
		$filter_query = $this->getFilter($filters,true,true);
6106
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
6107
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6108
		    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.owner_name = :owner";
6109
		$query_values = array();
6110
		if ($year != '') {
6111
			if ($globalDBdriver == 'mysql') {
6112
				$query .= " AND YEAR(spotter_output.date) = :year";
6113
				$query_values = array_merge($query_values,array(':year' => $year));
6114
			} else {
6115
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6116
				$query_values = array_merge($query_values,array(':year' => $year));
6117
			}
6118
		}
6119
		if ($month != '') {
6120
			if ($globalDBdriver == 'mysql') {
6121
				$query .= " AND MONTH(spotter_output.date) = :month";
6122
				$query_values = array_merge($query_values,array(':month' => $month));
6123
			} else {
6124
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6125
				$query_values = array_merge($query_values,array(':month' => $month));
6126
			}
6127
		}
6128
		if ($day != '') {
6129
			if ($globalDBdriver == 'mysql') {
6130
				$query .= " AND DAY(spotter_output.date) = :day";
6131
				$query_values = array_merge($query_values,array(':day' => $day));
6132
			} else {
6133
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6134
				$query_values = array_merge($query_values,array(':day' => $day));
6135
			}
6136
		}
6137
		$query_values = array_merge($query_values,array(':owner' => $owner));
6138
6139
		$query .= " GROUP BY spotter_output.aircraft_manufacturer 
6140
		    ORDER BY aircraft_manufacturer_count DESC";
6141
6142
		
6143
		$sth = $this->db->prepare($query);
6144
		$sth->execute($query_values);
6145
		return $sth->fetchAll(PDO::FETCH_ASSOC);
6146
	}
6147
6148
	/**
6149
	* Gets all aircraft manufacturer that have flown over by pilot
6150
	*
6151
	* @return Array the aircraft manufacturer list
6152
	*
6153
	*/
6154
	public function countAllAircraftManufacturerByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
6155
	{
6156
		global $globalDBdriver;
6157
		$filter_query = $this->getFilter($filters,true,true);
6158
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
6159
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6160
		    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot)";
6161
		$query_values = array();
6162
		if ($year != '') {
6163
			if ($globalDBdriver == 'mysql') {
6164
				$query .= " AND YEAR(spotter_output.date) = :year";
6165
				$query_values = array_merge($query_values,array(':year' => $year));
6166
			} else {
6167
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6168
				$query_values = array_merge($query_values,array(':year' => $year));
6169
			}
6170
		}
6171
		if ($month != '') {
6172
			if ($globalDBdriver == 'mysql') {
6173
				$query .= " AND MONTH(spotter_output.date) = :month";
6174
				$query_values = array_merge($query_values,array(':month' => $month));
6175
			} else {
6176
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6177
				$query_values = array_merge($query_values,array(':month' => $month));
6178
			}
6179
		}
6180
		if ($day != '') {
6181
			if ($globalDBdriver == 'mysql') {
6182
				$query .= " AND DAY(spotter_output.date) = :day";
6183
				$query_values = array_merge($query_values,array(':day' => $day));
6184
			} else {
6185
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6186
				$query_values = array_merge($query_values,array(':day' => $day));
6187
			}
6188
		}
6189
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
6190
6191
		$query .= " GROUP BY spotter_output.aircraft_manufacturer 
6192
		    ORDER BY aircraft_manufacturer_count DESC";
6193
6194
		
6195
		$sth = $this->db->prepare($query);
6196
		$sth->execute($query_values);
6197
		return $sth->fetchAll(PDO::FETCH_ASSOC);
6198
	}
6199
6200
6201
	/**
6202
	* Gets all aircraft types that have flown over by route
6203
	*
6204
	* @return Array the aircraft list
6205
	*
6206
	*/
6207
	public function countAllAircraftTypesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
6208
	{
6209
		$filter_query = $this->getFilter($filters,true,true);
6210
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
6211
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
6212
		
6213
6214
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
6215
                    FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
6216
                    GROUP BY spotter_output.aircraft_name 
6217
					ORDER BY aircraft_icao_count DESC";
6218
 
6219
		
6220
		$sth = $this->db->prepare($query);
6221
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
6222
		$aircraft_array = array();
6223
		$temp_array = array();
6224
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6225
		{
6226
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6227
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6228
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
6229
			$aircraft_array[] = $temp_array;
6230
		}
6231
		return $aircraft_array;
6232
	}
6233
6234
	/**
6235
	* Gets all aircraft registration that have flown over by route
6236
	*
6237
	* @return Array the aircraft list
6238
	*
6239
	*/
6240
	public function countAllAircraftRegistrationByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
6241
	{
6242
		$filter_query = $this->getFilter($filters,true,true);
6243
		$Image = new Image($this->db);
6244
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
6245
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
6246
6247
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name   
6248
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)   
6249
                    GROUP BY spotter_output.registration 
6250
					ORDER BY registration_count DESC";
6251
6252
		
6253
		$sth = $this->db->prepare($query);
6254
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
6255
      
6256
		$aircraft_array = array();
6257
		$temp_array = array();
6258
        
6259
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6260
		{
6261
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6262
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6263
			$temp_array['registration'] = $row['registration'];
6264
			$temp_array['airline_name'] = $row['airline_name'];
6265
			$temp_array['image_thumbnail'] = "";
6266
			if($row['registration'] != "")
6267
			{
6268
				$image_array = $Image->getSpotterImage($row['registration']);
6269
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6270
			}
6271
			$temp_array['registration_count'] = $row['registration_count'];
6272
          
6273
			$aircraft_array[] = $temp_array;
6274
		}
6275
6276
		return $aircraft_array;
6277
	}
6278
	
6279
	
6280
	/**
6281
	* Gets all aircraft manufacturer that have flown over by route
6282
	*
6283
	* @return Array the aircraft manufacturer list
6284
	*
6285
	*/
6286
	public function countAllAircraftManufacturerByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
6287
	{
6288
		$filter_query = $this->getFilter($filters,true,true);
6289
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
6290
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
6291
6292
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6293
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
6294
                    GROUP BY spotter_output.aircraft_manufacturer 
6295
					ORDER BY aircraft_manufacturer_count DESC";
6296
6297
		
6298
		$sth = $this->db->prepare($query);
6299
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
6300
      
6301
		$aircraft_array = array();
6302
		$temp_array = array();
6303
        
6304
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6305
		{
6306
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6307
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6308
          
6309
			$aircraft_array[] = $temp_array;
6310
		}
6311
6312
		return $aircraft_array;
6313
	}	
6314
6315
	
6316
	
6317
	
6318
	/**
6319
	* Gets all aircraft types that have flown over by country
6320
	*
6321
	* @return Array the aircraft list
6322
	*
6323
	*/
6324
	public function countAllAircraftTypesByCountry($country,$filters = array())
6325
	{
6326
		$filter_query = $this->getFilter($filters,true,true);
6327
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6328
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
6329
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
6330
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
6331
			    ORDER BY aircraft_icao_count DESC";
6332
 
6333
		
6334
		$sth = $this->db->prepare($query);
6335
		$sth->execute(array(':country' => $country));
6336
      
6337
		$aircraft_array = array();
6338
		$temp_array = array();
6339
        
6340
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6341
		{
6342
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6343
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6344
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
6345
          
6346
			$aircraft_array[] = $temp_array;
6347
		}
6348
6349
		return $aircraft_array;
6350
	}
6351
6352
6353
	/**
6354
	* Gets all aircraft registration that have flown over by country
6355
	*
6356
	* @return Array the aircraft list
6357
	*
6358
	*/
6359
	public function countAllAircraftRegistrationByCountry($country,$filters = array())
6360
	{
6361
		$filter_query = $this->getFilter($filters,true,true);
6362
		$Image = new Image($this->db);
6363
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6364
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name 
6365
			    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country)    
6366
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
6367
			    ORDER BY registration_count DESC";
6368
6369
		
6370
		$sth = $this->db->prepare($query);
6371
		$sth->execute(array(':country' => $country));
6372
      
6373
		$aircraft_array = array();
6374
		$temp_array = array();
6375
        
6376
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6377
		{
6378
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6379
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6380
			$temp_array['registration'] = $row['registration'];
6381
			$temp_array['airline_name'] = $row['airline_name'];
6382
			$temp_array['image_thumbnail'] = "";
6383
			if($row['registration'] != "")
6384
			{
6385
				$image_array = $Image->getSpotterImage($row['registration']);
6386
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6387
			}
6388
			$temp_array['registration_count'] = $row['registration_count'];
6389
          
6390
			$aircraft_array[] = $temp_array;
6391
		}
6392
6393
		return $aircraft_array;
6394
	}
6395
	
6396
	
6397
	/**
6398
	* Gets all aircraft manufacturer that have flown over by country
6399
	*
6400
	* @return Array the aircraft manufacturer list
6401
	*
6402
	*/
6403
	public function countAllAircraftManufacturerByCountry($country,$filters = array())
6404
	{
6405
		$filter_query = $this->getFilter($filters,true,true);
6406
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6407
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6408
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND (((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country) 
6409
                    GROUP BY spotter_output.aircraft_manufacturer 
6410
					ORDER BY aircraft_manufacturer_count DESC";
6411
6412
		
6413
		$sth = $this->db->prepare($query);
6414
		$sth->execute(array(':country' => $country));
6415
      
6416
		$aircraft_array = array();
6417
		$temp_array = array();
6418
        
6419
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6420
		{
6421
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6422
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6423
          
6424
			$aircraft_array[] = $temp_array;
6425
		}
6426
6427
		return $aircraft_array;
6428
	}	
6429
	
6430
	
6431
	
6432
	/**
6433
	* Gets all aircraft manufacturers that have flown over
6434
	*
6435
	* @return Array the aircraft list
6436
	*
6437
	*/
6438
	public function countAllAircraftManufacturers($filters = array(),$year = '',$month = '',$day = '')
6439
	{
6440
		global $globalDBdriver;
6441
		$filter_query = $this->getFilter($filters,true,true);
6442
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6443
                    FROM spotter_output ".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.aircraft_manufacturer <> 'Not Available'";
6444
                $query_values = array();
6445
		if ($year != '') {
6446
			if ($globalDBdriver == 'mysql') {
6447
				$query .= " AND YEAR(spotter_output.date) = :year";
6448
				$query_values = array_merge($query_values,array(':year' => $year));
6449
			} else {
6450
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6451
				$query_values = array_merge($query_values,array(':year' => $year));
6452
			}
6453
		}
6454
		if ($month != '') {
6455
			if ($globalDBdriver == 'mysql') {
6456
				$query .= " AND MONTH(spotter_output.date) = :month";
6457
				$query_values = array_merge($query_values,array(':month' => $month));
6458
			} else {
6459
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6460
				$query_values = array_merge($query_values,array(':month' => $month));
6461
			}
6462
		}
6463
		if ($day != '') {
6464
			if ($globalDBdriver == 'mysql') {
6465
				$query .= " AND DAY(spotter_output.date) = :day";
6466
				$query_values = array_merge($query_values,array(':day' => $day));
6467
			} else {
6468
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6469
				$query_values = array_merge($query_values,array(':day' => $day));
6470
			}
6471
		}
6472
		$query .= " GROUP BY spotter_output.aircraft_manufacturer
6473
					ORDER BY aircraft_manufacturer_count DESC
6474
					LIMIT 10";
6475
      
6476
		
6477
		$sth = $this->db->prepare($query);
6478
		$sth->execute($query_values);
6479
      
6480
		$manufacturer_array = array();
6481
		$temp_array = array();
6482
        
6483
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6484
		{
6485
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6486
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6487
          
6488
			$manufacturer_array[] = $temp_array;
6489
		}
6490
6491
		return $manufacturer_array;
6492
	}
6493
	
6494
	
6495
	
6496
	/**
6497
	* Gets all aircraft registrations that have flown over
6498
	*
6499
	* @return Array the aircraft list
6500
	*
6501
	*/
6502
	public function countAllAircraftRegistrations($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '', $month = '', $day = '')
6503
	{
6504
		global $globalDBdriver;
6505
		$Image = new Image($this->db);
6506
		$filter_query = $this->getFilter($filters,true,true);
6507
		$query  = "SELECT DISTINCT spotter_output.registration, COUNT(spotter_output.registration) AS aircraft_registration_count, spotter_output.aircraft_icao,  spotter_output.aircraft_name, spotter_output.airline_name    
6508
                    FROM spotter_output ".$filter_query." spotter_output.registration <> '' AND spotter_output.registration <> 'NA'";
6509
                if ($olderthanmonths > 0) {
6510
            		if ($globalDBdriver == 'mysql') {
6511
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6512
			} else {
6513
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6514
			}
6515
		}
6516
                if ($sincedate != '') {
6517
            		if ($globalDBdriver == 'mysql') {
6518
				$query .= " AND spotter_output.date > '".$sincedate."'";
6519
			} else {
6520
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6521
			}
6522
		}
6523
		$query_values = array();
6524
		if ($year != '') {
6525
			if ($globalDBdriver == 'mysql') {
6526
				$query .= " AND YEAR(spotter_output.date) = :year";
6527
				$query_values = array_merge($query_values,array(':year' => $year));
6528
			} else {
6529
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6530
				$query_values = array_merge($query_values,array(':year' => $year));
6531
			}
6532
		}
6533
		if ($month != '') {
6534
			if ($globalDBdriver == 'mysql') {
6535
				$query .= " AND MONTH(spotter_output.date) = :month";
6536
				$query_values = array_merge($query_values,array(':month' => $month));
6537
			} else {
6538
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6539
				$query_values = array_merge($query_values,array(':month' => $month));
6540
			}
6541
		}
6542
		if ($day != '') {
6543
			if ($globalDBdriver == 'mysql') {
6544
				$query .= " AND DAY(spotter_output.date) = :day";
6545
				$query_values = array_merge($query_values,array(':day' => $day));
6546
			} else {
6547
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6548
				$query_values = array_merge($query_values,array(':day' => $day));
6549
			}
6550
		}
6551
		$query .= " GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name ORDER BY aircraft_registration_count DESC";
6552
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6553
		
6554
		$sth = $this->db->prepare($query);
6555
		$sth->execute($query_values);
6556
      
6557
		$aircraft_array = array();
6558
		$temp_array = array();
6559
        
6560
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6561
		{
6562
			$temp_array['registration'] = $row['registration'];
6563
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
6564
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6565
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6566
			$temp_array['airline_name'] = $row['airline_name'];
6567
			$temp_array['image_thumbnail'] = "";
6568
			if($row['registration'] != "")
6569
			{
6570
				$image_array = $Image->getSpotterImage($row['registration']);
6571
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6572
			}
6573
          
6574
			$aircraft_array[] = $temp_array;
6575
		}
6576
6577
		return $aircraft_array;
6578
	}
6579
6580
6581
	/**
6582
	* Gets all aircraft registrations that have flown over
6583
	*
6584
	* @return Array the aircraft list
6585
	*
6586
	*/
6587
	public function countAllAircraftRegistrationsByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
6588
	{
6589
		global $globalDBdriver;
6590
		$filter_query = $this->getFilter($filters,true,true);
6591
		$Image = new Image($this->db);
6592
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.registration, COUNT(spotter_output.registration) AS aircraft_registration_count, spotter_output.aircraft_icao,  spotter_output.aircraft_name, spotter_output.airline_name    
6593
                    FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.registration <> '' AND spotter_output.registration <> 'NA' ";
6594
                if ($olderthanmonths > 0) {
6595
            		if ($globalDBdriver == 'mysql') {
6596
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6597
			} else {
6598
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6599
			}
6600
		}
6601
                if ($sincedate != '') {
6602
            		if ($globalDBdriver == 'mysql') {
6603
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6604
			} else {
6605
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6606
			}
6607
		}
6608
6609
		// if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6610
		//if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6611
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name ORDER BY aircraft_registration_count DESC";
6612
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6613
		
6614
		$sth = $this->db->prepare($query);
6615
		$sth->execute();
6616
      
6617
		$aircraft_array = array();
6618
		$temp_array = array();
6619
        
6620
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6621
		{
6622
			$temp_array['registration'] = $row['registration'];
6623
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
6624
			$temp_array['airline_icao'] = $row['airline_icao'];
6625
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6626
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6627
			$temp_array['airline_name'] = $row['airline_name'];
6628
			$temp_array['image_thumbnail'] = "";
6629
			if($row['registration'] != "")
6630
			{
6631
				$image_array = $Image->getSpotterImage($row['registration']);
6632
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6633
			}
6634
          
6635
			$aircraft_array[] = $temp_array;
6636
		}
6637
6638
		return $aircraft_array;
6639
	}
6640
	
6641
	
6642
	/**
6643
	* Gets all departure airports of the airplanes that have flown over
6644
	*
6645
	* @return Array the airport list
6646
	*
6647
	*/
6648
	public function countAllDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
6649
	{
6650
		global $globalDBdriver;
6651
		$filter_query = $this->getFilter($filters,true,true);
6652
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6653
				FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> ''";
6654
                if ($olderthanmonths > 0) {
6655
            		if ($globalDBdriver == 'mysql') {
6656
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6657
			} else {
6658
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6659
			}
6660
                }
6661
                if ($sincedate != '') {
6662
            		if ($globalDBdriver == 'mysql') {
6663
				$query .= " AND spotter_output.date > '".$sincedate."'";
6664
			} else {
6665
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6666
			}
6667
		}
6668
		$query_values = array();
6669
		if ($year != '') {
6670
			if ($globalDBdriver == 'mysql') {
6671
				$query .= " AND YEAR(spotter_output.date) = :year";
6672
				$query_values = array_merge($query_values,array(':year' => $year));
6673
			} else {
6674
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6675
				$query_values = array_merge($query_values,array(':year' => $year));
6676
			}
6677
		}
6678
		if ($month != '') {
6679
			if ($globalDBdriver == 'mysql') {
6680
				$query .= " AND MONTH(spotter_output.date) = :month";
6681
				$query_values = array_merge($query_values,array(':month' => $month));
6682
			} else {
6683
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6684
				$query_values = array_merge($query_values,array(':month' => $month));
6685
			}
6686
		}
6687
		if ($day != '') {
6688
			if ($globalDBdriver == 'mysql') {
6689
				$query .= " AND DAY(spotter_output.date) = :day";
6690
				$query_values = array_merge($query_values,array(':day' => $day));
6691
			} else {
6692
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6693
				$query_values = array_merge($query_values,array(':day' => $day));
6694
			}
6695
		}
6696
                $query .= " GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6697
				ORDER BY airport_departure_icao_count DESC";
6698
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6699
6700
		$sth = $this->db->prepare($query);
6701
		$sth->execute($query_values);
6702
6703
		$airport_array = array();
6704
		$temp_array = array();
6705
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6706
		{
6707
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6708
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6709
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6710
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6711
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6712
          
6713
			$airport_array[] = $temp_array;
6714
		}
6715
		return $airport_array;
6716
	}
6717
6718
	/**
6719
	* Gets all departure airports of the airplanes that have flown over
6720
	*
6721
	* @return Array the airport list
6722
	*
6723
	*/
6724
	public function countAllDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
6725
	{
6726
		global $globalDBdriver;
6727
		$filter_query = $this->getFilter($filters,true,true);
6728
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6729
			FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> '' ";
6730
                if ($olderthanmonths > 0) {
6731
            		if ($globalDBdriver == 'mysql') {
6732
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6733
			} else {
6734
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6735
			}
6736
                }
6737
                if ($sincedate != '') {
6738
            		if ($globalDBdriver == 'mysql') {
6739
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6740
			} else {
6741
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6742
			}
6743
		}
6744
6745
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6746
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6747
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6748
				ORDER BY airport_departure_icao_count DESC";
6749
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6750
      
6751
		$sth = $this->db->prepare($query);
6752
		$sth->execute();
6753
      
6754
		$airport_array = array();
6755
		$temp_array = array();
6756
        
6757
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6758
		{
6759
			$temp_array['airline_icao'] = $row['airline_icao'];
6760
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6761
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6762
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6763
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6764
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6765
          
6766
			$airport_array[] = $temp_array;
6767
		}
6768
		return $airport_array;
6769
	}
6770
6771
	/**
6772
	* Gets all detected departure airports of the airplanes that have flown over
6773
	*
6774
	* @return Array the airport list
6775
	*
6776
	*/
6777
	public function countAllDetectedDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
6778
	{
6779
		global $globalDBdriver;
6780
		$filter_query = $this->getFilter($filters,true,true);
6781
		$query  = "SELECT DISTINCT spotter_output.real_departure_airport_icao AS departure_airport_icao, COUNT(spotter_output.real_departure_airport_icao) AS airport_departure_icao_count, airport.name as departure_airport_name, airport.city as departure_airport_city, airport.country as departure_airport_country
6782
				FROM airport, spotter_output".$filter_query." spotter_output.real_departure_airport_icao <> '' AND spotter_output.real_departure_airport_icao <> 'NA' AND airport.icao = spotter_output.real_departure_airport_icao";
6783
                if ($olderthanmonths > 0) {
6784
            		if ($globalDBdriver == 'mysql') {
6785
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6786
			} else {
6787
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6788
			}
6789
                }
6790
                if ($sincedate != '') {
6791
            		if ($globalDBdriver == 'mysql') {
6792
				$query .= " AND spotter_output.date > '".$sincedate."'";
6793
			} else {
6794
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6795
			}
6796
		}
6797
		$query_values = array();
6798
		if ($year != '') {
6799
			if ($globalDBdriver == 'mysql') {
6800
				$query .= " AND YEAR(spotter_output.date) = :year";
6801
				$query_values = array_merge($query_values,array(':year' => $year));
6802
			} else {
6803
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6804
				$query_values = array_merge($query_values,array(':year' => $year));
6805
			}
6806
		}
6807
		if ($month != '') {
6808
			if ($globalDBdriver == 'mysql') {
6809
				$query .= " AND MONTH(spotter_output.date) = :month";
6810
				$query_values = array_merge($query_values,array(':month' => $month));
6811
			} else {
6812
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6813
				$query_values = array_merge($query_values,array(':month' => $month));
6814
			}
6815
		}
6816
		if ($day != '') {
6817
			if ($globalDBdriver == 'mysql') {
6818
				$query .= " AND DAY(spotter_output.date) = :day";
6819
				$query_values = array_merge($query_values,array(':day' => $day));
6820
			} else {
6821
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6822
				$query_values = array_merge($query_values,array(':day' => $day));
6823
			}
6824
		}
6825
                $query .= " GROUP BY spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
6826
				ORDER BY airport_departure_icao_count DESC";
6827
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6828
    		//echo $query;
6829
		$sth = $this->db->prepare($query);
6830
		$sth->execute($query_values);
6831
      
6832
		$airport_array = array();
6833
		$temp_array = array();
6834
        
6835
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6836
		{
6837
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6838
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6839
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6840
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6841
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6842
          
6843
			$airport_array[] = $temp_array;
6844
		}
6845
		return $airport_array;
6846
	}
6847
	
6848
	/**
6849
	* Gets all detected departure airports of the airplanes that have flown over
6850
	*
6851
	* @return Array the airport list
6852
	*
6853
	*/
6854
	public function countAllDetectedDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
6855
	{
6856
		global $globalDBdriver;
6857
		$filter_query = $this->getFilter($filters,true,true);
6858
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.real_departure_airport_icao AS departure_airport_icao, COUNT(spotter_output.real_departure_airport_icao) AS airport_departure_icao_count, airport.name as departure_airport_name, airport.city as departure_airport_city, airport.country as departure_airport_country
6859
				FROM airport, spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.real_departure_airport_icao <> '' AND spotter_output.real_departure_airport_icao <> 'NA' AND airport.icao = spotter_output.real_departure_airport_icao ";
6860
                if ($olderthanmonths > 0) {
6861
            		if ($globalDBdriver == 'mysql') {
6862
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6863
			} else {
6864
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6865
			}
6866
                }
6867
                if ($sincedate != '') {
6868
            		if ($globalDBdriver == 'mysql') {
6869
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6870
			} else {
6871
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
6872
			}
6873
		}
6874
6875
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6876
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6877
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
6878
				ORDER BY airport_departure_icao_count DESC";
6879
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6880
      
6881
		$sth = $this->db->prepare($query);
6882
		$sth->execute();
6883
      
6884
		$airport_array = array();
6885
		$temp_array = array();
6886
        
6887
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6888
		{
6889
			$temp_array['airline_icao'] = $row['airline_icao'];
6890
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6891
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6892
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6893
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6894
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6895
          
6896
			$airport_array[] = $temp_array;
6897
		}
6898
		return $airport_array;
6899
	}	
6900
	
6901
	/**
6902
	* Gets all departure airports of the airplanes that have flown over based on an airline icao
6903
	*
6904
	* @return Array the airport list
6905
	*
6906
	*/
6907
	public function countAllDepartureAirportsByAirline($airline_icao,$filters = array())
6908
	{
6909
		$filter_query = $this->getFilter($filters,true,true);
6910
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6911
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6912
			    FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.airline_icao = :airline_icao AND spotter_output.departure_airport_icao <> '' 
6913
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6914
			    ORDER BY airport_departure_icao_count DESC";
6915
      
6916
		
6917
		$sth = $this->db->prepare($query);
6918
		$sth->execute(array(':airline_icao' => $airline_icao));
6919
      
6920
		$airport_array = array();
6921
		$temp_array = array();
6922
        
6923
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6924
		{
6925
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6926
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6927
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6928
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6929
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6930
          
6931
			$airport_array[] = $temp_array;
6932
		}
6933
6934
		return $airport_array;
6935
	}
6936
	
6937
	
6938
	
6939
	/**
6940
	* Gets all departure airports by country of the airplanes that have flown over based on an airline icao
6941
	*
6942
	* @return Array the airport list
6943
	*
6944
	*/
6945
	public function countAllDepartureAirportCountriesByAirline($airline_icao,$filters = array())
6946
	{
6947
		$filter_query = $this->getFilter($filters,true,true);
6948
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6949
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6950
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
6951
                    GROUP BY spotter_output.departure_airport_country
6952
					ORDER BY airport_departure_country_count DESC";
6953
      
6954
		
6955
		$sth = $this->db->prepare($query);
6956
		$sth->execute(array(':airline_icao' => $airline_icao));
6957
      
6958
		$airport_array = array();
6959
		$temp_array = array();
6960
        
6961
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6962
		{
6963
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6964
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6965
          
6966
			$airport_array[] = $temp_array;
6967
		}
6968
6969
		return $airport_array;
6970
	}
6971
	
6972
	
6973
	
6974
	/**
6975
	* Gets all departure airports of the airplanes that have flown over based on an aircraft icao
6976
	*
6977
	* @return Array the airport list
6978
	*
6979
	*/
6980
	public function countAllDepartureAirportsByAircraft($aircraft_icao,$filters = array())
6981
	{
6982
		$filter_query = $this->getFilter($filters,true,true);
6983
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
6984
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6985
			    FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.aircraft_icao = :aircraft_icao AND spotter_output.departure_airport_icao <> '' 
6986
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6987
			    ORDER BY airport_departure_icao_count DESC";
6988
      
6989
		
6990
		$sth = $this->db->prepare($query);
6991
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
6992
      
6993
		$airport_array = array();
6994
		$temp_array = array();
6995
        
6996
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6997
		{
6998
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6999
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7000
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7001
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7002
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7003
          
7004
			$airport_array[] = $temp_array;
7005
		}
7006
7007
		return $airport_array;
7008
	}
7009
	
7010
	
7011
	/**
7012
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
7013
	*
7014
	* @return Array the airport list
7015
	*
7016
	*/
7017
	public function countAllDepartureAirportCountriesByAircraft($aircraft_icao,$filters = array())
7018
	{
7019
		$filter_query = $this->getFilter($filters,true,true);
7020
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7021
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7022
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
7023
                    GROUP BY spotter_output.departure_airport_country
7024
					ORDER BY airport_departure_country_count DESC";
7025
      
7026
		
7027
		$sth = $this->db->prepare($query);
7028
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7029
      
7030
		$airport_array = array();
7031
		$temp_array = array();
7032
        
7033
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7034
		{
7035
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7036
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7037
          
7038
			$airport_array[] = $temp_array;
7039
		}
7040
7041
		return $airport_array;
7042
	}
7043
	
7044
	
7045
	/**
7046
	* Gets all departure airports of the airplanes that have flown over based on an aircraft registration
7047
	*
7048
	* @return Array the airport list
7049
	*
7050
	*/
7051
	public function countAllDepartureAirportsByRegistration($registration,$filters = array())
7052
	{
7053
		$filter_query = $this->getFilter($filters,true,true);
7054
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
7055
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7056
			FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.registration = :registration AND spotter_output.departure_airport_icao <> '' 
7057
                    GROUP BY spotter_output.departure_airport_icao
7058
					ORDER BY airport_departure_icao_count DESC";
7059
      
7060
		
7061
		$sth = $this->db->prepare($query);
7062
		$sth->execute(array(':registration' => $registration));
7063
      
7064
		$airport_array = array();
7065
		$temp_array = array();
7066
        
7067
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7068
		{
7069
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7070
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7071
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7072
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7073
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7074
          
7075
			$airport_array[] = $temp_array;
7076
		}
7077
7078
		return $airport_array;
7079
	}
7080
	
7081
	
7082
	/**
7083
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft registration
7084
	*
7085
	* @return Array the airport list
7086
	*
7087
	*/
7088
	public function countAllDepartureAirportCountriesByRegistration($registration,$filters = array())
7089
	{
7090
		$filter_query = $this->getFilter($filters,true,true);
7091
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
7092
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7093
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.registration = :registration 
7094
                    GROUP BY spotter_output.departure_airport_country
7095
					ORDER BY airport_departure_country_count DESC";
7096
      
7097
		
7098
		$sth = $this->db->prepare($query);
7099
		$sth->execute(array(':registration' => $registration));
7100
      
7101
		$airport_array = array();
7102
		$temp_array = array();
7103
        
7104
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7105
		{
7106
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7107
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7108
          
7109
			$airport_array[] = $temp_array;
7110
		}
7111
7112
		return $airport_array;
7113
	}
7114
	
7115
	
7116
	/**
7117
	* Gets all departure airports of the airplanes that have flown over based on an arrivl airport icao
7118
	*
7119
	* @return Array the airport list
7120
	*
7121
	*/
7122
	public function countAllDepartureAirportsByAirport($airport_icao,$filters = array())
7123
	{
7124
		$filter_query = $this->getFilter($filters,true,true);
7125
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7126
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7127
			    FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao = :airport_icao AND spotter_output.departure_airport_icao <> '' 
7128
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7129
			    ORDER BY airport_departure_icao_count DESC";
7130
      
7131
		
7132
		$sth = $this->db->prepare($query);
7133
		$sth->execute(array(':airport_icao' => $airport_icao));
7134
      
7135
		$airport_array = array();
7136
		$temp_array = array();
7137
        
7138
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7139
		{
7140
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7141
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7142
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7143
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7144
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7145
          
7146
			$airport_array[] = $temp_array;
7147
		}
7148
7149
		return $airport_array;
7150
	}
7151
	
7152
	
7153
	/**
7154
	* Gets all departure airports by country of the airplanes that have flown over based on an airport icao
7155
	*
7156
	* @return Array the airport list
7157
	*
7158
	*/
7159
	public function countAllDepartureAirportCountriesByAirport($airport_icao,$filters = array())
7160
	{
7161
		$filter_query = $this->getFilter($filters,true,true);
7162
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7163
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7164
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.arrival_airport_icao = :airport_icao 
7165
                    GROUP BY spotter_output.departure_airport_country
7166
					ORDER BY airport_departure_country_count DESC";
7167
      
7168
		
7169
		$sth = $this->db->prepare($query);
7170
		$sth->execute(array(':airport_icao' => $airport_icao));
7171
      
7172
		$airport_array = array();
7173
		$temp_array = array();
7174
        
7175
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7176
		{
7177
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7178
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7179
          
7180
			$airport_array[] = $temp_array;
7181
		}
7182
7183
		return $airport_array;
7184
	}
7185
	
7186
	
7187
	
7188
	/**
7189
	* Gets all departure airports of the airplanes that have flown over based on an aircraft manufacturer
7190
	*
7191
	* @return Array the airport list
7192
	*
7193
	*/
7194
	public function countAllDepartureAirportsByManufacturer($aircraft_manufacturer,$filters = array())
7195
	{
7196
		$filter_query = $this->getFilter($filters,true,true);
7197
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7198
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7199
			FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer AND spotter_output.departure_airport_icao <> '' 
7200
                    GROUP BY spotter_output.departure_airport_icao
7201
					ORDER BY airport_departure_icao_count DESC";
7202
      
7203
		
7204
		$sth = $this->db->prepare($query);
7205
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7206
      
7207
		$airport_array = array();
7208
		$temp_array = array();
7209
        
7210
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7211
		{
7212
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7213
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7214
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7215
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7216
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7217
          
7218
			$airport_array[] = $temp_array;
7219
		}
7220
7221
		return $airport_array;
7222
	}
7223
	
7224
	
7225
	/**
7226
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft manufacturer
7227
	*
7228
	* @return Array the airport list
7229
	*
7230
	*/
7231
	public function countAllDepartureAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
7232
	{
7233
		$filter_query = $this->getFilter($filters,true,true);
7234
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7235
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7236
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
7237
                    GROUP BY spotter_output.departure_airport_country
7238
					ORDER BY airport_departure_country_count DESC";
7239
      
7240
		
7241
		$sth = $this->db->prepare($query);
7242
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7243
      
7244
		$airport_array = array();
7245
		$temp_array = array();
7246
        
7247
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7248
		{
7249
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7250
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7251
          
7252
			$airport_array[] = $temp_array;
7253
		}
7254
7255
		return $airport_array;
7256
	}
7257
	
7258
	
7259
	/**
7260
	* Gets all departure airports of the airplanes that have flown over based on a date
7261
	*
7262
	* @return Array the airport list
7263
	*
7264
	*/
7265
	public function countAllDepartureAirportsByDate($date,$filters = array())
7266
	{
7267
		global $globalTimezone, $globalDBdriver;
7268
		$filter_query = $this->getFilter($filters,true,true);
7269
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7270
		if ($globalTimezone != '') {
7271
			date_default_timezone_set($globalTimezone);
7272
			$datetime = new DateTime($date);
7273
			$offset = $datetime->format('P');
7274
		} else $offset = '+00:00';
7275
7276
		if ($globalDBdriver == 'mysql') {
7277
			$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7278
					FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
7279
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7280
					ORDER BY airport_departure_icao_count DESC";
7281
		} else {
7282
			$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7283
					FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date
7284
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7285
					ORDER BY airport_departure_icao_count DESC";
7286
		}
7287
7288
		$sth = $this->db->prepare($query);
7289
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7290
      
7291
		$airport_array = array();
7292
		$temp_array = array();
7293
        
7294
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7295
		{
7296
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7297
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7298
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7299
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7300
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7301
          
7302
			$airport_array[] = $temp_array;
7303
		}
7304
		return $airport_array;
7305
	}
7306
	
7307
	
7308
	
7309
	/**
7310
	* Gets all departure airports by country of the airplanes that have flown over based on a date
7311
	*
7312
	* @return Array the airport list
7313
	*
7314
	*/
7315
	public function countAllDepartureAirportCountriesByDate($date,$filters = array())
7316
	{
7317
		global $globalTimezone, $globalDBdriver;
7318
		$filter_query = $this->getFilter($filters,true,true);
7319
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7320
		if ($globalTimezone != '') {
7321
			date_default_timezone_set($globalTimezone);
7322
			$datetime = new DateTime($date);
7323
			$offset = $datetime->format('P');
7324
		} else $offset = '+00:00';
7325
7326
		if ($globalDBdriver == 'mysql') {
7327
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7328
					FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
7329
					GROUP BY spotter_output.departure_airport_country
7330
					ORDER BY airport_departure_country_count DESC";
7331
		} else {
7332
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7333
					FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
7334
					GROUP BY spotter_output.departure_airport_country
7335
					ORDER BY airport_departure_country_count DESC";
7336
		}
7337
		
7338
		$sth = $this->db->prepare($query);
7339
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7340
      
7341
		$airport_array = array();
7342
		$temp_array = array();
7343
        
7344
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7345
		{
7346
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7347
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7348
          
7349
			$airport_array[] = $temp_array;
7350
		}
7351
		return $airport_array;
7352
	}
7353
	
7354
	
7355
	
7356
	/**
7357
	* Gets all departure airports of the airplanes that have flown over based on a ident/callsign
7358
	*
7359
	* @return Array the airport list
7360
	*
7361
	*/
7362
	public function countAllDepartureAirportsByIdent($ident,$filters = array())
7363
	{
7364
		$filter_query = $this->getFilter($filters,true,true);
7365
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7366
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7367
		    FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> '' AND spotter_output.ident = :ident 
7368
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7369
		    ORDER BY airport_departure_icao_count DESC";
7370
      
7371
		
7372
		$sth = $this->db->prepare($query);
7373
		$sth->execute(array(':ident' => $ident));
7374
      
7375
		$airport_array = array();
7376
		$temp_array = array();
7377
        
7378
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7379
		{
7380
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7381
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7382
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7383
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7384
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7385
          
7386
			$airport_array[] = $temp_array;
7387
		}
7388
7389
		return $airport_array;
7390
	}
7391
	
7392
	/**
7393
	* Gets all departure airports of the airplanes that have flown over based on a owner
7394
	*
7395
	* @return Array the airport list
7396
	*
7397
	*/
7398
	public function countAllDepartureAirportsByOwner($owner,$filters = array())
7399
	{
7400
		$filter_query = $this->getFilter($filters,true,true);
7401
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
7402
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7403
		    FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> '' AND spotter_output.owner_name = :owner 
7404
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7405
		    ORDER BY airport_departure_icao_count DESC";
7406
      
7407
		
7408
		$sth = $this->db->prepare($query);
7409
		$sth->execute(array(':owner' => $owner));
7410
      
7411
		$airport_array = array();
7412
		$temp_array = array();
7413
        
7414
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7415
		{
7416
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7417
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7418
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7419
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7420
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7421
          
7422
			$airport_array[] = $temp_array;
7423
		}
7424
7425
		return $airport_array;
7426
	}
7427
	
7428
	/**
7429
	* Gets all departure airports of the airplanes that have flown over based on a pilot
7430
	*
7431
	* @return Array the airport list
7432
	*
7433
	*/
7434
	public function countAllDepartureAirportsByPilot($pilot,$filters = array())
7435
	{
7436
		$filter_query = $this->getFilter($filters,true,true);
7437
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
7438
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7439
		    FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
7440
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7441
		    ORDER BY airport_departure_icao_count DESC";
7442
		
7443
		$sth = $this->db->prepare($query);
7444
		$sth->execute(array(':pilot' => $pilot));
7445
      
7446
		$airport_array = array();
7447
		$temp_array = array();
7448
        
7449
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7450
		{
7451
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7452
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7453
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7454
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7455
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7456
          
7457
			$airport_array[] = $temp_array;
7458
		}
7459
7460
		return $airport_array;
7461
	}
7462
	
7463
	
7464
	
7465
	/**
7466
	* Gets all departure airports by country of the airplanes that have flown over based on a callsign/ident
7467
	*
7468
	* @return Array the airport list
7469
	*
7470
	*/
7471
	public function countAllDepartureAirportCountriesByIdent($ident,$filters = array())
7472
	{
7473
		$filter_query = $this->getFilter($filters,true,true);
7474
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7475
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7476
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.ident = :ident 
7477
                    GROUP BY spotter_output.departure_airport_country
7478
					ORDER BY airport_departure_country_count DESC";
7479
      
7480
		
7481
		$sth = $this->db->prepare($query);
7482
		$sth->execute(array(':ident' => $ident));
7483
      
7484
		$airport_array = array();
7485
		$temp_array = array();
7486
        
7487
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7488
		{
7489
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7490
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7491
          
7492
			$airport_array[] = $temp_array;
7493
		}
7494
7495
		return $airport_array;
7496
	}
7497
	
7498
	/**
7499
	* Gets all departure airports by country of the airplanes that have flown over based on owner
7500
	*
7501
	* @return Array the airport list
7502
	*
7503
	*/
7504
	public function countAllDepartureAirportCountriesByOwner($owner,$filters = array())
7505
	{
7506
		$filter_query = $this->getFilter($filters,true,true);
7507
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
7508
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7509
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.owner_name = :owner 
7510
			GROUP BY spotter_output.departure_airport_country
7511
			ORDER BY airport_departure_country_count DESC";
7512
		
7513
		$sth = $this->db->prepare($query);
7514
		$sth->execute(array(':owner' => $owner));
7515
		return $sth->fetchAll(PDO::FETCH_ASSOC);
7516
	}
7517
	
7518
	/**
7519
	* Gets all departure airports by country of the airplanes that have flown over based on pilot
7520
	*
7521
	* @return Array the airport list
7522
	*
7523
	*/
7524
	public function countAllDepartureAirportCountriesByPilot($pilot,$filters = array())
7525
	{
7526
		$filter_query = $this->getFilter($filters,true,true);
7527
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
7528
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7529
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
7530
			GROUP BY spotter_output.departure_airport_country
7531
			ORDER BY airport_departure_country_count DESC";
7532
		
7533
		$sth = $this->db->prepare($query);
7534
		$sth->execute(array(':pilot' => $pilot));
7535
		return $sth->fetchAll(PDO::FETCH_ASSOC);
7536
	}
7537
	
7538
	
7539
	
7540
	/**
7541
	* Gets all departure airports of the airplanes that have flown over based on a country
7542
	*
7543
	* @return Array the airport list
7544
	*
7545
	*/
7546
	public function countAllDepartureAirportsByCountry($country,$filters = array())
7547
	{
7548
		$filter_query = $this->getFilter($filters,true,true);
7549
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7550
7551
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7552
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
7553
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7554
			    ORDER BY airport_departure_icao_count DESC";
7555
      
7556
		
7557
		$sth = $this->db->prepare($query);
7558
		$sth->execute(array(':country' => $country));
7559
      
7560
		$airport_array = array();
7561
		$temp_array = array();
7562
        
7563
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7564
		{
7565
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7566
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7567
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7568
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7569
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7570
          
7571
			$airport_array[] = $temp_array;
7572
		}
7573
7574
		return $airport_array;
7575
	}
7576
7577
7578
	/**
7579
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
7580
	*
7581
	* @return Array the airport list
7582
	*
7583
	*/
7584
	public function countAllDepartureAirportCountriesByCountry($country,$filters = array())
7585
	{
7586
		$filter_query = $this->getFilter($filters,true,true);
7587
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7588
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7589
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
7590
                    GROUP BY spotter_output.departure_airport_country
7591
					ORDER BY airport_departure_country_count DESC";
7592
      
7593
		
7594
		$sth = $this->db->prepare($query);
7595
		$sth->execute(array(':country' => $country));
7596
      
7597
		$airport_array = array();
7598
		$temp_array = array();
7599
        
7600
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7601
		{
7602
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7603
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7604
          
7605
			$airport_array[] = $temp_array;
7606
		}
7607
7608
		return $airport_array;
7609
	}
7610
	
7611
7612
	/**
7613
	* Gets all arrival airports of the airplanes that have flown over
7614
	*
7615
	* @param Boolean $limit Limit result to 10 or not
7616
	* @param Integer $olderthanmonths Only show result older than x months
7617
	* @param String $sincedate Only show result since x date
7618
	* @param Boolean $icaoaskey Show result by ICAO
7619
	* @param Array $filters Filter used here
7620
	* @return Array the airport list
7621
	*
7622
	*/
7623
	public function countAllArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array(),$year = '',$month = '',$day = '')
7624
	{
7625
		global $globalDBdriver;
7626
		$filter_query = $this->getFilter($filters,true,true);
7627
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7628
				FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''";
7629
                if ($olderthanmonths > 0) {
7630
            		if ($globalDBdriver == 'mysql') {
7631
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
7632
			} else {
7633
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
7634
			}
7635
		}
7636
                if ($sincedate != '') {
7637
            		if ($globalDBdriver == 'mysql') {
7638
				$query .= " AND spotter_output.date > '".$sincedate."'";
7639
			} else {
7640
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7641
			}
7642
		}
7643
		$query_values = array();
7644
		if ($year != '') {
7645
			if ($globalDBdriver == 'mysql') {
7646
				$query .= " AND YEAR(spotter_output.date) = :year";
7647
				$query_values = array_merge($query_values,array(':year' => $year));
7648
			} else {
7649
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
7650
				$query_values = array_merge($query_values,array(':year' => $year));
7651
			}
7652
		}
7653
		if ($month != '') {
7654
			if ($globalDBdriver == 'mysql') {
7655
				$query .= " AND MONTH(spotter_output.date) = :month";
7656
				$query_values = array_merge($query_values,array(':month' => $month));
7657
			} else {
7658
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
7659
				$query_values = array_merge($query_values,array(':month' => $month));
7660
			}
7661
		}
7662
		if ($day != '') {
7663
			if ($globalDBdriver == 'mysql') {
7664
				$query .= " AND DAY(spotter_output.date) = :day";
7665
				$query_values = array_merge($query_values,array(':day' => $day));
7666
			} else {
7667
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
7668
				$query_values = array_merge($query_values,array(':day' => $day));
7669
			}
7670
		}
7671
                $query .= " GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7672
					ORDER BY airport_arrival_icao_count DESC";
7673
		if ($limit) $query .= " LIMIT 10";
7674
      
7675
		
7676
		$sth = $this->db->prepare($query);
7677
		$sth->execute($query_values);
7678
      
7679
		$airport_array = array();
7680
		$temp_array = array();
7681
        
7682
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7683
		{
7684
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7685
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7686
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7687
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7688
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7689
          
7690
			if ($icaoaskey) {
7691
				$icao = $row['arrival_airport_icao'];
7692
				$airport_array[$icao] = $temp_array;
7693
			} else $airport_array[] = $temp_array;
7694
		}
7695
7696
		return $airport_array;
7697
	}
7698
7699
	/**
7700
	* Gets all arrival airports of the airplanes that have flown over
7701
	*
7702
	* @return Array the airport list
7703
	*
7704
	*/
7705
	public function countAllArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array())
7706
	{
7707
		global $globalDBdriver;
7708
		$filter_query = $this->getFilter($filters,true,true);
7709
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7710
			FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' ";
7711
                if ($olderthanmonths > 0) {
7712
            		if ($globalDBdriver == 'mysql') {
7713
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
7714
			} else {
7715
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
7716
			}
7717
		}
7718
                if ($sincedate != '') {
7719
            		if ($globalDBdriver == 'mysql') {
7720
				$query .= "AND spotter_output.date > '".$sincedate."' ";
7721
			} else {
7722
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7723
			}
7724
		}
7725
7726
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
7727
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
7728
                $query .= "GROUP BY spotter_output.airline_icao,spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7729
					ORDER BY airport_arrival_icao_count DESC";
7730
		if ($limit) $query .= " LIMIT 10";
7731
      
7732
		
7733
		$sth = $this->db->prepare($query);
7734
		$sth->execute();
7735
      
7736
		$airport_array = array();
7737
		$temp_array = array();
7738
        
7739
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7740
		{
7741
			$temp_array['airline_icao'] = $row['airline_icao'];
7742
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7743
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7744
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7745
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7746
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7747
          
7748
			if ($icaoaskey) {
7749
				$icao = $row['arrival_airport_icao'];
7750
				$airport_array[$icao] = $temp_array;
7751
			} else $airport_array[] = $temp_array;
7752
		}
7753
7754
		return $airport_array;
7755
	}
7756
7757
7758
	/**
7759
	* Gets all detected arrival airports of the airplanes that have flown over
7760
	*
7761
	* @return Array the airport list
7762
	*
7763
	*/
7764
	public function countAllDetectedArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array(),$year = '',$month = '',$day = '')
7765
	{
7766
		global $globalDBdriver;
7767
		$filter_query = $this->getFilter($filters,true,true);
7768
		$query  = "SELECT DISTINCT spotter_output.real_arrival_airport_icao as arrival_airport_icao, COUNT(spotter_output.real_arrival_airport_icao) AS airport_arrival_icao_count, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country 
7769
			FROM airport,spotter_output".$filter_query." spotter_output.real_arrival_airport_icao <> '' AND spotter_output.real_arrival_airport_icao <> 'NA' AND airport.icao = spotter_output.real_arrival_airport_icao";
7770
                if ($olderthanmonths > 0) {
7771
            		if ($globalDBdriver == 'mysql') {
7772
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
7773
			} else {
7774
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
7775
			}
7776
		}
7777
                if ($sincedate != '') {
7778
            		if ($globalDBdriver == 'mysql') {
7779
				$query .= " AND spotter_output.date > '".$sincedate."'";
7780
			} else {
7781
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7782
			}
7783
		}
7784
		$query_values = array();
7785
		if ($year != '') {
7786
			if ($globalDBdriver == 'mysql') {
7787
				$query .= " AND YEAR(spotter_output.date) = :year";
7788
				$query_values = array_merge($query_values,array(':year' => $year));
7789
			} else {
7790
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
7791
				$query_values = array_merge($query_values,array(':year' => $year));
7792
			}
7793
		}
7794
		if ($month != '') {
7795
			if ($globalDBdriver == 'mysql') {
7796
				$query .= " AND MONTH(spotter_output.date) = :month";
7797
				$query_values = array_merge($query_values,array(':month' => $month));
7798
			} else {
7799
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
7800
				$query_values = array_merge($query_values,array(':month' => $month));
7801
			}
7802
		}
7803
		if ($day != '') {
7804
			if ($globalDBdriver == 'mysql') {
7805
				$query .= " AND DAY(spotter_output.date) = :day";
7806
				$query_values = array_merge($query_values,array(':day' => $day));
7807
			} else {
7808
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
7809
				$query_values = array_merge($query_values,array(':day' => $day));
7810
			}
7811
		}
7812
                $query .= " GROUP BY spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
7813
					ORDER BY airport_arrival_icao_count DESC";
7814
		if ($limit) $query .= " LIMIT 10";
7815
      
7816
		
7817
		$sth = $this->db->prepare($query);
7818
		$sth->execute($query_values);
7819
      
7820
		$airport_array = array();
7821
		$temp_array = array();
7822
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7823
		{
7824
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7825
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7826
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7827
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7828
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7829
          
7830
			if ($icaoaskey) {
7831
				$icao = $row['arrival_airport_icao'];
7832
				$airport_array[$icao] = $temp_array;
7833
			} else $airport_array[] = $temp_array;
7834
		}
7835
7836
		return $airport_array;
7837
	}
7838
	
7839
	/**
7840
	* Gets all detected arrival airports of the airplanes that have flown over
7841
	*
7842
	* @return Array the airport list
7843
	*
7844
	*/
7845
	public function countAllDetectedArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array())
7846
	{
7847
		global $globalDBdriver;
7848
		$filter_query = $this->getFilter($filters,true,true);
7849
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.real_arrival_airport_icao as arrival_airport_icao, COUNT(spotter_output.real_arrival_airport_icao) AS airport_arrival_icao_count, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country 
7850
			FROM airport,spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.real_arrival_airport_icao <> '' AND spotter_output.real_arrival_airport_icao <> 'NA' AND airport.icao = spotter_output.real_arrival_airport_icao ";
7851
                if ($olderthanmonths > 0) {
7852
            		if ($globalDBdriver == 'mysql') {
7853
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
7854
			} else {
7855
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
7856
			}
7857
		}
7858
                if ($sincedate != '') {
7859
            		if ($globalDBdriver == 'mysql') {
7860
				$query .= "AND spotter_output.date > '".$sincedate."' ";
7861
			} else {
7862
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7863
			}
7864
		}
7865
7866
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
7867
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
7868
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
7869
					ORDER BY airport_arrival_icao_count DESC";
7870
		if ($limit) $query .= " LIMIT 10";
7871
      
7872
		
7873
		$sth = $this->db->prepare($query);
7874
		$sth->execute();
7875
      
7876
		$airport_array = array();
7877
		$temp_array = array();
7878
        
7879
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7880
		{
7881
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7882
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7883
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7884
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7885
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7886
			$temp_array['airline_icao'] = $row['airline_icao'];
7887
          
7888
			if ($icaoaskey) {
7889
				$icao = $row['arrival_airport_icao'];
7890
				$airport_array[$icao] = $temp_array;
7891
			} else $airport_array[] = $temp_array;
7892
		}
7893
7894
		return $airport_array;
7895
	}	
7896
	
7897
	/**
7898
	* Gets all arrival airports of the airplanes that have flown over based on an airline icao
7899
	*
7900
	* @return Array the airport list
7901
	*
7902
	*/
7903
	public function countAllArrivalAirportsByAirline($airline_icao, $filters = array())
7904
	{
7905
		$filter_query = $this->getFilter($filters,true,true);
7906
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7907
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7908
			    FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.airline_icao = :airline_icao 
7909
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7910
			    ORDER BY airport_arrival_icao_count DESC";
7911
		
7912
		$sth = $this->db->prepare($query);
7913
		$sth->execute(array(':airline_icao' => $airline_icao));
7914
      
7915
		$airport_array = array();
7916
		$temp_array = array();
7917
        
7918
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7919
		{
7920
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7921
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7922
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7923
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7924
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7925
          
7926
			$airport_array[] = $temp_array;
7927
		}
7928
7929
		return $airport_array;
7930
	}
7931
	
7932
	
7933
	/**
7934
	* Gets all arrival airports by country of the airplanes that have flown over based on an airline icao
7935
	*
7936
	* @return Array the airport list
7937
	*
7938
	*/
7939
	public function countAllArrivalAirportCountriesByAirline($airline_icao,$filters = array())
7940
	{
7941
		$filter_query = $this->getFilter($filters,true,true);
7942
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7943
					
7944
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7945
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
7946
                    GROUP BY spotter_output.arrival_airport_country
7947
					ORDER BY airport_arrival_country_count DESC";
7948
      
7949
		
7950
		$sth = $this->db->prepare($query);
7951
		$sth->execute(array(':airline_icao' => $airline_icao));
7952
      
7953
		$airport_array = array();
7954
		$temp_array = array();
7955
        
7956
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7957
		{
7958
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7959
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7960
          
7961
			$airport_array[] = $temp_array;
7962
		}
7963
7964
		return $airport_array;
7965
	}
7966
	
7967
	
7968
	/**
7969
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft icao
7970
	*
7971
	* @return Array the airport list
7972
	*
7973
	*/
7974
	public function countAllArrivalAirportsByAircraft($aircraft_icao,$filters = array())
7975
	{
7976
		$filter_query = $this->getFilter($filters,true,true);
7977
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7978
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7979
			    FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
7980
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7981
			    ORDER BY airport_arrival_icao_count DESC";
7982
      
7983
		
7984
		$sth = $this->db->prepare($query);
7985
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7986
      
7987
		$airport_array = array();
7988
		$temp_array = array();
7989
        
7990
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7991
		{
7992
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7993
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7994
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7995
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7996
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7997
          
7998
			$airport_array[] = $temp_array;
7999
		}
8000
8001
		return $airport_array;
8002
	}
8003
	
8004
	
8005
	
8006
	/**
8007
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft icao
8008
	*
8009
	* @return Array the airport list
8010
	*
8011
	*/
8012
	public function countAllArrivalAirportCountriesByAircraft($aircraft_icao,$filters = array())
8013
	{
8014
		$filter_query = $this->getFilter($filters,true,true);
8015
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
8016
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8017
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
8018
                    GROUP BY spotter_output.arrival_airport_country
8019
					ORDER BY airport_arrival_country_count DESC";
8020
      
8021
		
8022
		$sth = $this->db->prepare($query);
8023
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
8024
      
8025
		$airport_array = array();
8026
		$temp_array = array();
8027
        
8028
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8029
		{
8030
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8031
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8032
          
8033
			$airport_array[] = $temp_array;
8034
		}
8035
8036
		return $airport_array;
8037
	}
8038
	
8039
	
8040
	/**
8041
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft registration
8042
	*
8043
	* @return Array the airport list
8044
	*
8045
	*/
8046
	public function countAllArrivalAirportsByRegistration($registration,$filters = array())
8047
	{
8048
		$filter_query = $this->getFilter($filters,true,true);
8049
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
8050
8051
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8052
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.registration = :registration 
8053
                    GROUP BY spotter_output.arrival_airport_icao
8054
					ORDER BY airport_arrival_icao_count DESC";
8055
      
8056
		
8057
		$sth = $this->db->prepare($query);
8058
		$sth->execute(array(':registration' => $registration));
8059
      
8060
		$airport_array = array();
8061
		$temp_array = array();
8062
        
8063
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8064
		{
8065
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8066
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8067
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8068
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8069
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8070
          
8071
			$airport_array[] = $temp_array;
8072
		}
8073
8074
		return $airport_array;
8075
	}
8076
	
8077
	
8078
	/**
8079
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft registration
8080
	*
8081
	* @return Array the airport list
8082
	*
8083
	*/
8084
	public function countAllArrivalAirportCountriesByRegistration($registration,$filters = array())
8085
	{
8086
		$filter_query = $this->getFilter($filters,true,true);
8087
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
8088
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8089
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.registration = :registration 
8090
                    GROUP BY spotter_output.arrival_airport_country
8091
					ORDER BY airport_arrival_country_count DESC";
8092
      
8093
		
8094
		$sth = $this->db->prepare($query);
8095
		$sth->execute(array(':registration' => $registration));
8096
      
8097
		$airport_array = array();
8098
		$temp_array = array();
8099
        
8100
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8101
		{
8102
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8103
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8104
          
8105
			$airport_array[] = $temp_array;
8106
		}
8107
8108
		return $airport_array;
8109
	}
8110
	
8111
	
8112
	
8113
	/**
8114
	* Gets all arrival airports of the airplanes that have flown over based on an departure airport
8115
	*
8116
	* @return Array the airport list
8117
	*
8118
	*/
8119
	public function countAllArrivalAirportsByAirport($airport_icao,$filters = array())
8120
	{
8121
		$filter_query = $this->getFilter($filters,true,true);
8122
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8123
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8124
			    FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.departure_airport_icao = :airport_icao 
8125
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8126
			    ORDER BY airport_arrival_icao_count DESC";
8127
      
8128
		
8129
		$sth = $this->db->prepare($query);
8130
		$sth->execute(array(':airport_icao' => $airport_icao));
8131
      
8132
		$airport_array = array();
8133
		$temp_array = array();
8134
        
8135
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8136
		{
8137
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8138
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8139
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8140
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8141
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8142
          
8143
			$airport_array[] = $temp_array;
8144
		}
8145
8146
		return $airport_array;
8147
	}
8148
	
8149
	
8150
	/**
8151
	* Gets all arrival airports by country of the airplanes that have flown over based on an airport icao
8152
	*
8153
	* @return Array the airport list
8154
	*
8155
	*/
8156
	public function countAllArrivalAirportCountriesByAirport($airport_icao,$filters = array())
8157
	{
8158
		$filter_query = $this->getFilter($filters,true,true);
8159
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8160
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8161
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.departure_airport_icao = :airport_icao 
8162
                    GROUP BY spotter_output.arrival_airport_country
8163
					ORDER BY airport_arrival_country_count DESC";
8164
      
8165
		
8166
		$sth = $this->db->prepare($query);
8167
		$sth->execute(array(':airport_icao' => $airport_icao));
8168
      
8169
		$airport_array = array();
8170
		$temp_array = array();
8171
        
8172
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8173
		{
8174
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8175
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8176
          
8177
			$airport_array[] = $temp_array;
8178
		}
8179
8180
		return $airport_array;
8181
	}
8182
	
8183
	
8184
	/**
8185
	* Gets all arrival airports of the airplanes that have flown over based on a aircraft manufacturer
8186
	*
8187
	* @return Array the airport list
8188
	*
8189
	*/
8190
	public function countAllArrivalAirportsByManufacturer($aircraft_manufacturer,$filters = array())
8191
	{
8192
		$filter_query = $this->getFilter($filters,true,true);
8193
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
8194
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8195
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
8196
                    GROUP BY spotter_output.arrival_airport_icao
8197
					ORDER BY airport_arrival_icao_count DESC";
8198
      
8199
		
8200
		$sth = $this->db->prepare($query);
8201
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
8202
      
8203
		$airport_array = array();
8204
		$temp_array = array();
8205
        
8206
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8207
		{
8208
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8209
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8210
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8211
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8212
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8213
          
8214
			$airport_array[] = $temp_array;
8215
		}
8216
8217
		return $airport_array;
8218
	}
8219
	
8220
	
8221
	
8222
	/**
8223
	* Gets all arrival airports by country of the airplanes that have flown over based on a aircraft manufacturer
8224
	*
8225
	* @return Array the airport list
8226
	*
8227
	*/
8228
	public function countAllArrivalAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
8229
	{
8230
		$filter_query = $this->getFilter($filters,true,true);
8231
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
8232
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8233
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
8234
                    GROUP BY spotter_output.arrival_airport_country
8235
					ORDER BY airport_arrival_country_count DESC";
8236
      
8237
		
8238
		$sth = $this->db->prepare($query);
8239
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
8240
      
8241
		$airport_array = array();
8242
		$temp_array = array();
8243
        
8244
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8245
		{
8246
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8247
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8248
          
8249
			$airport_array[] = $temp_array;
8250
		}
8251
8252
		return $airport_array;
8253
	}
8254
	
8255
	
8256
	
8257
	/**
8258
	* Gets all arrival airports of the airplanes that have flown over based on a date
8259
	*
8260
	* @return Array the airport list
8261
	*
8262
	*/
8263
	public function countAllArrivalAirportsByDate($date,$filters = array())
8264
	{
8265
		global $globalTimezone, $globalDBdriver;
8266
		$filter_query = $this->getFilter($filters,true,true);
8267
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8268
		if ($globalTimezone != '') {
8269
			date_default_timezone_set($globalTimezone);
8270
			$datetime = new DateTime($date);
8271
			$offset = $datetime->format('P');
8272
		} else $offset = '+00:00';
8273
8274
		if ($globalDBdriver == 'mysql') {
8275
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8276
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date  
8277
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8278
					ORDER BY airport_arrival_icao_count DESC";
8279
		} else {
8280
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8281
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date  
8282
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8283
					ORDER BY airport_arrival_icao_count DESC";
8284
		}
8285
		
8286
		$sth = $this->db->prepare($query);
8287
		$sth->execute(array(':date' => $date, ':offset' => $offset));
8288
      
8289
		$airport_array = array();
8290
		$temp_array = array();
8291
        
8292
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8293
		{
8294
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8295
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8296
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8297
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8298
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8299
          
8300
			$airport_array[] = $temp_array;
8301
		}
8302
		return $airport_array;
8303
	}
8304
	
8305
	
8306
	
8307
	/**
8308
	* Gets all arrival airports by country of the airplanes that have flown over based on a date
8309
	*
8310
	* @return Array the airport list
8311
	*
8312
	*/
8313
	public function countAllArrivalAirportCountriesByDate($date, $filters = array())
8314
	{
8315
		global $globalTimezone, $globalDBdriver;
8316
		$filter_query = $this->getFilter($filters,true,true);
8317
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8318
		if ($globalTimezone != '') {
8319
			date_default_timezone_set($globalTimezone);
8320
			$datetime = new DateTime($date);
8321
			$offset = $datetime->format('P');
8322
		} else $offset = '+00:00';
8323
8324
		if ($globalDBdriver == 'mysql') {
8325
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8326
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
8327
					GROUP BY spotter_output.arrival_airport_country
8328
					ORDER BY airport_arrival_country_count DESC";
8329
		} else {
8330
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8331
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
8332
					GROUP BY spotter_output.arrival_airport_country
8333
					ORDER BY airport_arrival_country_count DESC";
8334
		}
8335
		
8336
		$sth = $this->db->prepare($query);
8337
		$sth->execute(array(':date' => $date, ':offset' => $offset));
8338
      
8339
		$airport_array = array();
8340
		$temp_array = array();
8341
        
8342
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8343
		{
8344
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8345
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8346
          
8347
			$airport_array[] = $temp_array;
8348
		}
8349
		return $airport_array;
8350
	}
8351
	
8352
	
8353
	
8354
	/**
8355
	* Gets all arrival airports of the airplanes that have flown over based on a ident/callsign
8356
	*
8357
	* @return Array the airport list
8358
	*
8359
	*/
8360
	public function countAllArrivalAirportsByIdent($ident,$filters = array())
8361
	{
8362
		$filter_query = $this->getFilter($filters,true,true);
8363
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
8364
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8365
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.ident = :ident  
8366
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8367
		    ORDER BY airport_arrival_icao_count DESC";
8368
      
8369
		
8370
		$sth = $this->db->prepare($query);
8371
		$sth->execute(array(':ident' => $ident));
8372
      
8373
		$airport_array = array();
8374
		$temp_array = array();
8375
        
8376
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8377
		{
8378
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8379
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8380
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8381
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8382
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8383
          
8384
			$airport_array[] = $temp_array;
8385
		}
8386
8387
		return $airport_array;
8388
	}
8389
	
8390
	/**
8391
	* Gets all arrival airports of the airplanes that have flown over based on a owner
8392
	*
8393
	* @return Array the airport list
8394
	*
8395
	*/
8396
	public function countAllArrivalAirportsByOwner($owner,$filters = array())
8397
	{
8398
		$filter_query = $this->getFilter($filters,true,true);
8399
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
8400
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8401
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.owner_name = :owner 
8402
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8403
		    ORDER BY airport_arrival_icao_count DESC";
8404
      
8405
		
8406
		$sth = $this->db->prepare($query);
8407
		$sth->execute(array(':owner' => $owner));
8408
		$airport_array = array();
8409
		$temp_array = array();
8410
        
8411
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8412
		{
8413
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8414
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8415
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8416
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8417
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8418
          
8419
			$airport_array[] = $temp_array;
8420
		}
8421
8422
		return $airport_array;
8423
	}
8424
8425
	/**
8426
	* Gets all arrival airports of the airplanes that have flown over based on a pilot
8427
	*
8428
	* @return Array the airport list
8429
	*
8430
	*/
8431
	public function countAllArrivalAirportsByPilot($pilot,$filters = array())
8432
	{
8433
		$filter_query = $this->getFilter($filters,true,true);
8434
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
8435
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8436
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
8437
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8438
		    ORDER BY airport_arrival_icao_count DESC";
8439
      
8440
		
8441
		$sth = $this->db->prepare($query);
8442
		$sth->execute(array(':pilot' => $pilot));
8443
		$airport_array = array();
8444
		$temp_array = array();
8445
        
8446
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8447
		{
8448
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8449
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8450
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8451
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8452
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8453
          
8454
			$airport_array[] = $temp_array;
8455
		}
8456
8457
		return $airport_array;
8458
	}
8459
	
8460
	/**
8461
	* Gets all arrival airports by country of the airplanes that have flown over based on a callsign/ident
8462
	*
8463
	* @return Array the airport list
8464
	*
8465
	*/
8466
	public function countAllArrivalAirportCountriesByIdent($ident, $filters = array())
8467
	{
8468
		$filter_query = $this->getFilter($filters,true,true);
8469
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
8470
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8471
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.ident = :ident 
8472
                    GROUP BY spotter_output.arrival_airport_country
8473
					ORDER BY airport_arrival_country_count DESC";
8474
      
8475
		
8476
		$sth = $this->db->prepare($query);
8477
		$sth->execute(array(':ident' => $ident));
8478
      
8479
		$airport_array = array();
8480
		$temp_array = array();
8481
        
8482
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8483
		{
8484
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8485
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8486
          
8487
			$airport_array[] = $temp_array;
8488
		}
8489
8490
		return $airport_array;
8491
	}
8492
	
8493
	/**
8494
	* Gets all arrival airports by country of the airplanes that have flown over based on a owner
8495
	*
8496
	* @return Array the airport list
8497
	*
8498
	*/
8499
	public function countAllArrivalAirportCountriesByOwner($owner, $filters = array())
8500
	{
8501
		$filter_query = $this->getFilter($filters,true,true);
8502
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
8503
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8504
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.owner_name = :owner 
8505
                    GROUP BY spotter_output.arrival_airport_country
8506
		    ORDER BY airport_arrival_country_count DESC";
8507
8508
		$sth = $this->db->prepare($query);
8509
		$sth->execute(array(':owner' => $owner));
8510
		return $sth->fetchAll(PDO::FETCH_ASSOC);
8511
	}
8512
	
8513
	/**
8514
	* Gets all arrival airports by country of the airplanes that have flown over based on a pilot
8515
	*
8516
	* @return Array the airport list
8517
	*
8518
	*/
8519
	public function countAllArrivalAirportCountriesByPilot($pilot, $filters = array())
8520
	{
8521
		$filter_query = $this->getFilter($filters,true,true);
8522
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
8523
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8524
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
8525
                    GROUP BY spotter_output.arrival_airport_country
8526
		    ORDER BY airport_arrival_country_count DESC";
8527
8528
		$sth = $this->db->prepare($query);
8529
		$sth->execute(array(':pilot' => $pilot));
8530
		return $sth->fetchAll(PDO::FETCH_ASSOC);
8531
	}
8532
	
8533
	
8534
	
8535
	/**
8536
	* Gets all arrival airports of the airplanes that have flown over based on a country
8537
	*
8538
	* @return Array the airport list
8539
	*
8540
	*/
8541
	public function countAllArrivalAirportsByCountry($country,$filters = array())
8542
	{
8543
		$filter_query = $this->getFilter($filters,true,true);
8544
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8545
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8546
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
8547
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8548
			    ORDER BY airport_arrival_icao_count DESC";
8549
      
8550
		
8551
		$sth = $this->db->prepare($query);
8552
		$sth->execute(array(':country' => $country));
8553
      
8554
		$airport_array = array();
8555
		$temp_array = array();
8556
        
8557
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8558
		{
8559
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8560
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8561
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8562
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8563
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8564
          
8565
			$airport_array[] = $temp_array;
8566
		}
8567
8568
		return $airport_array;
8569
	}
8570
	
8571
	
8572
	/**
8573
	* Gets all arrival airports by country of the airplanes that have flown over based on a country
8574
	*
8575
	* @return Array the airport list
8576
	*
8577
	*/
8578
	public function countAllArrivalAirportCountriesByCountry($country,$filters = array())
8579
	{
8580
		global $globalDBdriver;
8581
		$filter_query = $this->getFilter($filters,true,true);
8582
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8583
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8584
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
8585
                    GROUP BY spotter_output.arrival_airport_country
8586
					ORDER BY airport_arrival_country_count DESC";
8587
      
8588
		
8589
		$sth = $this->db->prepare($query);
8590
		$sth->execute(array(':country' => $country));
8591
      
8592
		$airport_array = array();
8593
		$temp_array = array();
8594
        
8595
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8596
		{
8597
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8598
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8599
          
8600
			$airport_array[] = $temp_array;
8601
		}
8602
8603
		return $airport_array;
8604
	}
8605
8606
8607
8608
	/**
8609
	* Counts all airport departure countries
8610
	*
8611
	* @return Array the airport departure list
8612
	*
8613
	*/
8614
	public function countAllDepartureCountries($filters = array(),$year = '',$month = '', $day = '')
8615
	{
8616
		global $globalDBdriver;
8617
		$filter_query = $this->getFilter($filters,true,true);
8618
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
8619
				FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> ''";
8620
		$query_values = array();
8621
		if ($year != '') {
8622
			if ($globalDBdriver == 'mysql') {
8623
				$query .= " AND YEAR(spotter_output.date) = :year";
8624
				$query_values = array_merge($query_values,array(':year' => $year));
8625
			} else {
8626
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
8627
				$query_values = array_merge($query_values,array(':year' => $year));
8628
			}
8629
		}
8630
		if ($month != '') {
8631
			if ($globalDBdriver == 'mysql') {
8632
				$query .= " AND MONTH(spotter_output.date) = :month";
8633
				$query_values = array_merge($query_values,array(':month' => $month));
8634
			} else {
8635
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
8636
				$query_values = array_merge($query_values,array(':month' => $month));
8637
			}
8638
		}
8639
		if ($day != '') {
8640
			if ($globalDBdriver == 'mysql') {
8641
				$query .= " AND DAY(spotter_output.date) = :day";
8642
				$query_values = array_merge($query_values,array(':day' => $day));
8643
			} else {
8644
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
8645
				$query_values = array_merge($query_values,array(':day' => $day));
8646
			}
8647
		}
8648
		$query .= " GROUP BY spotter_output.departure_airport_country
8649
					ORDER BY airport_departure_country_count DESC
8650
					LIMIT 10 OFFSET 0";
8651
      
8652
		
8653
		$sth = $this->db->prepare($query);
8654
		$sth->execute($query_values);
8655
      
8656
		$airport_array = array();
8657
		$temp_array = array();
8658
        
8659
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8660
		{
8661
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
8662
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
8663
          
8664
			$airport_array[] = $temp_array;
8665
		}
8666
8667
		return $airport_array;
8668
	}
8669
	
8670
	
8671
	/**
8672
	* Counts all airport arrival countries
8673
	*
8674
	* @return Array the airport arrival list
8675
	*
8676
	*/
8677
	public function countAllArrivalCountries($limit = true,$filters = array(),$year = '',$month = '',$day = '')
8678
	{
8679
		global $globalDBdriver;
8680
		$filter_query = $this->getFilter($filters,true,true);
8681
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8682
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''";
8683
		$query_values = array();
8684
		if ($year != '') {
8685
			if ($globalDBdriver == 'mysql') {
8686
				$query .= " AND YEAR(spotter_output.date) = :year";
8687
				$query_values = array_merge($query_values,array(':year' => $year));
8688
			} else {
8689
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
8690
				$query_values = array_merge($query_values,array(':year' => $year));
8691
			}
8692
		}
8693
		if ($month != '') {
8694
			if ($globalDBdriver == 'mysql') {
8695
				$query .= " AND MONTH(spotter_output.date) = :month";
8696
				$query_values = array_merge($query_values,array(':month' => $month));
8697
			} else {
8698
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
8699
				$query_values = array_merge($query_values,array(':month' => $month));
8700
			}
8701
		}
8702
		if ($day != '') {
8703
			if ($globalDBdriver == 'mysql') {
8704
				$query .= " AND DAY(spotter_output.date) = :day";
8705
				$query_values = array_merge($query_values,array(':day' => $day));
8706
			} else {
8707
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
8708
				$query_values = array_merge($query_values,array(':day' => $day));
8709
			}
8710
		}
8711
		$query .= " GROUP BY spotter_output.arrival_airport_country
8712
					ORDER BY airport_arrival_country_count DESC";
8713
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
8714
      
8715
		
8716
		$sth = $this->db->prepare($query);
8717
		$sth->execute($query_values);
8718
      
8719
		$airport_array = array();
8720
		$temp_array = array();
8721
        
8722
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8723
		{
8724
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8725
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8726
          
8727
			$airport_array[] = $temp_array;
8728
		}
8729
8730
		return $airport_array;
8731
	}
8732
8733
8734
8735
8736
8737
	/**
8738
	* Gets all route combinations
8739
	*
8740
	* @return Array the route list
8741
	*
8742
	*/
8743
	public function countAllRoutes($filters = array())
8744
	{
8745
		$filter_query = $this->getFilter($filters,true,true);
8746
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
8747
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''
8748
                    GROUP BY route,spotter_output.departure_airport_icao, spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
8749
                    ORDER BY route_count DESC
8750
		    LIMIT 10 OFFSET 0";
8751
      
8752
		
8753
		$sth = $this->db->prepare($query);
8754
		$sth->execute();
8755
      
8756
		$routes_array = array();
8757
		$temp_array = array();
8758
        
8759
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8760
		{
8761
			$temp_array['route_count'] = $row['route_count'];
8762
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8763
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8764
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8765
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8766
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8767
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8768
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8769
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8770
          
8771
			$routes_array[] = $temp_array;
8772
		}
8773
8774
		return $routes_array;
8775
	}
8776
	
8777
	
8778
	
8779
	
8780
	/**
8781
	* Gets all route combinations based on an aircraft
8782
	*
8783
	* @return Array the route list
8784
	*
8785
	*/
8786
	public function countAllRoutesByAircraft($aircraft_icao,$filters = array())
8787
	{
8788
		$filter_query = $this->getFilter($filters,true,true);
8789
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
8790
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
8791
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
8792
			    GROUP BY route, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8793
			    ORDER BY route_count DESC";
8794
		
8795
		$sth = $this->db->prepare($query);
8796
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
8797
      
8798
		$routes_array = array();
8799
		$temp_array = array();
8800
        
8801
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8802
		{
8803
			$temp_array['route_count'] = $row['route_count'];
8804
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8805
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8806
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8807
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8808
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8809
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8810
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8811
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8812
          
8813
			$routes_array[] = $temp_array;
8814
		}
8815
8816
		return $routes_array;
8817
	}
8818
	
8819
	
8820
	/**
8821
	* Gets all route combinations based on an aircraft registration
8822
	*
8823
	* @return Array the route list
8824
	*
8825
	*/
8826
	public function countAllRoutesByRegistration($registration, $filters = array())
8827
	{
8828
		$filter_query = $this->getFilter($filters,true,true);
8829
		$registration = filter_var($registration, FILTER_SANITIZE_STRING);
8830
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
8831
			FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.registration = :registration 
8832
                    GROUP BY route
8833
                    ORDER BY route_count DESC";
8834
      
8835
		
8836
		$sth = $this->db->prepare($query);
8837
		$sth->execute(array(':registration' => $registration));
8838
      
8839
		$routes_array = array();
8840
		$temp_array = array();
8841
        
8842
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8843
		{
8844
			$temp_array['route_count'] = $row['route_count'];
8845
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8846
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8847
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8848
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8849
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8850
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8851
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8852
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8853
          
8854
			$routes_array[] = $temp_array;
8855
		}
8856
8857
		return $routes_array;
8858
	}
8859
	
8860
	
8861
	
8862
	/**
8863
	* Gets all route combinations based on an airline
8864
	*
8865
	* @return Array the route list
8866
	*
8867
	*/
8868
	public function countAllRoutesByAirline($airline_icao, $filters = array())
8869
	{
8870
		$filter_query = $this->getFilter($filters,true,true);
8871
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
8872
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
8873
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.airline_icao = :airline_icao 
8874
			    GROUP BY route, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8875
			    ORDER BY route_count DESC";
8876
      
8877
		
8878
		$sth = $this->db->prepare($query);
8879
		$sth->execute(array(':airline_icao' => $airline_icao));
8880
      
8881
		$routes_array = array();
8882
		$temp_array = array();
8883
        
8884
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8885
		{
8886
			$temp_array['route_count'] = $row['route_count'];
8887
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8888
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8889
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8890
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8891
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8892
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8893
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8894
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8895
          
8896
			$routes_array[] = $temp_array;
8897
		}
8898
8899
		return $routes_array;
8900
	}
8901
	
8902
	
8903
	
8904
	/**
8905
	* Gets all route combinations based on an airport
8906
	*
8907
	* @return Array the route list
8908
	*
8909
	*/
8910
	public function countAllRoutesByAirport($airport_icao, $filters = array())
8911
	{
8912
		$filter_query = $this->getFilter($filters,true,true);
8913
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8914
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
8915
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
8916
			    GROUP BY route, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8917
			    ORDER BY route_count DESC";
8918
		
8919
		$sth = $this->db->prepare($query);
8920
		$sth->execute(array(':airport_icao' => $airport_icao));
8921
      
8922
		$routes_array = array();
8923
		$temp_array = array();
8924
        
8925
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8926
		{
8927
			$temp_array['route_count'] = $row['route_count'];
8928
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8929
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8930
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8931
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8932
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8933
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8934
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8935
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8936
          
8937
			$routes_array[] = $temp_array;
8938
		}
8939
8940
		return $routes_array;
8941
	}
8942
	
8943
	
8944
	
8945
	/**
8946
	* Gets all route combinations based on an country
8947
	*
8948
	* @return Array the route list
8949
	*
8950
	*/
8951
	public function countAllRoutesByCountry($country, $filters = array())
8952
	{
8953
		$filter_query = $this->getFilter($filters,true,true);
8954
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8955
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
8956
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
8957
			    GROUP BY route, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8958
			    ORDER BY route_count DESC";
8959
		
8960
		$sth = $this->db->prepare($query);
8961
		$sth->execute(array(':country' => $country));
8962
      
8963
		$routes_array = array();
8964
		$temp_array = array();
8965
        
8966
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8967
		{
8968
			$temp_array['route_count'] = $row['route_count'];
8969
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8970
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8971
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8972
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8973
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8974
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8975
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8976
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8977
          
8978
			$routes_array[] = $temp_array;
8979
		}
8980
8981
		return $routes_array;
8982
	}
8983
8984
8985
	/**
8986
	* Gets all route combinations based on an date
8987
	*
8988
	* @return Array the route list
8989
	*
8990
	*/
8991
	public function countAllRoutesByDate($date, $filters = array())
8992
	{
8993
		global $globalTimezone, $globalDBdriver;
8994
		$filter_query = $this->getFilter($filters,true,true);
8995
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8996
		if ($globalTimezone != '') {
8997
			date_default_timezone_set($globalTimezone);
8998
			$datetime = new DateTime($date);
8999
			$offset = $datetime->format('P');
9000
		} else $offset = '+00:00';
9001
		
9002
		if ($globalDBdriver == 'mysql') {
9003
			$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
9004
				    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date  
9005
				    GROUP BY route, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
9006
				    ORDER BY route_count DESC";
9007
		} else {
9008
			$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
9009
				    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date  
9010
				    GROUP BY route, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
9011
				    ORDER BY route_count DESC";
9012
		}
9013
		
9014
		$sth = $this->db->prepare($query);
9015
		$sth->execute(array(':date' => $date, ':offset' => $offset));
9016
      
9017
		$routes_array = array();
9018
		$temp_array = array();
9019
        
9020
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9021
		{
9022
			$temp_array['route_count'] = $row['route_count'];
9023
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9024
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9025
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9026
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9027
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9028
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9029
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9030
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9031
          
9032
			$routes_array[] = $temp_array;
9033
		}
9034
9035
		return $routes_array;
9036
	}
9037
	
9038
	
9039
	/**
9040
	* Gets all route combinations based on an ident/callsign
9041
	*
9042
	* @return Array the route list
9043
	*
9044
	*/
9045
	public function countAllRoutesByIdent($ident, $filters = array())
9046
	{
9047
		$filter_query = $this->getFilter($filters,true,true);
9048
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
9049
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
9050
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.ident = :ident   
9051
                    GROUP BY route, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
9052
                    ORDER BY route_count DESC";
9053
      
9054
		
9055
		$sth = $this->db->prepare($query);
9056
		$sth->execute(array(':ident' => $ident));
9057
      
9058
		$routes_array = array();
9059
		$temp_array = array();
9060
        
9061
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9062
		{
9063
			$temp_array['route_count'] = $row['route_count'];
9064
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9065
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9066
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9067
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9068
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9069
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9070
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9071
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9072
          
9073
			$routes_array[] = $temp_array;
9074
		}
9075
9076
		return $routes_array;
9077
	}
9078
	
9079
	/**
9080
	* Gets all route combinations based on an owner
9081
	*
9082
	* @return Array the route list
9083
	*
9084
	*/
9085
	public function countAllRoutesByOwner($owner,$filters = array())
9086
	{
9087
		$filter_query = $this->getFilter($filters,true,true);
9088
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
9089
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
9090
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.owner_name = :owner 
9091
                    GROUP BY route, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
9092
                    ORDER BY route_count DESC";
9093
      
9094
		
9095
		$sth = $this->db->prepare($query);
9096
		$sth->execute(array(':owner' => $owner));
9097
      
9098
		$routes_array = array();
9099
		$temp_array = array();
9100
        
9101
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9102
		{
9103
			$temp_array['route_count'] = $row['route_count'];
9104
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9105
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9106
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9107
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9108
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9109
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9110
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9111
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9112
          
9113
			$routes_array[] = $temp_array;
9114
		}
9115
9116
		return $routes_array;
9117
	}
9118
	
9119
	/**
9120
	* Gets all route combinations based on a pilot
9121
	*
9122
	* @return Array the route list
9123
	*
9124
	*/
9125
	public function countAllRoutesByPilot($pilot,$filters = array())
9126
	{
9127
		$filter_query = $this->getFilter($filters,true,true);
9128
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
9129
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
9130
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
9131
                    GROUP BY route, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
9132
                    ORDER BY route_count DESC";
9133
      
9134
		
9135
		$sth = $this->db->prepare($query);
9136
		$sth->execute(array(':pilot' => $pilot));
9137
      
9138
		$routes_array = array();
9139
		$temp_array = array();
9140
        
9141
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9142
		{
9143
			$temp_array['route_count'] = $row['route_count'];
9144
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9145
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9146
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9147
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9148
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9149
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9150
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9151
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9152
          
9153
			$routes_array[] = $temp_array;
9154
		}
9155
9156
		return $routes_array;
9157
	}
9158
	
9159
	
9160
	/**
9161
	* Gets all route combinations based on an manufacturer
9162
	*
9163
	* @return Array the route list
9164
	*
9165
	*/
9166
	public function countAllRoutesByManufacturer($aircraft_manufacturer, $filters = array())
9167
	{
9168
		$filter_query = $this->getFilter($filters,true,true);
9169
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
9170
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
9171
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
9172
                    GROUP BY route
9173
                    ORDER BY route_count DESC";
9174
      
9175
		
9176
		$sth = $this->db->prepare($query);
9177
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
9178
      
9179
		$routes_array = array();
9180
		$temp_array = array();
9181
        
9182
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9183
		{
9184
			$temp_array['route_count'] = $row['route_count'];
9185
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9186
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9187
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9188
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9189
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9190
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9191
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9192
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9193
          
9194
			$routes_array[] = $temp_array;
9195
		}
9196
9197
		return $routes_array;
9198
	}
9199
9200
	
9201
	
9202
	/**
9203
	* Gets all route combinations with waypoints
9204
	*
9205
	* @return Array the route list
9206
	*
9207
	*/
9208
	public function countAllRoutesWithWaypoints($filters = array())
9209
	{
9210
		$filter_query = $this->getFilter($filters,true,true);
9211
		$query  = "SELECT DISTINCT spotter_output.waypoints AS route, count(spotter_output.waypoints) AS route_count, spotter_output.spotter_id, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
9212
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.waypoints <> '' 
9213
                    GROUP BY route, spotter_output.spotter_id, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
9214
                    ORDER BY route_count DESC
9215
		    LIMIT 10 OFFSET 0";
9216
      
9217
		
9218
		$sth = $this->db->prepare($query);
9219
		$sth->execute();
9220
      
9221
		$routes_array = array();
9222
		$temp_array = array();
9223
        
9224
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9225
		{
9226
			$temp_array['spotter_id'] = $row['spotter_id'];
9227
			$temp_array['route_count'] = $row['route_count'];
9228
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9229
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9230
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9231
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9232
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9233
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9234
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9235
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9236
          
9237
			$routes_array[] = $temp_array;
9238
		}
9239
9240
		return $routes_array;
9241
	}
9242
	
9243
	/**
9244
	* Gets all callsigns that have flown over
9245
	*
9246
	* @return Array the callsign list
9247
	*
9248
	*/
9249
	public function countAllCallsigns($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '', $month = '', $day = '')
9250
	{
9251
		global $globalDBdriver;
9252
		$filter_query = $this->getFilter($filters,true,true);
9253
		$query  = "SELECT DISTINCT spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name, spotter_output.airline_icao  
9254
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''";
9255
		 if ($olderthanmonths > 0) {
9256
			if ($globalDBdriver == 'mysql') $query .= ' AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH)';
9257
			else $query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
9258
		}
9259
		if ($sincedate != '') {
9260
			if ($globalDBdriver == 'mysql') $query .= " AND spotter_output.date > '".$sincedate."'";
9261
			else $query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
9262
		}
9263
		$query_values = array();
9264
		if ($year != '') {
9265
			if ($globalDBdriver == 'mysql') {
9266
				$query .= " AND YEAR(spotter_output.date) = :year";
9267
				$query_values = array_merge($query_values,array(':year' => $year));
9268
			} else {
9269
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
9270
				$query_values = array_merge($query_values,array(':year' => $year));
9271
			}
9272
		}
9273
		if ($month != '') {
9274
			if ($globalDBdriver == 'mysql') {
9275
				$query .= " AND MONTH(spotter_output.date) = :month";
9276
				$query_values = array_merge($query_values,array(':month' => $month));
9277
			} else {
9278
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
9279
				$query_values = array_merge($query_values,array(':month' => $month));
9280
			}
9281
		}
9282
		if ($day != '') {
9283
			if ($globalDBdriver == 'mysql') {
9284
				$query .= " AND DAY(spotter_output.date) = :day";
9285
				$query_values = array_merge($query_values,array(':day' => $day));
9286
			} else {
9287
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
9288
				$query_values = array_merge($query_values,array(':day' => $day));
9289
			}
9290
		}
9291
		$query .= " GROUP BY spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
9292
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
9293
      		
9294
		$sth = $this->db->prepare($query);
9295
		$sth->execute($query_values);
9296
      
9297
		$callsign_array = array();
9298
		$temp_array = array();
9299
        
9300
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9301
		{
9302
			$temp_array['callsign_icao'] = $row['ident'];
9303
			$temp_array['airline_name'] = $row['airline_name'];
9304
			$temp_array['airline_icao'] = $row['airline_icao'];
9305
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
9306
          
9307
			$callsign_array[] = $temp_array;
9308
		}
9309
9310
		return $callsign_array;
9311
	}
9312
9313
	/**
9314
	* Gets all callsigns that have flown over
9315
	*
9316
	* @return Array the callsign list
9317
	*
9318
	*/
9319
	public function countAllCallsignsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $filters = array())
9320
	{
9321
		global $globalDBdriver;
9322
		$filter_query = $this->getFilter($filters,true,true);
9323
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name  
9324
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''  AND spotter_output.airline_icao <> '' ";
9325
		 if ($olderthanmonths > 0) {
9326
			if ($globalDBdriver == 'mysql') $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
9327
			else $query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
9328
		}
9329
		if ($sincedate != '') {
9330
			if ($globalDBdriver == 'mysql') $query .= "AND spotter_output.date > '".$sincedate."' ";
9331
			else $query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
9332
		}
9333
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
9334
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
9335
      		
9336
		$sth = $this->db->prepare($query);
9337
		$sth->execute();
9338
      
9339
		$callsign_array = array();
9340
		$temp_array = array();
9341
        
9342
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9343
		{
9344
			$temp_array['callsign_icao'] = $row['ident'];
9345
			$temp_array['airline_name'] = $row['airline_name'];
9346
			$temp_array['airline_icao'] = $row['airline_icao'];
9347
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
9348
          
9349
			$callsign_array[] = $temp_array;
9350
		}
9351
9352
		return $callsign_array;
9353
	}
9354
9355
9356
9357
9358
	/**
9359
	* Counts all dates
9360
	*
9361
	* @return Array the date list
9362
	*
9363
	*/
9364
	public function countAllDates($filters = array())
9365
	{
9366
		global $globalTimezone, $globalDBdriver;
9367
		if ($globalTimezone != '') {
9368
			date_default_timezone_set($globalTimezone);
9369
			$datetime = new DateTime();
9370
			$offset = $datetime->format('P');
9371
		} else $offset = '+00:00';
9372
9373
		if ($globalDBdriver == 'mysql') {
9374
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9375
								FROM spotter_output";
9376
			$query .= $this->getFilter($filters);
9377
			$query .= " GROUP BY date_name 
9378
								ORDER BY date_count DESC
9379
								LIMIT 10 OFFSET 0";
9380
		} else {
9381
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9382
								FROM spotter_output";
9383
			$query .= $this->getFilter($filters);
9384
			$query .= " GROUP BY date_name 
9385
								ORDER BY date_count DESC
9386
								LIMIT 10 OFFSET 0";
9387
		}
9388
      
9389
		
9390
		$sth = $this->db->prepare($query);
9391
		$sth->execute(array(':offset' => $offset));
9392
      
9393
		$date_array = array();
9394
		$temp_array = array();
9395
        
9396
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9397
		{
9398
			$temp_array['date_name'] = $row['date_name'];
9399
			$temp_array['date_count'] = $row['date_count'];
9400
9401
			$date_array[] = $temp_array;
9402
		}
9403
9404
		return $date_array;
9405
	}
9406
	
9407
	/**
9408
	* Counts all dates
9409
	*
9410
	* @return Array the date list
9411
	*
9412
	*/
9413
	public function countAllDatesByAirlines($filters = array())
9414
	{
9415
		global $globalTimezone, $globalDBdriver;
9416
		if ($globalTimezone != '') {
9417
			date_default_timezone_set($globalTimezone);
9418
			$datetime = new DateTime();
9419
			$offset = $datetime->format('P');
9420
		} else $offset = '+00:00';
9421
		$filter_query = $this->getFilter($filters,true,true);
9422
		if ($globalDBdriver == 'mysql') {
9423
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9424
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9425
								GROUP BY spotter_output.airline_icao, date_name 
9426
								ORDER BY date_count DESC
9427
								LIMIT 10 OFFSET 0";
9428
		} else {
9429
			$query  = "SELECT spotter_output.airline_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9430
								FROM spotter_output 
9431
								WHERE spotter_output.airline_icao <> '' 
9432
								GROUP BY spotter_output.airline_icao, date_name 
9433
								ORDER BY date_count DESC
9434
								LIMIT 10 OFFSET 0";
9435
		}
9436
      
9437
		
9438
		$sth = $this->db->prepare($query);
9439
		$sth->execute(array(':offset' => $offset));
9440
      
9441
		$date_array = array();
9442
		$temp_array = array();
9443
        
9444
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9445
		{
9446
			$temp_array['date_name'] = $row['date_name'];
9447
			$temp_array['date_count'] = $row['date_count'];
9448
			$temp_array['airline_icao'] = $row['airline_icao'];
9449
9450
			$date_array[] = $temp_array;
9451
		}
9452
9453
		return $date_array;
9454
	}	
9455
	
9456
	/**
9457
	* Counts all dates during the last 7 days
9458
	*
9459
	* @return Array the date list
9460
	*
9461
	*/
9462
	public function countAllDatesLast7Days($filters = array())
9463
	{
9464
		global $globalTimezone, $globalDBdriver;
9465
		if ($globalTimezone != '') {
9466
			date_default_timezone_set($globalTimezone);
9467
			$datetime = new DateTime();
9468
			$offset = $datetime->format('P');
9469
		} else $offset = '+00:00';
9470
		$filter_query = $this->getFilter($filters,true,true);
9471
		if ($globalDBdriver == 'mysql') {
9472
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9473
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY)";
9474
			$query .= " GROUP BY date_name 
9475
								ORDER BY spotter_output.date ASC";
9476
			$query_data = array(':offset' => $offset);
9477
		} else {
9478
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9479
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '7 DAYS'";
9480
			$query .= " GROUP BY date_name 
9481
								ORDER BY date_name ASC";
9482
			$query_data = array(':offset' => $offset);
9483
    		}
9484
		
9485
		$sth = $this->db->prepare($query);
9486
		$sth->execute($query_data);
9487
      
9488
		$date_array = array();
9489
		$temp_array = array();
9490
        
9491
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9492
		{
9493
			$temp_array['date_name'] = $row['date_name'];
9494
			$temp_array['date_count'] = $row['date_count'];
9495
          
9496
			$date_array[] = $temp_array;
9497
		}
9498
9499
		return $date_array;
9500
	}
9501
9502
	/**
9503
	* Counts all dates during the last month
9504
	*
9505
	* @return Array the date list
9506
	*
9507
	*/
9508
	public function countAllDatesLastMonth($filters = array())
9509
	{
9510
		global $globalTimezone, $globalDBdriver;
9511
		if ($globalTimezone != '') {
9512
			date_default_timezone_set($globalTimezone);
9513
			$datetime = new DateTime();
9514
			$offset = $datetime->format('P');
9515
		} else $offset = '+00:00';
9516
		$filter_query = $this->getFilter($filters,true,true);
9517
		if ($globalDBdriver == 'mysql') {
9518
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9519
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)";
9520
			$query .= " GROUP BY date_name 
9521
								ORDER BY spotter_output.date ASC";
9522
			$query_data = array(':offset' => $offset);
9523
		} else {
9524
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9525
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'";
9526
			$query .= " GROUP BY date_name 
9527
								ORDER BY date_name ASC";
9528
			$query_data = array(':offset' => $offset);
9529
    		}
9530
		
9531
		$sth = $this->db->prepare($query);
9532
		$sth->execute($query_data);
9533
      
9534
		$date_array = array();
9535
		$temp_array = array();
9536
        
9537
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9538
		{
9539
			$temp_array['date_name'] = $row['date_name'];
9540
			$temp_array['date_count'] = $row['date_count'];
9541
          
9542
			$date_array[] = $temp_array;
9543
		}
9544
9545
		return $date_array;
9546
	}
9547
9548
9549
	/**
9550
	* Counts all dates during the last month
9551
	*
9552
	* @return Array the date list
9553
	*
9554
	*/
9555
	public function countAllDatesLastMonthByAirlines($filters = array())
9556
	{
9557
		global $globalTimezone, $globalDBdriver;
9558
		$filter_query = $this->getFilter($filters,true,true);
9559
		if ($globalTimezone != '') {
9560
			date_default_timezone_set($globalTimezone);
9561
			$datetime = new DateTime();
9562
			$offset = $datetime->format('P');
9563
		} else $offset = '+00:00';
9564
		
9565
		if ($globalDBdriver == 'mysql') {
9566
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9567
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)
9568
								GROUP BY spotter_output.airline_icao, date_name 
9569
								ORDER BY spotter_output.date ASC";
9570
			$query_data = array(':offset' => $offset);
9571
		} else {
9572
			$query  = "SELECT spotter_output.airline_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9573
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'
9574
								GROUP BY spotter_output.airline_icao, date_name 
9575
								ORDER BY date_name ASC";
9576
			$query_data = array(':offset' => $offset);
9577
    		}
9578
		
9579
		$sth = $this->db->prepare($query);
9580
		$sth->execute($query_data);
9581
      
9582
		$date_array = array();
9583
		$temp_array = array();
9584
        
9585
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9586
		{
9587
			$temp_array['date_name'] = $row['date_name'];
9588
			$temp_array['date_count'] = $row['date_count'];
9589
			$temp_array['airline_icao'] = $row['airline_icao'];
9590
          
9591
			$date_array[] = $temp_array;
9592
		}
9593
9594
		return $date_array;
9595
	}
9596
	
9597
9598
	/**
9599
	* Counts all month
9600
	*
9601
	* @return Array the month list
9602
	*
9603
	*/
9604
	public function countAllMonths($filters = array())
9605
	{
9606
		global $globalTimezone, $globalDBdriver;
9607
		if ($globalTimezone != '') {
9608
			date_default_timezone_set($globalTimezone);
9609
			$datetime = new DateTime();
9610
			$offset = $datetime->format('P');
9611
		} else $offset = '+00:00';
9612
9613
		if ($globalDBdriver == 'mysql') {
9614
			$query  = "SELECT YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(*) as date_count
9615
								FROM spotter_output";
9616
			$query .= $this->getFilter($filters);
9617
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
9618
		} else {
9619
			$query  = "SELECT EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(*) as date_count
9620
								FROM spotter_output";
9621
			$query .= $this->getFilter($filters);
9622
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
9623
		}
9624
      
9625
		
9626
		$sth = $this->db->prepare($query);
9627
		$sth->execute(array(':offset' => $offset));
9628
      
9629
		$date_array = array();
9630
		$temp_array = array();
9631
        
9632
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9633
		{
9634
			$temp_array['month_name'] = $row['month_name'];
9635
			$temp_array['year_name'] = $row['year_name'];
9636
			$temp_array['date_count'] = $row['date_count'];
9637
9638
			$date_array[] = $temp_array;
9639
		}
9640
9641
		return $date_array;
9642
	}
9643
9644
	/**
9645
	* Counts all month
9646
	*
9647
	* @return Array the month list
9648
	*
9649
	*/
9650
	public function countAllMonthsByAirlines($filters = array())
9651
	{
9652
		global $globalTimezone, $globalDBdriver;
9653
		$filter_query = $this->getFilter($filters,true,true);
9654
		if ($globalTimezone != '') {
9655
			date_default_timezone_set($globalTimezone);
9656
			$datetime = new DateTime();
9657
			$offset = $datetime->format('P');
9658
		} else $offset = '+00:00';
9659
9660
		if ($globalDBdriver == 'mysql') {
9661
			$query  = "SELECT spotter_output.airline_icao, YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(*) as date_count
9662
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9663
								GROUP BY spotter_output.airline_icao, year_name, month_name 
9664
								ORDER BY date_count DESC";
9665
		} else {
9666
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(*) as date_count
9667
								FROM spotter_output 
9668
								WHERE spotter_output.airline_icao <> '' 
9669
								GROUP BY spotter_output.airline_icao, year_name, month_name 
9670
								ORDER BY date_count DESC";
9671
		}
9672
      
9673
		
9674
		$sth = $this->db->prepare($query);
9675
		$sth->execute(array(':offset' => $offset));
9676
      
9677
		$date_array = array();
9678
		$temp_array = array();
9679
        
9680
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9681
		{
9682
			$temp_array['month_name'] = $row['month_name'];
9683
			$temp_array['year_name'] = $row['year_name'];
9684
			$temp_array['date_count'] = $row['date_count'];
9685
			$temp_array['airline_icao'] = $row['airline_icao'];
9686
9687
			$date_array[] = $temp_array;
9688
		}
9689
9690
		return $date_array;
9691
	}
9692
9693
	/**
9694
	* Counts all military month
9695
	*
9696
	* @return Array the month list
9697
	*
9698
	*/
9699
	public function countAllMilitaryMonths($filters = array())
9700
	{
9701
		global $globalTimezone, $globalDBdriver;
9702
		if ($globalTimezone != '') {
9703
			date_default_timezone_set($globalTimezone);
9704
			$datetime = new DateTime();
9705
			$offset = $datetime->format('P');
9706
		} else $offset = '+00:00';
9707
		$filter_query = $this->getFilter($filters,true,true);
9708
		if ($globalDBdriver == 'mysql') {
9709
			$query  = "SELECT YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(*) as date_count
9710
								FROM spotter_output".$filter_query." spotter_output.airline_type = 'military'
9711
								GROUP BY year_name, month_name 
9712
								ORDER BY date_count DESC";
9713
		} else {
9714
			$query  = "SELECT EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(*) as date_count
9715
								FROM spotter_output".$filter_query." spotter_output.airline_type = 'military'
9716
								GROUP BY year_name, month_name 
9717
								ORDER BY date_count DESC";
9718
		}
9719
		
9720
		$sth = $this->db->prepare($query);
9721
		$sth->execute(array(':offset' => $offset));
9722
      
9723
		$date_array = array();
9724
		$temp_array = array();
9725
        
9726
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9727
		{
9728
			$temp_array['month_name'] = $row['month_name'];
9729
			$temp_array['year_name'] = $row['year_name'];
9730
			$temp_array['date_count'] = $row['date_count'];
9731
9732
			$date_array[] = $temp_array;
9733
		}
9734
9735
		return $date_array;
9736
	}
9737
	
9738
	/**
9739
	* Counts all month owners
9740
	*
9741
	* @return Array the month list
9742
	*
9743
	*/
9744
	public function countAllMonthsOwners($filters = array())
9745
	{
9746
		global $globalTimezone, $globalDBdriver;
9747
		if ($globalTimezone != '') {
9748
			date_default_timezone_set($globalTimezone);
9749
			$datetime = new DateTime();
9750
			$offset = $datetime->format('P');
9751
		} else $offset = '+00:00';
9752
		$filter_query = $this->getFilter($filters,true,true);
9753
9754
		if ($globalDBdriver == 'mysql') {
9755
			$query  = "SELECT YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct owner_name) as date_count
9756
								FROM spotter_output".$filter_query." owner_name <> ''
9757
								GROUP BY year_name, month_name
9758
								ORDER BY date_count DESC";
9759
		} else {
9760
			$query  = "SELECT EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct owner_name) as date_count
9761
								FROM spotter_output".$filter_query." owner_name <> ''
9762
								GROUP BY year_name, month_name
9763
								ORDER BY date_count DESC";
9764
		}
9765
		
9766
		$sth = $this->db->prepare($query);
9767
		$sth->execute(array(':offset' => $offset));
9768
      
9769
		$date_array = array();
9770
		$temp_array = array();
9771
        
9772
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9773
		{
9774
			$temp_array['month_name'] = $row['month_name'];
9775
			$temp_array['year_name'] = $row['year_name'];
9776
			$temp_array['date_count'] = $row['date_count'];
9777
9778
			$date_array[] = $temp_array;
9779
		}
9780
9781
		return $date_array;
9782
	}
9783
	
9784
	/**
9785
	* Counts all month owners
9786
	*
9787
	* @return Array the month list
9788
	*
9789
	*/
9790
	public function countAllMonthsOwnersByAirlines($filters = array())
9791
	{
9792
		global $globalTimezone, $globalDBdriver;
9793
		$filter_query = $this->getFilter($filters,true,true);
9794
		if ($globalTimezone != '') {
9795
			date_default_timezone_set($globalTimezone);
9796
			$datetime = new DateTime();
9797
			$offset = $datetime->format('P');
9798
		} else $offset = '+00:00';
9799
9800
		if ($globalDBdriver == 'mysql') {
9801
			$query  = "SELECT spotter_output.airline_icao, YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct owner_name) as date_count
9802
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
9803
								GROUP BY spotter_output.airline_icao, year_name, month_name
9804
								ORDER BY date_count DESC";
9805
		} else {
9806
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct owner_name) as date_count
9807
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
9808
								GROUP BY spotter_output.airline_icao, year_name, month_name
9809
								ORDER BY date_count DESC";
9810
		}
9811
		
9812
		$sth = $this->db->prepare($query);
9813
		$sth->execute(array(':offset' => $offset));
9814
      
9815
		$date_array = array();
9816
		$temp_array = array();
9817
        
9818
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9819
		{
9820
			$temp_array['month_name'] = $row['month_name'];
9821
			$temp_array['year_name'] = $row['year_name'];
9822
			$temp_array['date_count'] = $row['date_count'];
9823
			$temp_array['airline_icao'] = $row['airline_icao'];
9824
9825
			$date_array[] = $temp_array;
9826
		}
9827
9828
		return $date_array;
9829
	}
9830
9831
	/**
9832
	* Counts all month pilot
9833
	*
9834
	* @return Array the month list
9835
	*
9836
	*/
9837
	public function countAllMonthsPilots($filters = array())
9838
	{
9839
		global $globalTimezone, $globalDBdriver;
9840
		if ($globalTimezone != '') {
9841
			date_default_timezone_set($globalTimezone);
9842
			$datetime = new DateTime();
9843
			$offset = $datetime->format('P');
9844
		} else $offset = '+00:00';
9845
		$filter_query = $this->getFilter($filters,true,true);
9846
9847
		if ($globalDBdriver == 'mysql') {
9848
			$query  = "SELECT YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct pilot_id) as date_count
9849
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
9850
								GROUP BY year_name, month_name
9851
								ORDER BY date_count DESC";
9852
		} else {
9853
			$query  = "SELECT EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct pilot_id) as date_count
9854
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
9855
								GROUP BY year_name, month_name
9856
								ORDER BY date_count DESC";
9857
		}
9858
		
9859
		$sth = $this->db->prepare($query);
9860
		$sth->execute(array(':offset' => $offset));
9861
      
9862
		$date_array = array();
9863
		$temp_array = array();
9864
        
9865
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9866
		{
9867
			$temp_array['month_name'] = $row['month_name'];
9868
			$temp_array['year_name'] = $row['year_name'];
9869
			$temp_array['date_count'] = $row['date_count'];
9870
9871
			$date_array[] = $temp_array;
9872
		}
9873
9874
		return $date_array;
9875
	}
9876
	
9877
	/**
9878
	* Counts all month pilot
9879
	*
9880
	* @return Array the month list
9881
	*
9882
	*/
9883
	public function countAllMonthsPilotsByAirlines($filters = array())
9884
	{
9885
		global $globalTimezone, $globalDBdriver;
9886
		$filter_query = $this->getFilter($filters,true,true);
9887
		if ($globalTimezone != '') {
9888
			date_default_timezone_set($globalTimezone);
9889
			$datetime = new DateTime();
9890
			$offset = $datetime->format('P');
9891
		} else $offset = '+00:00';
9892
9893
		if ($globalDBdriver == 'mysql') {
9894
			$query  = "SELECT spotter_output.airline_icao, YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct pilot_id) as date_count
9895
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
9896
								GROUP BY spotter_output.airline_icao,year_name, month_name
9897
								ORDER BY date_count DESC";
9898
		} else {
9899
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct pilot_id) as date_count
9900
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
9901
								GROUP BY spotter_output.airline_icao, year_name, month_name
9902
								ORDER BY date_count DESC";
9903
		}
9904
		
9905
		$sth = $this->db->prepare($query);
9906
		$sth->execute(array(':offset' => $offset));
9907
      
9908
		$date_array = array();
9909
		$temp_array = array();
9910
        
9911
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9912
		{
9913
			$temp_array['month_name'] = $row['month_name'];
9914
			$temp_array['year_name'] = $row['year_name'];
9915
			$temp_array['date_count'] = $row['date_count'];
9916
			$temp_array['airline_icao'] = $row['airline_icao'];
9917
9918
			$date_array[] = $temp_array;
9919
		}
9920
9921
		return $date_array;
9922
	}
9923
9924
	/**
9925
	* Counts all month airline
9926
	*
9927
	* @return Array the month list
9928
	*
9929
	*/
9930
	public function countAllMonthsAirlines($filters = array())
9931
	{
9932
		global $globalTimezone, $globalDBdriver;
9933
		$filter_query = $this->getFilter($filters,true,true);
9934
		if ($globalTimezone != '') {
9935
			date_default_timezone_set($globalTimezone);
9936
			$datetime = new DateTime();
9937
			$offset = $datetime->format('P');
9938
		} else $offset = '+00:00';
9939
9940
		if ($globalDBdriver == 'mysql') {
9941
			$query  = "SELECT YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct airline_icao) as date_count
9942
								FROM spotter_output".$filter_query." airline_icao <> '' 
9943
								GROUP BY year_name, month_name
9944
								ORDER BY date_count DESC";
9945
		} else {
9946
			$query  = "SELECT EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct airline_icao) as date_count
9947
								FROM spotter_output".$filter_query." airline_icao <> '' 
9948
								GROUP BY year_name, month_name
9949
								ORDER BY date_count DESC";
9950
		}
9951
		
9952
		$sth = $this->db->prepare($query);
9953
		$sth->execute(array(':offset' => $offset));
9954
      
9955
		$date_array = array();
9956
		$temp_array = array();
9957
        
9958
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9959
		{
9960
			$temp_array['month_name'] = $row['month_name'];
9961
			$temp_array['year_name'] = $row['year_name'];
9962
			$temp_array['date_count'] = $row['date_count'];
9963
9964
			$date_array[] = $temp_array;
9965
		}
9966
9967
		return $date_array;
9968
	}
9969
	
9970
	/**
9971
	* Counts all month aircraft
9972
	*
9973
	* @return Array the month list
9974
	*
9975
	*/
9976
	public function countAllMonthsAircrafts($filters = array())
9977
	{
9978
		global $globalTimezone, $globalDBdriver;
9979
		if ($globalTimezone != '') {
9980
			date_default_timezone_set($globalTimezone);
9981
			$datetime = new DateTime();
9982
			$offset = $datetime->format('P');
9983
		} else $offset = '+00:00';
9984
		$filter_query = $this->getFilter($filters,true,true);
9985
9986
		if ($globalDBdriver == 'mysql') {
9987
			$query  = "SELECT YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct aircraft_icao) as date_count
9988
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
9989
								GROUP BY year_name, month_name
9990
								ORDER BY date_count DESC";
9991
		} else {
9992
			$query  = "SELECT EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct aircraft_icao) as date_count
9993
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
9994
								GROUP BY year_name, month_name
9995
								ORDER BY date_count DESC";
9996
		}
9997
		
9998
		$sth = $this->db->prepare($query);
9999
		$sth->execute(array(':offset' => $offset));
10000
      
10001
		$date_array = array();
10002
		$temp_array = array();
10003
        
10004
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10005
		{
10006
			$temp_array['month_name'] = $row['month_name'];
10007
			$temp_array['year_name'] = $row['year_name'];
10008
			$temp_array['date_count'] = $row['date_count'];
10009
10010
			$date_array[] = $temp_array;
10011
		}
10012
10013
		return $date_array;
10014
	}
10015
	
10016
10017
	/**
10018
	* Counts all month aircraft
10019
	*
10020
	* @return Array the month list
10021
	*
10022
	*/
10023
	public function countAllMonthsAircraftsByAirlines($filters = array())
10024
	{
10025
		global $globalTimezone, $globalDBdriver;
10026
		$filter_query = $this->getFilter($filters,true,true);
10027
		if ($globalTimezone != '') {
10028
			date_default_timezone_set($globalTimezone);
10029
			$datetime = new DateTime();
10030
			$offset = $datetime->format('P');
10031
		} else $offset = '+00:00';
10032
10033
		if ($globalDBdriver == 'mysql') {
10034
			$query  = "SELECT spotter_output.airline_icao,YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct aircraft_icao) as date_count
10035
								FROM spotter_output".$filter_query." aircraft_icao <> ''  AND spotter_output.airline_icao <> '' 
10036
								GROUP BY spotter_output.airline_icao, year_name, month_name
10037
								ORDER BY date_count DESC";
10038
		} else {
10039
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct aircraft_icao) as date_count
10040
								FROM spotter_output".$filter_query." aircraft_icao <> '' AND spotter_output.airline_icao <> '' 
10041
								GROUP BY spotter_output.airline_icao, year_name, month_name
10042
								ORDER BY date_count DESC";
10043
		}
10044
		
10045
		$sth = $this->db->prepare($query);
10046
		$sth->execute(array(':offset' => $offset));
10047
      
10048
		$date_array = array();
10049
		$temp_array = array();
10050
        
10051
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10052
		{
10053
			$temp_array['month_name'] = $row['month_name'];
10054
			$temp_array['year_name'] = $row['year_name'];
10055
			$temp_array['date_count'] = $row['date_count'];
10056
			$temp_array['airline_icao'] = $row['airline_icao'];
10057
10058
			$date_array[] = $temp_array;
10059
		}
10060
10061
		return $date_array;
10062
	}
10063
10064
	/**
10065
	* Counts all month real arrival
10066
	*
10067
	* @return Array the month list
10068
	*
10069
	*/
10070
	public function countAllMonthsRealArrivals($filters = array())
10071
	{
10072
		global $globalTimezone, $globalDBdriver;
10073
		if ($globalTimezone != '') {
10074
			date_default_timezone_set($globalTimezone);
10075
			$datetime = new DateTime();
10076
			$offset = $datetime->format('P');
10077
		} else $offset = '+00:00';
10078
		$filter_query = $this->getFilter($filters,true,true);
10079
10080
		if ($globalDBdriver == 'mysql') {
10081
			$query  = "SELECT YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(real_arrival_airport_icao) as date_count
10082
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
10083
								GROUP BY year_name, month_name
10084
								ORDER BY date_count DESC";
10085
		} else {
10086
			$query  = "SELECT EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(real_arrival_airport_icao) as date_count
10087
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
10088
								GROUP BY year_name, month_name
10089
								ORDER BY date_count DESC";
10090
		}
10091
		
10092
		$sth = $this->db->prepare($query);
10093
		$sth->execute(array(':offset' => $offset));
10094
      
10095
		$date_array = array();
10096
		$temp_array = array();
10097
        
10098
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10099
		{
10100
			$temp_array['month_name'] = $row['month_name'];
10101
			$temp_array['year_name'] = $row['year_name'];
10102
			$temp_array['date_count'] = $row['date_count'];
10103
10104
			$date_array[] = $temp_array;
10105
		}
10106
10107
		return $date_array;
10108
	}
10109
	
10110
10111
	/**
10112
	* Counts all month real arrival
10113
	*
10114
	* @return Array the month list
10115
	*
10116
	*/
10117
	public function countAllMonthsRealArrivalsByAirlines($filters = array())
10118
	{
10119
		global $globalTimezone, $globalDBdriver;
10120
		$filter_query = $this->getFilter($filters,true,true);
10121
		if ($globalTimezone != '') {
10122
			date_default_timezone_set($globalTimezone);
10123
			$datetime = new DateTime();
10124
			$offset = $datetime->format('P');
10125
		} else $offset = '+00:00';
10126
10127
		if ($globalDBdriver == 'mysql') {
10128
			$query  = "SELECT spotter_output.airline_icao, YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(real_arrival_airport_icao) as date_count
10129
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
10130
								GROUP BY spotter_output.airline_icao, year_name, month_name
10131
								ORDER BY date_count DESC";
10132
		} else {
10133
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(real_arrival_airport_icao) as date_count
10134
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
10135
								GROUP BY spotter_output.airline_icao, year_name, month_name
10136
								ORDER BY date_count DESC";
10137
		}
10138
		
10139
		$sth = $this->db->prepare($query);
10140
		$sth->execute(array(':offset' => $offset));
10141
      
10142
		$date_array = array();
10143
		$temp_array = array();
10144
        
10145
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10146
		{
10147
			$temp_array['month_name'] = $row['month_name'];
10148
			$temp_array['year_name'] = $row['year_name'];
10149
			$temp_array['date_count'] = $row['date_count'];
10150
			$temp_array['airline_icao'] = $row['airline_icao'];
10151
10152
			$date_array[] = $temp_array;
10153
		}
10154
10155
		return $date_array;
10156
	}
10157
	
10158
10159
	/**
10160
	* Counts all dates during the last year
10161
	*
10162
	* @return Array the date list
10163
	*
10164
	*/
10165
	public function countAllMonthsLastYear($filters)
10166
	{
10167
		global $globalTimezone, $globalDBdriver;
10168
		if ($globalTimezone != '') {
10169
			date_default_timezone_set($globalTimezone);
10170
			$datetime = new DateTime();
10171
			$offset = $datetime->format('P');
10172
		} else $offset = '+00:00';
10173
		$filter_query = $this->getFilter($filters,true,true);
10174
		if ($globalDBdriver == 'mysql') {
10175
			$query  = "SELECT MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name, count(*) as date_count
10176
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 YEAR)";
10177
			$query .= " GROUP BY year_name, month_name
10178
								ORDER BY year_name, month_name ASC";
10179
			$query_data = array(':offset' => $offset);
10180
		} else {
10181
			$query  = "SELECT EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name, count(*) as date_count
10182
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 YEARS'";
10183
			$query .= " GROUP BY year_name, month_name
10184
								ORDER BY year_name, month_name ASC";
10185
			$query_data = array(':offset' => $offset);
10186
    		}
10187
		
10188
		$sth = $this->db->prepare($query);
10189
		$sth->execute($query_data);
10190
      
10191
		$date_array = array();
10192
		$temp_array = array();
10193
        
10194
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10195
		{
10196
			$temp_array['year_name'] = $row['year_name'];
10197
			$temp_array['month_name'] = $row['month_name'];
10198
			$temp_array['date_count'] = $row['date_count'];
10199
          
10200
			$date_array[] = $temp_array;
10201
		}
10202
10203
		return $date_array;
10204
	}
10205
	
10206
	
10207
	
10208
	/**
10209
	* Counts all hours
10210
	*
10211
	* @return Array the hour list
10212
	*
10213
	*/
10214
	public function countAllHours($orderby,$filters = array())
10215
	{
10216
		global $globalTimezone, $globalDBdriver;
10217
		if ($globalTimezone != '') {
10218
			date_default_timezone_set($globalTimezone);
10219
			$datetime = new DateTime();
10220
			$offset = $datetime->format('P');
10221
		} else $offset = '+00:00';
10222
10223
		$orderby_sql = '';
10224
		if ($orderby == "hour")
10225
		{
10226
			$orderby_sql = "ORDER BY hour_name ASC";
10227
		}
10228
		if ($orderby == "count")
10229
		{
10230
			$orderby_sql = "ORDER BY hour_count DESC";
10231
		}
10232
		
10233
		if ($globalDBdriver == 'mysql') {
10234
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10235
								FROM spotter_output";
10236
			$query .= $this->getFilter($filters);
10237
			$query .= " GROUP BY hour_name 
10238
								".$orderby_sql;
10239
10240
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
10241
								FROM spotter_output 
10242
								GROUP BY hour_name 
10243
								".$orderby_sql."
10244
								LIMIT 10 OFFSET 00";
10245
  */    
10246
		$query_data = array(':offset' => $offset);
10247
		} else {
10248
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10249
								FROM spotter_output";
10250
			$query .= $this->getFilter($filters);
10251
			$query .= " GROUP BY hour_name 
10252
								".$orderby_sql;
10253
			$query_data = array(':offset' => $offset);
10254
		}
10255
		
10256
		$sth = $this->db->prepare($query);
10257
		$sth->execute($query_data);
10258
      
10259
		$hour_array = array();
10260
		$temp_array = array();
10261
        
10262
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10263
		{
10264
			$temp_array['hour_name'] = $row['hour_name'];
10265
			$temp_array['hour_count'] = $row['hour_count'];
10266
          
10267
			$hour_array[] = $temp_array;
10268
		}
10269
10270
		return $hour_array;
10271
	}
10272
	
10273
	/**
10274
	* Counts all hours
10275
	*
10276
	* @return Array the hour list
10277
	*
10278
	*/
10279
	public function countAllHoursByAirlines($orderby, $filters = array())
10280
	{
10281
		global $globalTimezone, $globalDBdriver;
10282
		$filter_query = $this->getFilter($filters,true,true);
10283
		if ($globalTimezone != '') {
10284
			date_default_timezone_set($globalTimezone);
10285
			$datetime = new DateTime();
10286
			$offset = $datetime->format('P');
10287
		} else $offset = '+00:00';
10288
10289
		$orderby_sql = '';
10290
		if ($orderby == "hour")
10291
		{
10292
			$orderby_sql = "ORDER BY hour_name ASC";
10293
		}
10294
		if ($orderby == "count")
10295
		{
10296
			$orderby_sql = "ORDER BY hour_count DESC";
10297
		}
10298
		
10299
		if ($globalDBdriver == 'mysql') {
10300
			$query  = "SELECT spotter_output.airline_icao, HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10301
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
10302
								GROUP BY spotter_output.airline_icao, hour_name 
10303
								".$orderby_sql;
10304
10305
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
10306
								FROM spotter_output 
10307
								GROUP BY hour_name 
10308
								".$orderby_sql."
10309
								LIMIT 10 OFFSET 00";
10310
  */    
10311
		$query_data = array(':offset' => $offset);
10312
		} else {
10313
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10314
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
10315
								GROUP BY spotter_output.airline_icao, hour_name 
10316
								".$orderby_sql;
10317
			$query_data = array(':offset' => $offset);
10318
		}
10319
		
10320
		$sth = $this->db->prepare($query);
10321
		$sth->execute($query_data);
10322
      
10323
		$hour_array = array();
10324
		$temp_array = array();
10325
        
10326
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10327
		{
10328
			$temp_array['hour_name'] = $row['hour_name'];
10329
			$temp_array['hour_count'] = $row['hour_count'];
10330
			$temp_array['airline_icao'] = $row['airline_icao'];
10331
          
10332
			$hour_array[] = $temp_array;
10333
		}
10334
10335
		return $hour_array;
10336
	}
10337
10338
10339
10340
	/**
10341
	* Counts all hours by airline
10342
	*
10343
	* @return Array the hour list
10344
	*
10345
	*/
10346
	public function countAllHoursByAirline($airline_icao, $filters = array())
10347
	{
10348
		global $globalTimezone, $globalDBdriver;
10349
		$filter_query = $this->getFilter($filters,true,true);
10350
		if ($globalTimezone != '') {
10351
			date_default_timezone_set($globalTimezone);
10352
			$datetime = new DateTime();
10353
			$offset = $datetime->format('P');
10354
		} else $offset = '+00:00';
10355
10356
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
10357
10358
		if ($globalDBdriver == 'mysql') {
10359
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10360
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
10361
								GROUP BY hour_name 
10362
								ORDER BY hour_name ASC";
10363
		} else {
10364
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10365
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
10366
								GROUP BY hour_name 
10367
								ORDER BY hour_name ASC";
10368
		}
10369
		
10370
		$sth = $this->db->prepare($query);
10371
		$sth->execute(array(':airline_icao' => $airline_icao,':offset' => $offset));
10372
      
10373
		$hour_array = array();
10374
		$temp_array = array();
10375
        
10376
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10377
		{
10378
			$temp_array['hour_name'] = $row['hour_name'];
10379
			$temp_array['hour_count'] = $row['hour_count'];
10380
          
10381
			$hour_array[] = $temp_array;
10382
		}
10383
10384
		return $hour_array;
10385
	}
10386
	
10387
	
10388
	
10389
	
10390
	/**
10391
	* Counts all hours by aircraft
10392
	*
10393
	* @return Array the hour list
10394
	*
10395
	*/
10396
	public function countAllHoursByAircraft($aircraft_icao, $filters = array())
10397
	{
10398
		global $globalTimezone, $globalDBdriver;
10399
		$filter_query = $this->getFilter($filters,true,true);
10400
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
10401
		if ($globalTimezone != '') {
10402
			date_default_timezone_set($globalTimezone);
10403
			$datetime = new DateTime();
10404
			$offset = $datetime->format('P');
10405
		} else $offset = '+00:00';
10406
10407
		if ($globalDBdriver == 'mysql') {
10408
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10409
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
10410
								GROUP BY hour_name 
10411
								ORDER BY hour_name ASC";
10412
		} else {
10413
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10414
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
10415
								GROUP BY hour_name 
10416
								ORDER BY hour_name ASC";
10417
		}
10418
		
10419
		$sth = $this->db->prepare($query);
10420
		$sth->execute(array(':aircraft_icao' => $aircraft_icao,':offset' => $offset));
10421
      
10422
		$hour_array = array();
10423
		$temp_array = array();
10424
        
10425
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10426
		{
10427
			$temp_array['hour_name'] = $row['hour_name'];
10428
			$temp_array['hour_count'] = $row['hour_count'];
10429
          
10430
			$hour_array[] = $temp_array;
10431
		}
10432
10433
		return $hour_array;
10434
	}
10435
	
10436
	
10437
	/**
10438
	* Counts all hours by aircraft registration
10439
	*
10440
	* @return Array the hour list
10441
	*
10442
	*/
10443
	public function countAllHoursByRegistration($registration, $filters = array())
10444
	{
10445
		global $globalTimezone, $globalDBdriver;
10446
		$filter_query = $this->getFilter($filters,true,true);
10447
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
10448
		if ($globalTimezone != '') {
10449
			date_default_timezone_set($globalTimezone);
10450
			$datetime = new DateTime();
10451
			$offset = $datetime->format('P');
10452
		} else $offset = '+00:00';
10453
10454
		if ($globalDBdriver == 'mysql') {
10455
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10456
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
10457
								GROUP BY hour_name 
10458
								ORDER BY hour_name ASC";
10459
		} else {
10460
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10461
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
10462
								GROUP BY hour_name 
10463
								ORDER BY hour_name ASC";
10464
		}
10465
		
10466
		$sth = $this->db->prepare($query);
10467
		$sth->execute(array(':registration' => $registration,':offset' => $offset));
10468
      
10469
		$hour_array = array();
10470
		$temp_array = array();
10471
        
10472
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10473
		{
10474
			$temp_array['hour_name'] = $row['hour_name'];
10475
			$temp_array['hour_count'] = $row['hour_count'];
10476
          
10477
			$hour_array[] = $temp_array;
10478
		}
10479
10480
		return $hour_array;
10481
	}
10482
	
10483
	
10484
	/**
10485
	* Counts all hours by airport
10486
	*
10487
	* @return Array the hour list
10488
	*
10489
	*/
10490
	public function countAllHoursByAirport($airport_icao, $filters = array())
10491
	{
10492
		global $globalTimezone, $globalDBdriver;
10493
		$filter_query = $this->getFilter($filters,true,true);
10494
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
10495
		if ($globalTimezone != '') {
10496
			date_default_timezone_set($globalTimezone);
10497
			$datetime = new DateTime();
10498
			$offset = $datetime->format('P');
10499
		} else $offset = '+00:00';
10500
10501
		if ($globalDBdriver == 'mysql') {
10502
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10503
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
10504
								GROUP BY hour_name 
10505
								ORDER BY hour_name ASC";
10506
		} else {
10507
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10508
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
10509
								GROUP BY hour_name 
10510
								ORDER BY hour_name ASC";
10511
		}
10512
		
10513
		$sth = $this->db->prepare($query);
10514
		$sth->execute(array(':airport_icao' => $airport_icao,':offset' => $offset));
10515
      
10516
		$hour_array = array();
10517
		$temp_array = array();
10518
        
10519
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10520
		{
10521
			$temp_array['hour_name'] = $row['hour_name'];
10522
			$temp_array['hour_count'] = $row['hour_count'];
10523
          
10524
			$hour_array[] = $temp_array;
10525
		}
10526
10527
		return $hour_array;
10528
	}
10529
	
10530
	
10531
	
10532
	/**
10533
	* Counts all hours by manufacturer
10534
	*
10535
	* @return Array the hour list
10536
	*
10537
	*/
10538
	public function countAllHoursByManufacturer($aircraft_manufacturer,$filters =array())
10539
	{
10540
		global $globalTimezone, $globalDBdriver;
10541
		$filter_query = $this->getFilter($filters,true,true);
10542
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
10543
		if ($globalTimezone != '') {
10544
			date_default_timezone_set($globalTimezone);
10545
			$datetime = new DateTime();
10546
			$offset = $datetime->format('P');
10547
		} else $offset = '+00:00';
10548
10549
		if ($globalDBdriver == 'mysql') {
10550
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10551
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
10552
								GROUP BY hour_name 
10553
								ORDER BY hour_name ASC";
10554
		} else {
10555
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10556
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
10557
								GROUP BY hour_name 
10558
								ORDER BY hour_name ASC";
10559
		}
10560
		
10561
		$sth = $this->db->prepare($query);
10562
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer,':offset' => $offset));
10563
      
10564
		$hour_array = array();
10565
		$temp_array = array();
10566
        
10567
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10568
		{
10569
			$temp_array['hour_name'] = $row['hour_name'];
10570
			$temp_array['hour_count'] = $row['hour_count'];
10571
          
10572
			$hour_array[] = $temp_array;
10573
		}
10574
10575
		return $hour_array;
10576
	}
10577
	
10578
	
10579
	
10580
	/**
10581
	* Counts all hours by date
10582
	*
10583
	* @return Array the hour list
10584
	*
10585
	*/
10586
	public function countAllHoursByDate($date, $filters = array())
10587
	{
10588
		global $globalTimezone, $globalDBdriver;
10589
		$filter_query = $this->getFilter($filters,true,true);
10590
		$date = filter_var($date,FILTER_SANITIZE_STRING);
10591
		if ($globalTimezone != '') {
10592
			date_default_timezone_set($globalTimezone);
10593
			$datetime = new DateTime($date);
10594
			$offset = $datetime->format('P');
10595
		} else $offset = '+00:00';
10596
10597
		if ($globalDBdriver == 'mysql') {
10598
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10599
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
10600
								GROUP BY hour_name 
10601
								ORDER BY hour_name ASC";
10602
		} else {
10603
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10604
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset, 'YYYY-mm-dd') = :date
10605
								GROUP BY hour_name 
10606
								ORDER BY hour_name ASC";
10607
		}
10608
		
10609
		$sth = $this->db->prepare($query);
10610
		$sth->execute(array(':date' => $date, ':offset' => $offset));
10611
      
10612
		$hour_array = array();
10613
		$temp_array = array();
10614
        
10615
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10616
		{
10617
			$temp_array['hour_name'] = $row['hour_name'];
10618
			$temp_array['hour_count'] = $row['hour_count'];
10619
          
10620
			$hour_array[] = $temp_array;
10621
		}
10622
10623
		return $hour_array;
10624
	}
10625
	
10626
	
10627
	
10628
	/**
10629
	* Counts all hours by a ident/callsign
10630
	*
10631
	* @return Array the hour list
10632
	*
10633
	*/
10634
	public function countAllHoursByIdent($ident, $filters = array())
10635
	{
10636
		global $globalTimezone, $globalDBdriver;
10637
		$filter_query = $this->getFilter($filters,true,true);
10638
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
10639
		if ($globalTimezone != '') {
10640
			date_default_timezone_set($globalTimezone);
10641
			$datetime = new DateTime();
10642
			$offset = $datetime->format('P');
10643
		} else $offset = '+00:00';
10644
10645
		if ($globalDBdriver == 'mysql') {
10646
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10647
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
10648
								GROUP BY hour_name 
10649
								ORDER BY hour_name ASC";
10650
		} else {
10651
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10652
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
10653
								GROUP BY hour_name 
10654
								ORDER BY hour_name ASC";
10655
		}
10656
      
10657
		
10658
		$sth = $this->db->prepare($query);
10659
		$sth->execute(array(':ident' => $ident,':offset' => $offset));
10660
      
10661
		$hour_array = array();
10662
		$temp_array = array();
10663
        
10664
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10665
		{
10666
			$temp_array['hour_name'] = $row['hour_name'];
10667
			$temp_array['hour_count'] = $row['hour_count'];
10668
          
10669
			$hour_array[] = $temp_array;
10670
		}
10671
10672
		return $hour_array;
10673
	}
10674
	
10675
	/**
10676
	* Counts all hours by a owner
10677
	*
10678
	* @return Array the hour list
10679
	*
10680
	*/
10681
	public function countAllHoursByOwner($owner, $filters = array())
10682
	{
10683
		global $globalTimezone, $globalDBdriver;
10684
		$filter_query = $this->getFilter($filters,true,true);
10685
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
10686
		if ($globalTimezone != '') {
10687
			date_default_timezone_set($globalTimezone);
10688
			$datetime = new DateTime();
10689
			$offset = $datetime->format('P');
10690
		} else $offset = '+00:00';
10691
10692
		if ($globalDBdriver == 'mysql') {
10693
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10694
								FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
10695
								GROUP BY hour_name 
10696
								ORDER BY hour_name ASC";
10697
		} else {
10698
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10699
								FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
10700
								GROUP BY hour_name 
10701
								ORDER BY hour_name ASC";
10702
		}
10703
      
10704
		
10705
		$sth = $this->db->prepare($query);
10706
		$sth->execute(array(':owner' => $owner,':offset' => $offset));
10707
      
10708
		$hour_array = array();
10709
		$temp_array = array();
10710
        
10711
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10712
		{
10713
			$temp_array['hour_name'] = $row['hour_name'];
10714
			$temp_array['hour_count'] = $row['hour_count'];
10715
          
10716
			$hour_array[] = $temp_array;
10717
		}
10718
10719
		return $hour_array;
10720
	}
10721
	
10722
	/**
10723
	* Counts all hours by a pilot
10724
	*
10725
	* @return Array the hour list
10726
	*
10727
	*/
10728
	public function countAllHoursByPilot($pilot, $filters = array())
10729
	{
10730
		global $globalTimezone, $globalDBdriver;
10731
		$filter_query = $this->getFilter($filters,true,true);
10732
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
10733
		if ($globalTimezone != '') {
10734
			date_default_timezone_set($globalTimezone);
10735
			$datetime = new DateTime();
10736
			$offset = $datetime->format('P');
10737
		} else $offset = '+00:00';
10738
10739
		if ($globalDBdriver == 'mysql') {
10740
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10741
								FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
10742
								GROUP BY hour_name 
10743
								ORDER BY hour_name ASC";
10744
		} else {
10745
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10746
								FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
10747
								GROUP BY hour_name 
10748
								ORDER BY hour_name ASC";
10749
		}
10750
      
10751
		
10752
		$sth = $this->db->prepare($query);
10753
		$sth->execute(array(':pilot' => $pilot,':offset' => $offset));
10754
      
10755
		$hour_array = array();
10756
		$temp_array = array();
10757
        
10758
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10759
		{
10760
			$temp_array['hour_name'] = $row['hour_name'];
10761
			$temp_array['hour_count'] = $row['hour_count'];
10762
          
10763
			$hour_array[] = $temp_array;
10764
		}
10765
10766
		return $hour_array;
10767
	}
10768
	
10769
	
10770
	
10771
	/**
10772
	* Counts all hours by route
10773
	*
10774
	* @return Array the hour list
10775
	*
10776
	*/
10777
	public function countAllHoursByRoute($departure_airport_icao, $arrival_airport_icao, $filters =array())
10778
	{
10779
		global $globalTimezone, $globalDBdriver;
10780
		$filter_query = $this->getFilter($filters,true,true);
10781
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
10782
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
10783
		if ($globalTimezone != '') {
10784
			date_default_timezone_set($globalTimezone);
10785
			$datetime = new DateTime();
10786
			$offset = $datetime->format('P');
10787
		} else $offset = '+00:00';
10788
10789
		if ($globalDBdriver == 'mysql') {
10790
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10791
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
10792
								GROUP BY hour_name 
10793
								ORDER BY hour_name ASC";
10794
		} else {
10795
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10796
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
10797
								GROUP BY hour_name 
10798
								ORDER BY hour_name ASC";
10799
		}
10800
		
10801
		$sth = $this->db->prepare($query);
10802
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao,':offset' => $offset));
10803
      
10804
		$hour_array = array();
10805
		$temp_array = array();
10806
        
10807
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10808
		{
10809
			$temp_array['hour_name'] = $row['hour_name'];
10810
			$temp_array['hour_count'] = $row['hour_count'];
10811
          
10812
			$hour_array[] = $temp_array;
10813
		}
10814
10815
		return $hour_array;
10816
	}
10817
	
10818
	
10819
	/**
10820
	* Counts all hours by country
10821
	*
10822
	* @return Array the hour list
10823
	*
10824
	*/
10825
	public function countAllHoursByCountry($country, $filters = array())
10826
	{
10827
		global $globalTimezone, $globalDBdriver;
10828
		$filter_query = $this->getFilter($filters,true,true);
10829
		$country = filter_var($country,FILTER_SANITIZE_STRING);
10830
		if ($globalTimezone != '') {
10831
			date_default_timezone_set($globalTimezone);
10832
			$datetime = new DateTime();
10833
			$offset = $datetime->format('P');
10834
		} else $offset = '+00:00';
10835
10836
		if ($globalDBdriver == 'mysql') {
10837
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10838
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
10839
								GROUP BY hour_name 
10840
								ORDER BY hour_name ASC";
10841
		} else {
10842
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10843
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
10844
								GROUP BY hour_name 
10845
								ORDER BY hour_name ASC";
10846
		}
10847
		
10848
		$sth = $this->db->prepare($query);
10849
		$sth->execute(array(':country' => $country,':offset' => $offset));
10850
      
10851
		$hour_array = array();
10852
		$temp_array = array();
10853
        
10854
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10855
		{
10856
			$temp_array['hour_name'] = $row['hour_name'];
10857
			$temp_array['hour_count'] = $row['hour_count'];
10858
          
10859
			$hour_array[] = $temp_array;
10860
		}
10861
10862
		return $hour_array;
10863
	}
10864
10865
10866
10867
10868
	/**
10869
	* Counts all aircraft that have flown over
10870
	*
10871
	* @return Integer the number of aircrafts
10872
	*
10873
	*/
10874
	public function countOverallAircrafts($filters = array(),$year = '',$month = '')
10875
	{
10876
		global $globalDBdriver;
10877
		$filter_query = $this->getFilter($filters,true,true);
10878
		$query  = "SELECT COUNT(DISTINCT spotter_output.aircraft_icao) AS aircraft_count  
10879
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''";
10880
		$query_values = array();
10881
		if ($year != '') {
10882
			if ($globalDBdriver == 'mysql') {
10883
				$query .= " AND YEAR(spotter_output.date) = :year";
10884
				$query_values = array_merge($query_values,array(':year' => $year));
10885
			} else {
10886
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10887
				$query_values = array_merge($query_values,array(':year' => $year));
10888
			}
10889
		}
10890
		if ($month != '') {
10891
			if ($globalDBdriver == 'mysql') {
10892
				$query .= " AND MONTH(spotter_output.date) = :month";
10893
				$query_values = array_merge($query_values,array(':month' => $month));
10894
			} else {
10895
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10896
				$query_values = array_merge($query_values,array(':month' => $month));
10897
			}
10898
		}
10899
10900
		$sth = $this->db->prepare($query);
10901
		$sth->execute($query_values);
10902
		return $sth->fetchColumn();
10903
	}
10904
10905
	/**
10906
	* Counts all flight that really arrival
10907
	*
10908
	* @return Integer the number of aircrafts
10909
	*
10910
	*/
10911
	public function countOverallArrival($filters = array(),$year = '',$month = '')
10912
	{
10913
		global $globalDBdriver;
10914
		$filter_query = $this->getFilter($filters,true,true);
10915
		$query  = "SELECT COUNT(spotter_output.real_arrival_airport_icao) AS arrival_count  
10916
                    FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> ''";
10917
		$query_values = array();
10918
		if ($year != '') {
10919
			if ($globalDBdriver == 'mysql') {
10920
				$query .= " AND YEAR(spotter_output.date) = :year";
10921
				$query_values = array_merge($query_values,array(':year' => $year));
10922
			} else {
10923
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10924
				$query_values = array_merge($query_values,array(':year' => $year));
10925
			}
10926
		}
10927
		if ($month != '') {
10928
			if ($globalDBdriver == 'mysql') {
10929
				$query .= " AND MONTH(spotter_output.date) = :month";
10930
				$query_values = array_merge($query_values,array(':month' => $month));
10931
			} else {
10932
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10933
				$query_values = array_merge($query_values,array(':month' => $month));
10934
			}
10935
		}
10936
		
10937
		$sth = $this->db->prepare($query);
10938
		$sth->execute($query_values);
10939
		return $sth->fetchColumn();
10940
	}
10941
10942
	/**
10943
	* Counts all pilots that have flown over
10944
	*
10945
	* @return Integer the number of pilots
10946
	*
10947
	*/
10948
	public function countOverallPilots($filters = array(),$year = '',$month = '')
10949
	{
10950
		global $globalDBdriver;
10951
		$filter_query = $this->getFilter($filters,true,true);
10952
		$query  = "SELECT COUNT(DISTINCT spotter_output.pilot_id) AS pilot_count  
10953
                    FROM spotter_output".$filter_query." spotter_output.pilot_id <> ''";
10954
		$query_values = array();
10955
		if ($year != '') {
10956
			if ($globalDBdriver == 'mysql') {
10957
				$query .= " AND YEAR(spotter_output.date) = :year";
10958
				$query_values = array_merge($query_values,array(':year' => $year));
10959
			} else {
10960
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10961
				$query_values = array_merge($query_values,array(':year' => $year));
10962
			}
10963
		}
10964
		if ($month != '') {
10965
			if ($globalDBdriver == 'mysql') {
10966
				$query .= " AND MONTH(spotter_output.date) = :month";
10967
				$query_values = array_merge($query_values,array(':month' => $month));
10968
			} else {
10969
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10970
				$query_values = array_merge($query_values,array(':month' => $month));
10971
			}
10972
		}
10973
		$sth = $this->db->prepare($query);
10974
		$sth->execute($query_values);
10975
		return $sth->fetchColumn();
10976
	}
10977
10978
	/**
10979
	* Counts all owners that have flown over
10980
	*
10981
	* @return Integer the number of owners
10982
	*
10983
	*/
10984
	public function countOverallOwners($filters = array(),$year = '',$month = '')
10985
	{
10986
		global $globalDBdriver;
10987
		$filter_query = $this->getFilter($filters,true,true);
10988
		$query  = "SELECT COUNT(DISTINCT spotter_output.owner_name) AS owner_count  
10989
                    FROM spotter_output".$filter_query." spotter_output.owner_name <> ''";
10990
		$query_values = array();
10991
		if ($year != '') {
10992
			if ($globalDBdriver == 'mysql') {
10993
				$query .= " AND YEAR(spotter_output.date) = :year";
10994
				$query_values = array_merge($query_values,array(':year' => $year));
10995
			} else {
10996
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10997
				$query_values = array_merge($query_values,array(':year' => $year));
10998
			}
10999
		}
11000
		if ($month != '') {
11001
			if ($globalDBdriver == 'mysql') {
11002
				$query .= " AND MONTH(spotter_output.date) = :month";
11003
				$query_values = array_merge($query_values,array(':month' => $month));
11004
			} else {
11005
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
11006
				$query_values = array_merge($query_values,array(':month' => $month));
11007
			}
11008
		}
11009
		$sth = $this->db->prepare($query);
11010
		$sth->execute($query_values);
11011
		return $sth->fetchColumn();
11012
	}
11013
	
11014
	
11015
	/**
11016
	* Counts all flights that have flown over
11017
	*
11018
	* @return Integer the number of flights
11019
	*
11020
	*/
11021
	public function countOverallFlights($filters = array(),$year = '',$month = '')
11022
	{
11023
		global $globalDBdriver;
11024
		$queryi  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count FROM spotter_output";
11025
		$query_values = array();
11026
		$query = '';
11027
		if ($year != '') {
11028
			if ($globalDBdriver == 'mysql') {
11029
				$query .= " AND YEAR(spotter_output.date) = :year";
11030
				$query_values = array_merge($query_values,array(':year' => $year));
11031
			} else {
11032
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
11033
				$query_values = array_merge($query_values,array(':year' => $year));
11034
			}
11035
		}
11036
		if ($month != '') {
11037
			if ($globalDBdriver == 'mysql') {
11038
				$query .= " AND MONTH(spotter_output.date) = :month";
11039
				$query_values = array_merge($query_values,array(':month' => $month));
11040
			} else {
11041
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
11042
				$query_values = array_merge($query_values,array(':month' => $month));
11043
			}
11044
		}
11045
		if (empty($query_values)) $queryi .= $this->getFilter($filters);
11046
		else $queryi .= $this->getFilter($filters,true,true).substr($query,4);
11047
		
11048
		$sth = $this->db->prepare($queryi);
11049
		$sth->execute($query_values);
11050
		return $sth->fetchColumn();
11051
	}
11052
	
11053
	/**
11054
	* Counts all military flights that have flown over
11055
	*
11056
	* @return Integer the number of flights
11057
	*
11058
	*/
11059
	public function countOverallMilitaryFlights($filters = array(),$year = '',$month = '')
11060
	{
11061
		global $globalDBdriver;
11062
		$filter_query = $this->getFilter($filters,true,true);
11063
		$query  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count  
11064
                    FROM airlines,spotter_output".$filter_query." spotter_output.airline_icao = airlines.icao AND airlines.type = 'military'";
11065
		$query_values = array();
11066
		if ($year != '') {
11067
			if ($globalDBdriver == 'mysql') {
11068
				$query .= " AND YEAR(spotter_output.date) = :year";
11069
				$query_values = array_merge($query_values,array(':year' => $year));
11070
			} else {
11071
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
11072
				$query_values = array_merge($query_values,array(':year' => $year));
11073
			}
11074
		}
11075
		if ($month != '') {
11076
			if ($globalDBdriver == 'mysql') {
11077
				$query .= " AND MONTH(spotter_output.date) = :month";
11078
				$query_values = array_merge($query_values,array(':month' => $month));
11079
			} else {
11080
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
11081
				$query_values = array_merge($query_values,array(':month' => $month));
11082
			}
11083
		}
11084
      
11085
		$sth = $this->db->prepare($query);
11086
		$sth->execute($query_values);
11087
		return $sth->fetchColumn();
11088
	}
11089
	
11090
	
11091
	
11092
	/**
11093
	* Counts all airlines that have flown over
11094
	*
11095
	* @return Integer the number of airlines
11096
	*
11097
	*/
11098
	public function countOverallAirlines($filters = array(),$year = '',$month = '')
11099
	{
11100
		global $globalDBdriver;
11101
		$queryi  = "SELECT COUNT(DISTINCT spotter_output.airline_name) AS airline_count 
11102
							FROM spotter_output";
11103
      
11104
		$query_values = array();
11105
		$query = '';
11106
		if ($year != '') {
11107
			if ($globalDBdriver == 'mysql') {
11108
				$query .= " AND YEAR(spotter_output.date) = :year";
11109
				$query_values = array_merge($query_values,array(':year' => $year));
11110
			} else {
11111
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
11112
				$query_values = array_merge($query_values,array(':year' => $year));
11113
			}
11114
		}
11115
		if ($month != '') {
11116
			if ($globalDBdriver == 'mysql') {
11117
				$query .= " AND MONTH(spotter_output.date) = :month";
11118
				$query_values = array_merge($query_values,array(':month' => $month));
11119
			} else {
11120
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
11121
				$query_values = array_merge($query_values,array(':month' => $month));
11122
			}
11123
		}
11124
                if ($query == '') $queryi .= $this->getFilter($filters);
11125
                else $queryi .= $this->getFilter($filters,true,true).substr($query,4);
11126
11127
11128
		$sth = $this->db->prepare($queryi);
11129
		$sth->execute($query_values);
11130
		return $sth->fetchColumn();
11131
	}
11132
11133
  
11134
	/**
11135
	* Counts all hours of today
11136
	*
11137
	* @return Array the hour list
11138
	*
11139
	*/
11140
	public function countAllHoursFromToday($filters = array())
11141
	{
11142
		global $globalTimezone, $globalDBdriver;
11143
		$filter_query = $this->getFilter($filters,true,true);
11144
		if ($globalTimezone != '') {
11145
			date_default_timezone_set($globalTimezone);
11146
			$datetime = new DateTime();
11147
			$offset = $datetime->format('P');
11148
		} else $offset = '+00:00';
11149
11150
		if ($globalDBdriver == 'mysql') {
11151
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
11152
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = CURDATE()
11153
								GROUP BY hour_name 
11154
								ORDER BY hour_name ASC";
11155
		} else {
11156
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
11157
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = CAST(NOW() AS date)
11158
								GROUP BY hour_name 
11159
								ORDER BY hour_name ASC";
11160
		}
11161
		
11162
		$sth = $this->db->prepare($query);
11163
		$sth->execute(array(':offset' => $offset));
11164
      
11165
		$hour_array = array();
11166
		$temp_array = array();
11167
        
11168
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11169
		{
11170
			$temp_array['hour_name'] = $row['hour_name'];
11171
			$temp_array['hour_count'] = $row['hour_count'];
11172
			$hour_array[] = $temp_array;
11173
		}
11174
11175
		return $hour_array;
11176
	}
11177
    
11178
	/**
11179
	* Gets all the spotter information based on calculated upcoming flights
11180
	*
11181
	* @return Array the spotter information
11182
	*
11183
	*/
11184
	public function getUpcomingFlights($limit = '', $sort = '', $filters = array())
11185
	{
11186
		global $global_query, $globalDBdriver, $globalTimezone;
11187
		$filter_query = $this->getFilter($filters,true,true);
11188
		date_default_timezone_set('UTC');
11189
		$limit_query = '';
11190
		if ($limit != "")
11191
		{
11192
			$limit_array = explode(",", $limit);
11193
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
11194
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
11195
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
11196
			{
11197
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
11198
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
11199
			}
11200
		}
11201
		$currentHour = date("G");
11202
		$next3Hours = date("G", strtotime("+3 hour"));
11203
		//if the next 3 hours is already equal to/past midnight, we limit it to stay there, otherwise the query will fail
11204
		if ($currentHour >= 21 && $next3Hours >= 00)
11205
		{
11206
			$next3Hours = 24;
11207
		}
11208
		$currentDayofWeek = date("l");
11209
		if ($globalDBdriver == 'mysql') {
11210
			if ($sort != "")
11211
			{
11212
				$search_orderby_array = $this->getOrderBy();
11213
				$orderby_query = $search_orderby_array[$sort]['sql'];
11214
			} else {
11215
				$orderby_query = " ORDER BY HOUR(spotter_output.date) ASC";
11216
			}
11217
/*
11218
			$query = "SELECT spotter_output.*, count(spotter_output.ident) as ident_count
11219
			    FROM spotter_output
11220
			    WHERE DAYNAME(spotter_output.date) = '$currentDayofWeek' AND HOUR(spotter_output.date) >= '$currentHour' AND HOUR(spotter_output.date) <= '$next3Hours' AND spotter_output.ident <> '' AND format_source <> 'aprs'
11221
			    GROUP BY spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time HAVING count(spotter_output.ident) > 10 $orderby_query";
11222
*/
11223
/*			$query = "SELECT spotter_output.ident, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time, count(spotter_output.ident) as ident_count
11224
			    FROM spotter_output
11225
			    WHERE DAYNAME(spotter_output.date) = '$currentDayofWeek' AND HOUR(spotter_output.date) >= '$currentHour' AND HOUR(spotter_output.date) <= '$next3Hours' AND spotter_output.ident <> '' AND format_source <> 'aprs'
11226
			    GROUP BY spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time HAVING count(spotter_output.ident) > 10 $orderby_query";
11227
*/
11228
			$query = "SELECT spotter_output.ident, spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time, count(spotter_output.ident) as ident_count 
11229
			    FROM spotter_output".$filter_query." DAYNAME(spotter_output.date) = '$currentDayofWeek' AND HOUR(spotter_output.date) >= '$currentHour' AND HOUR(spotter_output.date) <= '$next3Hours' AND spotter_output.ident <> '' AND format_source <> 'aprs'
11230
			    GROUP BY spotter_output.ident,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time
11231
			    HAVING count(spotter_output.ident) > 5$orderby_query";
11232
11233
			$spotter_array = $this->getDataFromDB($query.$limit_query);
11234
		} else {
11235
			if ($sort != "")
11236
			{
11237
				$search_orderby_array = $this->getOrderBy();
11238
				$orderby_query = $search_orderby_array[$sort]['sql'];
11239
			} else {
11240
				$orderby_query = " ORDER BY to_char(spotter_output.date,'HH') ASC";
11241
			}
11242
			$query = "SELECT spotter_output.ident, spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time, count(spotter_output.ident) as ident_count, to_char(spotter_output.date,'HH') 
11243
			    FROM spotter_output".$filter_query." DATE_PART('dow', spotter_output.date) = DATE_PART('dow', date 'now' AT TIME ZONE :timezone) AND EXTRACT (HOUR FROM spotter_output.date AT TIME ZONE :timezone) >= '$currentHour' AND EXTRACT (HOUR FROM spotter_output.date AT TIME ZONE :timezone) <= '$next3Hours' AND ident <> '' 
11244
			    GROUP BY spotter_output.ident,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time, to_char(spotter_output.date,'HH')
11245
			    HAVING count(spotter_output.ident) > 5$orderby_query";
11246
			//echo $query;
11247
			$spotter_array = $this->getDataFromDB($query.$limit_query,array(':timezone' => $globalTimezone));
11248
			/*
11249
			$sth = $this->db->prepare($query);
11250
			$sth->execute(array(':timezone' => $globalTimezone));
11251
			return $sth->fetchAll(PDO::FETCH_ASSOC);
11252
			*/
11253
		}
11254
		return $spotter_array;
11255
	}
11256
    
11257
    
11258
     /**
11259
	* Gets the Barrie Spotter ID based on the FlightAware ID
11260
	*
11261
	* @return Integer the Barrie Spotter ID
11262
q	*
11263
	*/
11264
	public function getSpotterIDBasedOnFlightAwareID($flightaware_id)
11265
	{
11266
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
11267
11268
		$query  = "SELECT spotter_output.spotter_id
11269
								FROM spotter_output 
11270
								WHERE spotter_output.flightaware_id = '".$flightaware_id."'";
11271
        
11272
		
11273
		$sth = $this->db->prepare($query);
11274
		$sth->execute();
11275
11276
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11277
		{
11278
			return $row['spotter_id'];
11279
		}
11280
	}
11281
  
11282
 
11283
	/**
11284
	* Parses a date string
11285
	*
11286
	* @param String $dateString the date string
11287
	* @param String $timezone the timezone of a user
11288
	* @return Array the time information
11289
	*
11290
	*/
11291
	public function parseDateString($dateString, $timezone = '')
11292
	{
11293
		$time_array = array();
11294
	
11295
		if ($timezone != "")
11296
		{
11297
			date_default_timezone_set($timezone);
11298
		}
11299
		
11300
		$current_date = date("Y-m-d H:i:s");
11301
		$date = date("Y-m-d H:i:s",strtotime($dateString." UTC"));
11302
		
11303
		$diff = abs(strtotime($current_date) - strtotime($date));
11304
11305
		$time_array['years'] = floor($diff / (365*60*60*24)); 
11306
		$years = $time_array['years'];
11307
		
11308
		$time_array['months'] = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
11309
		$months = $time_array['months'];
11310
		
11311
		$time_array['days'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
11312
		$days = $time_array['days'];
11313
		$time_array['hours'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24)/ (60*60));
11314
		$hours = $time_array['hours'];
11315
		$time_array['minutes'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60)/ 60);
11316
		$minutes = $time_array['minutes'];
11317
		$time_array['seconds'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60 - $minutes*60));  
11318
		
11319
		return $time_array;	
11320
	}	
11321
	
11322
	
11323
	
11324
	
11325
	/**
11326
	* Parses the direction degrees to working
11327
	*
11328
	* @param Float $direction the direction in degrees
11329
	* @return Array the direction information
11330
	*
11331
	*/
11332
	public function parseDirection($direction = 0)
11333
	{
11334
		if ($direction == '') $direction = 0;
11335
		$direction_array = array();
11336
		$temp_array = array();
11337
11338
		if ($direction == 360 || ($direction >= 0 && $direction < 22.5))
11339
		{
11340
			$temp_array['direction_degree'] = $direction;
11341
			$temp_array['direction_shortname'] = "N";
11342
			$temp_array['direction_fullname'] = "North";
11343
		} elseif ($direction >= 22.5 && $direction < 45){
11344
			$temp_array['direction_degree'] = $direction;
11345
			$temp_array['direction_shortname'] = "NNE";
11346
			$temp_array['direction_fullname'] = "North-Northeast";
11347
		} elseif ($direction >= 45 && $direction < 67.5){
11348
			$temp_array['direction_degree'] = $direction;
11349
			$temp_array['direction_shortname'] = "NE";
11350
			$temp_array['direction_fullname'] = "Northeast";
11351
		} elseif ($direction >= 67.5 && $direction < 90){
11352
			$temp_array['direction_degree'] = $direction;
11353
			$temp_array['direction_shortname'] = "ENE";
11354
			$temp_array['direction_fullname'] = "East-Northeast";
11355
		} elseif ($direction >= 90 && $direction < 112.5){
11356
			$temp_array['direction_degree'] = $direction;
11357
			$temp_array['direction_shortname'] = "E";
11358
			$temp_array['direction_fullname'] = "East";
11359
		} elseif ($direction >= 112.5 && $direction < 135){
11360
			$temp_array['direction_degree'] = $direction;
11361
			$temp_array['direction_shortname'] = "ESE";
11362
			$temp_array['direction_fullname'] = "East-Southeast";
11363
		} elseif ($direction >= 135 && $direction < 157.5){
11364
			$temp_array['direction_degree'] = $direction;
11365
			$temp_array['direction_shortname'] = "SE";
11366
			$temp_array['direction_fullname'] = "Southeast";
11367
		} elseif ($direction >= 157.5 && $direction < 180){
11368
			$temp_array['direction_degree'] = $direction;
11369
			$temp_array['direction_shortname'] = "SSE";
11370
			$temp_array['direction_fullname'] = "South-Southeast";
11371
		} elseif ($direction >= 180 && $direction < 202.5){
11372
			$temp_array['direction_degree'] = $direction;
11373
			$temp_array['direction_shortname'] = "S";
11374
			$temp_array['direction_fullname'] = "South";
11375
		} elseif ($direction >= 202.5 && $direction < 225){
11376
			$temp_array['direction_degree'] = $direction;
11377
			$temp_array['direction_shortname'] = "SSW";
11378
			$temp_array['direction_fullname'] = "South-Southwest";
11379
		} elseif ($direction >= 225 && $direction < 247.5){
11380
			$temp_array['direction_degree'] = $direction;
11381
			$temp_array['direction_shortname'] = "SW";
11382
			$temp_array['direction_fullname'] = "Southwest";
11383
		} elseif ($direction >= 247.5 && $direction < 270){
11384
			$temp_array['direction_degree'] = $direction;
11385
			$temp_array['direction_shortname'] = "WSW";
11386
			$temp_array['direction_fullname'] = "West-Southwest";
11387
		} elseif ($direction >= 270 && $direction < 292.5){
11388
			$temp_array['direction_degree'] = $direction;
11389
			$temp_array['direction_shortname'] = "W";
11390
			$temp_array['direction_fullname'] = "West";
11391
		} elseif ($direction >= 292.5 && $direction < 315){
11392
			$temp_array['direction_degree'] = $direction;
11393
			$temp_array['direction_shortname'] = "WNW";
11394
			$temp_array['direction_fullname'] = "West-Northwest";
11395
		} elseif ($direction >= 315 && $direction < 337.5){
11396
			$temp_array['direction_degree'] = $direction;
11397
			$temp_array['direction_shortname'] = "NW";
11398
			$temp_array['direction_fullname'] = "Northwest";
11399
		} elseif ($direction >= 337.5 && $direction < 360){
11400
			$temp_array['direction_degree'] = $direction;
11401
			$temp_array['direction_shortname'] = "NNW";
11402
			$temp_array['direction_fullname'] = "North-Northwest";
11403
		}
11404
		$direction_array[] = $temp_array;
11405
		return $direction_array;
11406
	}
11407
	
11408
	
11409
	/**
11410
	* Gets the aircraft registration
11411
	*
11412
	* @param String $flightaware_id the flight aware id
11413
	* @return String the aircraft registration
11414
	*
11415
	*/
11416
	
11417
	public function getAircraftRegistration($flightaware_id)
11418
	{
11419
		global $globalFlightAwareUsername, $globalFlightAwarePassword;
11420
        
11421
		$options = array(
11422
			'trace' => true,
11423
			'exceptions' => 0,
11424
			'login' => $globalFlightAwareUsername,
11425
			'password' => $globalFlightAwarePassword,
11426
		);
11427
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
11428
		
11429
		$params = array('faFlightID' => $flightaware_id);
11430
		$result = $client->AirlineFlightInfo($params);
11431
		
11432
		if (isset($result->AirlineFlightInfoResult))
11433
		{
11434
			$registration = $result->AirlineFlightInfoResult->tailnumber;
11435
		} else return '';
11436
		
11437
		$registration = $this->convertAircraftRegistration($registration);
11438
		
11439
		return $registration;
11440
	}
11441
11442
11443
	/**
11444
	* Gets the aircraft registration from ModeS
11445
	*
11446
	* @param String $aircraft_modes the flight ModeS in hex
11447
	* @return String the aircraft registration
11448
	*
11449
	*/
11450
	public function getAircraftRegistrationBymodeS($aircraft_modes, $source_type = '')
11451
	{
11452
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
11453
		$source_type = filter_var($source_type,FILTER_SANITIZE_STRING);
11454
		if ($source_type == '' || $source_type == 'modes') {
11455
			$query  = "SELECT aircraft_modes.Registration FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes AND aircraft_modes.source_type = 'modes' ORDER BY FirstCreated DESC LIMIT 1";
11456
		} else {
11457
			$query  = "SELECT aircraft_modes.Registration FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes AND aircraft_modes.source_type = 'flarm' ORDER BY FirstCreated DESC LIMIT 1";
11458
		}
11459
		$sth = $this->db->prepare($query);
11460
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
11461
    
11462
		$row = $sth->fetch(PDO::FETCH_ASSOC);
11463
		$sth->closeCursor();
11464
		if (count($row) > 0) {
11465
		    //return $row['Registration'];
11466
		    return $row['registration'];
11467
		} elseif ($source_type == 'flarm') {
11468
			return $this->getAircraftRegistrationBymodeS($aircraft_modes);
11469
		} else return '';
11470
	
11471
	}
11472
11473
	/**
11474
	* Gets the aircraft type from ModeS
11475
	*
11476
	* @param String $aircraft_modes the flight ModeS in hex
11477
	* @return String the aircraft type
11478
	*
11479
	*/
11480
	public function getAircraftTypeBymodeS($aircraft_modes,$source_type = '')
11481
	{
11482
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
11483
		$source_type = filter_var($source_type,FILTER_SANITIZE_STRING);
11484
		if ($source_type == '' || $source_type == 'modes') {
11485
			$query  = "SELECT aircraft_modes.type_flight FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes AND aircraft_modes.source_type = 'modes' ORDER BY FirstCreated DESC LIMIT 1";
11486
		} else {
11487
			$query  = "SELECT aircraft_modes.type_flight FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes AND aircraft_modes.source_type = 'flarm' ORDER BY FirstCreated DESC LIMIT 1";
11488
		}
11489
		
11490
		$sth = $this->db->prepare($query);
11491
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
11492
    
11493
		$row = $sth->fetch(PDO::FETCH_ASSOC);
11494
		$sth->closeCursor();
11495
		if (count($row) > 0) {
11496
			if ($row['type_flight'] == null) return '';
11497
			else return $row['type_flight'];
11498
		} elseif ($source_type == 'flarm') {
11499
			return $this->getAircraftTypeBymodeS($aircraft_modes);
11500
		} else return '';
11501
	
11502
	}
11503
11504
	/**
11505
	* Gets Country from latitude/longitude
11506
	*
11507
	* @param Float $latitude latitute of the flight
11508
	* @param Float $longitude longitute of the flight
11509
	* @return String the countrie
11510
	*/
11511
	public function getCountryFromLatitudeLongitude($latitude,$longitude)
11512
	{
11513
		global $globalDBdriver, $globalDebug;
11514
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
11515
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
11516
	
11517
		$Connection = new Connection($this->db);
11518
		if (!$Connection->tableExists('countries')) return '';
11519
	
11520
		try {
11521
			/*
11522
			if ($globalDBdriver == 'mysql') {
11523
				//$query  = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(:latitude :longitude)'), ogc_geom) LIMIT 1";
11524
				$query = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(".$longitude.' '.$latitude.")'), ogc_geom) LIMIT 1";
11525
			}
11526
			*/
11527
			// This query seems to work both for MariaDB and PostgreSQL
11528
			$query = "SELECT name,iso2,iso3 FROM countries WHERE ST_Within(ST_GeomFromText('POINT(".$longitude." ".$latitude.")',4326), ogc_geom) LIMIT 1";
11529
		
11530
			$sth = $this->db->prepare($query);
11531
			//$sth->execute(array(':latitude' => $latitude,':longitude' => $longitude));
11532
			$sth->execute();
11533
    
11534
			$row = $sth->fetch(PDO::FETCH_ASSOC);
11535
			$sth->closeCursor();
11536
			if (count($row) > 0) {
11537
				return $row;
11538
			} else return '';
11539
		} catch (PDOException $e) {
11540
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
11541
			return '';
11542
		}
11543
	
11544
	}
11545
11546
	/**
11547
	* Gets Country from iso2
11548
	*
11549
	* @param String $iso2 ISO2 country code
11550
	* @return String the countrie
11551
	*/
11552
	public function getCountryFromISO2($iso2)
11553
	{
11554
		global $globalDBdriver, $globalDebug;
11555
		$iso2 = filter_var($iso2,FILTER_SANITIZE_STRING);
11556
	
11557
		$Connection = new Connection($this->db);
11558
		if (!$Connection->tableExists('countries')) return '';
11559
	
11560
		try {
11561
			$query = "SELECT name,iso2,iso3 FROM countries WHERE iso2 = :iso2 LIMIT 1";
11562
		
11563
			$sth = $this->db->prepare($query);
11564
			$sth->execute(array(':iso2' => $iso2));
11565
    
11566
			$row = $sth->fetch(PDO::FETCH_ASSOC);
11567
			$sth->closeCursor();
11568
			if (count($row) > 0) {
11569
				return $row;
11570
			} else return '';
11571
		} catch (PDOException $e) {
11572
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
11573
			return '';
11574
		}
11575
	
11576
	}
11577
11578
	/**
11579
	* converts the registration code using the country prefix
11580
	*
11581
	* @param String $registration the aircraft registration
11582
	* @return String the aircraft registration
11583
	*
11584
	*/
11585
	public function convertAircraftRegistration($registration)
11586
	{
11587
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11588
		$registration_prefix = '';
11589
		$registration_1 = substr($registration, 0, 1);
11590
		$registration_2 = substr($registration, 0, 2);
11591
11592
		//first get the prefix based on two characters
11593
		$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_2";
11594
      
11595
		
11596
		$sth = $this->db->prepare($query);
11597
		$sth->execute(array(':registration_2' => $registration_2));
11598
        
11599
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11600
		{
11601
			$registration_prefix = $row['registration_prefix'];
11602
		}
11603
11604
		//if we didn't find a two chracter prefix lets just search the one with one character
11605
		if ($registration_prefix == '')
11606
		{
11607
			$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_1";
11608
			$sth = $this->db->prepare($query);
11609
			$sth->execute(array(':registration_1' => $registration_1));
11610
	        
11611
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11612
			{
11613
				$registration_prefix = $row['registration_prefix'];
11614
			}
11615
		}
11616
11617
		//determine which characters are being used and convert the registration code appropiately
11618
		if (strlen($registration_prefix) == 1)
11619
		{
11620
			if (0 === strpos($registration, 'N')) {
11621
				$registration = preg_replace("/^(.{1})/", "$1", $registration);
11622
			} else {
11623
				$registration = preg_replace("/^(.{1})/", "$1-", $registration);
11624
			}
11625
		} else if(strlen($registration_prefix) == 2){
11626
			if (0 === strpos($registration, 'N')) {
11627
				$registration = preg_replace("/^(.{2})/", "$1", $registration);
11628
			} else {
11629
				$registration = preg_replace("/^(.{2})/", "$1-", $registration);
11630
			}
11631
		}
11632
		return $registration;
11633
	}
11634
11635
	/**
11636
	* Country from the registration code
11637
	*
11638
	* @param String $registration the aircraft registration
11639
	* @return String the country
11640
	*
11641
	*/
11642
	public function countryFromAircraftRegistration($registration)
11643
	{
11644
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11645
		
11646
		$registration_prefix = '';
11647
		$registration_test = explode('-',$registration);
11648
		$country = '';
11649
		if ($registration_test[0] != $registration) {
11650
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11651
	      
11652
			$sth = $this->db->prepare($query);
11653
			$sth->execute(array(':registration_1' => $registration_test[0]));
11654
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11655
			{
11656
				//$registration_prefix = $row['registration_prefix'];
11657
				$country = $row['country'];
11658
			}
11659
		} else {
11660
    			$registration_1 = substr($registration, 0, 1);
11661
		        $registration_2 = substr($registration, 0, 2);
11662
11663
			$country = '';
11664
			//first get the prefix based on two characters
11665
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
11666
      
11667
			
11668
			$sth = $this->db->prepare($query);
11669
			$sth->execute(array(':registration_2' => $registration_2));
11670
        
11671
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11672
			{
11673
				$registration_prefix = $row['registration_prefix'];
11674
				$country = $row['country'];
11675
			}
11676
11677
			//if we didn't find a two chracter prefix lets just search the one with one character
11678
			if ($registration_prefix == "")
11679
			{
11680
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11681
	      
11682
				$sth = $this->db->prepare($query);
11683
				$sth->execute(array(':registration_1' => $registration_1));
11684
	        
11685
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
11686
				{
11687
					//$registration_prefix = $row['registration_prefix'];
11688
					$country = $row['country'];
11689
				}
11690
			}
11691
		}
11692
    
11693
		return $country;
11694
	}
11695
11696
	/**
11697
	* Registration prefix from the registration code
11698
	*
11699
	* @param String $registration the aircraft registration
11700
	* @return String the registration prefix
11701
	*
11702
	*/
11703
	public function registrationPrefixFromAircraftRegistration($registration)
11704
	{
11705
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11706
		
11707
		$registration_prefix = '';
11708
		$registration_test = explode('-',$registration);
11709
		//$country = '';
11710
		if ($registration_test[0] != $registration) {
11711
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11712
	      
11713
			$sth = $this->db->prepare($query);
11714
			$sth->execute(array(':registration_1' => $registration_test[0]));
11715
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11716
			{
11717
				$registration_prefix = $row['registration_prefix'];
11718
				//$country = $row['country'];
11719
			}
11720
		} else {
11721
    			$registration_1 = substr($registration, 0, 1);
11722
		        $registration_2 = substr($registration, 0, 2);
11723
11724
			//first get the prefix based on two characters
11725
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
11726
      
11727
			
11728
			$sth = $this->db->prepare($query);
11729
			$sth->execute(array(':registration_2' => $registration_2));
11730
        
11731
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11732
			{
11733
				$registration_prefix = $row['registration_prefix'];
11734
				//$country = $row['country'];
11735
			}
11736
11737
			//if we didn't find a two chracter prefix lets just search the one with one character
11738
			if ($registration_prefix == "")
11739
			{
11740
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11741
	      
11742
				$sth = $this->db->prepare($query);
11743
				$sth->execute(array(':registration_1' => $registration_1));
11744
	        
11745
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
11746
				{
11747
					$registration_prefix = $row['registration_prefix'];
11748
					//$country = $row['country'];
11749
				}
11750
			}
11751
		}
11752
    
11753
		return $registration_prefix;
11754
	}
11755
11756
11757
	/**
11758
	* Country from the registration code
11759
	*
11760
	* @param String $registration the aircraft registration
11761
	* @return String the country
11762
	*
11763
	*/
11764
	public function countryFromAircraftRegistrationCode($registration)
11765
	{
11766
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11767
		
11768
		$country = '';
11769
		$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration LIMIT 1";
11770
		$sth = $this->db->prepare($query);
11771
		$sth->execute(array(':registration' => $registration));
11772
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11773
		{
11774
			$country = $row['country'];
11775
		}
11776
		return $country;
11777
	}
11778
	
11779
	/**
11780
	* Set a new highlight value for a flight
11781
	*
11782
	* @param String $flightaware_id flightaware_id from spotter_output table
11783
	* @param String $highlight New highlight value
11784
	*/
11785
	public function setHighlightFlight($flightaware_id,$highlight) {
11786
		
11787
		$query  = "UPDATE spotter_output SET highlight = :highlight WHERE flightaware_id = :flightaware_id";
11788
		$sth = $this->db->prepare($query);
11789
		$sth->execute(array(':flightaware_id' => $flightaware_id, ':highlight' => $highlight));
11790
	}
11791
11792
	/**
11793
	* Set a new highlight value for a flight by Registration
11794
	*
11795
	* @param String $registration Registration of the aircraft
11796
	* @param String $date Date of spotted aircraft
11797
	* @param String $highlight New highlight value
11798
	*/
11799
	public function setHighlightFlightByRegistration($registration,$highlight, $date = '') {
11800
		if ($date == '') {
11801
			$query  = "UPDATE spotter_output SET highlight = :highlight WHERE spotter_id IN (SELECT MAX(spotter_id) FROM spotter_output WHERE registration = :registration)";
11802
			$query_values = array(':registration' => $registration, ':highlight' => $highlight);
11803
		} else {
11804
			$query  = "UPDATE spotter_output SET highlight = :highlight WHERE registration = :registration AND date(date) = :date";
11805
			$query_values = array(':registration' => $registration, ':highlight' => $highlight,':date' => $date);
11806
		}
11807
		$sth = $this->db->prepare($query);
11808
		$sth->execute($query_values);
11809
	}
11810
	
11811
	/**
11812
	* Gets the short url from bit.ly
11813
	*
11814
	* @param String $url the full url
11815
	* @return String the bit.ly url
11816
	*
11817
	*/
11818
	public function getBitlyURL($url)
11819
	{
11820
		global $globalBitlyAccessToken;
11821
		
11822
		if ($globalBitlyAccessToken == '') return $url;
11823
        
11824
		$google_url = 'https://api-ssl.bitly.com/v3/shorten?access_token='.$globalBitlyAccessToken.'&longUrl='.$url;
11825
		
11826
		$ch = curl_init();
11827
		curl_setopt($ch, CURLOPT_HEADER, 0);
11828
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
11829
		curl_setopt($ch, CURLOPT_URL, $google_url);
11830
		$bitly_data = curl_exec($ch);
11831
		curl_close($ch);
11832
		
11833
		$bitly_data = json_decode($bitly_data);
11834
		$bitly_url = '';
11835
		if ($bitly_data->status_txt = "OK"){
11836
			$bitly_url = $bitly_data->data->url;
11837
		}
11838
11839
		return $bitly_url;
11840
	}
11841
11842
11843
	public function getOrderBy()
11844
	{
11845
		$orderby = array("aircraft_asc" => array("key" => "aircraft_asc", "value" => "Aircraft Type - ASC", "sql" => "ORDER BY spotter_output.aircraft_icao ASC"), "aircraft_desc" => array("key" => "aircraft_desc", "value" => "Aircraft Type - DESC", "sql" => "ORDER BY spotter_output.aircraft_icao DESC"),"manufacturer_asc" => array("key" => "manufacturer_asc", "value" => "Aircraft Manufacturer - ASC", "sql" => "ORDER BY spotter_output.aircraft_manufacturer ASC"), "manufacturer_desc" => array("key" => "manufacturer_desc", "value" => "Aircraft Manufacturer - DESC", "sql" => "ORDER BY spotter_output.aircraft_manufacturer DESC"),"airline_name_asc" => array("key" => "airline_name_asc", "value" => "Airline Name - ASC", "sql" => "ORDER BY spotter_output.airline_name ASC"), "airline_name_desc" => array("key" => "airline_name_desc", "value" => "Airline Name - DESC", "sql" => "ORDER BY spotter_output.airline_name DESC"), "ident_asc" => array("key" => "ident_asc", "value" => "Ident - ASC", "sql" => "ORDER BY spotter_output.ident ASC"), "ident_desc" => array("key" => "ident_desc", "value" => "Ident - DESC", "sql" => "ORDER BY spotter_output.ident DESC"), "airport_departure_asc" => array("key" => "airport_departure_asc", "value" => "Departure Airport - ASC", "sql" => "ORDER BY spotter_output.departure_airport_city ASC"), "airport_departure_desc" => array("key" => "airport_departure_desc", "value" => "Departure Airport - DESC", "sql" => "ORDER BY spotter_output.departure_airport_city DESC"), "airport_arrival_asc" => array("key" => "airport_arrival_asc", "value" => "Arrival Airport - ASC", "sql" => "ORDER BY spotter_output.arrival_airport_city ASC"), "airport_arrival_desc" => array("key" => "airport_arrival_desc", "value" => "Arrival Airport - DESC", "sql" => "ORDER BY spotter_output.arrival_airport_city DESC"), "date_asc" => array("key" => "date_asc", "value" => "Date - ASC", "sql" => "ORDER BY spotter_output.date ASC"), "date_desc" => array("key" => "date_desc", "value" => "Date - DESC", "sql" => "ORDER BY spotter_output.date DESC"),"distance_asc" => array("key" => "distance_asc","value" => "Distance - ASC","sql" => "ORDER BY distance ASC"),"distance_desc" => array("key" => "distance_desc","value" => "Distance - DESC","sql" => "ORDER BY distance DESC"));
11846
		
11847
		return $orderby;
11848
		
11849
	}
11850
    
11851
/*
11852
	public function importFromFlightAware()
11853
	{
11854
		global $globalFlightAwareUsername, $globalFlightAwarePassword, $globalLatitudeMax, $globalLatitudeMin, $globalLongitudeMax, $globalLongitudeMin, $globalAirportIgnore;
11855
		$Spotter = new Spotter($this->db);
11856
		$SpotterLive = new SpotterLive($this->db);
11857
		$options = array(
11858
		            'trace' => true,
11859
		            'exceptions' => 0,
11860
		            'login' => $globalFlightAwareUsername,
11861
		            'password' => $globalFlightAwarePassword,
11862
		);
11863
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
11864
		$params = array('query' => '{range lat '.$globalLatitudeMin.' '.$globalLatitudeMax.'} {range lon '.$globalLongitudeMax.' '.$globalLongitudeMin.'} {true inAir}', 'howMany' => '15', 'offset' => '0');
11865
		$result = $client->SearchBirdseyeInFlight($params);
11866
		$dataFound = false;
11867
		$ignoreImport = false;
11868
		if (isset($result->SearchBirdseyeInFlightResult))
11869
		{
11870
			if (is_array($result->SearchBirdseyeInFlightResult->aircraft))
11871
			{
11872
				foreach($result->SearchBirdseyeInFlightResult->aircraft as $aircraft)
11873
				{
11874
					if (!strstr($aircraft->origin, 'L ') && !strstr($aircraft->destination, 'L '))
11875
					{
11876
						foreach($globalAirportIgnore as $airportIgnore)
11877
						{
11878
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
11879
							{
11880
								$ignoreImport = true; 
11881
							}
11882
						}
11883
						if ($ignoreImport == false)
11884
						{
11885
							$flightaware_id = $aircraft->faFlightID;
11886
							$ident = $aircraft->ident;
11887
							$aircraft_type = $aircraft->type;
11888
							$departure_airport = $aircraft->origin;
11889
							$arrival_airport = $aircraft->destination;
11890
							$latitude = $aircraft->latitude;
11891
							$longitude = $aircraft->longitude;
11892
							$waypoints = $aircraft->waypoints;
11893
							$altitude = $aircraft->altitude;
11894
							$heading = $aircraft->heading;
11895
							$groundspeed = $aircraft->groundspeed;
11896
							$dataFound = true;
11897
							//gets the callsign from the last hour
11898
							$last_hour_ident = $this->getIdentFromLastHour($ident);
11899
							//change the departure/arrival airport to NA if its not available
11900
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
11901
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
11902
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
11903
							if($last_hour_ident == "")
11904
							{
11905
								//adds the spotter data for the archive
11906
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11907
							}
11908
11909
							//adds the spotter LIVE data
11910
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11911
						}
11912
					}
11913
					$ignoreImport = false;
11914
				}
11915
			} else {
11916
				if (!strstr($result->SearchBirdseyeInFlightResult->aircraft->origin, 'L ') && !strstr($result->SearchBirdseyeInFlightResult->aircraft->destination, 'L '))
11917
				{
11918
					foreach($globalAirportIgnore as $airportIgnore)
11919
					{
11920
						foreach($globalAirportIgnore as $airportIgnore)
11921
						{
11922
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
11923
							{
11924
								$ignoreImport = true; 
11925
							}
11926
						}
11927
						if ($ignoreImport == false)
11928
						{
11929
							$flightaware_id = $result->SearchBirdseyeInFlightResult->aircraft->faFlightID;
11930
							$ident = $result->SearchBirdseyeInFlightResult->aircraft->ident;
11931
							$aircraft_type = $result->SearchBirdseyeInFlightResult->aircraft->type;
11932
							$departure_airport = $result->SearchBirdseyeInFlightResult->aircraft->origin;
11933
							$arrival_airport = $result->SearchBirdseyeInFlightResult->aircraft->destination;
11934
							$latitude = $result->SearchBirdseyeInFlightResult->aircraft->latitude;
11935
							$longitude = $result->SearchBirdseyeInFlightResult->aircraft->longitude;
11936
							$waypoints = $result->SearchBirdseyeInFlightResult->aircraft->waypoints;
11937
							$altitude = $result->SearchBirdseyeInFlightResult->aircraft->altitude;
11938
							$heading = $result->SearchBirdseyeInFlightResult->aircraft->heading;
11939
							$groundspeed = $result->SearchBirdseyeInFlightResult->aircraft->groundspeed;
11940
							$dataFound = true;
11941
							//gets the callsign from the last hour
11942
							$last_hour_ident = $this->getIdentFromLastHour($ident);
11943
							//change the departure/arrival airport to NA if its not available
11944
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
11945
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
11946
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
11947
							if($last_hour_ident == "")
11948
							{
11949
								//adds the spotter data for the archive
11950
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11951
							}
11952
							//adds the spotter LIVE data
11953
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11954
						}
11955
						$ignoreImport = false;
11956
					}
11957
				}
11958
			}
11959
		} 
11960
	}
11961
*/
11962
11963
	// Update flights data when new data in DB
11964
	public function updateFieldsFromOtherTables()
11965
	{
11966
		global $globalDebug, $globalDBdriver;
11967
		$Image = new Image($this->db);
11968
		
11969
11970
		// routes
11971
		if ($globalDebug) print "Routes...\n";
11972
		if ($globalDBdriver == 'mysql') {
11973
			$query = "SELECT spotter_output.spotter_id, routes.FromAirport_ICAO, routes.ToAirport_ICAO FROM spotter_output, routes WHERE spotter_output.ident = routes.CallSign AND ( spotter_output.departure_airport_icao != routes.FromAirport_ICAO OR spotter_output.arrival_airport_icao != routes.ToAirport_ICAO) AND routes.FromAirport_ICAO != '' AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 15 DAY)";
11974
		} else {
11975
			$query = "SELECT spotter_output.spotter_id, routes.FromAirport_ICAO, routes.ToAirport_ICAO FROM spotter_output, routes WHERE spotter_output.ident = routes.CallSign AND ( spotter_output.departure_airport_icao != routes.FromAirport_ICAO OR spotter_output.arrival_airport_icao != routes.ToAirport_ICAO) AND routes.FromAirport_ICAO != '' AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INTERVAL '15 DAYS'";
11976
		}
11977
		$sth = $this->db->prepare($query);
11978
		$sth->execute();
11979
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11980
		{
11981
			$departure_airport_array = $this->getAllAirportInfo($row['fromairport_icao']);
11982
			$arrival_airport_array = $this->getAllAirportInfo($row['toairport_icao']);
11983
			if (count($departure_airport_array) > 0 && count($arrival_airport_array) > 0) {
11984
				$update_query="UPDATE spotter_output SET departure_airport_icao = :fromicao, arrival_airport_icao = :toicao, departure_airport_name = :departure_airport_name, departure_airport_city = :departure_airport_city, departure_airport_country = :departure_airport_country, arrival_airport_name = :arrival_airport_name, arrival_airport_city = :arrival_airport_city, arrival_airport_country = :arrival_airport_country WHERE spotter_id = :spotter_id";
11985
				$sthu = $this->db->prepare($update_query);
11986
				$sthu->execute(array(':fromicao' => $row['fromairport_icao'],':toicao' => $row['toairport_icao'],':spotter_id' => $row['spotter_id'],':departure_airport_name' => $departure_airport_array[0]['name'],':departure_airport_city' => $departure_airport_array[0]['city'],':departure_airport_country' => $departure_airport_array[0]['country'],':arrival_airport_name' => $arrival_airport_array[0]['name'],':arrival_airport_city' => $arrival_airport_array[0]['city'],':arrival_airport_country' => $arrival_airport_array[0]['country']));
11987
			}
11988
		}
11989
		
11990
		if ($globalDebug) print "Airlines...\n";
11991
		//airlines
11992
		if ($globalDBdriver == 'mysql') {
11993
			$query  = "SELECT spotter_output.spotter_id, spotter_output.ident FROM spotter_output WHERE (spotter_output.airline_name = '' OR spotter_output.airline_name = 'Not Available') AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 15 DAY)";
11994
		} elseif ($globalDBdriver == 'pgsql') {
11995
			$query  = "SELECT spotter_output.spotter_id, spotter_output.ident FROM spotter_output WHERE (spotter_output.airline_name = '' OR spotter_output.airline_name = 'Not Available') AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INTERVAL '15 DAYS'";
11996
		}
11997
		$sth = $this->db->prepare($query);
11998
		$sth->execute();
11999
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
12000
		{
12001
			if (is_numeric(substr($row['ident'], -1, 1)))
12002
			{
12003
				$fromsource = NULL;
12004
				if (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
12005
				elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
12006
				elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
12007
				elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
12008
				$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
12009
				if (isset($airline_array[0]['name'])) {
12010
					$update_query  = "UPDATE spotter_output SET spotter_output.airline_name = :airline_name, spotter_output.airline_icao = :airline_icao, spotter_output.airline_country = :airline_country, spotter_output.airline_type = :airline_type WHERE spotter_output.spotter_id = :spotter_id";
12011
					$sthu = $this->db->prepare($update_query);
12012
					$sthu->execute(array(':airline_name' => $airline_array[0]['name'],':airline_icao' => $airline_array[0]['icao'], ':airline_country' => $airline_array[0]['country'], ':airline_type' => $airline_array[0]['type'], ':spotter_id' => $row['spotter_id']));
12013
				}
12014
			}
12015
		}
12016
12017
		if ($globalDebug) print "Remove Duplicate in aircraft_modes...\n";
12018
		//duplicate modes
12019
		$query = "DELETE aircraft_modes FROM aircraft_modes LEFT OUTER JOIN (SELECT max(`AircraftID`) as `AircraftID`,`ModeS` FROM `aircraft_modes` group by ModeS) as KeepRows ON aircraft_modes.AircraftID = KeepRows.AircraftID WHERE KeepRows.AircraftID IS NULL";
12020
		$sth = $this->db->prepare($query);
12021
		$sth->execute();
12022
		
12023
		if ($globalDebug) print "Aircraft...\n";
12024
		//aircraft
12025
		if ($globalDBdriver == 'mysql') {
12026
			$query  = "SELECT spotter_output.spotter_id, spotter_output.aircraft_icao, spotter_output.registration FROM spotter_output WHERE (spotter_output.aircraft_name = '' OR spotter_output.aircraft_name = 'Not Available') AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY)";
12027
		} elseif ($globalDBdriver == 'pgsql') {
12028
			$query  = "SELECT spotter_output.spotter_id, spotter_output.aircraft_icao, spotter_output.registration FROM spotter_output WHERE (spotter_output.aircraft_name = '' OR spotter_output.aircraft_name = 'Not Available') AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INERVAL '15 DAYS'";
12029
		}
12030
		$sth = $this->db->prepare($query);
12031
		$sth->execute();
12032
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
12033
		{
12034
			if ($row['aircraft_icao'] != '') {
12035
				$aircraft_name = $this->getAllAircraftInfo($row['aircraft_icao']);
12036
				if ($row['registration'] != ""){
12037
					$image_array = $Image->getSpotterImage($row['registration']);
12038
					if (!isset($image_array[0]['registration'])) {
12039
						$Image->addSpotterImage($row['registration']);
12040
					}
12041
				}
12042
				if (count($aircraft_name) > 0) {
12043
					$update_query  = "UPDATE spotter_output SET spotter_output.aircraft_name = :aircraft_name, spotter_output.aircraft_manufacturer = :aircraft_manufacturer WHERE spotter_output.spotter_id = :spotter_id";
12044
					$sthu = $this->db->prepare($update_query);
12045
					$sthu->execute(array(':aircraft_name' => $aircraft_name[0]['type'], ':aircraft_manufacturer' => $aircraft_name[0]['manufacturer'], ':spotter_id' => $row['spotter_id']));
12046
				}
12047
			}
12048
		}
12049
	}	
12050
12051
	// Update arrival airports for data already in DB
12052
	public function updateArrivalAirports()
12053
	{
12054
		global $globalDebug, $globalDBdriver, $globalClosestMinDist;
12055
		$query = "SELECT spotter_output.spotter_id, spotter_output.last_latitude, spotter_output.last_longitude, spotter_output.last_altitude, spotter_output.arrival_airport_icao, spotter_output.real_arrival_airport_icao FROM spotter_output";
12056
		$sth = $this->db->prepare($query);
12057
		$sth->execute();
12058
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
12059
		{
12060
			if ($row['last_latitude'] != '' && $row['last_longitude'] != '') {
12061
				$closestAirports = $this->closestAirports($row['last_latitude'],$row['last_longitude'],$globalClosestMinDist);
12062
				$airport_icao = '';
12063
				 if (isset($closestAirports[0])) {
12064
					if ($row['arrival_airport_icao'] == $closestAirports[0]['icao']) {
12065
						$airport_icao = $closestAirports[0]['icao'];
12066
						if ($globalDebug) echo "\o/ 1st ---++ Find arrival airport. airport_icao : ".$airport_icao."\n";
12067
					} elseif (count($closestAirports > 1) && $row['arrival_airport_icao'] != '' && $row['arrival_airport_icao'] != 'NA') {
12068
						foreach ($closestAirports as $airport) {
12069
							if ($row['arrival_airport_icao'] == $airport['icao']) {
12070
								$airport_icao = $airport['icao'];
12071
								if ($globalDebug) echo "\o/ try --++ Find arrival airport. airport_icao : ".$airport_icao."\n";
12072
								break;
12073
							}
12074
						}
12075
					} elseif ($row['last_altitude'] == 0 || ($row['last_altitude'] != '' && ($closestAirports[0]['altitude'] <= $row['last_altitude']*100+1000 && $row['last_altitude']*100 < $closestAirports[0]['altitude']+5000))) {
12076
						$airport_icao = $closestAirports[0]['icao'];
12077
						if ($globalDebug) echo "\o/ NP --++ Find arrival airport. Airport ICAO : ".$airport_icao." !  Latitude : ".$row['last_latitude'].' - Longitude : '.$row['last_longitude'].' - MinDist : '.$globalClosestMinDist." - Airport altitude : ".$closestAirports[0]['altitude'].' - flight altitude : '.($row['last_altitude']*100)."\n";
12078
					} else {
12079
						if ($globalDebug) echo "----- Can't find arrival airport. Latitude : ".$row['last_latitude'].' - Longitude : '.$row['last_longitude'].' - MinDist : '.$globalClosestMinDist." - Airport altitude : ".$closestAirports[0]['altitude'].' - flight altitude : '.($row['last_altitude']*100)."\n";
12080
					}
12081
				} else {
12082
					if ($globalDebug) echo "----- No Airport near last coord. Latitude : ".$row['last_latitude'].' - Longitude : '.$row['last_longitude'].' - MinDist : '.$globalClosestMinDist."\n";
12083
				}
12084
				if ($row['real_arrival_airport_icao'] != $airport_icao) {
12085
					if ($globalDebug) echo "Updating airport to ".$airport_icao."...\n";
12086
					$update_query="UPDATE spotter_output SET real_arrival_airport_icao = :airport_icao WHERE spotter_id = :spotter_id";
12087
					$sthu = $this->db->prepare($update_query);
12088
					$sthu->execute(array(':airport_icao' => $airport_icao,':spotter_id' => $row['spotter_id']));
12089
				}
12090
			}
12091
		}
12092
	}
12093
	
12094
	public function closestAirports($origLat,$origLon,$dist = 10) {
12095
		global $globalDBdriver;
12096
		$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
12097
/*
12098
		$query="SELECT name, icao, latitude, longitude, altitude, 3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - abs(latitude))*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(abs(latitude)*pi()/180)*POWER(SIN(($origLon-longitude)*pi()/180/2),2))) as distance 
12099
                      FROM airport WHERE longitude between ($origLon-$dist/abs(cos(radians($origLat))*69)) and ($origLon+$dist/abs(cos(radians($origLat))*69)) and latitude between ($origLat-($dist/69)) and ($origLat+($dist/69)) 
12100
                      having distance < $dist ORDER BY distance limit 100;";
12101
*/
12102
		if ($globalDBdriver == 'mysql') {
12103
			$query="SELECT name, icao, latitude, longitude, altitude, 3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - latitude)*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(latitude*pi()/180)*POWER(SIN(($origLon-longitude)*pi()/180/2),2))) as distance 
12104
	                      FROM airport WHERE longitude between ($origLon-$dist/cos(radians($origLat))*69) and ($origLon+$dist/cos(radians($origLat)*69)) and latitude between ($origLat-($dist/69)) and ($origLat+($dist/69)) 
12105
	                      AND (3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - latitude)*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(latitude*pi()/180)*POWER(SIN(($origLon-longitude)*pi()/180/2),2)))) < $dist ORDER BY distance limit 100;";
12106
                } else {
12107
			$query="SELECT name, icao, latitude, longitude, altitude, 3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - CAST(latitude as double precision))*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(CAST(latitude as double precision)*pi()/180)*POWER(SIN(($origLon-CAST(longitude as double precision))*pi()/180/2),2))) as distance 
12108
	                      FROM airport WHERE CAST(longitude as double precision) between ($origLon-$dist/cos(radians($origLat))*69) and ($origLon+$dist/cos(radians($origLat))*69) and CAST(latitude as double precision) between ($origLat-($dist/69)) and ($origLat+($dist/69)) 
12109
	                      AND (3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - CAST(latitude as double precision))*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(CAST(latitude as double precision)*pi()/180)*POWER(SIN(($origLon-CAST(longitude as double precision))*pi()/180/2),2)))) < $dist ORDER BY distance limit 100;";
12110
    		}
12111
		$sth = $this->db->prepare($query);
12112
		$sth->execute();
12113
		return $sth->fetchAll(PDO::FETCH_ASSOC);
12114
	}
12115
}
12116
/*
12117
$Spotter = new Spotter();
12118
print_r($Spotter->closestAirports('-19.9813','-47.8286',10));
12119
*/
12120
/*
12121
$Spotter = new Spotter();
12122
$da = $Spotter->countAllDetectedArrivalAirports(true,0,'',true);
12123
$aa = $Spotter->countAllArrivalAirports(true,0,'',true);
12124
print_r($da);
12125
print_r($aa);
12126
print_r(array_merge($da,$aa));
12127
*/
12128
?>