Completed
Push — master ( 404734...4c6fa5 )
by Yannick
09:05
created

Spotter::getFlightDurationByOwner()   D

Complexity

Conditions 9
Paths 81

Size

Total Lines 44
Code Lines 35

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 9
eloc 35
nc 81
nop 5
dl 0
loc 44
rs 4.909
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 (is_array($globalFilter)) $filter = array_merge($filter,$globalFilter);
73
		$filter_query_join = '';
74
		$filter_query_where = '';
75
		foreach($filters as $flt) {
76
			if (isset($flt['airlines']) && !empty($flt['airlines'])) {
77
				if ($flt['airlines'][0] != '') {
78
					if (isset($flt['source'])) {
79
						$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";
80
					} else {
81
						$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";
82
					}
83
				}
84
			}
85
			if (isset($flt['pilots_id']) && !empty($flt['pilots_id'])) {
86
				if (isset($flt['source'])) {
87
					$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";
88
				} else {
89
					$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";
90
				}
91
			}
92
			if ((isset($flt['airlines']) && empty($flt['airlines']) && isset($flt['pilots_id']) && empty($flt['pilots_id'])) || (!isset($flt['airlines']) && !isset($flt['pilots_id']))) {
93
				if (isset($flt['source'])) {
94
					$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";
95
				}
96
			}
97
		}
98
		if (isset($filter['airlines']) && !empty($filter['airlines'])) {
99
			if ($filter['airlines'][0] != '') {
100
					$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";
101
			}
102
		}
103
		if (isset($filter['airlinestype']) && !empty($filter['airlinestype'])) {
104
			$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 ";
105
		}
106
		if (isset($filter['alliance']) && !empty($filter['alliance'])) {
107
			$filter_query_join .= " INNER JOIN (SELECT icao FROM airlines WHERE alliance = '".$filter['alliance']."') sal ON sal.icao = spotter_output.airline_icao ";
108
		}
109
		if (isset($filter['pilots_id']) && !empty($filter['pilots_id'])) {
110
				$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";
111
			}
112
		if (isset($filter['source']) && !empty($filter['source'])) {
113
			$filter_query_where .= " AND format_source IN ('".implode("','",$filter['source'])."')";
114
		}
115
		if (isset($filter['ident']) && !empty($filter['ident'])) {
116
			$filter_query_where .= " AND ident = '".$filter['ident']."'";
117
		}
118
		if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
119
			$filter_query_where .= " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
120
		}
121
		if (isset($filter['year']) && $filter['year'] != '') {
122
			if ($globalDBdriver == 'mysql') {
123
				$filter_query_where .= " AND YEAR(spotter_output.date) = '".$filter['year']."'";
124
			} else {
125
				$filter_query_where .= " AND EXTRACT(YEAR FROM spotter_output.date) = '".$filter['year']."'";
126
			}
127
		}
128
		if (isset($filter['month']) && $filter['month'] != '') {
129
			if ($globalDBdriver == 'mysql') {
130
				$filter_query_where .= " AND MONTH(spotter_output.date) = '".$filter['month']."'";
131
			} else {
132
				$filter_query_where .= " AND EXTRACT(MONTH FROM spotter_output.date) = '".$filter['month']."'";
133
			}
134
		}
135
		if (isset($filter['day']) && $filter['day'] != '') {
136
			if ($globalDBdriver == 'mysql') {
137
				$filter_query_where .= " AND DAY(spotter_output.date) = '".$filter['day']."'";
138
			} else {
139
				$filter_query_where .= " AND EXTRACT(DAY FROM spotter_output.date) = '".$filter['day']."'";
140
			}
141
		}
142
		if ($filter_query_where == '' && $where) $filter_query_where = ' WHERE';
143
		elseif ($filter_query_where != '' && $and) $filter_query_where .= ' AND';
144
		if ($filter_query_where != '') {
145
			$filter_query_where = preg_replace('/^ AND/',' WHERE',$filter_query_where);
146
		}
147
		$filter_query = $filter_query_join.$filter_query_where;
148
		return $filter_query;
149
	}
150
151
	/**
152
	* Executes the SQL statements to get the spotter information
153
	*
154
	* @param String $query the SQL query
155
	* @param Array $params parameter of the query
156
	* @param String $limitQuery the limit query
157
	* @return Array the spotter information
158
	*
159
	*/
160
	public function getDataFromDB($query, $params = array(), $limitQuery = '',$schedules = false)
161
	{
162
		global $globalSquawkCountry, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalAirlinesSource, $globalVAM;
163
		$Image = new Image($this->db);
164
		$Schedule = new Schedule($this->db);
165
		$ACARS = new ACARS($this->db);
166
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
167
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
168
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
169
		if (!isset($globalVAM)) $globalVAM = FALSE;
170
		date_default_timezone_set('UTC');
171
		
172
		if (!is_string($query))
173
		{
174
			return false;
175
		}
176
		
177
		if ($limitQuery != "")
178
		{
179
			if (!is_string($limitQuery))
180
			{
181
				return false;
182
			}
183
		}
184
185
		
186
		try {
187
			$sth = $this->db->prepare($query.$limitQuery);
188
			$sth->execute($params);
189
		} catch (PDOException $e) {
190
			printf("Invalid query : %s\nWhole query: %s\n",$e->getMessage(), $query.$limitQuery);
191
			exit();
192
		}
193
		
194
	//	$num_rows = count($sth->fetchAll());
195
		$num_rows = 0;
196
197
		$spotter_array = array();
198
		
199
200
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
201
		{
202
			$num_rows++;
203
			$temp_array = array();
204
			if (isset($row['spotter_live_id'])) {
205
				//$temp_array['spotter_id'] = $row['spotter_live_id'];
206
				$temp_array['spotter_id'] = $this->getSpotterIDBasedOnFlightAwareID($row['flightaware_id']);
207
			} elseif (isset($row['spotter_archive_id'])) {
208
				$temp_array['spotter_id'] = $row['spotter_archive_id'];
209
			} elseif (isset($row['spotter_archive_output_id'])) {
210
				$temp_array['spotter_id'] = $row['spotter_archive_output_id'];
211
			} elseif (isset($row['spotter_id'])) {
212
				$temp_array['spotter_id'] = $row['spotter_id'];
213
			} else {
214
				$temp_array['spotter_id'] = '';
215
			}
216
			if (isset($row['flightaware_id'])) $temp_array['flightaware_id'] = $row['flightaware_id'];
217
			if (isset($row['modes'])) $temp_array['modes'] = $row['modes'];
218
			$temp_array['ident'] = $row['ident'];
219
			if (isset($row['registration']) && $row['registration'] != '') {
220
				$temp_array['registration'] = $row['registration'];
221
			} elseif (isset($temp_array['modes'])) {
222
				$temp_array['registration'] = $this->getAircraftRegistrationBymodeS($temp_array['modes']);
223
			} else $temp_array['registration'] = '';
224
			if (isset($row['aircraft_icao'])) $temp_array['aircraft_type'] = $row['aircraft_icao'];
225
			
226
			$temp_array['departure_airport'] = $row['departure_airport_icao'];
227
			$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
228
			if (isset($row['real_arrival_airport_icao']) && $row['real_arrival_airport_icao'] != NULL) $temp_array['real_arrival_airport'] = $row['real_arrival_airport_icao'];
229
			if (isset($row['latitude'])) $temp_array['latitude'] = $row['latitude'];
230
			if (isset($row['longitude'])) $temp_array['longitude'] = $row['longitude'];
231
			/*
232
			if (Connection->tableExists('countries')) {
233
				$country_info = $this->getCountryFromLatitudeLongitude($temp_array['latitude'],$temp_array['longitude']);
234
				if (is_array($country_info) && isset($country_info['name']) && isset($country_info['iso2'])) {
235
				    $temp_array['country'] = $country_info['name'];
236
				    $temp_array['country_iso2'] = $country_info['iso2'];
237
				}
238
			}
239
			*/
240
			if (isset($row['waypoints'])) $temp_array['waypoints'] = $row['waypoints'];
241
			if (isset($row['format_source'])) $temp_array['format_source'] = $row['format_source'];
242
			if (isset($row['route_stop']) && $row['route_stop'] != '') {
243
				$temp_array['route_stop'] = $row['route_stop'];
244
				$allroute = explode(' ',$row['route_stop']);
245
				foreach ($allroute as $route) {
246
					$route_airport_array = $this->getAllAirportInfo($route);
247
					if (isset($route_airport_array[0]['name'])) {
248
						$route_stop_details = array();
249
						$route_stop_details['airport_name'] = $route_airport_array[0]['name'];
250
						$route_stop_details['airport_city'] = $route_airport_array[0]['city'];
251
						$route_stop_details['airport_country'] = $route_airport_array[0]['country'];
252
						$route_stop_details['airport_icao'] = $route_airport_array[0]['icao'];
253
						$temp_array['route_stop_details'][] = $route_stop_details;
254
					}
255
				}
256
			}
257
			if (isset($row['altitude'])) $temp_array['altitude'] = $row['altitude'];
258
			if (isset($row['heading'])) {
259
				$temp_array['heading'] = $row['heading'];
260
				$heading_direction = $this->parseDirection($row['heading']);
261
				if (isset($heading_direction[0]['direction_fullname'])) $temp_array['heading_name'] = $heading_direction[0]['direction_fullname'];
262
			}
263
			if (isset($row['ground_speed'])) $temp_array['ground_speed'] = $row['ground_speed'];
264
			$temp_array['image'] = "";
265
			$temp_array['image_thumbnail'] = "";
266
			$temp_array['image_source'] = "";
267
			$temp_array['image_copyright'] = "";
268
 
269
			if (isset($row['highlight'])) {
270
				$temp_array['highlight'] = $row['highlight'];
271
			} else $temp_array['highlight'] = '';
272
			
273
			if (isset($row['date'])) {
274
				$dateArray = $this->parseDateString($row['date']);
275
				if ($dateArray['seconds'] < 10)
276
				{
277
					$temp_array['date'] = "a few seconds ago";
278
				} elseif ($dateArray['seconds'] >= 5 && $dateArray['seconds'] < 30)
279
				{
280
					$temp_array['date'] = "half a minute ago";
281
				} elseif ($dateArray['seconds'] >= 30 && $dateArray['seconds'] < 60)
282
				{
283
					$temp_array['date'] = "about a minute ago";
284
				} elseif ($dateArray['minutes'] < 5)
285
				{
286
					$temp_array['date'] = "a few minutes ago";
287
				} elseif ($dateArray['minutes'] >= 5 && $dateArray['minutes'] < 60)
288
				{
289
					$temp_array['date'] = "about ".$dateArray['minutes']." minutes ago";
290
				} elseif ($dateArray['hours'] < 2)
291
				{
292
					$temp_array['date'] = "about an hour ago";
293
				} elseif ($dateArray['hours'] >= 2 && $dateArray['hours'] < 24)
294
				{
295
					$temp_array['date'] = "about ".$dateArray['hours']." hours ago";
296
				} else {
297
					$temp_array['date'] = date("M j Y, g:i a",strtotime($row['date']." UTC"));
298
				}
299
				$temp_array['date_minutes_past'] = $dateArray['minutes'];
300
				$temp_array['date_iso_8601'] = date("c",strtotime($row['date']." UTC"));
301
				$temp_array['date_rfc_2822'] = date("r",strtotime($row['date']." UTC"));
302
				$temp_array['date_unix'] = strtotime($row['date']." UTC");
303
				if (isset($row['last_seen']) && $row['last_seen'] != '') {
304
					if (strtotime($row['last_seen']) > strtotime($row['date'])) {
305
						$temp_array['duration'] = strtotime($row['last_seen']) - strtotime($row['date']);
306
						$temp_array['last_seen_date_iso_8601'] = date("c",strtotime($row['last_seen']." UTC"));
307
						$temp_array['last_seen_date_rfc_2822'] = date("r",strtotime($row['last_seen']." UTC"));
308
						$temp_array['last_seen_date_unix'] = strtotime($row['last_seen']." UTC");
309
					}
310
				}
311
			}
312
			
313
			if (isset($row['aircraft_name']) && $row['aircraft_name'] != '' && isset($row['aircraft_shadow']) && $row['aircraft_shadow'] != '') {
314
				$temp_array['aircraft_name'] = $row['aircraft_name'];
315
				$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
316
				if (isset($row['aircraft_shadow'])) {
317
					$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
318
				}
319
			} elseif (isset($row['aircraft_icao'])) {
320
				$aircraft_array = $this->getAllAircraftInfo($row['aircraft_icao']);
321
				if (count($aircraft_array) > 0) {
322
					$temp_array['aircraft_name'] = $aircraft_array[0]['type'];
323
					$temp_array['aircraft_manufacturer'] = $aircraft_array[0]['manufacturer'];
324
				
325
					if ($aircraft_array[0]['aircraft_shadow'] != NULL) {
326
						$temp_array['aircraft_shadow'] = $aircraft_array[0]['aircraft_shadow'];
327
					} else $temp_array['aircraft_shadow'] = 'default.png';
328
                                } else {
329
                            		$temp_array['aircraft_shadow'] = 'default.png';
330
					$temp_array['aircraft_name'] = 'N/A';
331
					$temp_array['aircraft_manufacturer'] = 'N/A';
332
                            	}
333
			}
334
			$fromsource = NULL;
335
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
336
			elseif (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
337
			elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
338
			elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
339
			elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
340
			if (!isset($row['airline_name']) || $row['airline_name'] == '') {
341
				if (!is_numeric(substr($row['ident'], 0, 3))) {
342
					if (is_numeric(substr($row['ident'], 2, 1))) {
343
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 2),$fromsource);
344
					} elseif (is_numeric(substr($row['ident'], 3, 1))) {
345
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
346
					} else {
347
						$airline_array = $this->getAllAirlineInfo('NA');
348
					}
349
				} else {
350
					$airline_array = $this->getAllAirlineInfo('NA');
351
				}
352
				if (count($airline_array) > 0) {
353
					$temp_array['airline_icao'] = $airline_array[0]['icao'];
354
					$temp_array['airline_iata'] = $airline_array[0]['iata'];
355
					$temp_array['airline_name'] = $airline_array[0]['name'];
356
					$temp_array['airline_country'] = $airline_array[0]['country'];
357
					$temp_array['airline_callsign'] = $airline_array[0]['callsign'];
358
					$temp_array['airline_type'] = $airline_array[0]['type'];
359
				}
360
			} else {
361
				$temp_array['airline_icao'] = $row['airline_icao'];
362
				if (isset($row['airline_iata'])) $temp_array['airline_iata'] = $row['airline_iata'];
363
				else $temp_array['airline_iata'] = 'N/A';
364
				$temp_array['airline_name'] = $row['airline_name'];
365
				$temp_array['airline_country'] = $row['airline_country'];
366
				if (isset($row['airline_callsign'])) $temp_array['airline_callsign'] = $row['airline_callsign'];
367
				else $temp_array['airline_callsign'] = 'N/A';
368
				$temp_array['airline_type'] = $row['airline_type'];
369
				if ($temp_array['airline_icao'] != '' && $temp_array['airline_iata'] == 'N/A') {
370
					$airline_array = $this->getAllAirlineInfo($temp_array['airline_icao']);
371
					if (count($airline_array) > 0) {
372
						$temp_array['airline_icao'] = $airline_array[0]['icao'];
373
						$temp_array['airline_iata'] = $airline_array[0]['iata'];
374
						$temp_array['airline_name'] = $airline_array[0]['name'];
375
						$temp_array['airline_country'] = $airline_array[0]['country'];
376
						$temp_array['airline_callsign'] = $airline_array[0]['callsign'];
377
						$temp_array['airline_type'] = $airline_array[0]['type'];
378
					}
379
				}
380
			}
381
			if (isset($temp_array['airline_iata']) && $temp_array['airline_iata'] != '') {
382
				$acars_array = $ACARS->getLiveAcarsData($temp_array['airline_iata'].substr($temp_array['ident'],3));
383
				//$acars_array = ACARS->getLiveAcarsData('BA40YL');
384
				if (count($acars_array) > 0) {
385
					$temp_array['acars'] = $acars_array;
386
					//print_r($acars_array);
387
				}
388
			}
389
			if (isset($row['owner_name']) && $row['owner_name'] != '' && $row['owner_name'] != NULL) {
390
				$temp_array['aircraft_owner'] = $row['owner_name'];
391
			}
392
			if ($temp_array['registration'] != "" && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM && !isset($temp_array['aircraft_owner'])) {
393
				$owner_info = $this->getAircraftOwnerByRegistration($temp_array['registration']);
394
				if ($owner_info['owner'] != '') $temp_array['aircraft_owner'] = ucwords(strtolower($owner_info['owner']));
395
				$temp_array['aircraft_base'] = $owner_info['base'];
396
				$temp_array['aircraft_date_first_reg'] = $owner_info['date_first_reg'];
397
			}
398
399
			if($temp_array['registration'] != "" || ($globalIVAO && isset($temp_array['aircraft_type']) && $temp_array['aircraft_type'] != ''))
400
			{
401
				if ($globalIVAO) {
402
					if (isset($temp_array['airline_icao']))	$image_array = $Image->getSpotterImage('',$temp_array['aircraft_type'],$temp_array['airline_icao']);
403
					else $image_array = $Image->getSpotterImage('',$temp_array['aircraft_type']);
404
				} else $image_array = $Image->getSpotterImage($temp_array['registration']);
405
				if (count($image_array) > 0) {
406
					$temp_array['image'] = $image_array[0]['image'];
407
					$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
408
					$temp_array['image_source'] = $image_array[0]['image_source'];
409
					$temp_array['image_source_website'] = $image_array[0]['image_source_website'];
410
					if ($temp_array['image_source_website'] == '' && $temp_array['image_source'] == 'planespotters') {
411
						$planespotter_url_array = explode("_", $temp_array['image']);
412
						$planespotter_id = str_replace(".jpg", "", $planespotter_url_array[1]);
413
						$temp_array['image_source_website'] = 'http://www.planespotters.net/Aviation_Photos/photo.show?id='.$planespotter_id;
414
					 }
415
					$temp_array['image_copyright'] = $image_array[0]['image_copyright'];
416
				}
417
			}
418
419
420
			if (isset($row['departure_airport_time']) && $row['departure_airport_time'] != '') {
421
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
422
			}
423
			if (isset($row['arrival_airport_time']) && $row['arrival_airport_time'] != '') {
424
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
425
			}
426
			
427
			if ((!isset($globalIVAO) || ! $globalIVAO) && (!isset($globalVATSIM) || !$globalVATSIM) && (!isset($globalphpVMS) || !$globalphpVMS) && (!isset($globalVAM) || !$globalVAM)) {
428
				if ($schedules === true) {
429
					$schedule_array = $Schedule->getSchedule($temp_array['ident']);
430
					//print_r($schedule_array);
431
					if (count($schedule_array) > 0) {
432
						if ($schedule_array['departure_airport_icao'] != '') {
433
							$row['departure_airport_icao'] = $schedule_array['departure_airport_icao'];
434
							$temp_array['departure_airport'] = $row['departure_airport_icao'];
435
						}
436
						if ($schedule_array['arrival_airport_icao'] != '') {
437
							$row['arrival_airport_icao'] = $schedule_array['arrival_airport_icao'];
438
							$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
439
						}
440
						$temp_array['departure_airport_time'] = $schedule_array['departure_airport_time'];
441
						$temp_array['arrival_airport_time'] = $schedule_array['arrival_airport_time'];
442
					}
443
				}
444
			} else {
445
				if (isset($row['real_departure_airport_time']) && $row['real_departure_airport_time'] != '') {
446
					$temp_array['departure_airport_time'] = $row['real_departure_airport_time'];
447
				}
448
				if (isset($row['real_arrival_airport_time']) && $row['real_arrival_airport_time'] != '') {
449
					$temp_array['real_arrival_airport_time'] = $row['real_arrival_airport_time'];
450
				}
451
			}
452
			
453
			//if ($row['departure_airport_icao'] != '' && $row['departure_airport_name'] == '') {
454
			if ($row['departure_airport_icao'] != '') {
455
				$departure_airport_array = $this->getAllAirportInfo($row['departure_airport_icao']);
456
				if (!isset($departure_airport_array[0]['name'])) $departure_airport_array = $this->getAllAirportInfo('NA');
457
			/*
458
			} elseif ($row['departure_airport_name'] != '') {
459
				$temp_array['departure_airport_name'] = $row['departure_airport_name'];
460
				$temp_array['departure_airport_city'] = $row['departure_airport_city'];
461
				$temp_array['departure_airport_country'] = $row['departure_airport_country'];
462
				$temp_array['departure_airport_icao'] = $row['departure_airport_icao'];
463
			*/
464
			} else $departure_airport_array = $this->getAllAirportInfo('NA');
465
			if (isset($departure_airport_array[0]['name'])) {
466
				$temp_array['departure_airport_name'] = $departure_airport_array[0]['name'];
467
				$temp_array['departure_airport_city'] = $departure_airport_array[0]['city'];
468
				$temp_array['departure_airport_country'] = $departure_airport_array[0]['country'];
469
				$temp_array['departure_airport_iata'] = $departure_airport_array[0]['iata'];
470
				$temp_array['departure_airport_icao'] = $departure_airport_array[0]['icao'];
471
				$temp_array['departure_airport_latitude'] = $departure_airport_array[0]['latitude'];
472
				$temp_array['departure_airport_longitude'] = $departure_airport_array[0]['longitude'];
473
				$temp_array['departure_airport_altitude'] = $departure_airport_array[0]['altitude'];
474
			}
475
476
			/*
477
			if (isset($row['departure_airport_time'])) {
478
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
479
			}
480
			*/
481
			
482
			if ($row['arrival_airport_icao'] != '') {
483
				$arrival_airport_array = $this->getAllAirportInfo($row['arrival_airport_icao']);
484
				if (count($arrival_airport_array) == 0) $arrival_airport_array = $this->getAllAirportInfo('NA');
485
			} else $arrival_airport_array = $this->getAllAirportInfo('NA');
486
			if (isset($arrival_airport_array[0]['name'])) {
487
				$temp_array['arrival_airport_name'] = $arrival_airport_array[0]['name'];
488
				$temp_array['arrival_airport_city'] = $arrival_airport_array[0]['city'];
489
				$temp_array['arrival_airport_country'] = $arrival_airport_array[0]['country'];
490
				$temp_array['arrival_airport_iata'] = $arrival_airport_array[0]['iata'];
491
				$temp_array['arrival_airport_icao'] = $arrival_airport_array[0]['icao'];
492
				$temp_array['arrival_airport_latitude'] = $arrival_airport_array[0]['latitude'];
493
				$temp_array['arrival_airport_longitude'] = $arrival_airport_array[0]['longitude'];
494
				$temp_array['arrival_airport_altitude'] = $arrival_airport_array[0]['altitude'];
495
			}
496
			/*
497
			if (isset($row['arrival_airport_time'])) {
498
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
499
			}
500
			*/
501
			if (isset($row['pilot_id']) && $row['pilot_id'] != '') $temp_array['pilot_id'] = $row['pilot_id'];
502
			if (isset($row['pilot_name']) && $row['pilot_name'] != '') $temp_array['pilot_name'] = $row['pilot_name'];
503
			if (isset($row['source_name']) && $row['source_name'] != '') $temp_array['source_name'] = $row['source_name'];
504
			if (isset($row['over_country']) && $row['over_country'] != '') $temp_array['over_country'] = $row['over_country'];
505
			if (isset($row['distance']) && $row['distance'] != '') $temp_array['distance'] = $row['distance'];
506
			if (isset($row['squawk'])) {
507
				$temp_array['squawk'] = $row['squawk'];
508
				if ($row['squawk'] != '' && isset($temp_array['country_iso2'])) {
509
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['country_iso2']);
510
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
511
				} elseif ($row['squawk'] != '' && isset($temp_array['over_country'])) {
512
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['over_country']);
513
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
514
				} elseif ($row['squawk'] != '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
515
			}
516
    			
517
			$temp_array['query_number_rows'] = $num_rows;
518
			
519
			$spotter_array[] = $temp_array;
520
		}
521
		if ($num_rows == 0) return array();
522
		$spotter_array[0]['query_number_rows'] = $num_rows;
523
		return $spotter_array;
524
	}	
525
	
526
	
527
	/**
528
	* Gets all the spotter information
529
	*
530
	* @return Array the spotter information
531
	*
532
	*/
533
	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())
534
	{
535
		global $globalTimezone, $globalDBdriver;
536
		require_once(dirname(__FILE__).'/class.Translation.php');
537
		$Translation = new Translation();
538
539
		date_default_timezone_set('UTC');
540
541
		$query_values = array();
542
		$additional_query = '';
543
		$filter_query = $this->getFilter($filters,true,true);
544
		if ($q != "")
545
		{
546
			if (!is_string($q))
547
			{
548
				return false;
549
			} else {
550
				$q_array = explode(" ", $q);
551
				foreach ($q_array as $q_item){
552
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
553
					$additional_query .= " AND (";
554
					if (is_int($q_item)) $additional_query .= "(spotter_output.spotter_id like '%".$q_item."%') OR ";
555
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
556
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
557
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
558
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
559
					$additional_query .= "(spotter_output.airline_name like '%".$q_item."%') OR ";
560
					$additional_query .= "(spotter_output.airline_country like '%".$q_item."%') OR ";
561
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
562
					$additional_query .= "(spotter_output.departure_airport_name like '%".$q_item."%') OR ";
563
					$additional_query .= "(spotter_output.departure_airport_city like '%".$q_item."%') OR ";
564
					$additional_query .= "(spotter_output.departure_airport_country like '%".$q_item."%') OR ";
565
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
566
					$additional_query .= "(spotter_output.arrival_airport_name like '%".$q_item."%') OR ";
567
					$additional_query .= "(spotter_output.arrival_airport_city like '%".$q_item."%') OR ";
568
					$additional_query .= "(spotter_output.arrival_airport_country like '%".$q_item."%') OR ";
569
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
570
					$additional_query .= "(spotter_output.owner_name like '%".$q_item."%') OR ";
571
					$additional_query .= "(spotter_output.pilot_id like '%".$q_item."%') OR ";
572
					$additional_query .= "(spotter_output.pilot_name like '%".$q_item."%') OR ";
573
					$additional_query .= "(spotter_output.ident like '%".$q_item."%') OR ";
574
					$translate = $Translation->ident2icao($q_item);
575
					if ($translate != $q_item) $additional_query .= "(spotter_output.ident like '%".$translate."%') OR ";
576
					$additional_query .= "(spotter_output.highlight like '%".$q_item."%')";
577
					$additional_query .= ")";
578
				}
579
			}
580
		}
581
582
		if ($registration != "")
583
		{
584
			$registration = filter_var($registration,FILTER_SANITIZE_STRING);
585
			if (!is_string($registration))
586
			{
587
				return false;
588
			} else {
589
				$additional_query .= " AND spotter_output.registration = :registration";
590
				$query_values = array_merge($query_values,array(':registration' => $registration));
591
			}
592
		}
593
594
		if ($aircraft_icao != "")
595
		{
596
			$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
597
			if (!is_string($aircraft_icao))
598
			{
599
				return false;
600
			} else {
601
				$additional_query .= " AND spotter_output.aircraft_icao = :aircraft_icao";
602
				$query_values = array_merge($query_values,array(':aircraft_icao' => $aircraft_icao));
603
			}
604
		}
605
606
		if ($aircraft_manufacturer != "")
607
		{
608
			$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
609
			if (!is_string($aircraft_manufacturer))
610
			{
611
				return false;
612
			} else {
613
				$additional_query .= " AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer";
614
				$query_values = array_merge($query_values,array(':aircraft_manufacturer' => $aircraft_manufacturer));
615
			}
616
		}
617
618
		if ($highlights == "true")
619
		{
620
			if (!is_string($highlights))
621
			{
622
				return false;
623
			} else {
624
				$additional_query .= " AND (spotter_output.highlight <> '')";
625
			}
626
		}
627
628
		if ($airline_icao != "")
629
		{
630
			$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
631
			if (!is_string($airline_icao))
632
			{
633
				return false;
634
			} else {
635
				$additional_query .= " AND spotter_output.airline_icao = :airline_icao";
636
				$query_values = array_merge($query_values,array(':airline_icao' => $airline_icao));
637
			}
638
		}
639
640
		if ($airline_country != "")
641
		{
642
			$airline_country = filter_var($airline_country,FILTER_SANITIZE_STRING);
643
			if (!is_string($airline_country))
644
			{
645
				return false;
646
			} else {
647
				$additional_query .= " AND spotter_output.airline_country = :airline_country";
648
				$query_values = array_merge($query_values,array(':airline_country' => $airline_country));
649
			}
650
		}
651
652
		if ($airline_type != "")
653
		{
654
			if (!is_string($airline_type))
655
			{
656
				return false;
657
			} else {
658
				if ($airline_type == "passenger")
659
				{
660
					$additional_query .= " AND (spotter_output.airline_type = 'passenger')";
661
				}
662
				if ($airline_type == "cargo")
663
				{
664
					$additional_query .= " AND (spotter_output.airline_type = 'cargo')";
665
				}
666
				if ($airline_type == "military")
667
				{
668
					$additional_query .= " AND (spotter_output.airline_type = 'military')";
669
				}
670
			}
671
		}
672
673
		if ($airport != "")
674
		{
675
			$airport = filter_var($airport,FILTER_SANITIZE_STRING);
676
			if (!is_string($airport))
677
			{
678
				return false;
679
			} else {
680
				$additional_query .= " AND (spotter_output.departure_airport_icao = :airport OR spotter_output.arrival_airport_icao = :airport)";
681
				$query_values = array_merge($query_values,array(':airport' => $airport));
682
			}
683
		}
684
685
		if ($airport_country != "")
686
		{
687
			$airport_country = filter_var($airport_country,FILTER_SANITIZE_STRING);
688
			if (!is_string($airport_country))
689
			{
690
				return false;
691
			} else {
692
				$additional_query .= " AND (spotter_output.departure_airport_country = :airport_country OR spotter_output.arrival_airport_country = :airport_country)";
693
				$query_values = array_merge($query_values,array(':airport_country' => $airport_country));
694
			}
695
		}
696
    
697
		if ($callsign != "")
698
		{
699
			$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
700
			if (!is_string($callsign))
701
			{
702
				return false;
703
			} else {
704
				$translate = $Translation->ident2icao($callsign);
705
				if ($translate != $callsign) {
706
					$additional_query .= " AND (spotter_output.ident = :callsign OR spotter_output.ident = :translate)";
707
					$query_values = array_merge($query_values,array(':callsign' => $callsign,':translate' => $translate));
708
				} else {
709
					$additional_query .= " AND spotter_output.ident = :callsign";
710
					$query_values = array_merge($query_values,array(':callsign' => $callsign));
711
				}
712
			}
713
		}
714
715
		if ($owner != "")
716
		{
717
			$owner = filter_var($owner,FILTER_SANITIZE_STRING);
718
			if (!is_string($owner))
719
			{
720
				return false;
721
			} else {
722
				$additional_query .= " AND spotter_output.owner_name = :owner";
723
				$query_values = array_merge($query_values,array(':owner' => $owner));
724
			}
725
		}
726
727
		if ($pilot_name != "")
728
		{
729
			$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
730
			if (!is_string($pilot_name))
731
			{
732
				return false;
733
			} else {
734
				$additional_query .= " AND spotter_output.pilot_name = :pilot_name";
735
				$query_values = array_merge($query_values,array(':pilot_name' => $pilot_name));
736
			}
737
		}
738
739
		if ($pilot_id != "")
740
		{
741
			$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_NUMBER_INT);
742
			if (!is_string($pilot_id))
743
			{
744
				return false;
745
			} else {
746
				$additional_query .= " AND spotter_output.pilot_id = :pilot_id";
747
				$query_values = array_merge($query_values,array(':pilot_id' => $pilot_id));
748
			}
749
		}
750
751
		if ($departure_airport_route != "")
752
		{
753
			$departure_airport_route = filter_var($departure_airport_route,FILTER_SANITIZE_STRING);
754
			if (!is_string($departure_airport_route))
755
			{
756
				return false;
757
			} else {
758
				$additional_query .= " AND spotter_output.departure_airport_icao = :departure_airport_route";
759
				$query_values = array_merge($query_values,array(':departure_airport_route' => $departure_airport_route));
760
			}
761
		}
762
763
		if ($arrival_airport_route != "")
764
		{
765
			$arrival_airport_route = filter_var($arrival_airport_route,FILTER_SANITIZE_STRING);
766
			if (!is_string($arrival_airport_route))
767
			{
768
				return false;
769
			} else {
770
				$additional_query .= " AND spotter_output.arrival_airport_icao = :arrival_airport_route";
771
				$query_values = array_merge($query_values,array(':arrival_airport_route' => $arrival_airport_route));
772
			}
773
		}
774
775
		if ($altitude != "")
776
		{
777
			$altitude_array = explode(",", $altitude);
778
			$altitude_array[0] = filter_var($altitude_array[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
779
			$altitude_array[1] = filter_var($altitude_array[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
780
781
			if ($altitude_array[1] != "")
782
			{                
783
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
784
				$altitude_array[1] = substr($altitude_array[1], 0, -2);
785
				$additional_query .= " AND altitude BETWEEN '".$altitude_array[0]."' AND '".$altitude_array[1]."' ";
786
			} else {
787
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
788
				$additional_query .= " AND altitude <= '".$altitude_array[0]."' ";
789
			}
790
		}
791
792
		if ($date_posted != "")
793
		{
794
			$date_array = explode(",", $date_posted);
795
			$date_array[0] = filter_var($date_array[0],FILTER_SANITIZE_STRING);
796
			$date_array[1] = filter_var($date_array[1],FILTER_SANITIZE_STRING);
797
798
			if ($globalTimezone != '') {
799
				date_default_timezone_set($globalTimezone);
800
				$datetime = new DateTime();
801
				$offset = $datetime->format('P');
802
			} else $offset = '+00:00';
803
804
			if ($date_array[1] != "")
805
			{
806
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
807
				$date_array[1] = date("Y-m-d H:i:s", strtotime($date_array[1]));
808
				if ($globalDBdriver == 'mysql') {
809
					$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]."' ";
810
				} else {
811
					$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]."' ";
812
				}
813
			} else {
814
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
815
				if ($globalDBdriver == 'mysql') {
816
					$additional_query .= " AND TIMESTAMP(CONVERT_TZ(spotter_output.date,'+00:00', '".$offset."')) >= '".$date_array[0]."' ";
817
				} else {
818
					$additional_query .= " AND CAST(spotter_output.date AT TIME ZONE INTERVAL ".$offset." AS TIMESTAMP) >= '".$date_array[0]."' ";
819
				}
820
			}
821
		}
822
823
		if ($limit != "")
824
		{
825
			$limit_array = explode(",", $limit);
826
			
827
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
828
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
829
			
830
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
831
			{
832
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
833
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
834
			} else $limit_query = "";
835
		} else $limit_query = "";
836
837
838
		if ($sort != "")
839
		{
840
			$search_orderby_array = $this->getOrderBy();
841
			$orderby_query = $search_orderby_array[$sort]['sql'];
842
		} else {
843
			if ($origLat != "" && $origLon != "" && $dist != "") {
844
				$orderby_query = " ORDER BY distance ASC";
845
			} else {
846
				$orderby_query = " ORDER BY spotter_output.date DESC";
847
			}
848
		}
849
850
		if ($includegeodata == "true")
851
		{
852
			$additional_query .= " AND spotter_output.waypoints <> ''";
853
		}
854
855
856
		if ($origLat != "" && $origLon != "" && $dist != "") {
857
			$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
858
859
			if ($globalDBdriver == 'mysql') {
860
				$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 
861
						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)) 
862
						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;
863
			} else {
864
				$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 
865
						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)) 
866
						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;
867
			}
868
		} else {		
869
			$query  = "SELECT spotter_output.* FROM spotter_output".$filter_query." spotter_output.ident <> '' 
870
					".$additional_query."
871
					".$orderby_query;
872
		}
873
		$spotter_array = $this->getDataFromDB($query, $query_values,$limit_query);
874
		return $spotter_array;
875
	}
876
	
877
	
878
	/**
879
	* Gets all the spotter information based on the latest data entry
880
	*
881
	* @return Array the spotter information
882
	*
883
	*/
884
	public function getLatestSpotterData($limit = '', $sort = '', $filter = array())
885
	{
886
		global $global_query;
887
		
888
		date_default_timezone_set('UTC');
889
890
		$filter_query = $this->getFilter($filter);
891
		
892
		if ($limit != "")
893
		{
894
			$limit_array = explode(",", $limit);
895
			
896
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
897
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
898
			
899
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
900
			{
901
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
902
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
903
			} else $limit_query = "";
904
		} else $limit_query = "";
905
		
906
		if ($sort != "")
907
		{
908
			$search_orderby_array = $this->getOrderBy();
909
			$orderby_query = $search_orderby_array[$sort]['sql'];
910
		} else {
911
			$orderby_query = " ORDER BY spotter_output.date DESC";
912
		}
913
914
		$query  = $global_query.$filter_query." ".$orderby_query;
915
916
		$spotter_array = $this->getDataFromDB($query, array(),$limit_query,true);
917
918
		return $spotter_array;
919
	}
920
    
921
    
922
    /**
923
	* Gets all the spotter information based on a user's latitude and longitude
924
	*
925
	* @return Array the spotter information
926
	*
927
	*/
928
	public function getLatestSpotterForLayar($lat, $lng, $radius, $interval)
929
	{
930
		date_default_timezone_set('UTC');
931
		$limit_query = '';
932
		if ($lat != "")
933
		{
934
			if (!is_numeric($lat))
935
			{
936
				return false;
937
			}
938
		}
939
        
940
		if ($lng != "")
941
		{
942
			if (!is_numeric($lng))
943
			{
944
				return false;
945
			}
946
		}
947
		
948
		if ($radius != "")
949
		{
950
			if (!is_numeric($radius))
951
			{
952
				return false;
953
			}
954
		}
955
    		$additional_query = '';
956
		if ($interval != "")
957
		{
958
			if (!is_string($interval))
959
			{
960
				return false;
961
			} else {
962
				if ($interval == "30m"){
963
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 MINUTE) <= $this_output.date ';
964
				} else if ($interval == "1h"){
965
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) <= $this_output.date ';
966
				} else if ($interval == "3h"){
967
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 3 HOUR) <= $this_output.date ';
968
				} else if ($interval == "6h"){
969
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 6 HOUR) <= $this_output.date ';
970
				} else if ($interval == "12h"){
971
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 12 HOUR) <= $this_output.date ';
972
				} else if ($interval == "24h"){
973
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 24 HOUR) <= $this_output.date ';
974
				} else if ($interval == "7d"){
975
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY) <= $this_output.date ';
976
				} else if ($interval == "30d"){
977
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 DAY) <= $this_output.date ';
978
				} 
979
			}
980
		}
981
982
		$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 
983
                   WHERE spotter_output.latitude <> '' 
984
				   AND spotter_output.longitude <> '' 
985
                   ".$additional_query."
986
                   HAVING distance < :radius  
987
				   ORDER BY distance";
988
989
		$spotter_array = $this->getDataFromDB($query, array(':radius' => $radius),$limit_query);
990
991
		return $spotter_array;
992
	}
993
    
994
    
995
    /**
996
	* Gets all the spotter information sorted by the newest aircraft type
997
	*
998
	* @return Array the spotter information
999
	*
1000
	*/
1001
	public function getNewestSpotterDataSortedByAircraftType($limit = '', $sort = '',$filter = array())
1002
	{
1003
		global $global_query;
1004
		
1005
		date_default_timezone_set('UTC');
1006
1007
		$filter_query = $this->getFilter($filter,true,true);
1008
1009
		$limit_query = '';
1010
		if ($limit != "")
1011
		{
1012
			$limit_array = explode(",", $limit);
1013
			
1014
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1015
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1016
			
1017
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1018
			{
1019
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1020
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1021
			}
1022
		}
1023
		
1024
		if ($sort != "")
1025
		{
1026
			$search_orderby_array = $this->getOrderBy();
1027
			$orderby_query = $search_orderby_array[$sort]['sql'];
1028
		} else {
1029
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1030
		}
1031
1032
		$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;
1033
1034
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1035
1036
		return $spotter_array;
1037
	}
1038
    
1039
    
1040
	/**
1041
	* Gets all the spotter information sorted by the newest aircraft registration
1042
	*
1043
	* @return Array the spotter information
1044
	*
1045
	*/
1046
	public function getNewestSpotterDataSortedByAircraftRegistration($limit = '', $sort = '', $filter = array())
1047
	{
1048
		global $global_query;
1049
		
1050
		date_default_timezone_set('UTC');
1051
		$filter_query = $this->getFilter($filter,true,true);
1052
1053
		$limit_query = '';
1054
		if ($limit != "")
1055
		{
1056
			$limit_array = explode(",", $limit);
1057
			
1058
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1059
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1060
			
1061
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1062
			{
1063
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1064
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1065
			}
1066
		}
1067
		
1068
		if ($sort != "")
1069
		{
1070
			$search_orderby_array = $this->getOrderBy();
1071
			$orderby_query = $search_orderby_array[$sort]['sql'];
1072
		} else {
1073
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1074
		}
1075
1076
		$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;
1077
1078
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1079
1080
		return $spotter_array;
1081
	}
1082
1083
1084
	/**
1085
	* Gets all the spotter information sorted by the newest airline
1086
	*
1087
	* @return Array the spotter information
1088
	*
1089
	*/
1090
	public function getNewestSpotterDataSortedByAirline($limit = '', $sort = '',$filter = array())
1091
	{
1092
		global $global_query;
1093
		
1094
		date_default_timezone_set('UTC');
1095
		$filter_query = $this->getFilter($filter,true,true);
1096
		
1097
		$limit_query = '';
1098
		if ($limit != "")
1099
		{
1100
			$limit_array = explode(",", $limit);
1101
			
1102
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1103
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1104
			
1105
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1106
			{
1107
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1108
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1109
			}
1110
		}
1111
		
1112
		if ($sort != "")
1113
		{
1114
			$search_orderby_array = $this->getOrderBy();
1115
			$orderby_query = $search_orderby_array[$sort]['sql'];
1116
		} else {
1117
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1118
		}
1119
1120
		$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;
1121
1122
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1123
1124
		return $spotter_array;
1125
	}
1126
    
1127
    
1128
    /**
1129
	* Gets all the spotter information sorted by the newest departure airport
1130
	*
1131
	* @return Array the spotter information
1132
	*
1133
	*/
1134
	public function getNewestSpotterDataSortedByDepartureAirport($limit = '', $sort = '', $filter = array())
1135
	{
1136
		global $global_query;
1137
		
1138
		date_default_timezone_set('UTC');
1139
		
1140
		$filter_query = $this->getFilter($filter,true,true);
1141
		
1142
		$limit_query = '';
1143
		
1144
		if ($limit != "")
1145
		{
1146
			$limit_array = explode(",", $limit);
1147
			
1148
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1149
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1150
			
1151
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1152
			{
1153
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1154
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1155
			}
1156
		}
1157
		
1158
		if ($sort != "")
1159
		{
1160
			$search_orderby_array = $this->getOrderBy();
1161
			$orderby_query = $search_orderby_array[$sort]['sql'];
1162
		} else {
1163
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1164
		}
1165
1166
		$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;
1167
1168
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1169
1170
		return $spotter_array;
1171
	}
1172
1173
1174
	/**
1175
	* Gets all the spotter information sorted by the newest arrival airport
1176
	*
1177
	* @return Array the spotter information
1178
	*
1179
	*/
1180
	public function getNewestSpotterDataSortedByArrivalAirport($limit = '', $sort = '', $filter = array())
1181
	{
1182
		global $global_query;
1183
		
1184
		date_default_timezone_set('UTC');
1185
		$filter_query = $this->getFilter($filter,true,true);
1186
		$limit_query = '';
1187
		if ($limit != "")
1188
		{
1189
			$limit_array = explode(",", $limit);
1190
			
1191
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1192
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1193
			
1194
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1195
			{
1196
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1197
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1198
			}
1199
		}
1200
		
1201
		if ($sort != "")
1202
		{
1203
			$search_orderby_array = $this->getOrderBy();
1204
			$orderby_query = $search_orderby_array[$sort]['sql'];
1205
		} else {
1206
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1207
		}
1208
1209
		$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;
1210
1211
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1212
1213
		return $spotter_array;
1214
	}
1215
	
1216
1217
	/**
1218
	* Gets all the spotter information based on the spotter id
1219
	*
1220
	* @return Array the spotter information
1221
	*
1222
	*/
1223
	public function getSpotterDataByID($id = '')
1224
	{
1225
		global $global_query;
1226
		
1227
		date_default_timezone_set('UTC');
1228
		if ($id == '') return array();
1229
		$additional_query = "spotter_output.spotter_id = :id";
1230
		$query_values = array(':id' => $id);
1231
1232
		//$query  = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ";
1233
		$query  = $global_query." WHERE ".$additional_query." ";
1234
1235
		$spotter_array = $this->getDataFromDB($query,$query_values);
1236
1237
		return $spotter_array;
1238
	}
1239
1240
	
1241
	
1242
	
1243
	/**
1244
	* Gets all the spotter information based on the callsign
1245
	*
1246
	* @return Array the spotter information
1247
	*
1248
	*/
1249
	public function getSpotterDataByIdent($ident = '', $limit = '', $sort = '', $filter = array())
1250
	{
1251
		global $global_query;
1252
		
1253
		date_default_timezone_set('UTC');
1254
		
1255
		$query_values = array();
1256
		$limit_query = '';
1257
		$additional_query = '';
1258
		$filter_query = $this->getFilter($filter,true,true);
1259
		if ($ident != "")
1260
		{
1261
			if (!is_string($ident))
1262
			{
1263
				return false;
1264
			} else {
1265
				$additional_query = " AND (spotter_output.ident = :ident)";
1266
				$query_values = array(':ident' => $ident);
1267
			}
1268
		}
1269
		
1270
		if ($limit != "")
1271
		{
1272
			$limit_array = explode(",", $limit);
1273
			
1274
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1275
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1276
			
1277
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1278
			{
1279
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1280
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1281
			}
1282
		}
1283
1284
		if ($sort != "")
1285
		{
1286
			$search_orderby_array = $this->getOrderBy();
1287
			$orderby_query = $search_orderby_array[$sort]['sql'];
1288
		} else {
1289
			$orderby_query = " ORDER BY spotter_output.date DESC";
1290
		}
1291
1292
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1293
1294
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1295
1296
		return $spotter_array;
1297
	}
1298
	
1299
	/**
1300
	* Gets all the spotter information based on the owner
1301
	*
1302
	* @return Array the spotter information
1303
	*
1304
	*/
1305
	public function getSpotterDataByOwner($owner = '', $limit = '', $sort = '', $filter = array())
1306
	{
1307
		global $global_query;
1308
		
1309
		date_default_timezone_set('UTC');
1310
		
1311
		$query_values = array();
1312
		$limit_query = '';
1313
		$additional_query = '';
1314
		$filter_query = $this->getFilter($filter,true,true);
1315
		if ($owner != "")
1316
		{
1317
			if (!is_string($owner))
1318
			{
1319
				return false;
1320
			} else {
1321
				$additional_query = " AND (spotter_output.owner_name = :owner)";
1322
				$query_values = array(':owner' => $owner);
1323
			}
1324
		}
1325
		
1326
		if ($limit != "")
1327
		{
1328
			$limit_array = explode(",", $limit);
1329
			
1330
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1331
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1332
			
1333
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1334
			{
1335
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1336
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1337
			}
1338
		}
1339
1340
		if ($sort != "")
1341
		{
1342
			$search_orderby_array = $this->getOrderBy();
1343
			if (isset($search_orderby_array[$sort]['sql'])) $orderby_query = $search_orderby_array[$sort]['sql'];
1344
			else $orderby_query = " ORDER BY spotter_output.date DESC";
1345
		} else {
1346
			$orderby_query = " ORDER BY spotter_output.date DESC";
1347
		}
1348
1349
		$query = $global_query.$filter_query." spotter_output.owner_name <> '' ".$additional_query." ".$orderby_query;
1350
1351
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1352
1353
		return $spotter_array;
1354
	}
1355
	
1356
	/**
1357
	* Gets all the spotter information based on the pilot
1358
	*
1359
	* @return Array the spotter information
1360
	*
1361
	*/
1362
	public function getSpotterDataByPilot($pilot = '', $limit = '', $sort = '', $filter = array())
1363
	{
1364
		global $global_query;
1365
		
1366
		date_default_timezone_set('UTC');
1367
		
1368
		$query_values = array();
1369
		$limit_query = '';
1370
		$additional_query = '';
1371
		$filter_query = $this->getFilter($filter,true,true);
1372
		if ($pilot != "")
1373
		{
1374
			$additional_query = " AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot)";
1375
			$query_values = array(':pilot' => $pilot);
1376
		}
1377
		
1378
		if ($limit != "")
1379
		{
1380
			$limit_array = explode(",", $limit);
1381
			
1382
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1383
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1384
			
1385
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1386
			{
1387
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1388
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1389
			}
1390
		}
1391
1392
		if ($sort != "")
1393
		{
1394
			$search_orderby_array = $this->getOrderBy();
1395
			$orderby_query = $search_orderby_array[$sort]['sql'];
1396
		} else {
1397
			$orderby_query = " ORDER BY spotter_output.date DESC";
1398
		}
1399
1400
		$query = $global_query.$filter_query." spotter_output.pilot_name <> '' ".$additional_query." ".$orderby_query;
1401
1402
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1403
1404
		return $spotter_array;
1405
	}
1406
	
1407
	
1408
	
1409
	/**
1410
	* Gets all the spotter information based on the aircraft type
1411
	*
1412
	* @return Array the spotter information
1413
	*
1414
	*/
1415
	public function getSpotterDataByAircraft($aircraft_type = '', $limit = '', $sort = '', $filter = array())
1416
	{
1417
		global $global_query;
1418
		
1419
		date_default_timezone_set('UTC');
1420
		
1421
		$query_values = array();
1422
		$limit_query = '';
1423
		$additional_query = '';
1424
		$filter_query = $this->getFilter($filter,true,true);
1425
		
1426
		if ($aircraft_type != "")
1427
		{
1428
			if (!is_string($aircraft_type))
1429
			{
1430
				return false;
1431
			} else {
1432
				$additional_query = " AND (spotter_output.aircraft_icao = :aircraft_type)";
1433
				$query_values = array(':aircraft_type' => $aircraft_type);
1434
			}
1435
		}
1436
		
1437
		if ($limit != "")
1438
		{
1439
			$limit_array = explode(",", $limit);
1440
			
1441
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1442
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1443
			
1444
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1445
			{
1446
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1447
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1448
			}
1449
		}
1450
1451
		if ($sort != "")
1452
		{
1453
			$search_orderby_array = $this->getOrderBy();
1454
			$orderby_query = $search_orderby_array[$sort]['sql'];
1455
		} else {
1456
			$orderby_query = " ORDER BY spotter_output.date DESC";
1457
		}
1458
1459
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1460
1461
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1462
1463
		return $spotter_array;
1464
	}
1465
	
1466
	
1467
	/**
1468
	* Gets all the spotter information based on the aircraft registration
1469
	*
1470
	* @return Array the spotter information
1471
	*
1472
	*/
1473
	public function getSpotterDataByRegistration($registration = '', $limit = '', $sort = '', $filter = array())
1474
	{
1475
		global $global_query;
1476
		
1477
		date_default_timezone_set('UTC');
1478
		
1479
		$query_values = array();
1480
		$limit_query = '';
1481
		$additional_query = '';
1482
		
1483
		if ($registration != "")
1484
		{
1485
			if (!is_string($registration))
1486
			{
1487
				return false;
1488
			} else {
1489
				$additional_query = " (spotter_output.registration = :registration)";
1490
				$query_values = array(':registration' => $registration);
1491
			}
1492
		}
1493
		
1494
		if ($limit != "")
1495
		{
1496
			$limit_array = explode(",", $limit);
1497
			
1498
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1499
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1500
			
1501
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1502
			{
1503
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1504
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1505
			}
1506
		}
1507
1508
		if ($sort != "")
1509
		{
1510
			$search_orderby_array = $this->getOrderBy();
1511
			$orderby_query = $search_orderby_array[$sort]['sql'];
1512
		} else {
1513
			$orderby_query = " ORDER BY spotter_output.date DESC";
1514
		}
1515
		$filter_query = $this->getFilter($filter,true,true);
1516
1517
		//$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1518
		$query = $global_query.$filter_query." ".$additional_query." ".$orderby_query;
1519
1520
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1521
1522
		return $spotter_array;
1523
	}
1524
1525
	
1526
	
1527
	
1528
	/**
1529
	* Gets all the spotter information based on the airline
1530
	*
1531
	* @return Array the spotter information
1532
	*
1533
	*/
1534
	public function getSpotterDataByAirline($airline = '', $limit = '', $sort = '',$filters = array())
1535
	{
1536
		global $global_query;
1537
		
1538
		date_default_timezone_set('UTC');
1539
1540
		$query_values = array();
1541
		$limit_query = '';
1542
		$additional_query = '';
1543
		$filter_query = $this->getFilter($filters,true,true);
1544
		
1545
		if ($airline != "")
1546
		{
1547
			if (!is_string($airline))
1548
			{
1549
				return false;
1550
			} else {
1551
				$additional_query = " AND (spotter_output.airline_icao = :airline)";
1552
				$query_values = array(':airline' => $airline);
1553
			}
1554
		}
1555
		
1556
		if ($limit != "")
1557
		{
1558
			$limit_array = explode(",", $limit);
1559
			
1560
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1561
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1562
			
1563
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1564
			{
1565
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1566
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1567
			}
1568
		}
1569
		
1570
		if ($sort != "")
1571
		{
1572
			$search_orderby_array = $this->getOrderBy();
1573
			$orderby_query = $search_orderby_array[$sort]['sql'];
1574
		} else {
1575
			$orderby_query = " ORDER BY spotter_output.date DESC";
1576
		}
1577
1578
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1579
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1580
1581
		return $spotter_array;
1582
	}
1583
	
1584
	
1585
	/**
1586
	* Gets all the spotter information based on the airport
1587
	*
1588
	* @return Array the spotter information
1589
	*
1590
	*/
1591
	public function getSpotterDataByAirport($airport = '', $limit = '', $sort = '',$filters = array())
1592
	{
1593
		global $global_query;
1594
		
1595
		date_default_timezone_set('UTC');
1596
		$query_values = array();
1597
		$limit_query = '';
1598
		$additional_query = '';
1599
		$filter_query = $this->getFilter($filters,true,true);
1600
		
1601
		if ($airport != "")
1602
		{
1603
			if (!is_string($airport))
1604
			{
1605
				return false;
1606
			} else {
1607
				$additional_query .= " AND ((spotter_output.departure_airport_icao = :airport) OR (spotter_output.arrival_airport_icao = :airport))";
1608
				$query_values = array(':airport' => $airport);
1609
			}
1610
		}
1611
		
1612
		if ($limit != "")
1613
		{
1614
			$limit_array = explode(",", $limit);
1615
			
1616
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1617
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1618
			
1619
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1620
			{
1621
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1622
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1623
			}
1624
		}
1625
		
1626
		if ($sort != "")
1627
		{
1628
			$search_orderby_array = $this->getOrderBy();
1629
			$orderby_query = $search_orderby_array[$sort]['sql'];
1630
		} else {
1631
			$orderby_query = " ORDER BY spotter_output.date DESC";
1632
		}
1633
1634
		$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;
1635
1636
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1637
1638
		return $spotter_array;
1639
	}
1640
1641
1642
1643
	/**
1644
	* Gets all the spotter information based on the date
1645
	*
1646
	* @return Array the spotter information
1647
	*
1648
	*/
1649
	public function getSpotterDataByDate($date = '', $limit = '', $sort = '',$filter = array())
1650
	{
1651
		global $global_query, $globalTimezone, $globalDBdriver;
1652
		
1653
		$query_values = array();
1654
		$limit_query = '';
1655
		$additional_query = '';
1656
1657
		$filter_query = $this->getFilter($filter,true,true);
1658
		
1659
		if ($date != "")
1660
		{
1661
			if ($globalTimezone != '') {
1662
				date_default_timezone_set($globalTimezone);
1663
				$datetime = new DateTime($date);
1664
				$offset = $datetime->format('P');
1665
			} else {
1666
				date_default_timezone_set('UTC');
1667
				$datetime = new DateTime($date);
1668
				$offset = '+00:00';
1669
			}
1670
			if ($globalDBdriver == 'mysql') {
1671
				$additional_query = " AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date ";
1672
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':offset' => $offset);
1673
			} elseif ($globalDBdriver == 'pgsql') {
1674
				//$globalTimezone = 'UTC';
1675
				$additional_query = " AND to_char(spotter_output.date AT TIME ZONE :timezone,'YYYY-mm-dd') = :date ";
1676
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':timezone' => $globalTimezone);
1677
				//$additional_query = " AND to_char(spotter_output.date,'YYYY-mm-dd') = :date ";
1678
				//$query_values = array(':date' => $datetime->format('Y-m-d'));
1679
			}
1680
		}
1681
		
1682
		if ($limit != "")
1683
		{
1684
			$limit_array = explode(",", $limit);
1685
			
1686
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1687
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1688
			
1689
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1690
			{
1691
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1692
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1693
			}
1694
		}
1695
1696
		if ($sort != "")
1697
		{
1698
			$search_orderby_array = $this->getOrderBy();
1699
			$orderby_query = $search_orderby_array[$sort]['sql'];
1700
		} else {
1701
			$orderby_query = " ORDER BY spotter_output.date DESC";
1702
		}
1703
1704
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query.$orderby_query;
1705
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1706
		return $spotter_array;
1707
	}
1708
1709
1710
1711
	/**
1712
	* Gets all the spotter information based on the country name
1713
	*
1714
	* @return Array the spotter information
1715
	*
1716
	*/
1717
	public function getSpotterDataByCountry($country = '', $limit = '', $sort = '',$filters = array())
1718
	{
1719
		global $global_query;
1720
		
1721
		date_default_timezone_set('UTC');
1722
		
1723
		$query_values = array();
1724
		$limit_query = '';
1725
		$additional_query = '';
1726
		$filter_query = $this->getFilter($filters,true,true);
1727
		if ($country != "")
1728
		{
1729
			if (!is_string($country))
1730
			{
1731
				return false;
1732
			} else {
1733
				$additional_query .= " AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country))";
1734
				$additional_query .= " OR spotter_output.airline_country = :country";
1735
				$query_values = array(':country' => $country);
1736
			}
1737
		}
1738
		
1739
		if ($limit != "")
1740
		{
1741
			$limit_array = explode(",", $limit);
1742
			
1743
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1744
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1745
			
1746
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1747
			{
1748
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1749
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1750
			}
1751
		}
1752
					
1753
		if ($sort != "")
1754
		{
1755
			$search_orderby_array = $this->getOrderBy();
1756
			$orderby_query = $search_orderby_array[$sort]['sql'];
1757
		} else {
1758
			$orderby_query = " ORDER BY spotter_output.date DESC";
1759
		}
1760
1761
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1762
1763
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1764
1765
		return $spotter_array;
1766
	}	
1767
	
1768
	
1769
	/**
1770
	* Gets all the spotter information based on the manufacturer name
1771
	*
1772
	* @return Array the spotter information
1773
	*
1774
	*/
1775
	public function getSpotterDataByManufacturer($aircraft_manufacturer = '', $limit = '', $sort = '', $filters = array())
1776
	{
1777
		global $global_query;
1778
		
1779
		date_default_timezone_set('UTC');
1780
		
1781
		$query_values = array();
1782
		$additional_query = '';
1783
		$limit_query = '';
1784
		$filter_query = $this->getFilter($filters,true,true);
1785
		
1786
		if ($aircraft_manufacturer != "")
1787
		{
1788
			if (!is_string($aircraft_manufacturer))
1789
			{
1790
				return false;
1791
			} else {
1792
				$additional_query .= " AND (spotter_output.aircraft_manufacturer = :aircraft_manufacturer)";
1793
				$query_values = array(':aircraft_manufacturer' => $aircraft_manufacturer);
1794
			}
1795
		}
1796
		
1797
		if ($limit != "")
1798
		{
1799
			$limit_array = explode(",", $limit);
1800
			
1801
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1802
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1803
			
1804
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1805
			{
1806
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1807
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1808
			}
1809
		}
1810
1811
		if ($sort != "")
1812
		{
1813
			$search_orderby_array = $this->getOrderBy();
1814
			$orderby_query = $search_orderby_array[$sort]['sql'];
1815
		} else {
1816
			$orderby_query = " ORDER BY spotter_output.date DESC";
1817
		}
1818
1819
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1820
1821
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1822
1823
		return $spotter_array;
1824
	}
1825
1826
1827
  
1828
  
1829
	/**
1830
	* Gets a list of all aircraft that take a route
1831
	*
1832
	* @param String $departure_airport_icao ICAO code of departure airport
1833
	* @param String $arrival_airport_icao ICAO code of arrival airport
1834
	* @return Array the spotter information
1835
	*
1836
	*/
1837
	public function getSpotterDataByRoute($departure_airport_icao = '', $arrival_airport_icao = '', $limit = '', $sort = '', $filters = array())
1838
	{
1839
		global $global_query;
1840
		
1841
		$query_values = array();
1842
		$additional_query = '';
1843
		$limit_query = '';
1844
		$filter_query = $this->getFilter($filters,true,true);
1845
		if ($departure_airport_icao != "")
1846
		{
1847
			if (!is_string($departure_airport_icao))
1848
			{
1849
				return false;
1850
			} else {
1851
				$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
1852
				$additional_query .= " AND (spotter_output.departure_airport_icao = :departure_airport_icao)";
1853
				//$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";
1854
				$query_values = array(':departure_airport_icao' => $departure_airport_icao);
1855
			}
1856
		}
1857
		
1858
		if ($arrival_airport_icao != "")
1859
		{
1860
			if (!is_string($arrival_airport_icao))
1861
			{
1862
				return false;
1863
			} else {
1864
				$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
1865
				$additional_query .= " AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)";
1866
				//$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)";
1867
				$query_values = array_merge($query_values,array(':arrival_airport_icao' => $arrival_airport_icao));
1868
			}
1869
		}
1870
		
1871
		if ($limit != "")
1872
		{
1873
			$limit_array = explode(",", $limit);
1874
			
1875
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1876
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1877
			
1878
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1879
			{
1880
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1881
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1882
			}
1883
		}
1884
	
1885
		if ($sort != "")
1886
		{
1887
			$search_orderby_array = $this->getOrderBy();
1888
			$orderby_query = $search_orderby_array[$sort]['sql'];
1889
		} else {
1890
			$orderby_query = " ORDER BY spotter_output.date DESC";
1891
		}
1892
1893
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1894
          
1895
		//$result = mysqli_query($GLOBALS["___mysqli_ston"], $query);
1896
1897
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1898
1899
		return $spotter_array;
1900
	}
1901
	
1902
	
1903
	
1904
	/**
1905
	* Gets all the spotter information based on the special column in the table
1906
	*
1907
	* @return Array the spotter information
1908
	*
1909
	*/
1910
	public function getSpotterDataByHighlight($limit = '', $sort = '', $filter = array())
1911
	{
1912
		global $global_query;
1913
		
1914
		date_default_timezone_set('UTC');
1915
		$filter_query = $this->getFilter($filter,true,true);
1916
		$limit_query = '';
1917
		
1918
		if ($limit != "")
1919
		{
1920
			$limit_array = explode(",", $limit);
1921
			
1922
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1923
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1924
			
1925
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1926
			{
1927
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1928
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1929
			}
1930
		}
1931
		
1932
		if ($sort != "")
1933
		{
1934
			$search_orderby_array = $this->getOrderBy();
1935
			$orderby_query = $search_orderby_array[$sort]['sql'];
1936
		} else {
1937
			$orderby_query = " ORDER BY spotter_output.date DESC";
1938
		}
1939
1940
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' ".$orderby_query;
1941
1942
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1943
1944
		return $spotter_array;
1945
	}
1946
1947
	/**
1948
	* Gets all the highlight based on a aircraft registration
1949
	*
1950
	* @return String the highlight text
1951
	*
1952
	*/
1953
	public function getHighlightByRegistration($registration,$filter = array())
1954
	{
1955
		global $global_query;
1956
		
1957
		date_default_timezone_set('UTC');
1958
		$filter_query = $this->getFilter($filter,true,true);
1959
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
1960
		
1961
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' AND spotter_output.registration = :registration";
1962
		$sth = $this->db->prepare($query);
1963
		$sth->execute(array(':registration' => $registration));
1964
1965
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1966
		{
1967
			$highlight = $row['highlight'];
1968
		}
1969
		if (isset($highlight)) return $highlight;
1970
	}
1971
1972
	
1973
	/**
1974
	* Gets the squawk usage from squawk code
1975
	*
1976
	* @param String $squawk squawk code
1977
	* @param String $country country
1978
	* @return String usage
1979
	*
1980
	*/
1981
	public function getSquawkUsage($squawk = '',$country = 'FR')
1982
	{
1983
		
1984
		$squawk = filter_var($squawk,FILTER_SANITIZE_STRING);
1985
		$country = filter_var($country,FILTER_SANITIZE_STRING);
1986
1987
		$query  = "SELECT squawk.* FROM squawk WHERE squawk.code = :squawk AND squawk.country = :country LIMIT 1";
1988
		$query_values = array(':squawk' => ltrim($squawk,'0'), ':country' => $country);
1989
		
1990
		$sth = $this->db->prepare($query);
1991
		$sth->execute($query_values);
1992
    
1993
		$row = $sth->fetch(PDO::FETCH_ASSOC);
1994
		$sth->closeCursor();
1995
		if (count($row) > 0) {
1996
			return $row['usage'];
1997
		} else return '';
1998
	}
1999
2000
	/**
2001
	* Gets the airport icao from the iata
2002
	*
2003
	* @param String $airport_iata the iata code of the airport
2004
	* @return String airport iata
2005
	*
2006
	*/
2007
	public function getAirportIcao($airport_iata = '')
2008
	{
2009
		
2010
		$airport_iata = filter_var($airport_iata,FILTER_SANITIZE_STRING);
2011
2012
		$query  = "SELECT airport.* FROM airport WHERE airport.iata = :airport LIMIT 1";
2013
		$query_values = array(':airport' => $airport_iata);
2014
		
2015
		$sth = $this->db->prepare($query);
2016
		$sth->execute($query_values);
2017
		
2018
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2019
		$sth->closeCursor();
2020
		if (count($row) > 0) {
2021
			return $row['icao'];
2022
		} else return '';
2023
	}
2024
2025
	/**
2026
	* Gets the airport distance
2027
	*
2028
	* @param String $airport_icao the icao code of the airport
2029
	* @param Float $latitude the latitude
2030
	* @param Float $longitude the longitude
2031
	* @return Float distance to the airport
2032
	*
2033
	*/
2034
	public function getAirportDistance($airport_icao,$latitude,$longitude)
2035
	{
2036
		
2037
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
2038
2039
		$query  = "SELECT airport.latitude, airport.longitude FROM airport WHERE airport.icao = :airport LIMIT 1";
2040
		$query_values = array(':airport' => $airport_icao);
2041
		$sth = $this->db->prepare($query);
2042
		$sth->execute($query_values);
2043
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2044
		$sth->closeCursor();
2045
		if (count($row) > 0) {
2046
			$airport_latitude = $row['latitude'];
2047
			$airport_longitude = $row['longitude'];
2048
			$Common = new Common();
2049
			return $Common->distance($latitude,$longitude,$airport_latitude,$airport_longitude);
2050
		} else return '';
2051
	}
2052
	
2053
	/**
2054
	* Gets the airport info based on the icao
2055
	*
2056
	* @param String $airport the icao code of the airport
2057
	* @return Array airport information
2058
	*
2059
	*/
2060
	public function getAllAirportInfo($airport = '')
2061
	{
2062
		
2063
		$airport = filter_var($airport,FILTER_SANITIZE_STRING);
2064
2065
		$query_values = array();
2066
		if ($airport == 'NA') {
2067
			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' => ''));
2068
		} elseif ($airport == '') {
2069
			$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";
2070
		} else {
2071
			$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";
2072
			$query_values = array(':airport' => $airport);
2073
		}
2074
		
2075
		$sth = $this->db->prepare($query);
2076
		$sth->execute($query_values);
2077
		/*
2078
		$airport_array = array();
2079
		$temp_array = array();
2080
		
2081
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2082
		{
2083
			$temp_array['name'] = $row['name'];
2084
			$temp_array['city'] = $row['city'];
2085
			$temp_array['country'] = $row['country'];
2086
			$temp_array['iata'] = $row['iata'];
2087
			$temp_array['icao'] = $row['icao'];
2088
			$temp_array['latitude'] = $row['latitude'];
2089
			$temp_array['longitude'] = $row['longitude'];
2090
			$temp_array['altitude'] = $row['altitude'];
2091
			$temp_array['home_link'] = $row['home_link'];
2092
			$temp_array['wikipedia_link'] = $row['wikipedia_link'];
2093
			$temp_array['image'] = $row['image'];
2094
			$temp_array['image_thumb'] = $row['image_thumb'];
2095
2096
			$airport_array[] = $temp_array;
2097
		}
2098
2099
		return $airport_array;
2100
		*/
2101
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2102
	}
2103
	
2104
	/**
2105
	* Gets the airport info based on the country
2106
	*
2107
	* @param Array $countries Airports countries
2108
	* @return Array airport information
2109
	*
2110
	*/
2111
	public function getAllAirportInfobyCountry($countries)
2112
	{
2113
		$lst_countries = '';
2114
		foreach ($countries as $country) {
2115
			$country = filter_var($country,FILTER_SANITIZE_STRING);
2116
			if ($lst_countries == '') {
2117
				$lst_countries = "'".$country."'";
2118
			} else {
2119
				$lst_countries .= ",'".$country."'";
2120
			}
2121
		}
2122
		$query  = "SELECT airport.* FROM airport WHERE airport.country IN (".$lst_countries.")";
2123
		
2124
		$sth = $this->db->prepare($query);
2125
		$sth->execute();
2126
    
2127
		$airport_array = array();
2128
		$temp_array = array();
2129
		
2130
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2131
		{
2132
			$temp_array['name'] = $row['name'];
2133
			$temp_array['city'] = $row['city'];
2134
			$temp_array['country'] = $row['country'];
2135
			$temp_array['iata'] = $row['iata'];
2136
			$temp_array['icao'] = $row['icao'];
2137
			$temp_array['latitude'] = $row['latitude'];
2138
			$temp_array['longitude'] = $row['longitude'];
2139
			$temp_array['altitude'] = $row['altitude'];
2140
2141
			$airport_array[] = $temp_array;
2142
		}
2143
2144
		return $airport_array;
2145
	}
2146
	
2147
	/**
2148
	* Gets airports info based on the coord
2149
	*
2150
	* @param Array $coord Airports longitude min,latitude min, longitude max, latitude max
2151
	* @return Array airport information
2152
	*
2153
	*/
2154
	public function getAllAirportInfobyCoord($coord)
2155
	{
2156
		global $globalDBdriver;
2157
		if (is_array($coord)) {
2158
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2159
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2160
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2161
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2162
		} else return array();
2163
		if ($globalDBdriver == 'mysql') {
2164
			$query  = "SELECT airport.* FROM airport WHERE airport.latitude BETWEEN ".$minlat." AND ".$maxlat." AND airport.longitude BETWEEN ".$minlong." AND ".$maxlong." AND airport.type != 'closed'";
2165
		} else {
2166
			$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'";
2167
		}
2168
		$sth = $this->db->prepare($query);
2169
		$sth->execute();
2170
    
2171
		$airport_array = array();
2172
		
2173
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2174
		{
2175
			$temp_array = $row;
2176
2177
			$airport_array[] = $temp_array;
2178
		}
2179
2180
		return $airport_array;
2181
	}
2182
2183
	/**
2184
	* Gets waypoints info based on the coord
2185
	*
2186
	* @param Array $coord waypoints coord
2187
	* @return Array airport information
2188
	*
2189
	*/
2190
	public function getAllWaypointsInfobyCoord($coord)
2191
	{
2192
		if (is_array($coord)) {
2193
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2194
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2195
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2196
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2197
		} else return array();
2198
		//$query  = "SELECT waypoints.* FROM waypoints WHERE waypoints.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_begin BETWEEN ".$minlong." AND ".$maxlong;
2199
		$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.")";
2200
		//$query  = "SELECT waypoints.* FROM waypoints";
2201
		//$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";
2202
		//$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;
2203
		//$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;
2204
		//echo $query;
2205
		
2206
		$sth = $this->db->prepare($query);
2207
		$sth->execute();
2208
    
2209
		$waypoints_array = array();
2210
		
2211
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2212
		{
2213
			$temp_array = $row;
2214
2215
			$waypoints_array[] = $temp_array;
2216
		}
2217
2218
		return $waypoints_array;
2219
	}
2220
	
2221
	
2222
	/**
2223
	* Gets the airline info based on the icao code or iata code
2224
	*
2225
	* @param String $airline_icao the iata code of the airport
2226
	* @return Array airport information
2227
	*
2228
	*/
2229
	public function getAllAirlineInfo($airline_icao, $fromsource = NULL)
2230
	{
2231
		global $globalUseRealAirlines;
2232
		if (isset($globalUseRealAirlines) && $globalUseRealAirlines) $fromsource = NULL;
2233
		$airline_icao = strtoupper(filter_var($airline_icao,FILTER_SANITIZE_STRING));
2234
		if ($airline_icao == 'NA') {
2235
			$airline_array = array();
2236
			$airline_array[] = array('name' => 'Not Available','iata' => 'NA', 'icao' => 'NA', 'callsign' => '', 'country' => 'NA', 'type' =>'');
2237
			return $airline_array;
2238
		} else {
2239
			if (strlen($airline_icao) == 2) {
2240
				if ($fromsource === NULL) {
2241
					$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";
2242
				} else {
2243
					$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";
2244
				}
2245
			} else {
2246
				if ($fromsource === NULL) {
2247
					$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";
2248
				} else {
2249
					$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";
2250
				}
2251
			}
2252
			
2253
			$sth = $this->db->prepare($query);
2254
			if ($fromsource === NULL) {
2255
				$sth->execute(array(':airline_icao' => $airline_icao));
2256
			} else {
2257
				$sth->execute(array(':airline_icao' => $airline_icao,':fromsource' => $fromsource));
2258
			}
2259
                        /*
2260
			$airline_array = array();
2261
			$temp_array = array();
2262
		
2263
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2264
			{
2265
				$temp_array['name'] = $row['name'];
2266
				$temp_array['iata'] = $row['iata'];
2267
				$temp_array['icao'] = $row['icao'];
2268
				$temp_array['callsign'] = $row['callsign'];
2269
				$temp_array['country'] = $row['country'];
2270
				$temp_array['type'] = $row['type'];
2271
				$airline_array[] = $temp_array;
2272
			}
2273
			return $airline_array;
2274
			*/
2275
			$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2276
			if (empty($result) && $fromsource !== NULL) {
2277
				/*
2278
				$query = 'SELECT COUNT(*) AS nb FROM airlines WHERE forsource = :fromsource';
2279
				$sth = $this->db->prepare($query);
2280
				$sth->execute(array(':fromsource' => $fromsource));
2281
				$row = $sth->fetch(PDO::FETCH_ASSOC);
2282
				$sth->closeCursor();
2283
				if ($row['nb'] == 0) $result = $this->getAllAirlineInfo($airline_icao);
2284
				*/
2285
				$result = $this->getAllAirlineInfo($airline_icao);
2286
			}
2287
			return $result;
2288
		}
2289
	}
2290
	
2291
	/**
2292
	* Gets the airline info based on the airline name
2293
	*
2294
	* @param String $airline_name the name of the airline
2295
	* @return Array airline information
2296
	*
2297
	*/
2298
	public function getAllAirlineInfoByName($airline_name, $fromsource = NULL)
2299
	{
2300
		global $globalUseRealAirlines;
2301
		if (isset($globalUseRealAirlines) && $globalUseRealAirlines) $fromsource = NULL;
2302
		$airline_name = strtolower(filter_var($airline_name,FILTER_SANITIZE_STRING));
2303
		$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";
2304
		$sth = $this->db->prepare($query);
2305
		if ($fromsource === NULL) {
2306
			$sth->execute(array(':airline_name' => $airline_name));
2307
		} else {
2308
			$sth->execute(array(':airline_name' => $airline_name,':fromsource' => $fromsource));
2309
		}
2310
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2311
		if (empty($result) && $fromsource !== NULL) {
2312
			$query = 'SELECT COUNT(*) AS nb FROM airlines WHERE forsource = :fromsource';
2313
			$sth = $this->db->prepare($query);
2314
			$sth->execute(array(':fromsource' => $fromsource));
2315
			$row = $sth->fetch(PDO::FETCH_ASSOC);
2316
			$sth->closeCursor();
2317
			if ($row['nb'] == 0) $result = $this->getAllAirlineInfoByName($airline_name);
2318
		}
2319
		return $result;
2320
	}
2321
	
2322
	
2323
	
2324
	/**
2325
	* Gets the aircraft info based on the aircraft type
2326
	*
2327
	* @param String $aircraft_type the aircraft type
2328
	* @return Array aircraft information
2329
	*
2330
	*/
2331
	public function getAllAircraftInfo($aircraft_type)
2332
	{
2333
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2334
2335
		if ($aircraft_type == 'NA') {
2336
			return array(array('icao' => 'NA','type' => 'Not Available', 'manufacturer' => 'Not Available', 'aircraft_shadow' => NULL));
2337
		}
2338
		$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";
2339
		
2340
		$sth = $this->db->prepare($query);
2341
		$sth->execute(array(':aircraft_type' => $aircraft_type));
2342
		/*
2343
		$aircraft_array = array();
2344
		$temp_array = array();
2345
		
2346
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2347
		{
2348
			$temp_array = array();
2349
			$temp_array['icao'] = $row['icao'];
2350
			$temp_array['type'] = $row['type'];
2351
			$temp_array['manufacturer'] = $row['manufacturer'];
2352
			$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
2353
2354
			$aircraft_array[] = $temp_array;
2355
		}
2356
		return $aircraft_array;
2357
		*/
2358
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2359
	}
2360
2361
	/**
2362
	* Gets the aircraft icao based on the aircraft name/type
2363
	*
2364
	* @param String $aircraft_type the aircraft type
2365
	* @return String aircraft information
2366
	*
2367
	*/
2368
	public function getAircraftIcao($aircraft_type)
2369
	{
2370
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2371
		$all_aircraft = array('737-300' => 'B733',
2372
				'777-200' => 'B772',
2373
				'777-200ER' => 'B772',
2374
				'777-300ER' => 'B77W',
2375
				'c172p' => 'C172',
2376
				'aerostar' => 'AEST',
2377
				'A320-211' => 'A320',
2378
				'747-8i' => 'B748',
2379
				'A380' => 'A388');
2380
		if (isset($all_aircraft[$aircraft_type])) return $all_aircraft[$aircraft_type];
2381
2382
		$query  = "SELECT aircraft.icao FROM aircraft WHERE aircraft.type LIKE :saircraft_type OR aircraft.type = :aircraft_type OR aircraft.icao = :aircraft_type LIMIT 1";
2383
		$aircraft_type = strtoupper($aircraft_type);
2384
		$sth = $this->db->prepare($query);
2385
		$sth->execute(array(':saircraft_type' => '%'.$aircraft_type.'%',':aircraft_type' => $aircraft_type,));
2386
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2387
		if (isset($result[0]['icao'])) return $result[0]['icao'];
2388
		else return '';
2389
	}
2390
	
2391
	/**
2392
	* Gets the aircraft info based on the aircraft modes
2393
	*
2394
	* @param String $aircraft_modes the aircraft ident (hex)
2395
	* @return String aircraft type
2396
	*
2397
	*/
2398
	public function getAllAircraftType($aircraft_modes)
2399
	{
2400
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
2401
2402
		$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes ORDER BY FirstCreated DESC LIMIT 1";
2403
		
2404
		$sth = $this->db->prepare($query);
2405
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
2406
2407
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2408
		$sth->closeCursor();
2409
		if (isset($row['icaotypecode'])) {
2410
			$icao = $row['icaotypecode'];
2411
			if (isset($this->aircraft_correct_icaotype[$icao])) $icao = $this->aircraft_correct_icaotype[$icao];
2412
			return $icao;
2413
		} else return '';
2414
	}
2415
2416
	/**
2417
	* Gets the aircraft info based on the aircraft registration
2418
	*
2419
	* @param String $registration the aircraft registration
2420
	* @return String aircraft type
2421
	*
2422
	*/
2423
	public function getAllAircraftTypeByRegistration($registration)
2424
	{
2425
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2426
2427
		$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.registration = :registration ORDER BY FirstCreated DESC LIMIT 1";
2428
		
2429
		$sth = $this->db->prepare($query);
2430
		$sth->execute(array(':registration' => $registration));
2431
2432
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2433
		$sth->closeCursor();
2434
		if (isset($row['icaotypecode'])) {
2435
			return $row['icaotypecode'];
2436
		} else return '';
2437
	}
2438
2439
	/**
2440
	* Gets the spotter_id and flightaware_id based on the aircraft registration
2441
	*
2442
	* @param String $registration the aircraft registration
2443
	* @return Array spotter_id and flightaware_id
2444
	*
2445
	*/
2446
	public function getAllIDByRegistration($registration)
2447
	{
2448
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2449
2450
		$query  = "SELECT spotter_id,flightaware_id, date FROM spotter_output WHERE spotter_output.registration = :registration";
2451
		
2452
		$sth = $this->db->prepare($query);
2453
		$sth->execute(array(':registration' => $registration));
2454
2455
		$idarray = array();
2456
		while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
2457
			$date = $row['date'];
2458
			$idarray[$date] = array('flightaware_id' => $row['flightaware_id'],'spotter_id' => $row['spotter_id']);
2459
		}
2460
		return $idarray;
2461
	}
2462
2463
	/**
2464
	* Gets correct aircraft operator code
2465
	*
2466
	* @param String $operator the aircraft operator code (callsign)
2467
	* @return String aircraft operator code
2468
	*
2469
	*/
2470
	public function getOperator($operator)
2471
	{
2472
		$operator = filter_var($operator,FILTER_SANITIZE_STRING);
2473
		$query  = "SELECT translation.operator_correct FROM translation WHERE translation.operator = :operator LIMIT 1";
2474
		
2475
		$sth = $this->db->prepare($query);
2476
		$sth->execute(array(':operator' => $operator));
2477
2478
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2479
		$sth->closeCursor();
2480
		if (isset($row['operator_correct'])) {
2481
			return $row['operator_correct'];
2482
		} else return $operator;
2483
	}
2484
2485
	/**
2486
	* Gets the aircraft route based on the aircraft callsign
2487
	*
2488
	* @param String $callsign the aircraft callsign
2489
	* @return Array aircraft type
2490
	*
2491
	*/
2492
	public function getRouteInfo($callsign)
2493
	{
2494
		$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
2495
                if ($callsign == '') return array();
2496
		$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";
2497
		
2498
		$sth = $this->db->prepare($query);
2499
		$sth->execute(array(':callsign' => $callsign));
2500
2501
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2502
		$sth->closeCursor();
2503
		if (count($row) > 0) {
2504
			return $row;
2505
		} else return array();
2506
	}
2507
	
2508
	/**
2509
	* Gets the aircraft info based on the aircraft registration
2510
	*
2511
	* @param String $registration the aircraft registration
2512
	* @return Array aircraft information
2513
	*
2514
	*/
2515
	public function getAircraftInfoByRegistration($registration)
2516
	{
2517
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2518
2519
		$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";
2520
		
2521
		$sth = $this->db->prepare($query);
2522
		$sth->execute(array(':registration' => $registration));
2523
2524
		$aircraft_array = array();
2525
		$temp_array = array();
2526
		
2527
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2528
		{
2529
			$temp_array['airline_icao'] = $row['airline_icao'];
2530
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2531
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2532
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2533
2534
			$aircraft_array[] = $temp_array;
2535
		}
2536
2537
		return $aircraft_array;
2538
	}
2539
	
2540
	/**
2541
	* Gets the aircraft owner & base based on the aircraft registration
2542
	*
2543
	* @param String $registration the aircraft registration
2544
	* @return Array aircraft information
2545
	*
2546
	*/
2547
	public function getAircraftOwnerByRegistration($registration)
2548
	{
2549
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2550
		$Connection = new Connection($this->db);
2551
		if ($Connection->tableExists('aircraft_owner')) {
2552
			$query  = "SELECT aircraft_owner.base, aircraft_owner.owner, aircraft_owner.date_first_reg FROM aircraft_owner WHERE registration = :registration LIMIT 1";
2553
			$sth = $this->db->prepare($query);
2554
			$sth->execute(array(':registration' => $registration));
2555
			$result = $sth->fetch(PDO::FETCH_ASSOC);
2556
			$sth->closeCursor();
2557
			return $result;
2558
		} else return array();
2559
	}
2560
	
2561
  
2562
  /**
2563
	* Gets all flights (but with only little info)
2564
	*
2565
	* @return Array basic flight information
2566
	*
2567
	*/
2568
	public function getAllFlightsforSitemap()
2569
	{
2570
		//$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 ";
2571
		$query  = "SELECT spotter_output.spotter_id FROM spotter_output ORDER BY spotter_id DESC LIMIT 200 OFFSET 0";
2572
		
2573
		$sth = $this->db->prepare($query);
2574
		$sth->execute();
2575
                  /*
2576
		$flight_array = array();
2577
		$temp_array = array();
2578
		
2579
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2580
		{
2581
			$temp_array['spotter_id'] = $row['spotter_id'];
2582
//			$temp_array['ident'] = $row['ident'];
2583
//			$temp_array['airline_name'] = $row['airline_name'];
2584
//			$temp_array['aircraft_type'] = $row['aircraft_icao'];
2585
//			$temp_array['aircraft_name'] = $row['aircraft_name'];
2586
			//$temp_array['image'] = $row['image'];
2587
2588
			$flight_array[] = $temp_array;
2589
		}
2590
2591
		return $flight_array;
2592
		*/
2593
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2594
	}
2595
  
2596
	/**
2597
	* Gets a list of all aircraft manufacturers
2598
	*
2599
	* @return Array list of aircraft types
2600
	*
2601
	*/
2602
	public function getAllManufacturers()
2603
	{
2604
		/*
2605
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer AS aircraft_manufacturer
2606
								FROM spotter_output
2607
								WHERE spotter_output.aircraft_manufacturer <> '' 
2608
								ORDER BY spotter_output.aircraft_manufacturer ASC";
2609
		  */
2610
		
2611
		$query = "SELECT DISTINCT manufacturer AS aircraft_manufacturer FROM aircraft WHERE manufacturer <> '' ORDER BY manufacturer ASC";
2612
		$sth = $this->db->prepare($query);
2613
		$sth->execute();
2614
2615
		$manufacturer_array = array();
2616
		$temp_array = array();
2617
		
2618
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2619
		{
2620
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2621
2622
			$manufacturer_array[] = $temp_array;
2623
		}
2624
2625
		return $manufacturer_array;
2626
	}
2627
  
2628
  
2629
  /**
2630
	* Gets a list of all aircraft types
2631
	*
2632
	* @return Array list of aircraft types
2633
	*
2634
	*/
2635
	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...
2636
	{
2637
		/*
2638
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao AS aircraft_icao, spotter_output.aircraft_name AS aircraft_name
2639
								FROM spotter_output  
2640
								WHERE spotter_output.aircraft_icao <> '' 
2641
								ORDER BY spotter_output.aircraft_name ASC";
2642
								
2643
		*/
2644
		//$filter_query = $this->getFilter($filters,true,true);
2645
		//$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";
2646
2647
		$query = "SELECT DISTINCT icao AS aircraft_icao, type AS aircraft_name, manufacturer AS aircraft_manufacturer FROM aircraft WHERE icao <> '' ORDER BY aircraft_manufacturer ASC";
2648
		
2649
		$sth = $this->db->prepare($query);
2650
		$sth->execute();
2651
2652
		$aircraft_array = array();
2653
		$temp_array = array();
2654
		
2655
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2656
		{
2657
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2658
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2659
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2660
2661
			$aircraft_array[] = $temp_array;
2662
		}
2663
2664
		return $aircraft_array;
2665
	}
2666
	
2667
	
2668
	/**
2669
	* Gets a list of all aircraft registrations
2670
	*
2671
	* @return Array list of aircraft registrations
2672
	*
2673
	*/
2674
	public function getAllAircraftRegistrations($filters = array())
2675
	{
2676
		$filter_query = $this->getFilter($filters,true,true);
2677
		$query  = "SELECT DISTINCT spotter_output.registration 
2678
				FROM spotter_output".$filter_query." spotter_output.registration <> '' 
2679
				ORDER BY spotter_output.registration ASC";
2680
2681
		$sth = $this->db->prepare($query);
2682
		$sth->execute();
2683
2684
		$aircraft_array = array();
2685
		$temp_array = array();
2686
		
2687
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2688
		{
2689
			$temp_array['registration'] = $row['registration'];
2690
2691
			$aircraft_array[] = $temp_array;
2692
		}
2693
2694
		return $aircraft_array;
2695
	}
2696
2697
	/**
2698
	* Gets all source name
2699
	*
2700
	* @param String type format of source
2701
	* @return Array list of source name
2702
	*
2703
	*/
2704
	public function getAllSourceName($type = '',$filters = array())
2705
	{
2706
		$filter_query = $this->getFilter($filters,true,true);
2707
		$query_values = array();
2708
		$query  = "SELECT DISTINCT spotter_output.source_name 
2709
				FROM spotter_output".$filter_query." spotter_output.source_name <> ''";
2710
		if ($type != '') {
2711
			$query_values = array(':type' => $type);
2712
			$query .= " AND format_source = :type";
2713
		}
2714
		$query .= " ORDER BY spotter_output.source_name ASC";
2715
2716
		$sth = $this->db->prepare($query);
2717
		if (!empty($query_values)) $sth->execute($query_values);
2718
		else $sth->execute();
2719
2720
		$source_array = array();
2721
		$temp_array = array();
2722
		
2723
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2724
		{
2725
			$temp_array['source_name'] = $row['source_name'];
2726
			$source_array[] = $temp_array;
2727
		}
2728
		return $source_array;
2729
	}
2730
2731
2732
2733
	/**
2734
	* Gets a list of all airline names
2735
	*
2736
	* @return Array list of airline names
2737
	*
2738
	*/
2739
	public function getAllAirlineNames($airline_type = '',$forsource = NULL,$filters = array())
2740
	{
2741
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2742
		$filter_query = $this->getFilter($filters,true,true);
2743
		$airline_type = filter_var($airline_type,FILTER_SANITIZE_STRING);
2744
		if ($airline_type == '' || $airline_type == 'all') {
2745
			/*
2746
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2747
								FROM spotter_output
2748
								WHERE spotter_output.airline_icao <> '' 
2749
								ORDER BY spotter_output.airline_name ASC";
2750
			*/
2751
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2752
			elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2753
			elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2754
			if ($forsource === NULL) {
2755
				$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";
2756
				$query_data = array();
2757
			} else {
2758
				$query = "SELECT DISTINCT icao AS airline_icao, name AS airline_name, type AS airline_type FROM airlines WHERE forsource = :forsource ORDER BY name ASC";
2759
				$query_data = array(':forsource' => $forsource);
2760
			}
2761
		} else {
2762
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2763
					FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
2764
					AND spotter_output.airline_type = :airline_type 
2765
					ORDER BY spotter_output.airline_icao ASC";
2766
			$query_data = array(':airline_type' => $airline_type);
2767
		}
2768
		
2769
		$sth = $this->db->prepare($query);
2770
		$sth->execute($query_data);
2771
    
2772
		$airline_array = array();
2773
		$temp_array = array();
2774
		
2775
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2776
		{
2777
			$temp_array['airline_icao'] = $row['airline_icao'];
2778
			$temp_array['airline_name'] = $row['airline_name'];
2779
			$temp_array['airline_type'] = $row['airline_type'];
2780
2781
			$airline_array[] = $temp_array;
2782
		}
2783
		return $airline_array;
2784
	}
2785
	
2786
	/**
2787
	* Gets a list of all alliance names
2788
	*
2789
	* @return Array list of alliance names
2790
	*
2791
	*/
2792
	public function getAllAllianceNames($forsource = NULL,$filters = array())
2793
	{
2794
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2795
		$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...
2796
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2797
		elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2798
		elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2799
		if ($forsource === NULL) {
2800
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND forsource IS NULL ORDER BY alliance ASC";
2801
			$query_data = array();
2802
		} else {
2803
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND  forsource = :forsource ORDER BY alliance ASC";
2804
			$query_data = array(':forsource' => $forsource);
2805
		}
2806
		
2807
		$sth = $this->db->prepare($query);
2808
		$sth->execute($query_data);
2809
    
2810
		$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...
2811
		$alliance_array = $sth->fetchAll(PDO::FETCH_ASSOC);
2812
		return $alliance_array;
2813
	}
2814
	
2815
	/**
2816
	* Gets a list of all airline countries
2817
	*
2818
	* @return Array list of airline countries
2819
	*
2820
	*/
2821
	public function getAllAirlineCountries($filters = array())
2822
	{
2823
		$filter_query = $this->getFilter($filters,true,true);
2824
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
2825
				FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
2826
				ORDER BY spotter_output.airline_country ASC";
2827
		
2828
		//$query = "SELECT DISTINCT country AS airline_country FROM airlines WHERE country <> '' AND active = 'Y' ORDER BY country ASC";
2829
		$sth = $this->db->prepare($query);
2830
		$sth->execute();
2831
2832
		$airline_array = array();
2833
		$temp_array = array();
2834
		
2835
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2836
		{
2837
			$temp_array['airline_country'] = $row['airline_country'];
2838
2839
			$airline_array[] = $temp_array;
2840
		}
2841
2842
		return $airline_array;
2843
	}
2844
2845
	
2846
	
2847
	/**
2848
	* Gets a list of all departure & arrival names
2849
	*
2850
	* @return Array list of airport names
2851
	*
2852
	*/
2853
	public function getAllAirportNames($filters = array())
2854
	{
2855
		$filter_query = $this->getFilter($filters,true,true);
2856
		$airport_array = array();
2857
		$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
2858
				FROM spotter_output".$filter_query." spotter_output.departure_airport_icao <> '' AND spotter_output.departure_airport_icao <> 'NA' 
2859
				ORDER BY spotter_output.departure_airport_city ASC";
2860
		
2861
		//$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";
2862
		$sth = $this->db->prepare($query);
2863
		$sth->execute();
2864
2865
		$temp_array = array();
2866
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2867
		{
2868
			$temp_array['airport_icao'] = $row['airport_icao'];
2869
			$temp_array['airport_name'] = $row['airport_name'];
2870
			$temp_array['airport_city'] = $row['airport_city'];
2871
			$temp_array['airport_country'] = $row['airport_country'];
2872
2873
			$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2874
		}
2875
2876
		$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
2877
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> '' AND spotter_output.arrival_airport_icao <> 'NA' 
2878
								ORDER BY spotter_output.arrival_airport_city ASC";
2879
					
2880
		$sth = $this->db->prepare($query);
2881
		$sth->execute();
2882
2883
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2884
			{
2885
		//	if ($airport_array[$row['airport_city'].",".$row['airport_name']]['airport_icao'] != $row['airport_icao'])
2886
		//	{
2887
				$temp_array['airport_icao'] = $row['airport_icao'];
2888
				$temp_array['airport_name'] = $row['airport_name'];
2889
				$temp_array['airport_city'] = $row['airport_city'];
2890
				$temp_array['airport_country'] = $row['airport_country'];
2891
				
2892
				$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2893
		//	}
2894
		}
2895
2896
		return $airport_array;
2897
	} 
2898
2899
	/**
2900
	* Gets a list of all owner names
2901
	*
2902
	* @return Array list of owner names
2903
	*
2904
	*/
2905
	public function getAllOwnerNames($filters = array())
2906
	{
2907
		$filter_query = $this->getFilter($filters,true,true);
2908
		$query  = "SELECT DISTINCT spotter_output.owner_name
2909
				FROM spotter_output".$filter_query." spotter_output.owner_name <> '' 
2910
				ORDER BY spotter_output.owner_name ASC";
2911
		
2912
		$sth = $this->db->prepare($query);
2913
		$sth->execute();
2914
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2915
	} 
2916
2917
	/**
2918
	* Gets a list of all pilot names and pilot ids
2919
	*
2920
	* @return Array list of pilot names and pilot ids
2921
	*
2922
	*/
2923
	public function getAllPilotNames($filters = array())
2924
	{
2925
		$filter_query = $this->getFilter($filters,true,true);
2926
		$query  = "SELECT DISTINCT spotter_output.pilot_name, spotter_output.pilot_id
2927
				FROM spotter_output".$filter_query." spotter_output.pilot_name <> '' 
2928
				ORDER BY spotter_output.pilot_name ASC";
2929
		
2930
		$sth = $this->db->prepare($query);
2931
		$sth->execute();
2932
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2933
	} 
2934
	
2935
	
2936
	/**
2937
	* Gets a list of all departure & arrival airport countries
2938
	*
2939
	* @return Array list of airport countries
2940
	*
2941
	*/
2942
	public function getAllAirportCountries($filters = array())
2943
	{
2944
		$airport_array = array();
2945
					
2946
		  /*
2947
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
2948
								FROM spotter_output
2949
								WHERE spotter_output.departure_airport_country <> '' 
2950
								ORDER BY spotter_output.departure_airport_country ASC";
2951
		*/
2952
		$query = "SELECT DISTINCT country AS airport_country FROM airport ORDER BY country ASC";
2953
		
2954
		$sth = $this->db->prepare($query);
2955
		$sth->execute();
2956
   
2957
		$temp_array = array();
2958
		
2959
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2960
		{
2961
			$temp_array['airport_country'] = $row['airport_country'];
2962
2963
			$airport_array[$row['airport_country']] = $temp_array;
2964
		}
2965
		$filter_query = $this->getFilter($filters,true,true);
2966
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
2967
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
2968
								ORDER BY spotter_output.arrival_airport_country ASC";
2969
					
2970
		$sth = $this->db->prepare($query);
2971
		$sth->execute();
2972
		
2973
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2974
		{
2975
			if (isset($airport_array[$row['airport_country']]['airport_country']) && $airport_array[$row['airport_country']]['airport_country'] != $row['airport_country'])
2976
			{
2977
				$temp_array['airport_country'] = $row['airport_country'];
2978
				$airport_array[$row['airport_country']] = $temp_array;
2979
			}
2980
		}
2981
2982
		return $airport_array;
2983
	} 
2984
	
2985
	
2986
	
2987
	
2988
	/**
2989
	* Gets a list of all countries (airline, departure airport & arrival airport)
2990
	*
2991
	* @return Array list of countries
2992
	*
2993
	*/
2994
	public function getAllCountries($filters = array())
2995
	{
2996
		$Connection= new Connection($this->db);
2997
		if ($Connection->tableExists('countries')) {
2998
			$query  = "SELECT countries.name AS airport_country
2999
				FROM countries
3000
				ORDER BY countries.name ASC";
3001
			$sth = $this->db->prepare($query);
3002
			$sth->execute();
3003
   
3004
			$temp_array = array();
3005
			$country_array = array();
3006
		
3007
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
3008
			{
3009
				$temp_array['country'] = $row['airport_country'];
3010
				$country_array[$row['airport_country']] = $temp_array;
3011
			}
3012
		} else {
3013
			$filter_query = $this->getFilter($filters,true,true);
3014
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
3015
								FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' 
3016
								ORDER BY spotter_output.departure_airport_country ASC";
3017
3018
			$sth = $this->db->prepare($query);
3019
			$sth->execute();
3020
   
3021
			$temp_array = array();
3022
			$country_array = array();
3023
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
3024
			{
3025
				$temp_array['country'] = $row['airport_country'];
3026
				$country_array[$row['airport_country']] = $temp_array;
3027
			}
3028
3029
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
3030
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
3031
								ORDER BY spotter_output.arrival_airport_country ASC";
3032
					
3033
		$sth = $this->db->prepare($query);
3034
		$sth->execute();
3035
		
3036
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3037
		{
3038
			if ($country_array[$row['airport_country']]['country'] != $row['airport_country'])
3039
			{
3040
				$temp_array['country'] = $row['airport_country'];
3041
				
3042
				$country_array[$row['country']] = $temp_array;
3043
			}
3044
		}
3045
		
3046
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
3047
								FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
3048
								ORDER BY spotter_output.airline_country ASC";
3049
					
3050
		$sth = $this->db->prepare($query);
3051
		$sth->execute();
3052
		
3053
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3054
		{
3055
			if (isset($country_array[$row['airline_country']]['country']) && $country_array[$row['airline_country']]['country'] != $row['airline_country'])
3056
			{
3057
				$temp_array['country'] = $row['airline_country'];
3058
				
3059
				$country_array[$row['country']] = $temp_array;
3060
			}
3061
		}
3062
		}  
3063
		return $country_array;
3064
	} 
3065
	
3066
	
3067
	
3068
	
3069
	/**
3070
	* Gets a list of all idents/callsigns
3071
	*
3072
	* @return Array list of ident/callsign names
3073
	*
3074
	*/
3075
	public function getAllIdents($filters = array())
3076
	{
3077
		$filter_query = $this->getFilter($filters,true,true);
3078
		$query  = "SELECT DISTINCT spotter_output.ident
3079
								FROM spotter_output".$filter_query." spotter_output.ident <> '' 
3080
								ORDER BY spotter_output.date ASC LIMIT 700 OFFSET 0";
3081
3082
		$sth = $this->db->prepare($query);
3083
		$sth->execute();
3084
    
3085
		$ident_array = array();
3086
		$temp_array = array();
3087
		
3088
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3089
		{
3090
			$temp_array['ident'] = $row['ident'];
3091
			$ident_array[] = $temp_array;
3092
		}
3093
3094
		return $ident_array;
3095
	}
3096
3097
	/**
3098
	* Get a list of flights from airport since 7 days
3099
	* @return Array number, icao, name and city of airports
3100
	*/
3101
3102
	public function getLast7DaysAirportsDeparture($airport_icao = '',$filters = array()) {
3103
		global $globalTimezone, $globalDBdriver;
3104
		$filter_query = $this->getFilter($filters,true,true);
3105
		if ($globalTimezone != '') {
3106
			date_default_timezone_set($globalTimezone);
3107
			$datetime = new DateTime();
3108
			$offset = $datetime->format('P');
3109
		} else $offset = '+00:00';
3110
		if ($airport_icao == '') {
3111
			if ($globalDBdriver == 'mysql') {
3112
				$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";
3113
			} else {
3114
				$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";
3115
			}
3116
			$sth = $this->db->prepare($query);
3117
			$sth->execute(array(':offset' => $offset));
3118
		} else {
3119
			if ($globalDBdriver == 'mysql') {
3120
				$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";
3121
			} else {
3122
				$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";
3123
			}
3124
			$sth = $this->db->prepare($query);
3125
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3126
		}
3127
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3128
	}
3129
3130
	/**
3131
	* Get a list of flights from airport since 7 days
3132
	* @return Array number, icao, name and city of airports
3133
	*/
3134
3135
	public function getLast7DaysAirportsDepartureByAirlines($airport_icao = '') {
3136
		global $globalTimezone, $globalDBdriver;
3137
		if ($globalTimezone != '') {
3138
			date_default_timezone_set($globalTimezone);
3139
			$datetime = new DateTime();
3140
			$offset = $datetime->format('P');
3141
		} else $offset = '+00:00';
3142
		if ($airport_icao == '') {
3143
			if ($globalDBdriver == 'mysql') {
3144
				$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";
3145
			} else {
3146
				$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";
3147
			}
3148
			$sth = $this->db->prepare($query);
3149
			$sth->execute(array(':offset' => $offset));
3150
		} else {
3151
			if ($globalDBdriver == 'mysql') {
3152
				$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";
3153
			} else {
3154
				$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";
3155
			}
3156
			$sth = $this->db->prepare($query);
3157
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3158
		}
3159
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3160
	}
3161
3162
	/**
3163
	* Get a list of flights from detected airport since 7 days
3164
	* @return Array number, icao, name and city of airports
3165
	*/
3166
3167
	public function getLast7DaysDetectedAirportsDeparture($airport_icao = '', $filters = array()) {
3168
		global $globalTimezone, $globalDBdriver;
3169
		$filter_query = $this->getFilter($filters,true,true);
3170
		if ($globalTimezone != '') {
3171
			date_default_timezone_set($globalTimezone);
3172
			$datetime = new DateTime();
3173
			$offset = $datetime->format('P');
3174
		} else $offset = '+00:00';
3175
		if ($airport_icao == '') {
3176
			if ($globalDBdriver == 'mysql') {
3177
				$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 
3178
				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 <> '' 
3179
				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";
3180
			} else {
3181
				$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 
3182
				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 <> '' 
3183
				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";
3184
			}
3185
			$sth = $this->db->prepare($query);
3186
			$sth->execute(array(':offset' => $offset));
3187
		} else {
3188
			if ($globalDBdriver == 'mysql') {
3189
				$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 
3190
				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 
3191
				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";
3192
			} else {
3193
				$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 
3194
				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";
3195
			}
3196
			$sth = $this->db->prepare($query);
3197
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3198
		}
3199
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3200
	}
3201
3202
	/**
3203
	* Get a list of flights from detected airport since 7 days
3204
	* @return Array number, icao, name and city of airports
3205
	*/
3206
3207
	public function getLast7DaysDetectedAirportsDepartureByAirlines($airport_icao = '') {
3208
		global $globalTimezone, $globalDBdriver;
3209
		if ($globalTimezone != '') {
3210
			date_default_timezone_set($globalTimezone);
3211
			$datetime = new DateTime();
3212
			$offset = $datetime->format('P');
3213
		} else $offset = '+00:00';
3214
		if ($airport_icao == '') {
3215
			if ($globalDBdriver == 'mysql') {
3216
				$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 
3217
				FROM `spotter_output`, airport 
3218
				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 <> '' 
3219
				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";
3220
			} else {
3221
				$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 
3222
				FROM spotter_output, airport 
3223
				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 <> '' 
3224
				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";
3225
			}
3226
			$sth = $this->db->prepare($query);
3227
			$sth->execute(array(':offset' => $offset));
3228
		} else {
3229
			if ($globalDBdriver == 'mysql') {
3230
				$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 
3231
				FROM `spotter_output`, airport 
3232
				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 
3233
				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";
3234
			} else {
3235
				$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 
3236
				FROM spotter_output, airport 
3237
				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";
3238
			}
3239
			$sth = $this->db->prepare($query);
3240
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3241
		}
3242
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3243
	}
3244
3245
3246
	/**
3247
	* Get a list of flights to airport since 7 days
3248
	* @return Array number, icao, name and city of airports
3249
	*/
3250
3251
	public function getLast7DaysAirportsArrival($airport_icao = '', $filters = array()) {
3252
		global $globalTimezone, $globalDBdriver;
3253
		$filter_query = $this->getFilter($filters,true,true);
3254
		if ($globalTimezone != '') {
3255
			date_default_timezone_set($globalTimezone);
3256
			$datetime = new DateTime();
3257
			$offset = $datetime->format('P');
3258
		} else $offset = '+00:00';
3259
		if ($airport_icao == '') {
3260
			if ($globalDBdriver == 'mysql') {
3261
				$query = "SELECT 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";
3262
			} else {
3263
				$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";
3264
			}
3265
			$sth = $this->db->prepare($query);
3266
			$sth->execute(array(':offset' => $offset));
3267
		} else {
3268
			if ($globalDBdriver == 'mysql') {
3269
				$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";
3270
			} else {
3271
				$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";
3272
			}
3273
			$sth = $this->db->prepare($query);
3274
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3275
		}
3276
		
3277
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3278
	}
3279
3280
3281
	/**
3282
	* Get a list of flights detected to airport since 7 days
3283
	* @return Array number, icao, name and city of airports
3284
	*/
3285
3286
	public function getLast7DaysDetectedAirportsArrival($airport_icao = '',$filters = array()) {
3287
		global $globalTimezone, $globalDBdriver;
3288
		$filter_query = $this->getFilter($filters,true,true);
3289
		if ($globalTimezone != '') {
3290
			date_default_timezone_set($globalTimezone);
3291
			$datetime = new DateTime();
3292
			$offset = $datetime->format('P');
3293
		} else $offset = '+00:00';
3294
		if ($airport_icao == '') {
3295
			if ($globalDBdriver == 'mysql') {
3296
				$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 
3297
				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 <> '' 
3298
				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";
3299
			} else {
3300
				$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 
3301
				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 <> '' 
3302
				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";
3303
			}
3304
			$sth = $this->db->prepare($query);
3305
			$sth->execute(array(':offset' => $offset));
3306
		} else {
3307
			if ($globalDBdriver == 'mysql') {
3308
				$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 
3309
				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 
3310
				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";
3311
			} else {
3312
				$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 
3313
				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 
3314
				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";
3315
			}
3316
			$sth = $this->db->prepare($query);
3317
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3318
		}
3319
		
3320
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3321
	}
3322
3323
3324
	/**
3325
	* Get a list of flights to airport since 7 days
3326
	* @return Array number, icao, name and city of airports
3327
	*/
3328
3329
	public function getLast7DaysAirportsArrivalByAirlines($airport_icao = '') {
3330
		global $globalTimezone, $globalDBdriver;
3331
		if ($globalTimezone != '') {
3332
			date_default_timezone_set($globalTimezone);
3333
			$datetime = new DateTime();
3334
			$offset = $datetime->format('P');
3335
		} else $offset = '+00:00';
3336
		if ($airport_icao == '') {
3337
			if ($globalDBdriver == 'mysql') {
3338
				$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";
3339
			} else {
3340
				$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";
3341
			}
3342
			$sth = $this->db->prepare($query);
3343
			$sth->execute(array(':offset' => $offset));
3344
		} else {
3345
			if ($globalDBdriver == 'mysql') {
3346
				$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";
3347
			} else {
3348
				$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";
3349
			}
3350
			$sth = $this->db->prepare($query);
3351
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3352
		}
3353
		
3354
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3355
	}
3356
3357
3358
	/**
3359
	* Get a list of flights detected to airport since 7 days
3360
	* @return Array number, icao, name and city of airports
3361
	*/
3362
3363
	public function getLast7DaysDetectedAirportsArrivalByAirlines($airport_icao = '') {
3364
		global $globalTimezone, $globalDBdriver;
3365
		if ($globalTimezone != '') {
3366
			date_default_timezone_set($globalTimezone);
3367
			$datetime = new DateTime();
3368
			$offset = $datetime->format('P');
3369
		} else $offset = '+00:00';
3370
		if ($airport_icao == '') {
3371
			if ($globalDBdriver == 'mysql') {
3372
				$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 
3373
				FROM `spotter_output`, airport 
3374
				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 <> '' 
3375
				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";
3376
			} else {
3377
				$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 
3378
				FROM spotter_output, airport 
3379
				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 <> '' 
3380
				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";
3381
			}
3382
			$sth = $this->db->prepare($query);
3383
			$sth->execute(array(':offset' => $offset));
3384
		} else {
3385
			if ($globalDBdriver == 'mysql') {
3386
				$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 
3387
				FROM `spotter_output`, airport 
3388
				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 
3389
				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";
3390
			} else {
3391
				$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 
3392
				FROM spotter_output, airport 
3393
				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 
3394
				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";
3395
			}
3396
			$sth = $this->db->prepare($query);
3397
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3398
		}
3399
		
3400
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3401
	}
3402
3403
3404
	/**
3405
	* Gets a list of all dates
3406
	*
3407
	* @return Array list of date names
3408
	*
3409
	*/
3410
	public function getAllDates()
3411
	{
3412
		global $globalTimezone, $globalDBdriver;
3413
		if ($globalTimezone != '') {
3414
			date_default_timezone_set($globalTimezone);
3415
			$datetime = new DateTime();
3416
			$offset = $datetime->format('P');
3417
		} else $offset = '+00:00';
3418
3419
		if ($globalDBdriver == 'mysql') {
3420
			$query  = "SELECT DISTINCT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) as date
3421
								FROM spotter_output
3422
								WHERE spotter_output.date <> '' 
3423
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3424
		} else {
3425
			$query  = "SELECT DISTINCT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date
3426
								FROM spotter_output
3427
								WHERE spotter_output.date <> '' 
3428
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3429
		}
3430
		
3431
		$sth = $this->db->prepare($query);
3432
		$sth->execute(array(':offset' => $offset));
3433
    
3434
		$date_array = array();
3435
		$temp_array = array();
3436
		
3437
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3438
		{
3439
			$temp_array['date'] = $row['date'];
3440
3441
			$date_array[] = $temp_array;
3442
		}
3443
3444
		return $date_array;
3445
	}
3446
	
3447
	
3448
	
3449
	/**
3450
	* Gets all route combinations
3451
	*
3452
	* @return Array the route list
3453
	*
3454
	*/
3455
	public function getAllRoutes()
3456
	{
3457
		$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 
3458
				FROM spotter_output
3459
				WHERE spotter_output.ident <> '' 
3460
				GROUP BY route
3461
				ORDER BY route ASC";
3462
3463
		$sth = $this->db->prepare($query);
3464
		$sth->execute();
3465
3466
		$routes_array = array();
3467
		$temp_array = array();
3468
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3469
		{
3470
			$temp_array['route'] = $row['route'];
3471
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
3472
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
3473
3474
			$routes_array[] = $temp_array;
3475
		}
3476
		return $routes_array;
3477
	}
3478
3479
	/**
3480
	* Update ident spotter data
3481
	*
3482
	* @param String $flightaware_id the ID from flightaware
3483
	* @param String $ident the flight ident
3484
	* @return String success or false
3485
	*
3486
	*/	
3487
	public function updateIdentSpotterData($flightaware_id = '', $ident = '',$fromsource = NULL)
3488
	{
3489
		if (!is_numeric(substr($ident, 0, 3)))
3490
		{
3491
			if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3492
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3493
			} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3494
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3495
			} else {
3496
				$airline_array = $this->getAllAirlineInfo("NA");
3497
			}
3498
			if (count($airline_array) == 0) {
3499
				$airline_array = $this->getAllAirlineInfo("NA");
3500
			}
3501
			if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3502
				$airline_array = $this->getAllAirlineInfo("NA");
3503
			}
3504
		} else {
3505
			$airline_array = $this->getAllAirlineInfo("NA");
3506
		}
3507
                $airline_name = $airline_array[0]['name'];
3508
                $airline_icao = $airline_array[0]['icao'];
3509
                $airline_country = $airline_array[0]['country'];
3510
                $airline_type = $airline_array[0]['type'];
3511
3512
3513
		$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';
3514
                $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);
3515
3516
		try {
3517
			$sth = $this->db->prepare($query);
3518
			$sth->execute($query_values);
3519
		} catch (PDOException $e) {
3520
			return "error : ".$e->getMessage();
3521
		}
3522
		
3523
		return "success";
3524
3525
	}
3526
	/**
3527
	* Update latest spotter data
3528
	*
3529
	* @param String $flightaware_id the ID from flightaware
3530
	* @param String $ident the flight ident
3531
	* @param String $arrival_airport_icao the arrival airport
3532
	* @return String success or false
3533
	*
3534
	*/	
3535
	public function updateLatestSpotterData($flightaware_id = '', $ident = '', $latitude = '', $longitude = '', $altitude = '', $ground = false, $groundspeed = NULL, $date = '', $arrival_airport_icao = '',$arrival_airport_time = '')
3536
	{
3537
		if ($groundspeed == '') $groundspeed = NULL;
3538
		$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';
3539
                $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);
3540
3541
		try {
3542
			$sth = $this->db->prepare($query);
3543
			$sth->execute($query_values);
3544
		} catch (PDOException $e) {
3545
			return "error : ".$e->getMessage();
3546
		}
3547
		
3548
		return "success";
3549
3550
	}
3551
3552
	/**
3553
	* Adds a new spotter data
3554
	*
3555
	* @param String $flightaware_id the ID from flightaware
3556
	* @param String $ident the flight ident
3557
	* @param String $aircraft_icao the aircraft type
3558
	* @param String $departure_airport_icao the departure airport
3559
	* @param String $arrival_airport_icao the arrival airport
3560
	* @param String $latitude latitude of flight
3561
	* @param String $longitude latitude of flight
3562
	* @param String $waypoints waypoints of flight
3563
	* @param String $altitude altitude of flight
3564
	* @param String $heading heading of flight
3565
	* @param String $groundspeed speed of flight
3566
	* @param String $date date of flight
3567
	* @param String $departure_airport_time departure time of flight
3568
	* @param String $arrival_airport_time arrival time of flight
3569
	* @param String $squawk squawk code of flight
3570
	* @param String $route_stop route stop of flight
3571
	* @param String $highlight highlight or not
3572
	* @param String $ModeS ModesS code of flight
3573
	* @param String $registration registration code of flight
3574
	* @param String $pilot_id pilot id of flight (for virtual airlines)
3575
	* @param String $pilot_name pilot name of flight (for virtual airlines)
3576
	* @param String $verticalrate vertival rate of flight
3577
	* @return String success or false
3578
	*/
3579
	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 = '')
3580
	{
3581
		global $globalURL, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalDebugTimeElapsed, $globalAirlinesSource, $globalVAM;
3582
		
3583
		//if (isset($globalDebugTimeElapsed) || $globalDebugTimeElapsed == '') $globalDebugTimeElapsed = FALSE;
3584
		$Image = new Image($this->db);
3585
		$Common = new Common();
3586
		
3587
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
3588
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
3589
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
3590
		if (!isset($globalVAM)) $globalVAM = FALSE;
3591
		date_default_timezone_set('UTC');
3592
		
3593
		//getting the registration
3594
		if ($flightaware_id != "" && $registration == '')
3595
		{
3596
			if (!is_string($flightaware_id))
3597
			{
3598
				return false;
3599
			} else {
3600
				if ($ModeS != '') {
3601
					$timeelapsed = microtime(true);
3602
					$registration = $this->getAircraftRegistrationBymodeS($ModeS);
3603
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3604
				} else {
3605
					$myhex = explode('-',$flightaware_id);
3606
					if (count($myhex) > 0) {
3607
						$timeelapsed = microtime(true);
3608
						$registration = $this->getAircraftRegistrationBymodeS($myhex[0]);
3609
						if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3610
					}
3611
				}
3612
			}
3613
		}
3614
		$fromsource = NULL;
3615
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
3616
		elseif ($format_source == 'vatsimtxt') $fromsource = 'vatsim';
3617
		elseif ($format_source == 'whazzup') $fromsource = 'ivao';
3618
		elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
3619
		elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
3620
		//getting the airline information
3621
		if ($ident != "")
3622
		{
3623
			if (!is_string($ident))
3624
			{
3625
				return false;
3626
			} else {
3627
				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'))
3628
				{
3629
					$timeelapsed = microtime(true);
3630
					if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3631
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3632
					} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3633
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3634
					} else {
3635
						$airline_array = $this->getAllAirlineInfo("NA");
3636
					}
3637
					if (count($airline_array) == 0) {
3638
						$airline_array = $this->getAllAirlineInfo("NA");
3639
					}
3640
					if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3641
						$airline_array = $this->getAllAirlineInfo("NA");
3642
					}
3643
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3644
3645
				} else {
3646
					$timeelapsed = microtime(true);
3647
					$airline_array = $this->getAllAirlineInfo("NA");
3648
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3649
				}
3650
			}
3651
		} else $airline_array = array();
3652
		
3653
		//getting the aircraft information
3654
		$aircraft_array = array();
3655
		if ($aircraft_icao != '')
3656
		{
3657
			if (!is_string($aircraft_icao))
3658
			{
3659
				return false;
3660
			} else {
3661
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3662
				{
3663
					$timeelapsed = microtime(true);
3664
					$aircraft_array = $this->getAllAircraftInfo("NA");
3665
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3666
				} else {
3667
					$timeelapsed = microtime(true);
3668
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3669
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3670
				}
3671
			}
3672
		} else {
3673
			if ($ModeS != '') {
3674
				$timeelapsed = microtime(true);
3675
				$aircraft_icao = $this->getAllAircraftType($ModeS);
3676
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAircraftType : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3677
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3678
				{
3679
					$timeelapsed = microtime(true);
3680
					$aircraft_array = $this->getAllAircraftInfo("NA");
3681
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3682
				} else {
3683
					$timeelapsed = microtime(true);
3684
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3685
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3686
				}
3687
			}
3688
		}
3689
		
3690
		//getting the departure airport information
3691
		$departure_airport_array = array();
3692
		$departure_airport_icao = trim($departure_airport_icao);
3693
		if ($departure_airport_icao != '')
3694
		{
3695
			if (!is_string($departure_airport_icao))
3696
			{
3697
				return false;
3698
			} else {
3699
				$timeelapsed = microtime(true);
3700
				$departure_airport_array = $this->getAllAirportInfo($departure_airport_icao);
3701
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3702
			}
3703
		}
3704
		
3705
		//getting the arrival airport information
3706
		$arrival_airport_array = array();
3707
		$arrival_airport_icao = trim($arrival_airport_icao);
3708
		if ($arrival_airport_icao != '')
3709
		{
3710
			if (!is_string($arrival_airport_icao))
3711
			{
3712
				return false;
3713
			} else {
3714
				$timeelapsed = microtime(true);
3715
				$arrival_airport_array = $this->getAllAirportInfo($arrival_airport_icao);
3716
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3717
			}
3718
		}
3719
3720
		if ($latitude != "")
3721
		{
3722
			if (!is_numeric($latitude))
3723
			{
3724
				return false;
3725
			}
3726
		}
3727
		
3728
		if ($longitude != "")
3729
		{
3730
			if (!is_numeric($longitude))
3731
			{
3732
				return false;
3733
			}
3734
		}
3735
		
3736
		if ($waypoints != "")
3737
		{
3738
			if (!is_string($waypoints))
3739
			{
3740
				return false;
3741
			}
3742
		}
3743
		
3744
		if ($altitude != "")
3745
		{
3746
			if (!is_numeric($altitude))
3747
			{
3748
				return false;
3749
			}
3750
		} else $altitude = 0;
3751
		
3752
		if ($heading != "")
3753
		{
3754
			if (!is_numeric($heading))
3755
			{
3756
				return false;
3757
			}
3758
		}
3759
		
3760
		if ($groundspeed != "")
3761
		{
3762
			if (!is_numeric($groundspeed))
3763
			{
3764
				return false;
3765
			}
3766
		}
3767
3768
    
3769
		if ($date == "" || strtotime($date) < time()-20*60)
3770
		{
3771
			$date = date("Y-m-d H:i:s", time());
3772
		}
3773
3774
		//getting the aircraft image
3775
		if (($registration != "" || $registration != 'NA') && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM)
3776
		{
3777
			$timeelapsed = microtime(true);
3778
			$image_array = $Image->getSpotterImage($registration);
3779
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getSpotterImage : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3780
			if (!isset($image_array[0]['registration']))
3781
			{
3782
				//echo "Add image !!!! \n";
3783
				$Image->addSpotterImage($registration);
3784
			}
3785
			$timeelapsed = microtime(true);
3786
			$owner_info = $this->getAircraftOwnerByRegistration($registration);
3787
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftOwnerByRegistration : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3788
			if ($owner_info['owner'] != '') $aircraft_owner = ucwords(strtolower($owner_info['owner']));
3789
		}
3790
    
3791
		if ($globalIVAO && $aircraft_icao != '')
3792
		{
3793
            		if (isset($airline_array[0]['icao'])) $airline_icao = $airline_array[0]['icao'];
3794
            		else $airline_icao = '';
3795
			$image_array = $Image->getSpotterImage('',$aircraft_icao,$airline_icao);
3796
			if (!isset($image_array[0]['registration']))
3797
			{
3798
				//echo "Add image !!!! \n";
3799
				$Image->addSpotterImage('',$aircraft_icao,$airline_icao);
3800
			}
3801
		}
3802
    
3803
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
3804
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
3805
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
3806
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
3807
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
3808
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
3809
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3810
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3811
		$waypoints = filter_var($waypoints,FILTER_SANITIZE_STRING);
3812
		$altitude = filter_var($altitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3813
		$heading = filter_var($heading,FILTER_SANITIZE_NUMBER_INT);
3814
		$groundspeed = filter_var($groundspeed,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3815
		$squawk = filter_var($squawk,FILTER_SANITIZE_NUMBER_INT);
3816
		$route_stop = filter_var($route_stop,FILTER_SANITIZE_STRING);
3817
		$ModeS = filter_var($ModeS,FILTER_SANITIZE_STRING);
3818
		$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_STRING);
3819
		$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
3820
		$format_source = filter_var($format_source,FILTER_SANITIZE_STRING);
3821
		$verticalrate = filter_var($verticalrate,FILTER_SANITIZE_NUMBER_INT);
3822
	
3823
		if (count($airline_array) == 0) 
3824
		{
3825
                        $airline_array = $this->getAllAirlineInfo('NA');
3826
                }
3827
                if (count($aircraft_array) == 0) 
3828
                {
3829
                        $aircraft_array = $this->getAllAircraftInfo('NA');
3830
                }
3831
                if (count($departure_airport_array) == 0 || $departure_airport_array[0]['icao'] == '' || $departure_airport_icao == '') 
3832
                {
3833
                        $departure_airport_array = $this->getAllAirportInfo('NA');
3834
                }
3835
                if (count($arrival_airport_array) == 0 || $arrival_airport_array[0]['icao'] == '' || $arrival_airport_icao == '') 
3836
                {
3837
                        $arrival_airport_array = $this->getAllAirportInfo('NA');
3838
                }
3839
                if ($registration == '') $registration = 'NA';
3840
                if ($latitude == '' && $longitude == '') {
3841
            		$latitude = 0;
3842
            		$longitude = 0;
3843
            	}
3844
                if ($squawk == '' || $Common->isInteger($squawk) === false) $squawk = NULL;
3845
                if ($verticalrate == '' || $Common->isInteger($verticalrate) === false) $verticalrate = NULL;
3846
                if ($heading == '' || $Common->isInteger($heading) === false) $heading = 0;
3847
                if ($groundspeed == '' || $Common->isInteger($groundspeed) === false) $groundspeed = 0;
3848
                if (!isset($aircraft_owner)) $aircraft_owner = NULL;
3849
                $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) 
3850
                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)";
3851
3852
                $airline_name = $airline_array[0]['name'];
3853
                $airline_icao = $airline_array[0]['icao'];
3854
                $airline_country = $airline_array[0]['country'];
3855
                $airline_type = $airline_array[0]['type'];
3856
		if ($airline_type == '') {
3857
			$timeelapsed = microtime(true);
3858
			$airline_type = $this->getAircraftTypeBymodeS($ModeS);
3859
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftTypeBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3860
		}
3861
		if ($airline_type == null) $airline_type = '';
3862
                $aircraft_type = $aircraft_array[0]['type'];
3863
                $aircraft_manufacturer = $aircraft_array[0]['manufacturer'];
3864
                $departure_airport_name = $departure_airport_array[0]['name'];
3865
	        $departure_airport_city = $departure_airport_array[0]['city'];
3866
            	$departure_airport_country = $departure_airport_array[0]['country'];
3867
                
3868
                $arrival_airport_name = $arrival_airport_array[0]['name'];
3869
                $arrival_airport_city = $arrival_airport_array[0]['city'];
3870
                $arrival_airport_country = $arrival_airport_array[0]['country'];
3871
                $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);
3872
3873
		try {
3874
		        
3875
			$sth = $this->db->prepare($query);
3876
			$sth->execute($query_values);
3877
			$this->db = null;
3878
		} catch (PDOException $e) {
3879
		    return "error : ".$e->getMessage();
3880
		}
3881
		
3882
		return "success";
3883
3884
	}
3885
	
3886
  
3887
	/**
3888
	* Gets the aircraft ident within the last hour
3889
	*
3890
	* @return String the ident
3891
	*
3892
	*/
3893
	public function getIdentFromLastHour($ident)
3894
	{
3895
		global $globalDBdriver, $globalTimezone;
3896
		if ($globalDBdriver == 'mysql') {
3897
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3898
								WHERE spotter_output.ident = :ident 
3899
								AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) 
3900
								AND spotter_output.date < UTC_TIMESTAMP()";
3901
			$query_data = array(':ident' => $ident);
3902
		} else {
3903
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3904
								WHERE spotter_output.ident = :ident 
3905
								AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INTERVAL '1 HOURS'
3906
								AND spotter_output.date < now() AT TIME ZONE 'UTC'";
3907
			$query_data = array(':ident' => $ident);
3908
    		}
3909
		
3910
		$sth = $this->db->prepare($query);
3911
		$sth->execute($query_data);
3912
    		$ident_result='';
3913
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3914
		{
3915
			$ident_result = $row['ident'];
3916
		}
3917
3918
		return $ident_result;
3919
	}
3920
	
3921
	
3922
	/**
3923
	* Gets the aircraft data from the last 20 seconds
3924
	*
3925
	* @return Array the spotter data
3926
	*
3927
	*/
3928
	public function getRealTimeData($q = '')
3929
	{
3930
		global $globalDBdriver;
3931
		$additional_query = '';
3932
		if ($q != "")
3933
		{
3934
			if (!is_string($q))
3935
			{
3936
				return false;
3937
			} else {
3938
				$q_array = explode(" ", $q);
3939
				foreach ($q_array as $q_item){
3940
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
3941
					$additional_query .= " AND (";
3942
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
3943
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
3944
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
3945
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
3946
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
3947
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
3948
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
3949
					$additional_query .= "(spotter_output.ident like '%".$q_item."%')";
3950
					$additional_query .= ")";
3951
				}
3952
			}
3953
		}
3954
		if ($globalDBdriver == 'mysql') {
3955
			$query  = "SELECT spotter_output.* FROM spotter_output 
3956
				WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 20 SECOND) ".$additional_query." 
3957
				AND spotter_output.date < UTC_TIMESTAMP()";
3958
		} else {
3959
			$query  = "SELECT spotter_output.* FROM spotter_output 
3960
				WHERE spotter_output.date::timestamp >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '20 SECONDS' ".$additional_query." 
3961
				AND spotter_output.date::timestamp < CURRENT_TIMESTAMP AT TIME ZONE 'UTC'";
3962
		}
3963
		$spotter_array = $this->getDataFromDB($query, array());
3964
3965
		return $spotter_array;
3966
	}
3967
	
3968
	
3969
	
3970
	 /**
3971
	* Gets all airlines that have flown over
3972
	*
3973
	* @return Array the airline list
3974
	*
3975
	*/
3976
	public function countAllAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(), $year = '', $month = '', $day = '')
3977
	{
3978
		global $globalDBdriver;
3979
		$filter_query = $this->getFilter($filters,true,true);
3980
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3981
		 			FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.airline_icao <> 'NA'";
3982
		if ($olderthanmonths > 0) {
3983
			if ($globalDBdriver == 'mysql') {
3984
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
3985
			} else {
3986
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
3987
			}
3988
		}
3989
                if ($sincedate != '') {
3990
			if ($globalDBdriver == 'mysql') {
3991
				$query .= " AND spotter_output.date > '".$sincedate."'";
3992
			} else {
3993
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3994
			}
3995
		}
3996
		$query_values = array();
3997
		if ($year != '') {
3998
			if ($globalDBdriver == 'mysql') {
3999
				$query .= " AND YEAR(spotter_output.date) = :year";
4000
				$query_values = array_merge($query_values,array(':year' => $year));
4001
			} else {
4002
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4003
				$query_values = array_merge($query_values,array(':year' => $year));
4004
			}
4005
		}
4006
		if ($month != '') {
4007
			if ($globalDBdriver == 'mysql') {
4008
				$query .= " AND MONTH(spotter_output.date) = :month";
4009
				$query_values = array_merge($query_values,array(':month' => $month));
4010
			} else {
4011
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4012
				$query_values = array_merge($query_values,array(':month' => $month));
4013
			}
4014
		}
4015
		if ($day != '') {
4016
			if ($globalDBdriver == 'mysql') {
4017
				$query .= " AND DAY(spotter_output.date) = :day";
4018
				$query_values = array_merge($query_values,array(':day' => $day));
4019
			} else {
4020
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4021
				$query_values = array_merge($query_values,array(':day' => $day));
4022
			}
4023
		}
4024
		$query .= " GROUP BY spotter_output.airline_name,spotter_output.airline_icao, spotter_output.airline_country ORDER BY airline_count DESC";
4025
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4026
4027
		$sth = $this->db->prepare($query);
4028
		$sth->execute($query_values);
4029
		$airline_array = array();
4030
		$temp_array = array();
4031
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4032
		{
4033
			$temp_array['airline_name'] = $row['airline_name'];
4034
			$temp_array['airline_icao'] = $row['airline_icao'];
4035
			$temp_array['airline_count'] = $row['airline_count'];
4036
			$temp_array['airline_country'] = $row['airline_country'];
4037
			$airline_array[] = $temp_array;
4038
		}
4039
		return $airline_array;
4040
	}
4041
4042
	 /**
4043
	* Gets all pilots that have flown over
4044
	*
4045
	* @return Array the pilots list
4046
	*
4047
	*/
4048
	public function countAllPilots($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '', $month = '',$day = '')
4049
	{
4050
		global $globalDBdriver;
4051
		$filter_query = $this->getFilter($filters,true,true);
4052
		$query  = "SELECT DISTINCT spotter_output.pilot_id, s.pilot_name, COUNT(spotter_output.pilot_id) AS pilot_count, spotter_output.format_source
4053
			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 <> ''";
4054
                if ($olderthanmonths > 0) {
4055
            		if ($globalDBdriver == 'mysql') {
4056
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4057
			} else {
4058
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4059
			}
4060
		}
4061
                if ($sincedate != '') {
4062
            		if ($globalDBdriver == 'mysql') {
4063
				$query .= " AND spotter_output.date > '".$sincedate."'";
4064
			} else {
4065
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4066
			}
4067
		}
4068
		$query_values = array();
4069
		if ($year != '') {
4070
			if ($globalDBdriver == 'mysql') {
4071
				$query .= " AND YEAR(spotter_output.date) = :year";
4072
				$query_values = array_merge($query_values,array(':year' => $year));
4073
			} else {
4074
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4075
				$query_values = array_merge($query_values,array(':year' => $year));
4076
			}
4077
		}
4078
		if ($month != '') {
4079
			if ($globalDBdriver == 'mysql') {
4080
				$query .= " AND MONTH(spotter_output.date) = :month";
4081
				$query_values = array_merge($query_values,array(':month' => $month));
4082
			} else {
4083
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4084
				$query_values = array_merge($query_values,array(':month' => $month));
4085
			}
4086
		}
4087
		if ($day != '') {
4088
			if ($globalDBdriver == 'mysql') {
4089
				$query .= " AND DAY(spotter_output.date) = :day";
4090
				$query_values = array_merge($query_values,array(':day' => $day));
4091
			} else {
4092
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4093
				$query_values = array_merge($query_values,array(':day' => $day));
4094
			}
4095
		}
4096
		
4097
		$query .= " GROUP BY spotter_output.pilot_id,s.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
4098
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4099
      
4100
		
4101
		$sth = $this->db->prepare($query);
4102
		$sth->execute($query_values);
4103
		$airline_array = array();
4104
		$temp_array = array();
4105
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4106
		{
4107
			$temp_array['pilot_name'] = $row['pilot_name'];
4108
			$temp_array['pilot_id'] = $row['pilot_id'];
4109
			$temp_array['pilot_count'] = $row['pilot_count'];
4110
			$temp_array['format_source'] = $row['format_source'];
4111
			$airline_array[] = $temp_array;
4112
		}
4113
		return $airline_array;
4114
	}
4115
	
4116
	/**
4117
	* Gets all pilots that have flown over
4118
	*
4119
	* @return Array the pilots list
4120
	*
4121
	*/
4122
	public function countAllPilotsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '')
4123
	{
4124
		global $globalDBdriver;
4125
		$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
4126
		 			FROM spotter_output WHERE spotter_output.pilot_id <> '' ";
4127
                if ($olderthanmonths > 0) {
4128
            		if ($globalDBdriver == 'mysql') {
4129
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4130
			} else {
4131
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4132
			}
4133
		}
4134
                if ($sincedate != '') {
4135
            		if ($globalDBdriver == 'mysql') {
4136
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4137
			} else {
4138
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4139
			}
4140
		}
4141
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
4142
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4143
      
4144
		
4145
		$sth = $this->db->prepare($query);
4146
		$sth->execute();
4147
      
4148
		$airline_array = array();
4149
		$temp_array = array();
4150
        
4151
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4152
		{
4153
			$temp_array['pilot_name'] = $row['pilot_name'];
4154
			$temp_array['pilot_id'] = $row['pilot_id'];
4155
			$temp_array['pilot_count'] = $row['pilot_count'];
4156
			$temp_array['airline_icao'] = $row['airline_icao'];
4157
			$temp_array['format_source'] = $row['format_source'];
4158
			$airline_array[] = $temp_array;
4159
		}
4160
		return $airline_array;
4161
	}
4162
	
4163
	 /**
4164
	* Gets all owner that have flown over
4165
	*
4166
	* @return Array the pilots list
4167
	*
4168
	*/
4169
	public function countAllOwners($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
4170
	{
4171
		global $globalDBdriver;
4172
		$filter_query = $this->getFilter($filters,true,true);
4173
		$query  = "SELECT DISTINCT spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
4174
					FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL";
4175
                if ($olderthanmonths > 0) {
4176
            		if ($globalDBdriver == 'mysql') {
4177
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4178
			} else {
4179
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4180
			}
4181
		}
4182
                if ($sincedate != '') {
4183
            		if ($globalDBdriver == 'mysql') {
4184
				$query .= " AND spotter_output.date > '".$sincedate."' ";
4185
			} else {
4186
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4187
			}
4188
		}
4189
		$query_values = array();
4190
		if ($year != '') {
4191
			if ($globalDBdriver == 'mysql') {
4192
				$query .= " AND YEAR(spotter_output.date) = :year";
4193
				$query_values = array_merge($query_values,array(':year' => $year));
4194
			} else {
4195
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4196
				$query_values = array_merge($query_values,array(':year' => $year));
4197
			}
4198
		}
4199
		if ($month != '') {
4200
			if ($globalDBdriver == 'mysql') {
4201
				$query .= " AND MONTH(spotter_output.date) = :month";
4202
				$query_values = array_merge($query_values,array(':month' => $month));
4203
			} else {
4204
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4205
				$query_values = array_merge($query_values,array(':month' => $month));
4206
			}
4207
		}
4208
		if ($day != '') {
4209
			if ($globalDBdriver == 'mysql') {
4210
				$query .= " AND DAY(spotter_output.date) = :day";
4211
				$query_values = array_merge($query_values,array(':day' => $day));
4212
			} else {
4213
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4214
				$query_values = array_merge($query_values,array(':day' => $day));
4215
			}
4216
		}
4217
		$query .= " GROUP BY spotter_output.owner_name ORDER BY owner_count DESC";
4218
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4219
		
4220
		$sth = $this->db->prepare($query);
4221
		$sth->execute($query_values);
4222
		$airline_array = array();
4223
		$temp_array = array();
4224
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4225
		{
4226
			$temp_array['owner_name'] = $row['owner_name'];
4227
			$temp_array['owner_count'] = $row['owner_count'];
4228
			$airline_array[] = $temp_array;
4229
		}
4230
		return $airline_array;
4231
	}
4232
	
4233
	 /**
4234
	* Gets all owner that have flown over
4235
	*
4236
	* @return Array the pilots list
4237
	*
4238
	*/
4239
	public function countAllOwnersByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
4240
	{
4241
		global $globalDBdriver;
4242
		$filter_query = $this->getFilter($filters,true,true);
4243
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
4244
		 			FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL ";
4245
                if ($olderthanmonths > 0) {
4246
            		if ($globalDBdriver == 'mysql') {
4247
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4248
			} else {
4249
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4250
			}
4251
		}
4252
                if ($sincedate != '') {
4253
            		if ($globalDBdriver == 'mysql') {
4254
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4255
			} else {
4256
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4257
			}
4258
		}
4259
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.owner_name ORDER BY owner_count DESC";
4260
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4261
      
4262
		
4263
		$sth = $this->db->prepare($query);
4264
		$sth->execute();
4265
      
4266
		$airline_array = array();
4267
		$temp_array = array();
4268
        
4269
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4270
		{
4271
			$temp_array['owner_name'] = $row['owner_name'];
4272
			$temp_array['owner_count'] = $row['owner_count'];
4273
			$temp_array['airline_icao'] = $row['airline_icao'];
4274
			$airline_array[] = $temp_array;
4275
		}
4276
		return $airline_array;
4277
	}
4278
4279
	/**
4280
	* Gets all airlines that have flown over by aircraft
4281
	*
4282
	* @return Array the airline list
4283
	*
4284
	*/
4285
	public function countAllAirlinesByAircraft($aircraft_icao,$filters = array())
4286
	{
4287
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4288
		$filter_query = $this->getFilter($filters,true,true);
4289
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4290
		 	    FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
4291
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
4292
			    ORDER BY airline_count DESC";
4293
      
4294
		
4295
		$sth = $this->db->prepare($query);
4296
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4297
      
4298
		$airline_array = array();
4299
		$temp_array = array();
4300
        
4301
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4302
		{
4303
			$temp_array['airline_name'] = $row['airline_name'];
4304
			$temp_array['airline_icao'] = $row['airline_icao'];
4305
			$temp_array['airline_count'] = $row['airline_count'];
4306
			$temp_array['airline_country'] = $row['airline_country'];
4307
4308
			$airline_array[] = $temp_array;
4309
		}
4310
4311
		return $airline_array;
4312
	}
4313
4314
4315
	/**
4316
	* Gets all airline countries that have flown over by aircraft
4317
	*
4318
	* @return Array the airline country list
4319
	*
4320
	*/
4321
	public function countAllAirlineCountriesByAircraft($aircraft_icao,$filters = array())
4322
	{
4323
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4324
		$filter_query = $this->getFilter($filters,true,true);
4325
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4326
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
4327
                    GROUP BY spotter_output.airline_country
4328
					ORDER BY airline_country_count DESC
4329
					LIMIT 10 OFFSET 0";
4330
      
4331
		
4332
		$sth = $this->db->prepare($query);
4333
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4334
      
4335
		$airline_country_array = array();
4336
		$temp_array = array();
4337
        
4338
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4339
		{
4340
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4341
			$temp_array['airline_country'] = $row['airline_country'];
4342
 
4343
			$airline_country_array[] = $temp_array;
4344
		}
4345
		return $airline_country_array;
4346
	}
4347
4348
4349
	
4350
	
4351
	/**
4352
	* Gets all airlines that have flown over by airport
4353
	*
4354
	* @return Array the airline list
4355
	*
4356
	*/
4357
	public function countAllAirlinesByAirport($airport_icao,$filters = array())
4358
	{
4359
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4360
		$filter_query = $this->getFilter($filters,true,true);
4361
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4362
		    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 ) 
4363
                    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country
4364
		    ORDER BY airline_count DESC";
4365
      
4366
		
4367
		$sth = $this->db->prepare($query);
4368
		$sth->execute(array(':airport_icao' => $airport_icao));
4369
      
4370
		$airline_array = array();
4371
		$temp_array = array();
4372
        
4373
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4374
		{
4375
			$temp_array['airline_name'] = $row['airline_name'];
4376
			$temp_array['airline_icao'] = $row['airline_icao'];
4377
			$temp_array['airline_count'] = $row['airline_count'];
4378
			$temp_array['airline_country'] = $row['airline_country'];
4379
4380
			$airline_array[] = $temp_array;
4381
		}
4382
		return $airline_array;
4383
	}
4384
4385
4386
	/**
4387
	* Gets all airline countries that have flown over by airport icao
4388
	*
4389
	* @return Array the airline country list
4390
	*
4391
	*/
4392
	public function countAllAirlineCountriesByAirport($airport_icao,$filters = array())
4393
	{
4394
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4395
		$filter_query = $this->getFilter($filters,true,true);
4396
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4397
		 			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 )
4398
					GROUP BY spotter_output.airline_country
4399
					ORDER BY airline_country_count DESC
4400
					LIMIT 10 OFFSET 0";
4401
4402
		
4403
		$sth = $this->db->prepare($query);
4404
		$sth->execute(array(':airport_icao' => $airport_icao));
4405
4406
		$airline_country_array = array();
4407
		$temp_array = array();
4408
        
4409
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4410
		{
4411
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4412
			$temp_array['airline_country'] = $row['airline_country'];
4413
 
4414
			$airline_country_array[] = $temp_array;
4415
		}
4416
		return $airline_country_array;
4417
	}
4418
4419
4420
	/**
4421
	* Gets all airlines that have flown over by aircraft manufacturer
4422
	*
4423
	* @return Array the airline list
4424
	*
4425
	*/
4426
	public function countAllAirlinesByManufacturer($aircraft_manufacturer,$filters = array())
4427
	{
4428
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4429
		$filter_query = $this->getFilter($filters,true,true);
4430
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4431
		 			FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4432
					GROUP BY spotter_output.airline_name
4433
					ORDER BY airline_count DESC";
4434
 
4435
		$sth = $this->db->prepare($query);
4436
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4437
 
4438
		$airline_array = array();
4439
		$temp_array = array();
4440
        
4441
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4442
		{
4443
			$temp_array['airline_name'] = $row['airline_name'];
4444
			$temp_array['airline_icao'] = $row['airline_icao'];
4445
			$temp_array['airline_count'] = $row['airline_count'];
4446
			$temp_array['airline_country'] = $row['airline_country'];
4447
4448
			$airline_array[] = $temp_array;
4449
		}
4450
		return $airline_array;
4451
	}
4452
4453
4454
4455
	/**
4456
	* Gets all airline countries that have flown over by aircraft manufacturer
4457
	*
4458
	* @return Array the airline country list
4459
	*
4460
	*/
4461
	public function countAllAirlineCountriesByManufacturer($aircraft_manufacturer,$filters = array())
4462
	{
4463
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4464
		$filter_query = $this->getFilter($filters,true,true);
4465
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4466
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4467
					GROUP BY spotter_output.airline_country
4468
					ORDER BY airline_country_count DESC
4469
					LIMIT 10 OFFSET 0";
4470
      
4471
		
4472
		$sth = $this->db->prepare($query);
4473
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4474
4475
		$airline_country_array = array();
4476
		$temp_array = array();
4477
        
4478
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4479
		{
4480
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4481
			$temp_array['airline_country'] = $row['airline_country'];
4482
			$airline_country_array[] = $temp_array;
4483
		}
4484
		return $airline_country_array;
4485
	}
4486
4487
4488
	/**
4489
	* Gets all airlines that have flown over by date
4490
	*
4491
	* @return Array the airline list
4492
	*
4493
	*/
4494
	public function countAllAirlinesByDate($date,$filters = array())
4495
	{
4496
		global $globalTimezone, $globalDBdriver;
4497
		$filter_query = $this->getFilter($filters,true,true);
4498
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4499
		if ($globalTimezone != '') {
4500
			date_default_timezone_set($globalTimezone);
4501
			$datetime = new DateTime($date);
4502
			$offset = $datetime->format('P');
4503
		} else $offset = '+00:00';
4504
4505
		if ($globalDBdriver == 'mysql') {
4506
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4507
		 			FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4508
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country 
4509
					ORDER BY airline_count DESC";
4510
		} else {
4511
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4512
		 			FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4513
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country
4514
					ORDER BY airline_count DESC";
4515
		}
4516
		
4517
		$sth = $this->db->prepare($query);
4518
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4519
4520
		$airline_array = array();
4521
		$temp_array = array();
4522
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4523
		{
4524
			$temp_array['airline_name'] = $row['airline_name'];
4525
			$temp_array['airline_icao'] = $row['airline_icao'];
4526
			$temp_array['airline_count'] = $row['airline_count'];
4527
			$temp_array['airline_country'] = $row['airline_country'];
4528
 
4529
			$airline_array[] = $temp_array;
4530
		}
4531
4532
		return $airline_array;
4533
	}	
4534
	
4535
	
4536
	/**
4537
	* Gets all airline countries that have flown over by date
4538
	*
4539
	* @return Array the airline country list
4540
	*
4541
	*/
4542
	public function countAllAirlineCountriesByDate($date,$filters = array())
4543
	{
4544
		global $globalTimezone, $globalDBdriver;
4545
		$filter_query = $this->getFilter($filters,true,true);
4546
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4547
		if ($globalTimezone != '') {
4548
			date_default_timezone_set($globalTimezone);
4549
			$datetime = new DateTime($date);
4550
			$offset = $datetime->format('P');
4551
		} else $offset = '+00:00';
4552
		
4553
		if ($globalDBdriver == 'mysql') {
4554
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4555
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4556
					GROUP BY spotter_output.airline_country
4557
					ORDER BY airline_country_count DESC
4558
					LIMIT 10 OFFSET 0";
4559
		} else {
4560
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4561
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4562
					GROUP BY spotter_output.airline_country
4563
					ORDER BY airline_country_count DESC
4564
					LIMIT 10 OFFSET 0";
4565
		}
4566
4567
		$sth = $this->db->prepare($query);
4568
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4569
 
4570
		$airline_country_array = array();
4571
		$temp_array = array();
4572
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4573
		{
4574
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4575
			$temp_array['airline_country'] = $row['airline_country'];
4576
4577
			$airline_country_array[] = $temp_array;
4578
		}
4579
		return $airline_country_array;
4580
	}
4581
4582
4583
	/**
4584
	* Gets all airlines that have flown over by ident/callsign
4585
	*
4586
	* @return Array the airline list
4587
	*
4588
	*/
4589
	public function countAllAirlinesByIdent($ident,$filters = array())
4590
	{
4591
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
4592
		$filter_query = $this->getFilter($filters,true,true);
4593
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4594
		 		FROM spotter_output".$filter_query." spotter_output.ident = :ident  
4595
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4596
				ORDER BY airline_count DESC";
4597
      
4598
		
4599
		$sth = $this->db->prepare($query);
4600
		$sth->execute(array(':ident' => $ident));
4601
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4602
	}
4603
4604
	/**
4605
	* Gets all airlines by owner
4606
	*
4607
	* @return Array the airline list
4608
	*
4609
	*/
4610
	public function countAllAirlinesByOwner($owner,$filters = array())
4611
	{
4612
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
4613
		$filter_query = $this->getFilter($filters,true,true);
4614
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4615
		 		FROM spotter_output".$filter_query." spotter_output.owner_name = :owner  
4616
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4617
				ORDER BY airline_count DESC";
4618
      
4619
		
4620
		$sth = $this->db->prepare($query);
4621
		$sth->execute(array(':owner' => $owner));
4622
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4623
	}
4624
4625
	/**
4626
	* Gets flight duration by owner
4627
	*
4628
	* @return String Duration of all flights
4629
	*
4630
	*/
4631
	public function getFlightDurationByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
4632
	{
4633
		global $globalDBdriver;
4634
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
4635
		$filter_query = $this->getFilter($filters,true,true);
4636
		$query  = "SELECT SUM(last_seen - date) AS duration 
4637
				FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
4638
				AND last_seen > date";
4639
		$query_values = array();
4640
		if ($year != '') {
4641
			if ($globalDBdriver == 'mysql') {
4642
				$query .= " AND YEAR(spotter_output.date) = :year";
4643
				$query_values = array_merge($query_values,array(':year' => $year));
4644
			} else {
4645
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4646
				$query_values = array_merge($query_values,array(':year' => $year));
4647
			}
4648
		}
4649
		if ($month != '') {
4650
			if ($globalDBdriver == 'mysql') {
4651
				$query .= " AND MONTH(spotter_output.date) = :month";
4652
				$query_values = array_merge($query_values,array(':month' => $month));
4653
			} else {
4654
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4655
				$query_values = array_merge($query_values,array(':month' => $month));
4656
			}
4657
		}
4658
		if ($day != '') {
4659
			if ($globalDBdriver == 'mysql') {
4660
				$query .= " AND DAY(spotter_output.date) = :day";
4661
				$query_values = array_merge($query_values,array(':day' => $day));
4662
			} else {
4663
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4664
				$query_values = array_merge($query_values,array(':day' => $day));
4665
			}
4666
		}
4667
		$query_values = array_merge($query_values,array(':owner' => $owner));
4668
		$sth = $this->db->prepare($query);
4669
		$sth->execute($query_values);
4670
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4671
		if (is_numeric($result[0]['duration'])) return gmdate('H:i:s',$result[0]['duration']);
4672
		elseif ($result[0]['duration'] == '') return 0;
4673
		else return $result[0]['duration'];
4674
	}
4675
4676
	/**
4677
	* Count flights by owner
4678
	*
4679
	* @return String Duration of all flights
4680
	*
4681
	*/
4682
	public function countFlightsByOwner($owner,$filters = array())
4683
	{
4684
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
4685
		$filter_query = $this->getFilter($filters,true,true);
4686
		$query  = "SELECT COUNT(*) AS nb 
4687
				FROM spotter_output".$filter_query." spotter_output.owner_name = :owner";
4688
		$query_values = array();
4689
		$query_values = array_merge($query_values,array(':owner' => $owner));
4690
		$sth = $this->db->prepare($query);
4691
		$sth->execute($query_values);
4692
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4693
		return $result[0]['nb'];
4694
	}
4695
4696
	/**
4697
	* Count flights by pilot
4698
	*
4699
	* @return String Duration of all flights
4700
	*
4701
	*/
4702
	public function countFlightsByPilot($pilot,$filters = array())
4703
	{
4704
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
4705
		$filter_query = $this->getFilter($filters,true,true);
4706
		$query  = "SELECT COUNT(*) AS nb 
4707
				FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilod_id = :pilot)";
4708
		$query_values = array();
4709
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
4710
		$sth = $this->db->prepare($query);
4711
		$sth->execute($query_values);
4712
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4713
		return $result[0]['nb'];
4714
	}
4715
4716
	/**
4717
	* Gets flight duration by pilot
4718
	*
4719
	* @return String Duration of all flights
4720
	*
4721
	*/
4722
	public function getFlightDurationByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
4723
	{
4724
		global $globalDBdriver;
4725
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
4726
		$filter_query = $this->getFilter($filters,true,true);
4727
		$query  = "SELECT SUM(last_seen - date) AS duration 
4728
		 		FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
4729
		 		AND last_seen > date";
4730
		$query_values = array();
4731
		if ($year != '') {
4732
			if ($globalDBdriver == 'mysql') {
4733
				$query .= " AND YEAR(spotter_output.date) = :year";
4734
				$query_values = array_merge($query_values,array(':year' => $year));
4735
			} else {
4736
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4737
				$query_values = array_merge($query_values,array(':year' => $year));
4738
			}
4739
		}
4740
		if ($month != '') {
4741
			if ($globalDBdriver == 'mysql') {
4742
				$query .= " AND MONTH(spotter_output.date) = :month";
4743
				$query_values = array_merge($query_values,array(':month' => $month));
4744
			} else {
4745
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4746
				$query_values = array_merge($query_values,array(':month' => $month));
4747
			}
4748
		}
4749
		if ($day != '') {
4750
			if ($globalDBdriver == 'mysql') {
4751
				$query .= " AND DAY(spotter_output.date) = :day";
4752
				$query_values = array_merge($query_values,array(':day' => $day));
4753
			} else {
4754
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4755
				$query_values = array_merge($query_values,array(':day' => $day));
4756
			}
4757
		}
4758
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
4759
		$sth = $this->db->prepare($query);
4760
		$sth->execute($query_values);
4761
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4762
		if (is_int($result[0]['duration'])) return gmdate('H:i:s',$result[0]['duration']);
4763
		else return $result[0]['duration'];
4764
	}
4765
4766
	/**
4767
	* Gets all airlines used by pilot
4768
	*
4769
	* @return Array the airline list
4770
	*
4771
	*/
4772
	public function countAllAirlinesByPilot($pilot,$filters = array())
4773
	{
4774
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
4775
		$filter_query = $this->getFilter($filters,true,true);
4776
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4777
		 		FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
4778
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4779
				ORDER BY airline_count DESC";
4780
      
4781
		
4782
		$sth = $this->db->prepare($query);
4783
		$sth->execute(array(':pilot' => $pilot));
4784
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4785
	}
4786
4787
	/**
4788
	* Gets all airlines that have flown over by route
4789
	*
4790
	* @return Array the airline list
4791
	*
4792
	*/
4793
	public function countAllAirlinesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
4794
	{
4795
		$filter_query = $this->getFilter($filters,true,true);
4796
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4797
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4798
4799
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4800
		 			FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
4801
					GROUP BY spotter_output.airline_name
4802
					ORDER BY airline_count DESC";
4803
      
4804
		
4805
		$sth = $this->db->prepare($query);
4806
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4807
      
4808
		$airline_array = array();
4809
		$temp_array = array();
4810
        
4811
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4812
		{
4813
			$temp_array['airline_name'] = $row['airline_name'];
4814
			$temp_array['airline_icao'] = $row['airline_icao'];
4815
			$temp_array['airline_count'] = $row['airline_count'];
4816
			$temp_array['airline_country'] = $row['airline_country'];
4817
4818
			$airline_array[] = $temp_array;
4819
		}
4820
		return $airline_array;
4821
	}
4822
4823
	/**
4824
	* Gets all airline countries that have flown over by route
4825
	*
4826
	* @return Array the airline country list
4827
	*
4828
	*/
4829
	public function countAllAirlineCountriesByRoute($departure_airport_icao, $arrival_airport_icao,$filters= array())
4830
	{
4831
		$filter_query = $this->getFilter($filters,true,true);
4832
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4833
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4834
      
4835
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4836
		 		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) 
4837
				GROUP BY spotter_output.airline_country
4838
				ORDER BY airline_country_count DESC
4839
				LIMIT 10 OFFSET 0";
4840
      
4841
		
4842
		$sth = $this->db->prepare($query);
4843
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4844
      
4845
		$airline_country_array = array();
4846
		$temp_array = array();
4847
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4848
		{
4849
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4850
			$temp_array['airline_country'] = $row['airline_country'];
4851
4852
			$airline_country_array[] = $temp_array;
4853
		}
4854
4855
		return $airline_country_array;
4856
	}
4857
4858
4859
	/**
4860
	* Gets all airlines that have flown over by country
4861
	*
4862
	* @return Array the airline list
4863
	*
4864
	*/
4865
	public function countAllAirlinesByCountry($country,$filters = array())
4866
	{
4867
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4868
		$filter_query = $this->getFilter($filters,true,true);
4869
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4870
		 	    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
4871
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
4872
			    ORDER BY airline_count DESC";
4873
      
4874
		
4875
		$sth = $this->db->prepare($query);
4876
		$sth->execute(array(':country' => $country));
4877
4878
		$airline_array = array();
4879
		$temp_array = array();
4880
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4881
		{
4882
			$temp_array['airline_name'] = $row['airline_name'];
4883
			$temp_array['airline_icao'] = $row['airline_icao'];
4884
			$temp_array['airline_count'] = $row['airline_count'];
4885
			$temp_array['airline_country'] = $row['airline_country'];
4886
 
4887
			$airline_array[] = $temp_array;
4888
		}
4889
		return $airline_array;
4890
	}
4891
4892
4893
	/**
4894
	* Gets all airline countries that have flown over by country
4895
	*
4896
	* @return Array the airline country list
4897
	*
4898
	*/
4899
	public function countAllAirlineCountriesByCountry($country,$filters = array())
4900
	{
4901
		$filter_query = $this->getFilter($filters,true,true);
4902
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4903
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4904
		 		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 
4905
				GROUP BY spotter_output.airline_country
4906
				ORDER BY airline_country_count DESC
4907
				LIMIT 10 OFFSET 0";
4908
      
4909
		
4910
		$sth = $this->db->prepare($query);
4911
		$sth->execute(array(':country' => $country));
4912
4913
		$airline_country_array = array();
4914
		$temp_array = array();
4915
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4916
		{
4917
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4918
			$temp_array['airline_country'] = $row['airline_country'];
4919
4920
			$airline_country_array[] = $temp_array;
4921
		}
4922
		return $airline_country_array;
4923
	}
4924
4925
4926
	/**
4927
	* Gets all airlines countries
4928
	*
4929
	* @return Array the airline country list
4930
	*
4931
	*/
4932
	public function countAllAirlineCountries($limit = true, $filters = array(), $year = '', $month = '', $day = '')
4933
	{
4934
		global $globalDBdriver;
4935
		$filter_query = $this->getFilter($filters,true,true);
4936
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4937
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.airline_country <> 'NA'";
4938
		$query_values = array();
4939
		if ($year != '') {
4940
			if ($globalDBdriver == 'mysql') {
4941
				$query .= " AND YEAR(spotter_output.date) = :year";
4942
				$query_values = array_merge($query_values,array(':year' => $year));
4943
			} else {
4944
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4945
				$query_values = array_merge($query_values,array(':year' => $year));
4946
			}
4947
		}
4948
		if ($month != '') {
4949
			if ($globalDBdriver == 'mysql') {
4950
				$query .= " AND MONTH(spotter_output.date) = :month";
4951
				$query_values = array_merge($query_values,array(':month' => $month));
4952
			} else {
4953
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4954
				$query_values = array_merge($query_values,array(':month' => $month));
4955
			}
4956
		}
4957
		if ($day != '') {
4958
			if ($globalDBdriver == 'mysql') {
4959
				$query .= " AND DAY(spotter_output.date) = :day";
4960
				$query_values = array_merge($query_values,array(':day' => $day));
4961
			} else {
4962
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4963
				$query_values = array_merge($query_values,array(':day' => $day));
4964
			}
4965
		}
4966
		$query .= " GROUP BY spotter_output.airline_country
4967
					ORDER BY airline_country_count DESC";
4968
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4969
      
4970
		$sth = $this->db->prepare($query);
4971
		$sth->execute($query_values);
4972
4973
		$airline_array = array();
4974
		$temp_array = array();
4975
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4976
		{
4977
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4978
			$temp_array['airline_country'] = $row['airline_country'];
4979
4980
			$airline_array[] = $temp_array;
4981
		}
4982
		return $airline_array;
4983
	}
4984
4985
	/**
4986
	* Gets all number of flight over countries
4987
	*
4988
	* @return Array the airline country list
4989
	*
4990
	*/
4991
	public function countAllFlightOverCountries($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
4992
	{
4993
		global $globalDBdriver;
4994
		//$filter_query = $this->getFilter($filters,true,true);
4995
		$Connection= new Connection($this->db);
4996
		if (!$Connection->tableExists('countries')) return array();
4997
		/*
4998
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
4999
					FROM countries c, spotter_output s
5000
					WHERE Within(GeomFromText(CONCAT('POINT(',s.longitude,' ',s.latitude,')')), ogc_geom) ";
5001
		*/
5002
/*
5003
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
5004
					FROM countries c, spotter_live s
5005
					WHERE c.iso2 = s.over_country ";
5006
		$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 ";
5007
*/
5008
		require_once('class.SpotterLive.php');
5009
		$SpotterLive = new SpotterLive();
5010
		$filter_query = $SpotterLive->getFilter($filters,true,true);
5011
		$filter_query .= ' over_country IS NOT NULL';
5012
                if ($olderthanmonths > 0) {
5013
			if ($globalDBdriver == 'mysql') {
5014
				$filter_query .= ' AND spotter_live.date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5015
			} else {
5016
				$filter_query .= " AND spotter_live.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5017
			}
5018
		}
5019
                if ($sincedate != '') {
5020
            		if ($globalDBdriver == 'mysql') {
5021
				$filter_query .= " AND spotter_live.date > '".$sincedate."' ";
5022
			} else {
5023
				$filter_query .= " AND spotter_live.date > CAST('".$sincedate."' AS TIMESTAMP)";
5024
			}
5025
		}
5026
		$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 ";
5027
		$query .= "GROUP BY c.name,c.iso3,c.iso2 ORDER BY nb DESC";
5028
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5029
      
5030
		
5031
		$sth = $this->db->prepare($query);
5032
		$sth->execute();
5033
 
5034
		$flight_array = array();
5035
		$temp_array = array();
5036
        
5037
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5038
		{
5039
			$temp_array['flight_count'] = $row['nb'];
5040
			$temp_array['flight_country'] = $row['name'];
5041
			$temp_array['flight_country_iso3'] = $row['iso3'];
5042
			$temp_array['flight_country_iso2'] = $row['iso2'];
5043
			$flight_array[] = $temp_array;
5044
		}
5045
		return $flight_array;
5046
	}
5047
	
5048
	
5049
	/**
5050
	* Gets all aircraft types that have flown over
5051
	*
5052
	* @return Array the aircraft list
5053
	*
5054
	*/
5055
	public function countAllAircraftTypes($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
5056
	{
5057
		global $globalDBdriver;
5058
		$filter_query = $this->getFilter($filters,true,true);
5059
		$query  = "SELECT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
5060
		    FROM spotter_output ".$filter_query." spotter_output.aircraft_name  <> '' AND spotter_output.aircraft_icao  <> ''";
5061
		if ($olderthanmonths > 0) {
5062
			if ($globalDBdriver == 'mysql') {
5063
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5064
			} else {
5065
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5066
			}
5067
		}
5068
		if ($sincedate != '') {
5069
			if ($globalDBdriver == 'mysql') {
5070
				$query .= " AND spotter_output.date > '".$sincedate."'";
5071
			} else {
5072
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5073
			}
5074
		}
5075
		$query_values = array();
5076
		if ($year != '') {
5077
			if ($globalDBdriver == 'mysql') {
5078
				$query .= " AND YEAR(spotter_output.date) = :year";
5079
				$query_values = array_merge($query_values,array(':year' => $year));
5080
			} else {
5081
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5082
				$query_values = array_merge($query_values,array(':year' => $year));
5083
			}
5084
		}
5085
		if ($month != '') {
5086
			if ($globalDBdriver == 'mysql') {
5087
				$query .= " AND MONTH(spotter_output.date) = :month";
5088
				$query_values = array_merge($query_values,array(':month' => $month));
5089
			} else {
5090
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5091
				$query_values = array_merge($query_values,array(':month' => $month));
5092
			}
5093
		}
5094
		if ($day != '') {
5095
			if ($globalDBdriver == 'mysql') {
5096
				$query .= " AND DAY(spotter_output.date) = :day";
5097
				$query_values = array_merge($query_values,array(':day' => $day));
5098
			} else {
5099
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5100
				$query_values = array_merge($query_values,array(':day' => $day));
5101
			}
5102
		}
5103
5104
		$query .= " GROUP BY spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer ORDER BY aircraft_icao_count DESC";
5105
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5106
 
5107
		$sth = $this->db->prepare($query);
5108
		$sth->execute($query_values);
5109
5110
		$aircraft_array = array();
5111
		$temp_array = array();
5112
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5113
		{
5114
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5115
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5116
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5117
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5118
			$aircraft_array[] = $temp_array;
5119
		}
5120
		return $aircraft_array;
5121
	}
5122
5123
	/**
5124
	* Gets all aircraft types that have flown over by airline
5125
	*
5126
	* @return Array the aircraft list
5127
	*
5128
	*/
5129
	public function countAllAircraftTypesByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '',$month = '', $day = '')
5130
	{
5131
		global $globalDBdriver;
5132
		$filter_query = $this->getFilter($filters,true,true);
5133
		$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 
5134
		    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'";
5135
		if ($olderthanmonths > 0) {
5136
			if ($globalDBdriver == 'mysql') {
5137
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5138
			} else {
5139
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5140
			}
5141
		}
5142
		if ($sincedate != '') {
5143
			if ($globalDBdriver == 'mysql') {
5144
				$query .= " AND spotter_output.date > '".$sincedate."'";
5145
			} else {
5146
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5147
			}
5148
		}
5149
		$query_values = array();
5150
		if ($year != '') {
5151
			if ($globalDBdriver == 'mysql') {
5152
				$query .= " AND YEAR(spotter_output.date) = :year";
5153
				$query_values = array_merge($query_values,array(':year' => $year));
5154
			} else {
5155
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5156
				$query_values = array_merge($query_values,array(':year' => $year));
5157
			}
5158
		}
5159
		if ($month != '') {
5160
			if ($globalDBdriver == 'mysql') {
5161
				$query .= " AND MONTH(spotter_output.date) = :month";
5162
				$query_values = array_merge($query_values,array(':month' => $month));
5163
			} else {
5164
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5165
				$query_values = array_merge($query_values,array(':month' => $month));
5166
			}
5167
		}
5168
		if ($day != '') {
5169
			if ($globalDBdriver == 'mysql') {
5170
				$query .= " AND DAY(spotter_output.date) = :day";
5171
				$query_values = array_merge($query_values,array(':day' => $day));
5172
			} else {
5173
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5174
				$query_values = array_merge($query_values,array(':day' => $day));
5175
			}
5176
		}
5177
5178
		$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";
5179
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5180
 
5181
		$sth = $this->db->prepare($query);
5182
		$sth->execute($query_values);
5183
5184
		$aircraft_array = array();
5185
		$temp_array = array();
5186
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5187
		{
5188
			$temp_array['airline_icao'] = $row['airline_icao'];
5189
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5190
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5191
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5192
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5193
			$aircraft_array[] = $temp_array;
5194
		}
5195
		return $aircraft_array;
5196
	}
5197
5198
	/**
5199
	* Gets all aircraft types that have flown over by months
5200
	*
5201
	* @return Array the aircraft list
5202
	*
5203
	*/
5204
	public function countAllAircraftTypesByMonths($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
5205
	{
5206
		global $globalDBdriver;
5207
		$filter_query = $this->getFilter($filters,true,true);
5208
		$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 
5209
		    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' ";
5210
		if ($olderthanmonths > 0) {
5211
			if ($globalDBdriver == 'mysql') {
5212
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5213
			} else {
5214
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5215
			}
5216
		}
5217
		if ($sincedate != '') {
5218
			if ($globalDBdriver == 'mysql') {
5219
				$query .= "AND spotter_output.date > '".$sincedate."' ";
5220
			} else {
5221
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5222
			}
5223
		}
5224
5225
		$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";
5226
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5227
 
5228
		$sth = $this->db->prepare($query);
5229
		$sth->execute();
5230
5231
		$aircraft_array = array();
5232
		$temp_array = array();
5233
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5234
		{
5235
			//$temp_array['airline_icao'] = $row['airline_icao'];
5236
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5237
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5238
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5239
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5240
			$aircraft_array[] = $temp_array;
5241
		}
5242
		return $aircraft_array;
5243
	}
5244
5245
5246
	/**
5247
	* Gets all aircraft registration that have flown over by aircaft icao
5248
	*
5249
	* @return Array the aircraft list
5250
	*
5251
	*/
5252
	public function countAllAircraftRegistrationByAircraft($aircraft_icao,$filters = array())
5253
	{
5254
		$Image = new Image($this->db);
5255
		$filter_query = $this->getFilter($filters,true,true);
5256
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
5257
5258
		$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  
5259
				FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_icao = :aircraft_icao  
5260
				GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name  
5261
				ORDER BY registration_count DESC";
5262
5263
		$sth = $this->db->prepare($query);
5264
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
5265
5266
		$aircraft_array = array();
5267
		$temp_array = array();
5268
        
5269
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5270
		{
5271
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5272
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5273
			$temp_array['registration'] = $row['registration'];
5274
			$temp_array['airline_name'] = $row['airline_name'];
5275
			$temp_array['image_thumbnail'] = "";
5276
			if($row['registration'] != "")
5277
			{
5278
				$image_array = $Image->getSpotterImage($row['registration']);
5279
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5280
			}
5281
			$temp_array['registration_count'] = $row['registration_count'];
5282
5283
			$aircraft_array[] = $temp_array;
5284
		}
5285
		return $aircraft_array;
5286
	}
5287
5288
5289
	/**
5290
	* Gets all aircraft types that have flown over by airline icao
5291
	*
5292
	* @return Array the aircraft list
5293
	*
5294
	*/
5295
	public function countAllAircraftTypesByAirline($airline_icao,$filters = array())
5296
	{
5297
		$filter_query = $this->getFilter($filters,true,true);
5298
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5299
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5300
			    FROM spotter_output".$filter_query." spotter_output.aircraft_icao <> '' AND spotter_output.airline_icao = :airline_icao 
5301
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5302
			    ORDER BY aircraft_icao_count DESC";
5303
5304
		$sth = $this->db->prepare($query);
5305
		$sth->execute(array(':airline_icao' => $airline_icao));
5306
5307
		$aircraft_array = array();
5308
		$temp_array = array();
5309
5310
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5311
		{
5312
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5313
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5314
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5315
5316
			$aircraft_array[] = $temp_array;
5317
		}
5318
		return $aircraft_array;
5319
	}
5320
5321
5322
	/**
5323
	* Gets all aircraft registration that have flown over by airline icao
5324
	*
5325
	* @return Array the aircraft list
5326
	*
5327
	*/
5328
	public function countAllAircraftRegistrationByAirline($airline_icao,$filters = array())
5329
	{
5330
		$filter_query = $this->getFilter($filters,true,true);
5331
		$Image = new Image($this->db);
5332
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5333
5334
		$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 
5335
			    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.airline_icao = :airline_icao 
5336
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
5337
			    ORDER BY registration_count DESC";
5338
5339
		$sth = $this->db->prepare($query);
5340
		$sth->execute(array(':airline_icao' => $airline_icao));
5341
5342
		$aircraft_array = array();
5343
		$temp_array = array();
5344
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5345
		{
5346
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5347
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5348
			$temp_array['registration'] = $row['registration'];
5349
			$temp_array['airline_name'] = $row['airline_name'];
5350
			$temp_array['image_thumbnail'] = "";
5351
			if($row['registration'] != "")
5352
			{
5353
				$image_array = $Image->getSpotterImage($row['registration']);
5354
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5355
			}
5356
			$temp_array['registration_count'] = $row['registration_count'];
5357
5358
			$aircraft_array[] = $temp_array;
5359
		}
5360
		return $aircraft_array;
5361
	}
5362
5363
5364
	/**
5365
	* Gets all aircraft manufacturer that have flown over by airline icao
5366
	*
5367
	* @return Array the aircraft list
5368
	*
5369
	*/
5370
	public function countAllAircraftManufacturerByAirline($airline_icao,$filters = array())
5371
	{
5372
		$filter_query = $this->getFilter($filters,true,true);
5373
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5374
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5375
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.airline_icao = :airline_icao 
5376
				GROUP BY spotter_output.aircraft_manufacturer 
5377
				ORDER BY aircraft_manufacturer_count DESC";
5378
5379
		$sth = $this->db->prepare($query);
5380
		$sth->execute(array(':airline_icao' => $airline_icao));
5381
5382
		$aircraft_array = array();
5383
		$temp_array = array();
5384
5385
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5386
		{
5387
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5388
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5389
5390
			$aircraft_array[] = $temp_array;
5391
		}
5392
		return $aircraft_array;
5393
	}
5394
5395
5396
	/**
5397
	* Gets all aircraft types that have flown over by airline icao
5398
	*
5399
	* @return Array the aircraft list
5400
	*
5401
	*/
5402
	public function countAllAircraftTypesByAirport($airport_icao,$filters = array())
5403
	{
5404
		$filter_query = $this->getFilter($filters,true,true);
5405
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5406
5407
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5408
				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) 
5409
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5410
				ORDER BY aircraft_icao_count DESC";
5411
 
5412
		$sth = $this->db->prepare($query);
5413
		$sth->execute(array(':airport_icao' => $airport_icao));
5414
5415
		$aircraft_array = array();
5416
		$temp_array = array();
5417
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5418
		{
5419
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5420
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5421
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5422
5423
			$aircraft_array[] = $temp_array;
5424
		}
5425
		return $aircraft_array;
5426
	}
5427
5428
5429
	/**
5430
	* Gets all aircraft registration that have flown over by airport icao
5431
	*
5432
	* @return Array the aircraft list
5433
	*
5434
	*/
5435
	public function countAllAircraftRegistrationByAirport($airport_icao,$filters = array())
5436
	{
5437
		$filter_query = $this->getFilter($filters,true,true);
5438
		$Image = new Image($this->db);
5439
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5440
5441
		$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  
5442
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)   
5443
                    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5444
		    ORDER BY registration_count DESC";
5445
5446
		$sth = $this->db->prepare($query);
5447
		$sth->execute(array(':airport_icao' => $airport_icao));
5448
5449
		$aircraft_array = array();
5450
		$temp_array = array();
5451
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5452
		{
5453
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5454
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5455
			$temp_array['registration'] = $row['registration'];
5456
			$temp_array['airline_name'] = $row['airline_name'];
5457
			$temp_array['image_thumbnail'] = "";
5458
			if($row['registration'] != "")
5459
			{
5460
				$image_array = $Image->getSpotterImage($row['registration']);
5461
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5462
			}
5463
			$temp_array['registration_count'] = $row['registration_count'];
5464
			$aircraft_array[] = $temp_array;
5465
		}
5466
		return $aircraft_array;
5467
	}
5468
	
5469
	
5470
	/**
5471
	* Gets all aircraft manufacturer that have flown over by airport icao
5472
	*
5473
	* @return Array the aircraft list
5474
	*
5475
	*/
5476
	public function countAllAircraftManufacturerByAirport($airport_icao,$filters = array())
5477
	{
5478
		$filter_query = $this->getFilter($filters,true,true);
5479
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5480
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5481
                    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)  
5482
                    GROUP BY spotter_output.aircraft_manufacturer 
5483
					ORDER BY aircraft_manufacturer_count DESC";
5484
5485
		
5486
		$sth = $this->db->prepare($query);
5487
		$sth->execute(array(':airport_icao' => $airport_icao));
5488
5489
		$aircraft_array = array();
5490
		$temp_array = array();
5491
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5492
		{
5493
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5494
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5495
			$aircraft_array[] = $temp_array;
5496
		}
5497
		return $aircraft_array;
5498
	}
5499
5500
	/**
5501
	* Gets all aircraft types that have flown over by aircraft manufacturer
5502
	*
5503
	* @return Array the aircraft list
5504
	*
5505
	*/
5506
	public function countAllAircraftTypesByManufacturer($aircraft_manufacturer,$filters = array())
5507
	{
5508
		$filter_query = $this->getFilter($filters,true,true);
5509
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5510
5511
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5512
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
5513
                    GROUP BY spotter_output.aircraft_name 
5514
					ORDER BY aircraft_icao_count DESC";
5515
5516
		$sth = $this->db->prepare($query);
5517
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5518
		$aircraft_array = array();
5519
		$temp_array = array();
5520
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5521
		{
5522
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5523
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5524
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5525
			$aircraft_array[] = $temp_array;
5526
		}
5527
		return $aircraft_array;
5528
	}
5529
5530
5531
	/**
5532
	* Gets all aircraft registration that have flown over by aircaft manufacturer
5533
	*
5534
	* @return Array the aircraft list
5535
	*
5536
	*/
5537
	public function countAllAircraftRegistrationByManufacturer($aircraft_manufacturer, $filters = array())
5538
	{
5539
		$filter_query = $this->getFilter($filters,true,true);
5540
		$Image = new Image($this->db);
5541
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5542
5543
		$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   
5544
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
5545
                    GROUP BY spotter_output.registration 
5546
					ORDER BY registration_count DESC";
5547
5548
		
5549
		$sth = $this->db->prepare($query);
5550
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5551
		$aircraft_array = array();
5552
		$temp_array = array();
5553
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5554
		{
5555
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5556
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5557
			$temp_array['registration'] = $row['registration'];
5558
			$temp_array['airline_name'] = $row['airline_name'];
5559
			$temp_array['image_thumbnail'] = "";
5560
			if($row['registration'] != "")
5561
			{
5562
				$image_array = $Image->getSpotterImage($row['registration']);
5563
				$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5564
			}
5565
			$temp_array['registration_count'] = $row['registration_count'];
5566
			$aircraft_array[] = $temp_array;
5567
		}
5568
		return $aircraft_array;
5569
	}
5570
5571
	/**
5572
	* Gets all aircraft types that have flown over by date
5573
	*
5574
	* @return Array the aircraft list
5575
	*
5576
	*/
5577
	public function countAllAircraftTypesByDate($date,$filters = array())
5578
	{
5579
		global $globalTimezone, $globalDBdriver;
5580
		$filter_query = $this->getFilter($filters,true,true);
5581
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5582
		if ($globalTimezone != '') {
5583
			date_default_timezone_set($globalTimezone);
5584
			$datetime = new DateTime($date);
5585
			$offset = $datetime->format('P');
5586
		} else $offset = '+00:00';
5587
5588
		if ($globalDBdriver == 'mysql') {
5589
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5590
					FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
5591
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5592
					ORDER BY aircraft_icao_count DESC";
5593
		} else {
5594
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5595
					FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date
5596
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5597
					ORDER BY aircraft_icao_count DESC";
5598
		}
5599
		
5600
		$sth = $this->db->prepare($query);
5601
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5602
5603
		$aircraft_array = array();
5604
		$temp_array = array();
5605
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5606
		{
5607
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5608
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5609
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5610
5611
			$aircraft_array[] = $temp_array;
5612
		}
5613
		return $aircraft_array;
5614
	}
5615
5616
5617
	/**
5618
	* Gets all aircraft registration that have flown over by date
5619
	*
5620
	* @return Array the aircraft list
5621
	*
5622
	*/
5623
	public function countAllAircraftRegistrationByDate($date,$filters = array())
5624
	{
5625
		global $globalTimezone, $globalDBdriver;
5626
		$filter_query = $this->getFilter($filters,true,true);
5627
		$Image = new Image($this->db);
5628
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5629
		if ($globalTimezone != '') {
5630
			date_default_timezone_set($globalTimezone);
5631
			$datetime = new DateTime($date);
5632
			$offset = $datetime->format('P');
5633
		} else $offset = '+00:00';
5634
5635
		if ($globalDBdriver == 'mysql') {
5636
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name 
5637
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5638
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5639
					ORDER BY registration_count DESC";
5640
		} else {
5641
			$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    
5642
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5643
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5644
					ORDER BY registration_count DESC";
5645
		}
5646
		
5647
		$sth = $this->db->prepare($query);
5648
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5649
5650
		$aircraft_array = array();
5651
		$temp_array = array();
5652
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5653
		{
5654
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5655
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5656
			$temp_array['registration'] = $row['registration'];
5657
			$temp_array['airline_name'] = $row['airline_name'];
5658
			$temp_array['image_thumbnail'] = "";
5659
			if($row['registration'] != "")
5660
			{
5661
				$image_array = $Image->getSpotterImage($row['registration']);
5662
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5663
			}
5664
			$temp_array['registration_count'] = $row['registration_count'];
5665
 
5666
			$aircraft_array[] = $temp_array;
5667
		}
5668
		return $aircraft_array;
5669
	}
5670
5671
5672
	/**
5673
	* Gets all aircraft manufacturer that have flown over by date
5674
	*
5675
	* @return Array the aircraft manufacturer list
5676
	*
5677
	*/
5678
	public function countAllAircraftManufacturerByDate($date,$filters = array())
5679
	{
5680
		global $globalTimezone, $globalDBdriver;
5681
		$filter_query = $this->getFilter($filters,true,true);
5682
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5683
		if ($globalTimezone != '') {
5684
			date_default_timezone_set($globalTimezone);
5685
			$datetime = new DateTime($date);
5686
			$offset = $datetime->format('P');
5687
		} else $offset = '+00:00';
5688
5689
		if ($globalDBdriver == 'mysql') {
5690
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5691
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5692
				GROUP BY spotter_output.aircraft_manufacturer 
5693
				ORDER BY aircraft_manufacturer_count DESC";
5694
		} else {
5695
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5696
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5697
				GROUP BY spotter_output.aircraft_manufacturer 
5698
				ORDER BY aircraft_manufacturer_count DESC";
5699
		}
5700
		
5701
		$sth = $this->db->prepare($query);
5702
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5703
5704
		$aircraft_array = array();
5705
		$temp_array = array();
5706
5707
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5708
		{
5709
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5710
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5711
5712
			$aircraft_array[] = $temp_array;
5713
		}
5714
		return $aircraft_array;
5715
	}
5716
5717
5718
	/**
5719
	* Gets all aircraft types that have flown over by ident/callsign
5720
	*
5721
	* @return Array the aircraft list
5722
	*
5723
	*/
5724
	public function countAllAircraftTypesByIdent($ident,$filters = array())
5725
	{
5726
		$filter_query = $this->getFilter($filters,true,true);
5727
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5728
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5729
				FROM spotter_output".$filter_query." spotter_output.ident = :ident 
5730
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao
5731
				ORDER BY aircraft_icao_count DESC";
5732
5733
		$sth = $this->db->prepare($query);
5734
		$sth->execute(array(':ident' => $ident));
5735
      
5736
		$aircraft_array = array();
5737
		$temp_array = array();
5738
5739
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5740
		{
5741
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5742
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5743
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5744
5745
			$aircraft_array[] = $temp_array;
5746
		}
5747
		return $aircraft_array;
5748
	}
5749
5750
	/**
5751
	* Gets all aircraft types that have flown over by pilot
5752
	*
5753
	* @return Array the aircraft list
5754
	*
5755
	*/
5756
	public function countAllAircraftTypesByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
5757
	{
5758
		global $globalDBdriver;
5759
		$filter_query = $this->getFilter($filters,true,true);
5760
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
5761
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5762
				FROM spotter_output".$filter_query." (spotter_output.pilot_id = :pilot OR spotter_output.pilot_name = :pilot)";
5763
		$query_values = array();
5764
		if ($year != '') {
5765
			if ($globalDBdriver == 'mysql') {
5766
				$query .= " AND YEAR(spotter_output.date) = :year";
5767
				$query_values = array_merge($query_values,array(':year' => $year));
5768
			} else {
5769
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5770
				$query_values = array_merge($query_values,array(':year' => $year));
5771
			}
5772
		}
5773
		if ($month != '') {
5774
			if ($globalDBdriver == 'mysql') {
5775
				$query .= " AND MONTH(spotter_output.date) = :month";
5776
				$query_values = array_merge($query_values,array(':month' => $month));
5777
			} else {
5778
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5779
				$query_values = array_merge($query_values,array(':month' => $month));
5780
			}
5781
		}
5782
		if ($day != '') {
5783
			if ($globalDBdriver == 'mysql') {
5784
				$query .= " AND DAY(spotter_output.date) = :day";
5785
				$query_values = array_merge($query_values,array(':day' => $day));
5786
			} else {
5787
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5788
				$query_values = array_merge($query_values,array(':day' => $day));
5789
			}
5790
		}
5791
5792
		$query .= " GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao
5793
				ORDER BY aircraft_icao_count DESC";
5794
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
5795
		$sth = $this->db->prepare($query);
5796
		$sth->execute($query_values);
5797
		return $sth->fetchAll(PDO::FETCH_ASSOC);
5798
	}
5799
5800
	/**
5801
	* Gets all aircraft types that have flown over by owner
5802
	*
5803
	* @return Array the aircraft list
5804
	*
5805
	*/
5806
	public function countAllAircraftTypesByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
5807
	{
5808
		global $globalDBdriver;
5809
		$filter_query = $this->getFilter($filters,true,true);
5810
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
5811
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
5812
				FROM spotter_output".$filter_query." spotter_output.owner_name = :owner";
5813
		$query_values = array();
5814
		if ($year != '') {
5815
			if ($globalDBdriver == 'mysql') {
5816
				$query .= " AND YEAR(spotter_output.date) = :year";
5817
				$query_values = array_merge($query_values,array(':year' => $year));
5818
			} else {
5819
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5820
				$query_values = array_merge($query_values,array(':year' => $year));
5821
			}
5822
		}
5823
		if ($month != '') {
5824
			if ($globalDBdriver == 'mysql') {
5825
				$query .= " AND MONTH(spotter_output.date) = :month";
5826
				$query_values = array_merge($query_values,array(':month' => $month));
5827
			} else {
5828
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5829
				$query_values = array_merge($query_values,array(':month' => $month));
5830
			}
5831
		}
5832
		if ($day != '') {
5833
			if ($globalDBdriver == 'mysql') {
5834
				$query .= " AND DAY(spotter_output.date) = :day";
5835
				$query_values = array_merge($query_values,array(':day' => $day));
5836
			} else {
5837
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5838
				$query_values = array_merge($query_values,array(':day' => $day));
5839
			}
5840
		}
5841
		$query .= " GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.aircraft_icao
5842
				ORDER BY aircraft_icao_count DESC";
5843
		$query_values = array_merge($query_values,array(':owner' => $owner));
5844
		$sth = $this->db->prepare($query);
5845
		$sth->execute($query_values);
5846
		return $sth->fetchAll(PDO::FETCH_ASSOC);
5847
	}
5848
5849
	/**
5850
	* Gets all aircraft registration that have flown over by ident/callsign
5851
	*
5852
	* @return Array the aircraft list
5853
	*
5854
	*/
5855
	public function countAllAircraftRegistrationByIdent($ident,$filters = array())
5856
	{
5857
		$filter_query = $this->getFilter($filters,true,true);
5858
		$Image = new Image($this->db);
5859
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5860
5861
		$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  
5862
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.ident = :ident   
5863
                    GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
5864
		    ORDER BY registration_count DESC";
5865
5866
		
5867
		$sth = $this->db->prepare($query);
5868
		$sth->execute(array(':ident' => $ident));
5869
      
5870
		$aircraft_array = array();
5871
		$temp_array = array();
5872
        
5873
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5874
		{
5875
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5876
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5877
			$temp_array['registration'] = $row['registration'];
5878
			$temp_array['airline_name'] = $row['airline_name'];
5879
			$temp_array['image_thumbnail'] = "";
5880
			if($row['registration'] != "")
5881
			{
5882
				$image_array = $Image->getSpotterImage($row['registration']);
5883
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5884
				else $temp_array['image_thumbnail'] = '';
5885
			}
5886
			$temp_array['registration_count'] = $row['registration_count'];
5887
			$aircraft_array[] = $temp_array;
5888
		}
5889
		return $aircraft_array;
5890
	}
5891
5892
	/**
5893
	* Gets all aircraft registration that have flown over by owner
5894
	*
5895
	* @return Array the aircraft list
5896
	*
5897
	*/
5898
	public function countAllAircraftRegistrationByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
5899
	{
5900
		global $globalDBdriver;
5901
		$filter_query = $this->getFilter($filters,true,true);
5902
		$Image = new Image($this->db);
5903
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
5904
5905
		$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  
5906
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.owner_name = :owner";
5907
		$query_values = array();
5908
		if ($year != '') {
5909
			if ($globalDBdriver == 'mysql') {
5910
				$query .= " AND YEAR(spotter_output.date) = :year";
5911
				$query_values = array_merge($query_values,array(':year' => $year));
5912
			} else {
5913
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5914
				$query_values = array_merge($query_values,array(':year' => $year));
5915
			}
5916
		}
5917
		if ($month != '') {
5918
			if ($globalDBdriver == 'mysql') {
5919
				$query .= " AND MONTH(spotter_output.date) = :month";
5920
				$query_values = array_merge($query_values,array(':month' => $month));
5921
			} else {
5922
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5923
				$query_values = array_merge($query_values,array(':month' => $month));
5924
			}
5925
		}
5926
		if ($day != '') {
5927
			if ($globalDBdriver == 'mysql') {
5928
				$query .= " AND DAY(spotter_output.date) = :day";
5929
				$query_values = array_merge($query_values,array(':day' => $day));
5930
			} else {
5931
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5932
				$query_values = array_merge($query_values,array(':day' => $day));
5933
			}
5934
		}
5935
		$query_values = array_merge($query_values,array(':owner' => $owner));
5936
5937
		$query .= " GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.airline_name
5938
		    ORDER BY registration_count DESC";
5939
5940
		
5941
		$sth = $this->db->prepare($query);
5942
		$sth->execute($query_values);
5943
      
5944
		$aircraft_array = array();
5945
		$temp_array = array();
5946
        
5947
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5948
		{
5949
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5950
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5951
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5952
			$temp_array['registration'] = $row['registration'];
5953
			$temp_array['airline_name'] = $row['airline_name'];
5954
			$temp_array['image_thumbnail'] = "";
5955
			if($row['registration'] != "")
5956
			{
5957
				$image_array = $Image->getSpotterImage($row['registration']);
5958
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5959
				else $temp_array['image_thumbnail'] = '';
5960
			}
5961
			$temp_array['registration_count'] = $row['registration_count'];
5962
			$aircraft_array[] = $temp_array;
5963
		}
5964
		return $aircraft_array;
5965
	}
5966
5967
	/**
5968
	* Gets all aircraft registration that have flown over by pilot
5969
	*
5970
	* @return Array the aircraft list
5971
	*
5972
	*/
5973
	public function countAllAircraftRegistrationByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
5974
	{
5975
		global $globalDBdriver;
5976
		$filter_query = $this->getFilter($filters,true,true);
5977
		$Image = new Image($this->db);
5978
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
5979
5980
		$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  
5981
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot)";
5982
		$query_values = array();
5983
		if ($year != '') {
5984
			if ($globalDBdriver == 'mysql') {
5985
				$query .= " AND YEAR(spotter_output.date) = :year";
5986
				$query_values = array_merge($query_values,array(':year' => $year));
5987
			} else {
5988
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5989
				$query_values = array_merge($query_values,array(':year' => $year));
5990
			}
5991
		}
5992
		if ($month != '') {
5993
			if ($globalDBdriver == 'mysql') {
5994
				$query .= " AND MONTH(spotter_output.date) = :month";
5995
				$query_values = array_merge($query_values,array(':month' => $month));
5996
			} else {
5997
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5998
				$query_values = array_merge($query_values,array(':month' => $month));
5999
			}
6000
		}
6001
		if ($day != '') {
6002
			if ($globalDBdriver == 'mysql') {
6003
				$query .= " AND DAY(spotter_output.date) = :day";
6004
				$query_values = array_merge($query_values,array(':day' => $day));
6005
			} else {
6006
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6007
				$query_values = array_merge($query_values,array(':day' => $day));
6008
			}
6009
		}
6010
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
6011
6012
		$query .= " GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.airline_name
6013
		    ORDER BY registration_count DESC";
6014
6015
		
6016
		$sth = $this->db->prepare($query);
6017
		$sth->execute($query_values);
6018
      
6019
		$aircraft_array = array();
6020
		$temp_array = array();
6021
        
6022
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6023
		{
6024
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6025
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6026
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6027
			$temp_array['registration'] = $row['registration'];
6028
			$temp_array['airline_name'] = $row['airline_name'];
6029
			$temp_array['image_thumbnail'] = "";
6030
			if($row['registration'] != "")
6031
			{
6032
				$image_array = $Image->getSpotterImage($row['registration']);
6033
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6034
				else $temp_array['image_thumbnail'] = '';
6035
			}
6036
			$temp_array['registration_count'] = $row['registration_count'];
6037
			$aircraft_array[] = $temp_array;
6038
		}
6039
		return $aircraft_array;
6040
	}
6041
6042
6043
	/**
6044
	* Gets all aircraft manufacturer that have flown over by ident/callsign
6045
	*
6046
	* @return Array the aircraft manufacturer list
6047
	*
6048
	*/
6049
	public function countAllAircraftManufacturerByIdent($ident,$filters = array())
6050
	{
6051
		$filter_query = $this->getFilter($filters,true,true);
6052
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
6053
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6054
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.ident = :ident  
6055
                    GROUP BY spotter_output.aircraft_manufacturer 
6056
					ORDER BY aircraft_manufacturer_count DESC";
6057
6058
		
6059
		$sth = $this->db->prepare($query);
6060
		$sth->execute(array(':ident' => $ident));
6061
		$aircraft_array = array();
6062
		$temp_array = array();
6063
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6064
		{
6065
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6066
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6067
			$aircraft_array[] = $temp_array;
6068
		}
6069
		return $aircraft_array;
6070
	}
6071
6072
	/**
6073
	* Gets all aircraft manufacturer that have flown over by owner
6074
	*
6075
	* @return Array the aircraft manufacturer list
6076
	*
6077
	*/
6078
	public function countAllAircraftManufacturerByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
6079
	{
6080
		global $globalDBdriver;
6081
		$filter_query = $this->getFilter($filters,true,true);
6082
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
6083
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6084
		    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.owner_name = :owner";
6085
		$query_values = array();
6086
		if ($year != '') {
6087
			if ($globalDBdriver == 'mysql') {
6088
				$query .= " AND YEAR(spotter_output.date) = :year";
6089
				$query_values = array_merge($query_values,array(':year' => $year));
6090
			} else {
6091
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6092
				$query_values = array_merge($query_values,array(':year' => $year));
6093
			}
6094
		}
6095
		if ($month != '') {
6096
			if ($globalDBdriver == 'mysql') {
6097
				$query .= " AND MONTH(spotter_output.date) = :month";
6098
				$query_values = array_merge($query_values,array(':month' => $month));
6099
			} else {
6100
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6101
				$query_values = array_merge($query_values,array(':month' => $month));
6102
			}
6103
		}
6104
		if ($day != '') {
6105
			if ($globalDBdriver == 'mysql') {
6106
				$query .= " AND DAY(spotter_output.date) = :day";
6107
				$query_values = array_merge($query_values,array(':day' => $day));
6108
			} else {
6109
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6110
				$query_values = array_merge($query_values,array(':day' => $day));
6111
			}
6112
		}
6113
		$query_values = array_merge($query_values,array(':owner' => $owner));
6114
6115
		$query .= " GROUP BY spotter_output.aircraft_manufacturer 
6116
		    ORDER BY aircraft_manufacturer_count DESC";
6117
6118
		
6119
		$sth = $this->db->prepare($query);
6120
		$sth->execute($query_values);
6121
		return $sth->fetchAll(PDO::FETCH_ASSOC);
6122
	}
6123
6124
	/**
6125
	* Gets all aircraft manufacturer that have flown over by pilot
6126
	*
6127
	* @return Array the aircraft manufacturer list
6128
	*
6129
	*/
6130
	public function countAllAircraftManufacturerByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
6131
	{
6132
		global $globalDBdriver;
6133
		$filter_query = $this->getFilter($filters,true,true);
6134
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
6135
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6136
		    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot)";
6137
		$query_values = array();
6138
		if ($year != '') {
6139
			if ($globalDBdriver == 'mysql') {
6140
				$query .= " AND YEAR(spotter_output.date) = :year";
6141
				$query_values = array_merge($query_values,array(':year' => $year));
6142
			} else {
6143
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6144
				$query_values = array_merge($query_values,array(':year' => $year));
6145
			}
6146
		}
6147
		if ($month != '') {
6148
			if ($globalDBdriver == 'mysql') {
6149
				$query .= " AND MONTH(spotter_output.date) = :month";
6150
				$query_values = array_merge($query_values,array(':month' => $month));
6151
			} else {
6152
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6153
				$query_values = array_merge($query_values,array(':month' => $month));
6154
			}
6155
		}
6156
		if ($day != '') {
6157
			if ($globalDBdriver == 'mysql') {
6158
				$query .= " AND DAY(spotter_output.date) = :day";
6159
				$query_values = array_merge($query_values,array(':day' => $day));
6160
			} else {
6161
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6162
				$query_values = array_merge($query_values,array(':day' => $day));
6163
			}
6164
		}
6165
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
6166
6167
		$query .= " GROUP BY spotter_output.aircraft_manufacturer 
6168
		    ORDER BY aircraft_manufacturer_count DESC";
6169
6170
		
6171
		$sth = $this->db->prepare($query);
6172
		$sth->execute($query_values);
6173
		return $sth->fetchAll(PDO::FETCH_ASSOC);
6174
	}
6175
6176
6177
	/**
6178
	* Gets all aircraft types that have flown over by route
6179
	*
6180
	* @return Array the aircraft list
6181
	*
6182
	*/
6183
	public function countAllAircraftTypesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
6184
	{
6185
		$filter_query = $this->getFilter($filters,true,true);
6186
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
6187
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
6188
		
6189
6190
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
6191
                    FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
6192
                    GROUP BY spotter_output.aircraft_name 
6193
					ORDER BY aircraft_icao_count DESC";
6194
 
6195
		
6196
		$sth = $this->db->prepare($query);
6197
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
6198
		$aircraft_array = array();
6199
		$temp_array = array();
6200
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6201
		{
6202
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6203
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6204
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
6205
			$aircraft_array[] = $temp_array;
6206
		}
6207
		return $aircraft_array;
6208
	}
6209
6210
	/**
6211
	* Gets all aircraft registration that have flown over by route
6212
	*
6213
	* @return Array the aircraft list
6214
	*
6215
	*/
6216
	public function countAllAircraftRegistrationByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
6217
	{
6218
		$filter_query = $this->getFilter($filters,true,true);
6219
		$Image = new Image($this->db);
6220
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
6221
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
6222
6223
		$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   
6224
                    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)   
6225
                    GROUP BY spotter_output.registration 
6226
					ORDER BY registration_count DESC";
6227
6228
		
6229
		$sth = $this->db->prepare($query);
6230
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
6231
      
6232
		$aircraft_array = array();
6233
		$temp_array = array();
6234
        
6235
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6236
		{
6237
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6238
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6239
			$temp_array['registration'] = $row['registration'];
6240
			$temp_array['airline_name'] = $row['airline_name'];
6241
			$temp_array['image_thumbnail'] = "";
6242
			if($row['registration'] != "")
6243
			{
6244
				$image_array = $Image->getSpotterImage($row['registration']);
6245
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6246
			}
6247
			$temp_array['registration_count'] = $row['registration_count'];
6248
          
6249
			$aircraft_array[] = $temp_array;
6250
		}
6251
6252
		return $aircraft_array;
6253
	}
6254
	
6255
	
6256
	/**
6257
	* Gets all aircraft manufacturer that have flown over by route
6258
	*
6259
	* @return Array the aircraft manufacturer list
6260
	*
6261
	*/
6262
	public function countAllAircraftManufacturerByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
6263
	{
6264
		$filter_query = $this->getFilter($filters,true,true);
6265
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
6266
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
6267
6268
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6269
                    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) 
6270
                    GROUP BY spotter_output.aircraft_manufacturer 
6271
					ORDER BY aircraft_manufacturer_count DESC";
6272
6273
		
6274
		$sth = $this->db->prepare($query);
6275
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
6276
      
6277
		$aircraft_array = array();
6278
		$temp_array = array();
6279
        
6280
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6281
		{
6282
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6283
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6284
          
6285
			$aircraft_array[] = $temp_array;
6286
		}
6287
6288
		return $aircraft_array;
6289
	}	
6290
6291
	
6292
	
6293
	
6294
	/**
6295
	* Gets all aircraft types that have flown over by country
6296
	*
6297
	* @return Array the aircraft list
6298
	*
6299
	*/
6300
	public function countAllAircraftTypesByCountry($country,$filters = array())
6301
	{
6302
		$filter_query = $this->getFilter($filters,true,true);
6303
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6304
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
6305
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
6306
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
6307
			    ORDER BY aircraft_icao_count DESC";
6308
 
6309
		
6310
		$sth = $this->db->prepare($query);
6311
		$sth->execute(array(':country' => $country));
6312
      
6313
		$aircraft_array = array();
6314
		$temp_array = array();
6315
        
6316
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6317
		{
6318
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6319
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6320
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
6321
          
6322
			$aircraft_array[] = $temp_array;
6323
		}
6324
6325
		return $aircraft_array;
6326
	}
6327
6328
6329
	/**
6330
	* Gets all aircraft registration that have flown over by country
6331
	*
6332
	* @return Array the aircraft list
6333
	*
6334
	*/
6335
	public function countAllAircraftRegistrationByCountry($country,$filters = array())
6336
	{
6337
		$filter_query = $this->getFilter($filters,true,true);
6338
		$Image = new Image($this->db);
6339
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6340
		$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 
6341
			    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)    
6342
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
6343
			    ORDER BY registration_count DESC";
6344
6345
		
6346
		$sth = $this->db->prepare($query);
6347
		$sth->execute(array(':country' => $country));
6348
      
6349
		$aircraft_array = array();
6350
		$temp_array = array();
6351
        
6352
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6353
		{
6354
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6355
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6356
			$temp_array['registration'] = $row['registration'];
6357
			$temp_array['airline_name'] = $row['airline_name'];
6358
			$temp_array['image_thumbnail'] = "";
6359
			if($row['registration'] != "")
6360
			{
6361
				$image_array = $Image->getSpotterImage($row['registration']);
6362
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6363
			}
6364
			$temp_array['registration_count'] = $row['registration_count'];
6365
          
6366
			$aircraft_array[] = $temp_array;
6367
		}
6368
6369
		return $aircraft_array;
6370
	}
6371
	
6372
	
6373
	/**
6374
	* Gets all aircraft manufacturer that have flown over by country
6375
	*
6376
	* @return Array the aircraft manufacturer list
6377
	*
6378
	*/
6379
	public function countAllAircraftManufacturerByCountry($country,$filters = array())
6380
	{
6381
		$filter_query = $this->getFilter($filters,true,true);
6382
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6383
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6384
                    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) 
6385
                    GROUP BY spotter_output.aircraft_manufacturer 
6386
					ORDER BY aircraft_manufacturer_count DESC";
6387
6388
		
6389
		$sth = $this->db->prepare($query);
6390
		$sth->execute(array(':country' => $country));
6391
      
6392
		$aircraft_array = array();
6393
		$temp_array = array();
6394
        
6395
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6396
		{
6397
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6398
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6399
          
6400
			$aircraft_array[] = $temp_array;
6401
		}
6402
6403
		return $aircraft_array;
6404
	}	
6405
	
6406
	
6407
	
6408
	/**
6409
	* Gets all aircraft manufacturers that have flown over
6410
	*
6411
	* @return Array the aircraft list
6412
	*
6413
	*/
6414
	public function countAllAircraftManufacturers($filters = array(),$year = '',$month = '',$day = '')
6415
	{
6416
		global $globalDBdriver;
6417
		$filter_query = $this->getFilter($filters,true,true);
6418
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6419
                    FROM spotter_output ".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.aircraft_manufacturer <> 'Not Available'";
6420
                $query_values = array();
6421
		if ($year != '') {
6422
			if ($globalDBdriver == 'mysql') {
6423
				$query .= " AND YEAR(spotter_output.date) = :year";
6424
				$query_values = array_merge($query_values,array(':year' => $year));
6425
			} else {
6426
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6427
				$query_values = array_merge($query_values,array(':year' => $year));
6428
			}
6429
		}
6430
		if ($month != '') {
6431
			if ($globalDBdriver == 'mysql') {
6432
				$query .= " AND MONTH(spotter_output.date) = :month";
6433
				$query_values = array_merge($query_values,array(':month' => $month));
6434
			} else {
6435
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6436
				$query_values = array_merge($query_values,array(':month' => $month));
6437
			}
6438
		}
6439
		if ($day != '') {
6440
			if ($globalDBdriver == 'mysql') {
6441
				$query .= " AND DAY(spotter_output.date) = :day";
6442
				$query_values = array_merge($query_values,array(':day' => $day));
6443
			} else {
6444
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6445
				$query_values = array_merge($query_values,array(':day' => $day));
6446
			}
6447
		}
6448
		$query .= " GROUP BY spotter_output.aircraft_manufacturer
6449
					ORDER BY aircraft_manufacturer_count DESC
6450
					LIMIT 10";
6451
      
6452
		
6453
		$sth = $this->db->prepare($query);
6454
		$sth->execute($query_values);
6455
      
6456
		$manufacturer_array = array();
6457
		$temp_array = array();
6458
        
6459
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6460
		{
6461
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6462
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6463
          
6464
			$manufacturer_array[] = $temp_array;
6465
		}
6466
6467
		return $manufacturer_array;
6468
	}
6469
	
6470
	
6471
	
6472
	/**
6473
	* Gets all aircraft registrations that have flown over
6474
	*
6475
	* @return Array the aircraft list
6476
	*
6477
	*/
6478
	public function countAllAircraftRegistrations($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '', $month = '', $day = '')
6479
	{
6480
		global $globalDBdriver;
6481
		$Image = new Image($this->db);
6482
		$filter_query = $this->getFilter($filters,true,true);
6483
		$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    
6484
                    FROM spotter_output ".$filter_query." spotter_output.registration <> '' AND spotter_output.registration <> 'NA'";
6485
                if ($olderthanmonths > 0) {
6486
            		if ($globalDBdriver == 'mysql') {
6487
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6488
			} else {
6489
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6490
			}
6491
		}
6492
                if ($sincedate != '') {
6493
            		if ($globalDBdriver == 'mysql') {
6494
				$query .= " AND spotter_output.date > '".$sincedate."'";
6495
			} else {
6496
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6497
			}
6498
		}
6499
		$query_values = array();
6500
		if ($year != '') {
6501
			if ($globalDBdriver == 'mysql') {
6502
				$query .= " AND YEAR(spotter_output.date) = :year";
6503
				$query_values = array_merge($query_values,array(':year' => $year));
6504
			} else {
6505
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6506
				$query_values = array_merge($query_values,array(':year' => $year));
6507
			}
6508
		}
6509
		if ($month != '') {
6510
			if ($globalDBdriver == 'mysql') {
6511
				$query .= " AND MONTH(spotter_output.date) = :month";
6512
				$query_values = array_merge($query_values,array(':month' => $month));
6513
			} else {
6514
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6515
				$query_values = array_merge($query_values,array(':month' => $month));
6516
			}
6517
		}
6518
		if ($day != '') {
6519
			if ($globalDBdriver == 'mysql') {
6520
				$query .= " AND DAY(spotter_output.date) = :day";
6521
				$query_values = array_merge($query_values,array(':day' => $day));
6522
			} else {
6523
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6524
				$query_values = array_merge($query_values,array(':day' => $day));
6525
			}
6526
		}
6527
		$query .= " GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name ORDER BY aircraft_registration_count DESC";
6528
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6529
		
6530
		$sth = $this->db->prepare($query);
6531
		$sth->execute($query_values);
6532
      
6533
		$aircraft_array = array();
6534
		$temp_array = array();
6535
        
6536
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6537
		{
6538
			$temp_array['registration'] = $row['registration'];
6539
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
6540
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6541
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6542
			$temp_array['airline_name'] = $row['airline_name'];
6543
			$temp_array['image_thumbnail'] = "";
6544
			if($row['registration'] != "")
6545
			{
6546
				$image_array = $Image->getSpotterImage($row['registration']);
6547
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6548
			}
6549
          
6550
			$aircraft_array[] = $temp_array;
6551
		}
6552
6553
		return $aircraft_array;
6554
	}
6555
6556
6557
	/**
6558
	* Gets all aircraft registrations that have flown over
6559
	*
6560
	* @return Array the aircraft list
6561
	*
6562
	*/
6563
	public function countAllAircraftRegistrationsByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
6564
	{
6565
		global $globalDBdriver;
6566
		$filter_query = $this->getFilter($filters,true,true);
6567
		$Image = new Image($this->db);
6568
		$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    
6569
                    FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.registration <> '' AND spotter_output.registration <> 'NA' ";
6570
                if ($olderthanmonths > 0) {
6571
            		if ($globalDBdriver == 'mysql') {
6572
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6573
			} else {
6574
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6575
			}
6576
		}
6577
                if ($sincedate != '') {
6578
            		if ($globalDBdriver == 'mysql') {
6579
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6580
			} else {
6581
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6582
			}
6583
		}
6584
6585
		// if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6586
		//if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6587
                $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";
6588
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6589
		
6590
		$sth = $this->db->prepare($query);
6591
		$sth->execute();
6592
      
6593
		$aircraft_array = array();
6594
		$temp_array = array();
6595
        
6596
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6597
		{
6598
			$temp_array['registration'] = $row['registration'];
6599
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
6600
			$temp_array['airline_icao'] = $row['airline_icao'];
6601
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6602
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6603
			$temp_array['airline_name'] = $row['airline_name'];
6604
			$temp_array['image_thumbnail'] = "";
6605
			if($row['registration'] != "")
6606
			{
6607
				$image_array = $Image->getSpotterImage($row['registration']);
6608
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6609
			}
6610
          
6611
			$aircraft_array[] = $temp_array;
6612
		}
6613
6614
		return $aircraft_array;
6615
	}
6616
	
6617
	
6618
	/**
6619
	* Gets all departure airports of the airplanes that have flown over
6620
	*
6621
	* @return Array the airport list
6622
	*
6623
	*/
6624
	public function countAllDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
6625
	{
6626
		global $globalDBdriver;
6627
		$filter_query = $this->getFilter($filters,true,true);
6628
		$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 
6629
				FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> ''";
6630
                if ($olderthanmonths > 0) {
6631
            		if ($globalDBdriver == 'mysql') {
6632
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6633
			} else {
6634
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6635
			}
6636
                }
6637
                if ($sincedate != '') {
6638
            		if ($globalDBdriver == 'mysql') {
6639
				$query .= " AND spotter_output.date > '".$sincedate."'";
6640
			} else {
6641
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6642
			}
6643
		}
6644
		$query_values = array();
6645
		if ($year != '') {
6646
			if ($globalDBdriver == 'mysql') {
6647
				$query .= " AND YEAR(spotter_output.date) = :year";
6648
				$query_values = array_merge($query_values,array(':year' => $year));
6649
			} else {
6650
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6651
				$query_values = array_merge($query_values,array(':year' => $year));
6652
			}
6653
		}
6654
		if ($month != '') {
6655
			if ($globalDBdriver == 'mysql') {
6656
				$query .= " AND MONTH(spotter_output.date) = :month";
6657
				$query_values = array_merge($query_values,array(':month' => $month));
6658
			} else {
6659
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6660
				$query_values = array_merge($query_values,array(':month' => $month));
6661
			}
6662
		}
6663
		if ($day != '') {
6664
			if ($globalDBdriver == 'mysql') {
6665
				$query .= " AND DAY(spotter_output.date) = :day";
6666
				$query_values = array_merge($query_values,array(':day' => $day));
6667
			} else {
6668
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6669
				$query_values = array_merge($query_values,array(':day' => $day));
6670
			}
6671
		}
6672
                $query .= " GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6673
				ORDER BY airport_departure_icao_count DESC";
6674
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6675
6676
		$sth = $this->db->prepare($query);
6677
		$sth->execute($query_values);
6678
6679
		$airport_array = array();
6680
		$temp_array = array();
6681
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6682
		{
6683
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6684
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6685
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6686
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6687
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6688
          
6689
			$airport_array[] = $temp_array;
6690
		}
6691
		return $airport_array;
6692
	}
6693
6694
	/**
6695
	* Gets all departure airports of the airplanes that have flown over
6696
	*
6697
	* @return Array the airport list
6698
	*
6699
	*/
6700
	public function countAllDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
6701
	{
6702
		global $globalDBdriver;
6703
		$filter_query = $this->getFilter($filters,true,true);
6704
		$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 
6705
			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 <> '' ";
6706
                if ($olderthanmonths > 0) {
6707
            		if ($globalDBdriver == 'mysql') {
6708
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6709
			} else {
6710
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6711
			}
6712
                }
6713
                if ($sincedate != '') {
6714
            		if ($globalDBdriver == 'mysql') {
6715
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6716
			} else {
6717
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6718
			}
6719
		}
6720
6721
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6722
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6723
                $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
6724
				ORDER BY airport_departure_icao_count DESC";
6725
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6726
      
6727
		$sth = $this->db->prepare($query);
6728
		$sth->execute();
6729
      
6730
		$airport_array = array();
6731
		$temp_array = array();
6732
        
6733
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6734
		{
6735
			$temp_array['airline_icao'] = $row['airline_icao'];
6736
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6737
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6738
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6739
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6740
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6741
          
6742
			$airport_array[] = $temp_array;
6743
		}
6744
		return $airport_array;
6745
	}
6746
6747
	/**
6748
	* Gets all detected departure airports of the airplanes that have flown over
6749
	*
6750
	* @return Array the airport list
6751
	*
6752
	*/
6753
	public function countAllDetectedDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
6754
	{
6755
		global $globalDBdriver;
6756
		$filter_query = $this->getFilter($filters,true,true);
6757
		$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
6758
				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";
6759
                if ($olderthanmonths > 0) {
6760
            		if ($globalDBdriver == 'mysql') {
6761
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6762
			} else {
6763
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6764
			}
6765
                }
6766
                if ($sincedate != '') {
6767
            		if ($globalDBdriver == 'mysql') {
6768
				$query .= " AND spotter_output.date > '".$sincedate."'";
6769
			} else {
6770
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6771
			}
6772
		}
6773
		$query_values = array();
6774
		if ($year != '') {
6775
			if ($globalDBdriver == 'mysql') {
6776
				$query .= " AND YEAR(spotter_output.date) = :year";
6777
				$query_values = array_merge($query_values,array(':year' => $year));
6778
			} else {
6779
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6780
				$query_values = array_merge($query_values,array(':year' => $year));
6781
			}
6782
		}
6783
		if ($month != '') {
6784
			if ($globalDBdriver == 'mysql') {
6785
				$query .= " AND MONTH(spotter_output.date) = :month";
6786
				$query_values = array_merge($query_values,array(':month' => $month));
6787
			} else {
6788
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6789
				$query_values = array_merge($query_values,array(':month' => $month));
6790
			}
6791
		}
6792
		if ($day != '') {
6793
			if ($globalDBdriver == 'mysql') {
6794
				$query .= " AND DAY(spotter_output.date) = :day";
6795
				$query_values = array_merge($query_values,array(':day' => $day));
6796
			} else {
6797
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6798
				$query_values = array_merge($query_values,array(':day' => $day));
6799
			}
6800
		}
6801
                $query .= " GROUP BY spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
6802
				ORDER BY airport_departure_icao_count DESC";
6803
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6804
    		//echo $query;
6805
		$sth = $this->db->prepare($query);
6806
		$sth->execute($query_values);
6807
      
6808
		$airport_array = array();
6809
		$temp_array = array();
6810
        
6811
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6812
		{
6813
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6814
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6815
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6816
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6817
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6818
          
6819
			$airport_array[] = $temp_array;
6820
		}
6821
		return $airport_array;
6822
	}
6823
	
6824
	/**
6825
	* Gets all detected departure airports of the airplanes that have flown over
6826
	*
6827
	* @return Array the airport list
6828
	*
6829
	*/
6830
	public function countAllDetectedDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
6831
	{
6832
		global $globalDBdriver;
6833
		$filter_query = $this->getFilter($filters,true,true);
6834
		$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
6835
				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 ";
6836
                if ($olderthanmonths > 0) {
6837
            		if ($globalDBdriver == 'mysql') {
6838
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6839
			} else {
6840
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6841
			}
6842
                }
6843
                if ($sincedate != '') {
6844
            		if ($globalDBdriver == 'mysql') {
6845
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6846
			} else {
6847
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
6848
			}
6849
		}
6850
6851
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6852
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6853
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
6854
				ORDER BY airport_departure_icao_count DESC";
6855
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6856
      
6857
		$sth = $this->db->prepare($query);
6858
		$sth->execute();
6859
      
6860
		$airport_array = array();
6861
		$temp_array = array();
6862
        
6863
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6864
		{
6865
			$temp_array['airline_icao'] = $row['airline_icao'];
6866
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6867
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6868
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6869
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6870
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6871
          
6872
			$airport_array[] = $temp_array;
6873
		}
6874
		return $airport_array;
6875
	}	
6876
	
6877
	/**
6878
	* Gets all departure airports of the airplanes that have flown over based on an airline icao
6879
	*
6880
	* @return Array the airport list
6881
	*
6882
	*/
6883
	public function countAllDepartureAirportsByAirline($airline_icao,$filters = array())
6884
	{
6885
		$filter_query = $this->getFilter($filters,true,true);
6886
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6887
		$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 
6888
			    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 <> '' 
6889
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6890
			    ORDER BY airport_departure_icao_count DESC";
6891
      
6892
		
6893
		$sth = $this->db->prepare($query);
6894
		$sth->execute(array(':airline_icao' => $airline_icao));
6895
      
6896
		$airport_array = array();
6897
		$temp_array = array();
6898
        
6899
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6900
		{
6901
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6902
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6903
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6904
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6905
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6906
          
6907
			$airport_array[] = $temp_array;
6908
		}
6909
6910
		return $airport_array;
6911
	}
6912
	
6913
	
6914
	
6915
	/**
6916
	* Gets all departure airports by country of the airplanes that have flown over based on an airline icao
6917
	*
6918
	* @return Array the airport list
6919
	*
6920
	*/
6921
	public function countAllDepartureAirportCountriesByAirline($airline_icao,$filters = array())
6922
	{
6923
		$filter_query = $this->getFilter($filters,true,true);
6924
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6925
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6926
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
6927
                    GROUP BY spotter_output.departure_airport_country
6928
					ORDER BY airport_departure_country_count DESC";
6929
      
6930
		
6931
		$sth = $this->db->prepare($query);
6932
		$sth->execute(array(':airline_icao' => $airline_icao));
6933
      
6934
		$airport_array = array();
6935
		$temp_array = array();
6936
        
6937
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6938
		{
6939
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6940
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6941
          
6942
			$airport_array[] = $temp_array;
6943
		}
6944
6945
		return $airport_array;
6946
	}
6947
	
6948
	
6949
	
6950
	/**
6951
	* Gets all departure airports of the airplanes that have flown over based on an aircraft icao
6952
	*
6953
	* @return Array the airport list
6954
	*
6955
	*/
6956
	public function countAllDepartureAirportsByAircraft($aircraft_icao,$filters = array())
6957
	{
6958
		$filter_query = $this->getFilter($filters,true,true);
6959
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
6960
		$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 
6961
			    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 <> '' 
6962
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6963
			    ORDER BY airport_departure_icao_count DESC";
6964
      
6965
		
6966
		$sth = $this->db->prepare($query);
6967
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
6968
      
6969
		$airport_array = array();
6970
		$temp_array = array();
6971
        
6972
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6973
		{
6974
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6975
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6976
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6977
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6978
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6979
          
6980
			$airport_array[] = $temp_array;
6981
		}
6982
6983
		return $airport_array;
6984
	}
6985
	
6986
	
6987
	/**
6988
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
6989
	*
6990
	* @return Array the airport list
6991
	*
6992
	*/
6993
	public function countAllDepartureAirportCountriesByAircraft($aircraft_icao,$filters = array())
6994
	{
6995
		$filter_query = $this->getFilter($filters,true,true);
6996
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
6997
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6998
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
6999
                    GROUP BY spotter_output.departure_airport_country
7000
					ORDER BY airport_departure_country_count DESC";
7001
      
7002
		
7003
		$sth = $this->db->prepare($query);
7004
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7005
      
7006
		$airport_array = array();
7007
		$temp_array = array();
7008
        
7009
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7010
		{
7011
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7012
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7013
          
7014
			$airport_array[] = $temp_array;
7015
		}
7016
7017
		return $airport_array;
7018
	}
7019
	
7020
	
7021
	/**
7022
	* Gets all departure airports of the airplanes that have flown over based on an aircraft registration
7023
	*
7024
	* @return Array the airport list
7025
	*
7026
	*/
7027
	public function countAllDepartureAirportsByRegistration($registration,$filters = array())
7028
	{
7029
		$filter_query = $this->getFilter($filters,true,true);
7030
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
7031
		$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 
7032
			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 <> '' 
7033
                    GROUP BY spotter_output.departure_airport_icao
7034
					ORDER BY airport_departure_icao_count DESC";
7035
      
7036
		
7037
		$sth = $this->db->prepare($query);
7038
		$sth->execute(array(':registration' => $registration));
7039
      
7040
		$airport_array = array();
7041
		$temp_array = array();
7042
        
7043
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7044
		{
7045
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7046
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7047
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7048
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7049
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7050
          
7051
			$airport_array[] = $temp_array;
7052
		}
7053
7054
		return $airport_array;
7055
	}
7056
	
7057
	
7058
	/**
7059
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft registration
7060
	*
7061
	* @return Array the airport list
7062
	*
7063
	*/
7064
	public function countAllDepartureAirportCountriesByRegistration($registration,$filters = array())
7065
	{
7066
		$filter_query = $this->getFilter($filters,true,true);
7067
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
7068
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7069
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.registration = :registration 
7070
                    GROUP BY spotter_output.departure_airport_country
7071
					ORDER BY airport_departure_country_count DESC";
7072
      
7073
		
7074
		$sth = $this->db->prepare($query);
7075
		$sth->execute(array(':registration' => $registration));
7076
      
7077
		$airport_array = array();
7078
		$temp_array = array();
7079
        
7080
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7081
		{
7082
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7083
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7084
          
7085
			$airport_array[] = $temp_array;
7086
		}
7087
7088
		return $airport_array;
7089
	}
7090
	
7091
	
7092
	/**
7093
	* Gets all departure airports of the airplanes that have flown over based on an arrivl airport icao
7094
	*
7095
	* @return Array the airport list
7096
	*
7097
	*/
7098
	public function countAllDepartureAirportsByAirport($airport_icao,$filters = array())
7099
	{
7100
		$filter_query = $this->getFilter($filters,true,true);
7101
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7102
		$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 
7103
			    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 <> '' 
7104
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7105
			    ORDER BY airport_departure_icao_count DESC";
7106
      
7107
		
7108
		$sth = $this->db->prepare($query);
7109
		$sth->execute(array(':airport_icao' => $airport_icao));
7110
      
7111
		$airport_array = array();
7112
		$temp_array = array();
7113
        
7114
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7115
		{
7116
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7117
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7118
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7119
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7120
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7121
          
7122
			$airport_array[] = $temp_array;
7123
		}
7124
7125
		return $airport_array;
7126
	}
7127
	
7128
	
7129
	/**
7130
	* Gets all departure airports by country of the airplanes that have flown over based on an airport icao
7131
	*
7132
	* @return Array the airport list
7133
	*
7134
	*/
7135
	public function countAllDepartureAirportCountriesByAirport($airport_icao,$filters = array())
7136
	{
7137
		$filter_query = $this->getFilter($filters,true,true);
7138
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7139
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7140
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.arrival_airport_icao = :airport_icao 
7141
                    GROUP BY spotter_output.departure_airport_country
7142
					ORDER BY airport_departure_country_count DESC";
7143
      
7144
		
7145
		$sth = $this->db->prepare($query);
7146
		$sth->execute(array(':airport_icao' => $airport_icao));
7147
      
7148
		$airport_array = array();
7149
		$temp_array = array();
7150
        
7151
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7152
		{
7153
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7154
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7155
          
7156
			$airport_array[] = $temp_array;
7157
		}
7158
7159
		return $airport_array;
7160
	}
7161
	
7162
	
7163
	
7164
	/**
7165
	* Gets all departure airports of the airplanes that have flown over based on an aircraft manufacturer
7166
	*
7167
	* @return Array the airport list
7168
	*
7169
	*/
7170
	public function countAllDepartureAirportsByManufacturer($aircraft_manufacturer,$filters = array())
7171
	{
7172
		$filter_query = $this->getFilter($filters,true,true);
7173
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7174
		$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 
7175
			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 <> '' 
7176
                    GROUP BY spotter_output.departure_airport_icao
7177
					ORDER BY airport_departure_icao_count DESC";
7178
      
7179
		
7180
		$sth = $this->db->prepare($query);
7181
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7182
      
7183
		$airport_array = array();
7184
		$temp_array = array();
7185
        
7186
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7187
		{
7188
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7189
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7190
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7191
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7192
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7193
          
7194
			$airport_array[] = $temp_array;
7195
		}
7196
7197
		return $airport_array;
7198
	}
7199
	
7200
	
7201
	/**
7202
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft manufacturer
7203
	*
7204
	* @return Array the airport list
7205
	*
7206
	*/
7207
	public function countAllDepartureAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
7208
	{
7209
		$filter_query = $this->getFilter($filters,true,true);
7210
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7211
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7212
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
7213
                    GROUP BY spotter_output.departure_airport_country
7214
					ORDER BY airport_departure_country_count DESC";
7215
      
7216
		
7217
		$sth = $this->db->prepare($query);
7218
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7219
      
7220
		$airport_array = array();
7221
		$temp_array = array();
7222
        
7223
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7224
		{
7225
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7226
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7227
          
7228
			$airport_array[] = $temp_array;
7229
		}
7230
7231
		return $airport_array;
7232
	}
7233
	
7234
	
7235
	/**
7236
	* Gets all departure airports of the airplanes that have flown over based on a date
7237
	*
7238
	* @return Array the airport list
7239
	*
7240
	*/
7241
	public function countAllDepartureAirportsByDate($date,$filters = array())
7242
	{
7243
		global $globalTimezone, $globalDBdriver;
7244
		$filter_query = $this->getFilter($filters,true,true);
7245
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7246
		if ($globalTimezone != '') {
7247
			date_default_timezone_set($globalTimezone);
7248
			$datetime = new DateTime($date);
7249
			$offset = $datetime->format('P');
7250
		} else $offset = '+00:00';
7251
7252
		if ($globalDBdriver == 'mysql') {
7253
			$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 
7254
					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
7255
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7256
					ORDER BY airport_departure_icao_count DESC";
7257
		} else {
7258
			$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 
7259
					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
7260
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7261
					ORDER BY airport_departure_icao_count DESC";
7262
		}
7263
7264
		$sth = $this->db->prepare($query);
7265
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7266
      
7267
		$airport_array = array();
7268
		$temp_array = array();
7269
        
7270
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7271
		{
7272
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7273
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7274
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7275
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7276
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7277
          
7278
			$airport_array[] = $temp_array;
7279
		}
7280
		return $airport_array;
7281
	}
7282
	
7283
	
7284
	
7285
	/**
7286
	* Gets all departure airports by country of the airplanes that have flown over based on a date
7287
	*
7288
	* @return Array the airport list
7289
	*
7290
	*/
7291
	public function countAllDepartureAirportCountriesByDate($date,$filters = array())
7292
	{
7293
		global $globalTimezone, $globalDBdriver;
7294
		$filter_query = $this->getFilter($filters,true,true);
7295
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7296
		if ($globalTimezone != '') {
7297
			date_default_timezone_set($globalTimezone);
7298
			$datetime = new DateTime($date);
7299
			$offset = $datetime->format('P');
7300
		} else $offset = '+00:00';
7301
7302
		if ($globalDBdriver == 'mysql') {
7303
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7304
					FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
7305
					GROUP BY spotter_output.departure_airport_country
7306
					ORDER BY airport_departure_country_count DESC";
7307
		} else {
7308
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7309
					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 
7310
					GROUP BY spotter_output.departure_airport_country
7311
					ORDER BY airport_departure_country_count DESC";
7312
		}
7313
		
7314
		$sth = $this->db->prepare($query);
7315
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7316
      
7317
		$airport_array = array();
7318
		$temp_array = array();
7319
        
7320
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7321
		{
7322
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7323
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7324
          
7325
			$airport_array[] = $temp_array;
7326
		}
7327
		return $airport_array;
7328
	}
7329
	
7330
	
7331
	
7332
	/**
7333
	* Gets all departure airports of the airplanes that have flown over based on a ident/callsign
7334
	*
7335
	* @return Array the airport list
7336
	*
7337
	*/
7338
	public function countAllDepartureAirportsByIdent($ident,$filters = array())
7339
	{
7340
		$filter_query = $this->getFilter($filters,true,true);
7341
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7342
		$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 
7343
		    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 
7344
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7345
		    ORDER BY airport_departure_icao_count DESC";
7346
      
7347
		
7348
		$sth = $this->db->prepare($query);
7349
		$sth->execute(array(':ident' => $ident));
7350
      
7351
		$airport_array = array();
7352
		$temp_array = array();
7353
        
7354
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7355
		{
7356
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7357
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7358
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7359
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7360
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7361
          
7362
			$airport_array[] = $temp_array;
7363
		}
7364
7365
		return $airport_array;
7366
	}
7367
	
7368
	/**
7369
	* Gets all departure airports of the airplanes that have flown over based on a owner
7370
	*
7371
	* @return Array the airport list
7372
	*
7373
	*/
7374
	public function countAllDepartureAirportsByOwner($owner,$filters = array())
7375
	{
7376
		$filter_query = $this->getFilter($filters,true,true);
7377
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
7378
		$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 
7379
		    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 
7380
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7381
		    ORDER BY airport_departure_icao_count DESC";
7382
      
7383
		
7384
		$sth = $this->db->prepare($query);
7385
		$sth->execute(array(':owner' => $owner));
7386
      
7387
		$airport_array = array();
7388
		$temp_array = array();
7389
        
7390
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7391
		{
7392
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7393
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7394
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7395
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7396
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7397
          
7398
			$airport_array[] = $temp_array;
7399
		}
7400
7401
		return $airport_array;
7402
	}
7403
	
7404
	/**
7405
	* Gets all departure airports of the airplanes that have flown over based on a pilot
7406
	*
7407
	* @return Array the airport list
7408
	*
7409
	*/
7410
	public function countAllDepartureAirportsByPilot($pilot,$filters = array())
7411
	{
7412
		$filter_query = $this->getFilter($filters,true,true);
7413
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
7414
		$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 
7415
		    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) 
7416
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7417
		    ORDER BY airport_departure_icao_count DESC";
7418
		
7419
		$sth = $this->db->prepare($query);
7420
		$sth->execute(array(':pilot' => $pilot));
7421
      
7422
		$airport_array = array();
7423
		$temp_array = array();
7424
        
7425
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7426
		{
7427
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7428
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7429
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7430
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7431
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7432
          
7433
			$airport_array[] = $temp_array;
7434
		}
7435
7436
		return $airport_array;
7437
	}
7438
	
7439
	
7440
	
7441
	/**
7442
	* Gets all departure airports by country of the airplanes that have flown over based on a callsign/ident
7443
	*
7444
	* @return Array the airport list
7445
	*
7446
	*/
7447
	public function countAllDepartureAirportCountriesByIdent($ident,$filters = array())
7448
	{
7449
		$filter_query = $this->getFilter($filters,true,true);
7450
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7451
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7452
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.ident = :ident 
7453
                    GROUP BY spotter_output.departure_airport_country
7454
					ORDER BY airport_departure_country_count DESC";
7455
      
7456
		
7457
		$sth = $this->db->prepare($query);
7458
		$sth->execute(array(':ident' => $ident));
7459
      
7460
		$airport_array = array();
7461
		$temp_array = array();
7462
        
7463
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7464
		{
7465
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7466
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7467
          
7468
			$airport_array[] = $temp_array;
7469
		}
7470
7471
		return $airport_array;
7472
	}
7473
	
7474
	/**
7475
	* Gets all departure airports by country of the airplanes that have flown over based on owner
7476
	*
7477
	* @return Array the airport list
7478
	*
7479
	*/
7480
	public function countAllDepartureAirportCountriesByOwner($owner,$filters = array())
7481
	{
7482
		$filter_query = $this->getFilter($filters,true,true);
7483
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
7484
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7485
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.owner_name = :owner 
7486
			GROUP BY spotter_output.departure_airport_country
7487
			ORDER BY airport_departure_country_count DESC";
7488
		
7489
		$sth = $this->db->prepare($query);
7490
		$sth->execute(array(':owner' => $owner));
7491
		return $sth->fetchAll(PDO::FETCH_ASSOC);
7492
	}
7493
	
7494
	/**
7495
	* Gets all departure airports by country of the airplanes that have flown over based on pilot
7496
	*
7497
	* @return Array the airport list
7498
	*
7499
	*/
7500
	public function countAllDepartureAirportCountriesByPilot($pilot,$filters = array())
7501
	{
7502
		$filter_query = $this->getFilter($filters,true,true);
7503
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
7504
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7505
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
7506
			GROUP BY spotter_output.departure_airport_country
7507
			ORDER BY airport_departure_country_count DESC";
7508
		
7509
		$sth = $this->db->prepare($query);
7510
		$sth->execute(array(':pilot' => $pilot));
7511
		return $sth->fetchAll(PDO::FETCH_ASSOC);
7512
	}
7513
	
7514
	
7515
	
7516
	/**
7517
	* Gets all departure airports of the airplanes that have flown over based on a country
7518
	*
7519
	* @return Array the airport list
7520
	*
7521
	*/
7522
	public function countAllDepartureAirportsByCountry($country,$filters = array())
7523
	{
7524
		$filter_query = $this->getFilter($filters,true,true);
7525
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7526
7527
		$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 
7528
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
7529
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7530
			    ORDER BY airport_departure_icao_count DESC";
7531
      
7532
		
7533
		$sth = $this->db->prepare($query);
7534
		$sth->execute(array(':country' => $country));
7535
      
7536
		$airport_array = array();
7537
		$temp_array = array();
7538
        
7539
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7540
		{
7541
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7542
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7543
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7544
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7545
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7546
          
7547
			$airport_array[] = $temp_array;
7548
		}
7549
7550
		return $airport_array;
7551
	}
7552
7553
7554
	/**
7555
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
7556
	*
7557
	* @return Array the airport list
7558
	*
7559
	*/
7560
	public function countAllDepartureAirportCountriesByCountry($country,$filters = array())
7561
	{
7562
		$filter_query = $this->getFilter($filters,true,true);
7563
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7564
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7565
			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 
7566
                    GROUP BY spotter_output.departure_airport_country
7567
					ORDER BY airport_departure_country_count DESC";
7568
      
7569
		
7570
		$sth = $this->db->prepare($query);
7571
		$sth->execute(array(':country' => $country));
7572
      
7573
		$airport_array = array();
7574
		$temp_array = array();
7575
        
7576
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7577
		{
7578
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7579
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7580
          
7581
			$airport_array[] = $temp_array;
7582
		}
7583
7584
		return $airport_array;
7585
	}
7586
	
7587
7588
	/**
7589
	* Gets all arrival airports of the airplanes that have flown over
7590
	*
7591
	* @param Boolean $limit Limit result to 10 or not
7592
	* @param Integer $olderthanmonths Only show result older than x months
7593
	* @param String $sincedate Only show result since x date
7594
	* @param Boolean $icaoaskey Show result by ICAO
7595
	* @param Array $filters Filter used here
7596
	* @return Array the airport list
7597
	*
7598
	*/
7599
	public function countAllArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array(),$year = '',$month = '',$day = '')
7600
	{
7601
		global $globalDBdriver;
7602
		$filter_query = $this->getFilter($filters,true,true);
7603
		$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 
7604
				FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''";
7605
                if ($olderthanmonths > 0) {
7606
            		if ($globalDBdriver == 'mysql') {
7607
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
7608
			} else {
7609
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
7610
			}
7611
		}
7612
                if ($sincedate != '') {
7613
            		if ($globalDBdriver == 'mysql') {
7614
				$query .= " AND spotter_output.date > '".$sincedate."'";
7615
			} else {
7616
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7617
			}
7618
		}
7619
		$query_values = array();
7620
		if ($year != '') {
7621
			if ($globalDBdriver == 'mysql') {
7622
				$query .= " AND YEAR(spotter_output.date) = :year";
7623
				$query_values = array_merge($query_values,array(':year' => $year));
7624
			} else {
7625
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
7626
				$query_values = array_merge($query_values,array(':year' => $year));
7627
			}
7628
		}
7629
		if ($month != '') {
7630
			if ($globalDBdriver == 'mysql') {
7631
				$query .= " AND MONTH(spotter_output.date) = :month";
7632
				$query_values = array_merge($query_values,array(':month' => $month));
7633
			} else {
7634
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
7635
				$query_values = array_merge($query_values,array(':month' => $month));
7636
			}
7637
		}
7638
		if ($day != '') {
7639
			if ($globalDBdriver == 'mysql') {
7640
				$query .= " AND DAY(spotter_output.date) = :day";
7641
				$query_values = array_merge($query_values,array(':day' => $day));
7642
			} else {
7643
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
7644
				$query_values = array_merge($query_values,array(':day' => $day));
7645
			}
7646
		}
7647
                $query .= " GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7648
					ORDER BY airport_arrival_icao_count DESC";
7649
		if ($limit) $query .= " LIMIT 10";
7650
      
7651
		
7652
		$sth = $this->db->prepare($query);
7653
		$sth->execute($query_values);
7654
      
7655
		$airport_array = array();
7656
		$temp_array = array();
7657
        
7658
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7659
		{
7660
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7661
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7662
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7663
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7664
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7665
          
7666
			if ($icaoaskey) {
7667
				$icao = $row['arrival_airport_icao'];
7668
				$airport_array[$icao] = $temp_array;
7669
			} else $airport_array[] = $temp_array;
7670
		}
7671
7672
		return $airport_array;
7673
	}
7674
7675
	/**
7676
	* Gets all arrival airports of the airplanes that have flown over
7677
	*
7678
	* @return Array the airport list
7679
	*
7680
	*/
7681
	public function countAllArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array())
7682
	{
7683
		global $globalDBdriver;
7684
		$filter_query = $this->getFilter($filters,true,true);
7685
		$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 
7686
			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 <> '' ";
7687
                if ($olderthanmonths > 0) {
7688
            		if ($globalDBdriver == 'mysql') {
7689
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
7690
			} else {
7691
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
7692
			}
7693
		}
7694
                if ($sincedate != '') {
7695
            		if ($globalDBdriver == 'mysql') {
7696
				$query .= "AND spotter_output.date > '".$sincedate."' ";
7697
			} else {
7698
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7699
			}
7700
		}
7701
7702
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
7703
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
7704
                $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
7705
					ORDER BY airport_arrival_icao_count DESC";
7706
		if ($limit) $query .= " LIMIT 10";
7707
      
7708
		
7709
		$sth = $this->db->prepare($query);
7710
		$sth->execute();
7711
      
7712
		$airport_array = array();
7713
		$temp_array = array();
7714
        
7715
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7716
		{
7717
			$temp_array['airline_icao'] = $row['airline_icao'];
7718
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7719
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7720
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7721
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7722
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7723
          
7724
			if ($icaoaskey) {
7725
				$icao = $row['arrival_airport_icao'];
7726
				$airport_array[$icao] = $temp_array;
7727
			} else $airport_array[] = $temp_array;
7728
		}
7729
7730
		return $airport_array;
7731
	}
7732
7733
7734
	/**
7735
	* Gets all detected arrival airports of the airplanes that have flown over
7736
	*
7737
	* @return Array the airport list
7738
	*
7739
	*/
7740
	public function countAllDetectedArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array(),$year = '',$month = '',$day = '')
7741
	{
7742
		global $globalDBdriver;
7743
		$filter_query = $this->getFilter($filters,true,true);
7744
		$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 
7745
			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";
7746
                if ($olderthanmonths > 0) {
7747
            		if ($globalDBdriver == 'mysql') {
7748
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
7749
			} else {
7750
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
7751
			}
7752
		}
7753
                if ($sincedate != '') {
7754
            		if ($globalDBdriver == 'mysql') {
7755
				$query .= " AND spotter_output.date > '".$sincedate."'";
7756
			} else {
7757
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7758
			}
7759
		}
7760
		$query_values = array();
7761
		if ($year != '') {
7762
			if ($globalDBdriver == 'mysql') {
7763
				$query .= " AND YEAR(spotter_output.date) = :year";
7764
				$query_values = array_merge($query_values,array(':year' => $year));
7765
			} else {
7766
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
7767
				$query_values = array_merge($query_values,array(':year' => $year));
7768
			}
7769
		}
7770
		if ($month != '') {
7771
			if ($globalDBdriver == 'mysql') {
7772
				$query .= " AND MONTH(spotter_output.date) = :month";
7773
				$query_values = array_merge($query_values,array(':month' => $month));
7774
			} else {
7775
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
7776
				$query_values = array_merge($query_values,array(':month' => $month));
7777
			}
7778
		}
7779
		if ($day != '') {
7780
			if ($globalDBdriver == 'mysql') {
7781
				$query .= " AND DAY(spotter_output.date) = :day";
7782
				$query_values = array_merge($query_values,array(':day' => $day));
7783
			} else {
7784
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
7785
				$query_values = array_merge($query_values,array(':day' => $day));
7786
			}
7787
		}
7788
                $query .= " GROUP BY spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
7789
					ORDER BY airport_arrival_icao_count DESC";
7790
		if ($limit) $query .= " LIMIT 10";
7791
      
7792
		
7793
		$sth = $this->db->prepare($query);
7794
		$sth->execute($query_values);
7795
      
7796
		$airport_array = array();
7797
		$temp_array = array();
7798
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7799
		{
7800
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7801
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7802
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7803
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7804
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7805
          
7806
			if ($icaoaskey) {
7807
				$icao = $row['arrival_airport_icao'];
7808
				$airport_array[$icao] = $temp_array;
7809
			} else $airport_array[] = $temp_array;
7810
		}
7811
7812
		return $airport_array;
7813
	}
7814
	
7815
	/**
7816
	* Gets all detected arrival airports of the airplanes that have flown over
7817
	*
7818
	* @return Array the airport list
7819
	*
7820
	*/
7821
	public function countAllDetectedArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array())
7822
	{
7823
		global $globalDBdriver;
7824
		$filter_query = $this->getFilter($filters,true,true);
7825
		$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 
7826
			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 ";
7827
                if ($olderthanmonths > 0) {
7828
            		if ($globalDBdriver == 'mysql') {
7829
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
7830
			} else {
7831
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
7832
			}
7833
		}
7834
                if ($sincedate != '') {
7835
            		if ($globalDBdriver == 'mysql') {
7836
				$query .= "AND spotter_output.date > '".$sincedate."' ";
7837
			} else {
7838
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7839
			}
7840
		}
7841
7842
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
7843
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
7844
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
7845
					ORDER BY airport_arrival_icao_count DESC";
7846
		if ($limit) $query .= " LIMIT 10";
7847
      
7848
		
7849
		$sth = $this->db->prepare($query);
7850
		$sth->execute();
7851
      
7852
		$airport_array = array();
7853
		$temp_array = array();
7854
        
7855
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7856
		{
7857
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7858
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7859
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7860
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7861
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7862
			$temp_array['airline_icao'] = $row['airline_icao'];
7863
          
7864
			if ($icaoaskey) {
7865
				$icao = $row['arrival_airport_icao'];
7866
				$airport_array[$icao] = $temp_array;
7867
			} else $airport_array[] = $temp_array;
7868
		}
7869
7870
		return $airport_array;
7871
	}	
7872
	
7873
	/**
7874
	* Gets all arrival airports of the airplanes that have flown over based on an airline icao
7875
	*
7876
	* @return Array the airport list
7877
	*
7878
	*/
7879
	public function countAllArrivalAirportsByAirline($airline_icao, $filters = array())
7880
	{
7881
		$filter_query = $this->getFilter($filters,true,true);
7882
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7883
		$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 
7884
			    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 
7885
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7886
			    ORDER BY airport_arrival_icao_count DESC";
7887
		
7888
		$sth = $this->db->prepare($query);
7889
		$sth->execute(array(':airline_icao' => $airline_icao));
7890
      
7891
		$airport_array = array();
7892
		$temp_array = array();
7893
        
7894
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7895
		{
7896
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7897
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7898
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7899
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7900
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7901
          
7902
			$airport_array[] = $temp_array;
7903
		}
7904
7905
		return $airport_array;
7906
	}
7907
	
7908
	
7909
	/**
7910
	* Gets all arrival airports by country of the airplanes that have flown over based on an airline icao
7911
	*
7912
	* @return Array the airport list
7913
	*
7914
	*/
7915
	public function countAllArrivalAirportCountriesByAirline($airline_icao,$filters = array())
7916
	{
7917
		$filter_query = $this->getFilter($filters,true,true);
7918
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7919
					
7920
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7921
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
7922
                    GROUP BY spotter_output.arrival_airport_country
7923
					ORDER BY airport_arrival_country_count DESC";
7924
      
7925
		
7926
		$sth = $this->db->prepare($query);
7927
		$sth->execute(array(':airline_icao' => $airline_icao));
7928
      
7929
		$airport_array = array();
7930
		$temp_array = array();
7931
        
7932
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7933
		{
7934
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7935
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7936
          
7937
			$airport_array[] = $temp_array;
7938
		}
7939
7940
		return $airport_array;
7941
	}
7942
	
7943
	
7944
	/**
7945
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft icao
7946
	*
7947
	* @return Array the airport list
7948
	*
7949
	*/
7950
	public function countAllArrivalAirportsByAircraft($aircraft_icao,$filters = array())
7951
	{
7952
		$filter_query = $this->getFilter($filters,true,true);
7953
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7954
		$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 
7955
			    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 
7956
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7957
			    ORDER BY airport_arrival_icao_count DESC";
7958
      
7959
		
7960
		$sth = $this->db->prepare($query);
7961
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7962
      
7963
		$airport_array = array();
7964
		$temp_array = array();
7965
        
7966
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7967
		{
7968
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7969
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7970
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7971
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7972
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7973
          
7974
			$airport_array[] = $temp_array;
7975
		}
7976
7977
		return $airport_array;
7978
	}
7979
	
7980
	
7981
	
7982
	/**
7983
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft icao
7984
	*
7985
	* @return Array the airport list
7986
	*
7987
	*/
7988
	public function countAllArrivalAirportCountriesByAircraft($aircraft_icao,$filters = array())
7989
	{
7990
		$filter_query = $this->getFilter($filters,true,true);
7991
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7992
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7993
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
7994
                    GROUP BY spotter_output.arrival_airport_country
7995
					ORDER BY airport_arrival_country_count DESC";
7996
      
7997
		
7998
		$sth = $this->db->prepare($query);
7999
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
8000
      
8001
		$airport_array = array();
8002
		$temp_array = array();
8003
        
8004
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8005
		{
8006
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8007
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8008
          
8009
			$airport_array[] = $temp_array;
8010
		}
8011
8012
		return $airport_array;
8013
	}
8014
	
8015
	
8016
	/**
8017
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft registration
8018
	*
8019
	* @return Array the airport list
8020
	*
8021
	*/
8022
	public function countAllArrivalAirportsByRegistration($registration,$filters = array())
8023
	{
8024
		$filter_query = $this->getFilter($filters,true,true);
8025
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
8026
8027
		$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 
8028
			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 
8029
                    GROUP BY spotter_output.arrival_airport_icao
8030
					ORDER BY airport_arrival_icao_count DESC";
8031
      
8032
		
8033
		$sth = $this->db->prepare($query);
8034
		$sth->execute(array(':registration' => $registration));
8035
      
8036
		$airport_array = array();
8037
		$temp_array = array();
8038
        
8039
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8040
		{
8041
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8042
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8043
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8044
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8045
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8046
          
8047
			$airport_array[] = $temp_array;
8048
		}
8049
8050
		return $airport_array;
8051
	}
8052
	
8053
	
8054
	/**
8055
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft registration
8056
	*
8057
	* @return Array the airport list
8058
	*
8059
	*/
8060
	public function countAllArrivalAirportCountriesByRegistration($registration,$filters = array())
8061
	{
8062
		$filter_query = $this->getFilter($filters,true,true);
8063
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
8064
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8065
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.registration = :registration 
8066
                    GROUP BY spotter_output.arrival_airport_country
8067
					ORDER BY airport_arrival_country_count DESC";
8068
      
8069
		
8070
		$sth = $this->db->prepare($query);
8071
		$sth->execute(array(':registration' => $registration));
8072
      
8073
		$airport_array = array();
8074
		$temp_array = array();
8075
        
8076
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8077
		{
8078
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8079
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8080
          
8081
			$airport_array[] = $temp_array;
8082
		}
8083
8084
		return $airport_array;
8085
	}
8086
	
8087
	
8088
	
8089
	/**
8090
	* Gets all arrival airports of the airplanes that have flown over based on an departure airport
8091
	*
8092
	* @return Array the airport list
8093
	*
8094
	*/
8095
	public function countAllArrivalAirportsByAirport($airport_icao,$filters = array())
8096
	{
8097
		$filter_query = $this->getFilter($filters,true,true);
8098
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8099
		$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 
8100
			    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 
8101
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8102
			    ORDER BY airport_arrival_icao_count DESC";
8103
      
8104
		
8105
		$sth = $this->db->prepare($query);
8106
		$sth->execute(array(':airport_icao' => $airport_icao));
8107
      
8108
		$airport_array = array();
8109
		$temp_array = array();
8110
        
8111
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8112
		{
8113
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8114
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8115
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8116
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8117
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8118
          
8119
			$airport_array[] = $temp_array;
8120
		}
8121
8122
		return $airport_array;
8123
	}
8124
	
8125
	
8126
	/**
8127
	* Gets all arrival airports by country of the airplanes that have flown over based on an airport icao
8128
	*
8129
	* @return Array the airport list
8130
	*
8131
	*/
8132
	public function countAllArrivalAirportCountriesByAirport($airport_icao,$filters = array())
8133
	{
8134
		$filter_query = $this->getFilter($filters,true,true);
8135
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8136
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8137
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.departure_airport_icao = :airport_icao 
8138
                    GROUP BY spotter_output.arrival_airport_country
8139
					ORDER BY airport_arrival_country_count DESC";
8140
      
8141
		
8142
		$sth = $this->db->prepare($query);
8143
		$sth->execute(array(':airport_icao' => $airport_icao));
8144
      
8145
		$airport_array = array();
8146
		$temp_array = array();
8147
        
8148
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8149
		{
8150
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8151
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8152
          
8153
			$airport_array[] = $temp_array;
8154
		}
8155
8156
		return $airport_array;
8157
	}
8158
	
8159
	
8160
	/**
8161
	* Gets all arrival airports of the airplanes that have flown over based on a aircraft manufacturer
8162
	*
8163
	* @return Array the airport list
8164
	*
8165
	*/
8166
	public function countAllArrivalAirportsByManufacturer($aircraft_manufacturer,$filters = array())
8167
	{
8168
		$filter_query = $this->getFilter($filters,true,true);
8169
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
8170
		$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 
8171
			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 
8172
                    GROUP BY spotter_output.arrival_airport_icao
8173
					ORDER BY airport_arrival_icao_count DESC";
8174
      
8175
		
8176
		$sth = $this->db->prepare($query);
8177
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
8178
      
8179
		$airport_array = array();
8180
		$temp_array = array();
8181
        
8182
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8183
		{
8184
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8185
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8186
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8187
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8188
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8189
          
8190
			$airport_array[] = $temp_array;
8191
		}
8192
8193
		return $airport_array;
8194
	}
8195
	
8196
	
8197
	
8198
	/**
8199
	* Gets all arrival airports by country of the airplanes that have flown over based on a aircraft manufacturer
8200
	*
8201
	* @return Array the airport list
8202
	*
8203
	*/
8204
	public function countAllArrivalAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
8205
	{
8206
		$filter_query = $this->getFilter($filters,true,true);
8207
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
8208
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8209
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
8210
                    GROUP BY spotter_output.arrival_airport_country
8211
					ORDER BY airport_arrival_country_count DESC";
8212
      
8213
		
8214
		$sth = $this->db->prepare($query);
8215
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
8216
      
8217
		$airport_array = array();
8218
		$temp_array = array();
8219
        
8220
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8221
		{
8222
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8223
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8224
          
8225
			$airport_array[] = $temp_array;
8226
		}
8227
8228
		return $airport_array;
8229
	}
8230
	
8231
	
8232
	
8233
	/**
8234
	* Gets all arrival airports of the airplanes that have flown over based on a date
8235
	*
8236
	* @return Array the airport list
8237
	*
8238
	*/
8239
	public function countAllArrivalAirportsByDate($date,$filters = array())
8240
	{
8241
		global $globalTimezone, $globalDBdriver;
8242
		$filter_query = $this->getFilter($filters,true,true);
8243
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8244
		if ($globalTimezone != '') {
8245
			date_default_timezone_set($globalTimezone);
8246
			$datetime = new DateTime($date);
8247
			$offset = $datetime->format('P');
8248
		} else $offset = '+00:00';
8249
8250
		if ($globalDBdriver == 'mysql') {
8251
			$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 
8252
					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  
8253
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8254
					ORDER BY airport_arrival_icao_count DESC";
8255
		} else {
8256
			$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 
8257
					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  
8258
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8259
					ORDER BY airport_arrival_icao_count DESC";
8260
		}
8261
		
8262
		$sth = $this->db->prepare($query);
8263
		$sth->execute(array(':date' => $date, ':offset' => $offset));
8264
      
8265
		$airport_array = array();
8266
		$temp_array = array();
8267
        
8268
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8269
		{
8270
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8271
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8272
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8273
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8274
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8275
          
8276
			$airport_array[] = $temp_array;
8277
		}
8278
		return $airport_array;
8279
	}
8280
	
8281
	
8282
	
8283
	/**
8284
	* Gets all arrival airports by country of the airplanes that have flown over based on a date
8285
	*
8286
	* @return Array the airport list
8287
	*
8288
	*/
8289
	public function countAllArrivalAirportCountriesByDate($date, $filters = array())
8290
	{
8291
		global $globalTimezone, $globalDBdriver;
8292
		$filter_query = $this->getFilter($filters,true,true);
8293
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8294
		if ($globalTimezone != '') {
8295
			date_default_timezone_set($globalTimezone);
8296
			$datetime = new DateTime($date);
8297
			$offset = $datetime->format('P');
8298
		} else $offset = '+00:00';
8299
8300
		if ($globalDBdriver == 'mysql') {
8301
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8302
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
8303
					GROUP BY spotter_output.arrival_airport_country
8304
					ORDER BY airport_arrival_country_count DESC";
8305
		} else {
8306
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8307
					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 
8308
					GROUP BY spotter_output.arrival_airport_country
8309
					ORDER BY airport_arrival_country_count DESC";
8310
		}
8311
		
8312
		$sth = $this->db->prepare($query);
8313
		$sth->execute(array(':date' => $date, ':offset' => $offset));
8314
      
8315
		$airport_array = array();
8316
		$temp_array = array();
8317
        
8318
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8319
		{
8320
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8321
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8322
          
8323
			$airport_array[] = $temp_array;
8324
		}
8325
		return $airport_array;
8326
	}
8327
	
8328
	
8329
	
8330
	/**
8331
	* Gets all arrival airports of the airplanes that have flown over based on a ident/callsign
8332
	*
8333
	* @return Array the airport list
8334
	*
8335
	*/
8336
	public function countAllArrivalAirportsByIdent($ident,$filters = array())
8337
	{
8338
		$filter_query = $this->getFilter($filters,true,true);
8339
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
8340
		$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 
8341
		    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  
8342
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8343
		    ORDER BY airport_arrival_icao_count DESC";
8344
      
8345
		
8346
		$sth = $this->db->prepare($query);
8347
		$sth->execute(array(':ident' => $ident));
8348
      
8349
		$airport_array = array();
8350
		$temp_array = array();
8351
        
8352
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8353
		{
8354
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8355
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8356
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8357
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8358
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8359
          
8360
			$airport_array[] = $temp_array;
8361
		}
8362
8363
		return $airport_array;
8364
	}
8365
	
8366
	/**
8367
	* Gets all arrival airports of the airplanes that have flown over based on a owner
8368
	*
8369
	* @return Array the airport list
8370
	*
8371
	*/
8372
	public function countAllArrivalAirportsByOwner($owner,$filters = array())
8373
	{
8374
		$filter_query = $this->getFilter($filters,true,true);
8375
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
8376
		$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 
8377
		    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 
8378
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8379
		    ORDER BY airport_arrival_icao_count DESC";
8380
      
8381
		
8382
		$sth = $this->db->prepare($query);
8383
		$sth->execute(array(':owner' => $owner));
8384
		$airport_array = array();
8385
		$temp_array = array();
8386
        
8387
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8388
		{
8389
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8390
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8391
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8392
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8393
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8394
          
8395
			$airport_array[] = $temp_array;
8396
		}
8397
8398
		return $airport_array;
8399
	}
8400
8401
	/**
8402
	* Gets all arrival airports of the airplanes that have flown over based on a pilot
8403
	*
8404
	* @return Array the airport list
8405
	*
8406
	*/
8407
	public function countAllArrivalAirportsByPilot($pilot,$filters = array())
8408
	{
8409
		$filter_query = $this->getFilter($filters,true,true);
8410
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
8411
		$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 
8412
		    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) 
8413
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8414
		    ORDER BY airport_arrival_icao_count DESC";
8415
      
8416
		
8417
		$sth = $this->db->prepare($query);
8418
		$sth->execute(array(':pilot' => $pilot));
8419
		$airport_array = array();
8420
		$temp_array = array();
8421
        
8422
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8423
		{
8424
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8425
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8426
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8427
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8428
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8429
          
8430
			$airport_array[] = $temp_array;
8431
		}
8432
8433
		return $airport_array;
8434
	}
8435
	
8436
	/**
8437
	* Gets all arrival airports by country of the airplanes that have flown over based on a callsign/ident
8438
	*
8439
	* @return Array the airport list
8440
	*
8441
	*/
8442
	public function countAllArrivalAirportCountriesByIdent($ident, $filters = array())
8443
	{
8444
		$filter_query = $this->getFilter($filters,true,true);
8445
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
8446
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8447
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.ident = :ident 
8448
                    GROUP BY spotter_output.arrival_airport_country
8449
					ORDER BY airport_arrival_country_count DESC";
8450
      
8451
		
8452
		$sth = $this->db->prepare($query);
8453
		$sth->execute(array(':ident' => $ident));
8454
      
8455
		$airport_array = array();
8456
		$temp_array = array();
8457
        
8458
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8459
		{
8460
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8461
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8462
          
8463
			$airport_array[] = $temp_array;
8464
		}
8465
8466
		return $airport_array;
8467
	}
8468
	
8469
	/**
8470
	* Gets all arrival airports by country of the airplanes that have flown over based on a owner
8471
	*
8472
	* @return Array the airport list
8473
	*
8474
	*/
8475
	public function countAllArrivalAirportCountriesByOwner($owner, $filters = array())
8476
	{
8477
		$filter_query = $this->getFilter($filters,true,true);
8478
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
8479
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8480
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.owner_name = :owner 
8481
                    GROUP BY spotter_output.arrival_airport_country
8482
		    ORDER BY airport_arrival_country_count DESC";
8483
8484
		$sth = $this->db->prepare($query);
8485
		$sth->execute(array(':owner' => $owner));
8486
		return $sth->fetchAll(PDO::FETCH_ASSOC);
8487
	}
8488
	
8489
	/**
8490
	* Gets all arrival airports by country of the airplanes that have flown over based on a pilot
8491
	*
8492
	* @return Array the airport list
8493
	*
8494
	*/
8495
	public function countAllArrivalAirportCountriesByPilot($pilot, $filters = array())
8496
	{
8497
		$filter_query = $this->getFilter($filters,true,true);
8498
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
8499
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8500
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
8501
                    GROUP BY spotter_output.arrival_airport_country
8502
		    ORDER BY airport_arrival_country_count DESC";
8503
8504
		$sth = $this->db->prepare($query);
8505
		$sth->execute(array(':pilot' => $pilot));
8506
		return $sth->fetchAll(PDO::FETCH_ASSOC);
8507
	}
8508
	
8509
	
8510
	
8511
	/**
8512
	* Gets all arrival airports of the airplanes that have flown over based on a country
8513
	*
8514
	* @return Array the airport list
8515
	*
8516
	*/
8517
	public function countAllArrivalAirportsByCountry($country,$filters = array())
8518
	{
8519
		$filter_query = $this->getFilter($filters,true,true);
8520
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8521
		$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 
8522
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
8523
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8524
			    ORDER BY airport_arrival_icao_count DESC";
8525
      
8526
		
8527
		$sth = $this->db->prepare($query);
8528
		$sth->execute(array(':country' => $country));
8529
      
8530
		$airport_array = array();
8531
		$temp_array = array();
8532
        
8533
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8534
		{
8535
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8536
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8537
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8538
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8539
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8540
          
8541
			$airport_array[] = $temp_array;
8542
		}
8543
8544
		return $airport_array;
8545
	}
8546
	
8547
	
8548
	/**
8549
	* Gets all arrival airports by country of the airplanes that have flown over based on a country
8550
	*
8551
	* @return Array the airport list
8552
	*
8553
	*/
8554
	public function countAllArrivalAirportCountriesByCountry($country,$filters = array())
8555
	{
8556
		global $globalDBdriver;
8557
		$filter_query = $this->getFilter($filters,true,true);
8558
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8559
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8560
			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 
8561
                    GROUP BY spotter_output.arrival_airport_country
8562
					ORDER BY airport_arrival_country_count DESC";
8563
      
8564
		
8565
		$sth = $this->db->prepare($query);
8566
		$sth->execute(array(':country' => $country));
8567
      
8568
		$airport_array = array();
8569
		$temp_array = array();
8570
        
8571
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8572
		{
8573
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8574
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8575
          
8576
			$airport_array[] = $temp_array;
8577
		}
8578
8579
		return $airport_array;
8580
	}
8581
8582
8583
8584
	/**
8585
	* Counts all airport departure countries
8586
	*
8587
	* @return Array the airport departure list
8588
	*
8589
	*/
8590
	public function countAllDepartureCountries($filters = array(),$year = '',$month = '', $day = '')
8591
	{
8592
		global $globalDBdriver;
8593
		$filter_query = $this->getFilter($filters,true,true);
8594
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
8595
				FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> ''";
8596
		$query_values = array();
8597
		if ($year != '') {
8598
			if ($globalDBdriver == 'mysql') {
8599
				$query .= " AND YEAR(spotter_output.date) = :year";
8600
				$query_values = array_merge($query_values,array(':year' => $year));
8601
			} else {
8602
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
8603
				$query_values = array_merge($query_values,array(':year' => $year));
8604
			}
8605
		}
8606
		if ($month != '') {
8607
			if ($globalDBdriver == 'mysql') {
8608
				$query .= " AND MONTH(spotter_output.date) = :month";
8609
				$query_values = array_merge($query_values,array(':month' => $month));
8610
			} else {
8611
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
8612
				$query_values = array_merge($query_values,array(':month' => $month));
8613
			}
8614
		}
8615
		if ($day != '') {
8616
			if ($globalDBdriver == 'mysql') {
8617
				$query .= " AND DAY(spotter_output.date) = :day";
8618
				$query_values = array_merge($query_values,array(':day' => $day));
8619
			} else {
8620
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
8621
				$query_values = array_merge($query_values,array(':day' => $day));
8622
			}
8623
		}
8624
		$query .= " GROUP BY spotter_output.departure_airport_country
8625
					ORDER BY airport_departure_country_count DESC
8626
					LIMIT 10 OFFSET 0";
8627
      
8628
		
8629
		$sth = $this->db->prepare($query);
8630
		$sth->execute($query_values);
8631
      
8632
		$airport_array = array();
8633
		$temp_array = array();
8634
        
8635
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8636
		{
8637
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
8638
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
8639
          
8640
			$airport_array[] = $temp_array;
8641
		}
8642
8643
		return $airport_array;
8644
	}
8645
	
8646
	
8647
	/**
8648
	* Counts all airport arrival countries
8649
	*
8650
	* @return Array the airport arrival list
8651
	*
8652
	*/
8653
	public function countAllArrivalCountries($limit = true,$filters = array(),$year = '',$month = '',$day = '')
8654
	{
8655
		global $globalDBdriver;
8656
		$filter_query = $this->getFilter($filters,true,true);
8657
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8658
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''";
8659
		$query_values = array();
8660
		if ($year != '') {
8661
			if ($globalDBdriver == 'mysql') {
8662
				$query .= " AND YEAR(spotter_output.date) = :year";
8663
				$query_values = array_merge($query_values,array(':year' => $year));
8664
			} else {
8665
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
8666
				$query_values = array_merge($query_values,array(':year' => $year));
8667
			}
8668
		}
8669
		if ($month != '') {
8670
			if ($globalDBdriver == 'mysql') {
8671
				$query .= " AND MONTH(spotter_output.date) = :month";
8672
				$query_values = array_merge($query_values,array(':month' => $month));
8673
			} else {
8674
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
8675
				$query_values = array_merge($query_values,array(':month' => $month));
8676
			}
8677
		}
8678
		if ($day != '') {
8679
			if ($globalDBdriver == 'mysql') {
8680
				$query .= " AND DAY(spotter_output.date) = :day";
8681
				$query_values = array_merge($query_values,array(':day' => $day));
8682
			} else {
8683
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
8684
				$query_values = array_merge($query_values,array(':day' => $day));
8685
			}
8686
		}
8687
		$query .= " GROUP BY spotter_output.arrival_airport_country
8688
					ORDER BY airport_arrival_country_count DESC";
8689
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
8690
      
8691
		
8692
		$sth = $this->db->prepare($query);
8693
		$sth->execute($query_values);
8694
      
8695
		$airport_array = array();
8696
		$temp_array = array();
8697
        
8698
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8699
		{
8700
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8701
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8702
          
8703
			$airport_array[] = $temp_array;
8704
		}
8705
8706
		return $airport_array;
8707
	}
8708
8709
8710
8711
8712
8713
	/**
8714
	* Gets all route combinations
8715
	*
8716
	* @return Array the route list
8717
	*
8718
	*/
8719
	public function countAllRoutes($filters = array())
8720
	{
8721
		$filter_query = $this->getFilter($filters,true,true);
8722
		$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
8723
		    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 <> ''
8724
                    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
8725
                    ORDER BY route_count DESC
8726
		    LIMIT 10 OFFSET 0";
8727
      
8728
		
8729
		$sth = $this->db->prepare($query);
8730
		$sth->execute();
8731
      
8732
		$routes_array = array();
8733
		$temp_array = array();
8734
        
8735
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8736
		{
8737
			$temp_array['route_count'] = $row['route_count'];
8738
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8739
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8740
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8741
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8742
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8743
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8744
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8745
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8746
          
8747
			$routes_array[] = $temp_array;
8748
		}
8749
8750
		return $routes_array;
8751
	}
8752
	
8753
	
8754
	
8755
	
8756
	/**
8757
	* Gets all route combinations based on an aircraft
8758
	*
8759
	* @return Array the route list
8760
	*
8761
	*/
8762
	public function countAllRoutesByAircraft($aircraft_icao,$filters = array())
8763
	{
8764
		$filter_query = $this->getFilter($filters,true,true);
8765
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
8766
		$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
8767
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
8768
			    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 
8769
			    ORDER BY route_count DESC";
8770
		
8771
		$sth = $this->db->prepare($query);
8772
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
8773
      
8774
		$routes_array = array();
8775
		$temp_array = array();
8776
        
8777
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8778
		{
8779
			$temp_array['route_count'] = $row['route_count'];
8780
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8781
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8782
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8783
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8784
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8785
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8786
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8787
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8788
          
8789
			$routes_array[] = $temp_array;
8790
		}
8791
8792
		return $routes_array;
8793
	}
8794
	
8795
	
8796
	/**
8797
	* Gets all route combinations based on an aircraft registration
8798
	*
8799
	* @return Array the route list
8800
	*
8801
	*/
8802
	public function countAllRoutesByRegistration($registration, $filters = array())
8803
	{
8804
		$filter_query = $this->getFilter($filters,true,true);
8805
		$registration = filter_var($registration, FILTER_SANITIZE_STRING);
8806
		$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
8807
			FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.registration = :registration 
8808
                    GROUP BY route
8809
                    ORDER BY route_count DESC";
8810
      
8811
		
8812
		$sth = $this->db->prepare($query);
8813
		$sth->execute(array(':registration' => $registration));
8814
      
8815
		$routes_array = array();
8816
		$temp_array = array();
8817
        
8818
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8819
		{
8820
			$temp_array['route_count'] = $row['route_count'];
8821
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8822
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8823
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8824
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8825
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8826
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8827
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8828
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8829
          
8830
			$routes_array[] = $temp_array;
8831
		}
8832
8833
		return $routes_array;
8834
	}
8835
	
8836
	
8837
	
8838
	/**
8839
	* Gets all route combinations based on an airline
8840
	*
8841
	* @return Array the route list
8842
	*
8843
	*/
8844
	public function countAllRoutesByAirline($airline_icao, $filters = array())
8845
	{
8846
		$filter_query = $this->getFilter($filters,true,true);
8847
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
8848
		$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
8849
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.airline_icao = :airline_icao 
8850
			    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 
8851
			    ORDER BY route_count DESC";
8852
      
8853
		
8854
		$sth = $this->db->prepare($query);
8855
		$sth->execute(array(':airline_icao' => $airline_icao));
8856
      
8857
		$routes_array = array();
8858
		$temp_array = array();
8859
        
8860
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8861
		{
8862
			$temp_array['route_count'] = $row['route_count'];
8863
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8864
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8865
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8866
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8867
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8868
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8869
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8870
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8871
          
8872
			$routes_array[] = $temp_array;
8873
		}
8874
8875
		return $routes_array;
8876
	}
8877
	
8878
	
8879
	
8880
	/**
8881
	* Gets all route combinations based on an airport
8882
	*
8883
	* @return Array the route list
8884
	*
8885
	*/
8886
	public function countAllRoutesByAirport($airport_icao, $filters = array())
8887
	{
8888
		$filter_query = $this->getFilter($filters,true,true);
8889
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8890
		$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
8891
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
8892
			    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 
8893
			    ORDER BY route_count DESC";
8894
		
8895
		$sth = $this->db->prepare($query);
8896
		$sth->execute(array(':airport_icao' => $airport_icao));
8897
      
8898
		$routes_array = array();
8899
		$temp_array = array();
8900
        
8901
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8902
		{
8903
			$temp_array['route_count'] = $row['route_count'];
8904
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8905
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8906
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8907
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8908
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8909
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8910
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8911
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8912
          
8913
			$routes_array[] = $temp_array;
8914
		}
8915
8916
		return $routes_array;
8917
	}
8918
	
8919
	
8920
	
8921
	/**
8922
	* Gets all route combinations based on an country
8923
	*
8924
	* @return Array the route list
8925
	*
8926
	*/
8927
	public function countAllRoutesByCountry($country, $filters = array())
8928
	{
8929
		$filter_query = $this->getFilter($filters,true,true);
8930
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8931
		$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
8932
			    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 
8933
			    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 
8934
			    ORDER BY route_count DESC";
8935
		
8936
		$sth = $this->db->prepare($query);
8937
		$sth->execute(array(':country' => $country));
8938
      
8939
		$routes_array = array();
8940
		$temp_array = array();
8941
        
8942
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8943
		{
8944
			$temp_array['route_count'] = $row['route_count'];
8945
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8946
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8947
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8948
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8949
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8950
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8951
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8952
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8953
          
8954
			$routes_array[] = $temp_array;
8955
		}
8956
8957
		return $routes_array;
8958
	}
8959
8960
8961
	/**
8962
	* Gets all route combinations based on an date
8963
	*
8964
	* @return Array the route list
8965
	*
8966
	*/
8967
	public function countAllRoutesByDate($date, $filters = array())
8968
	{
8969
		global $globalTimezone, $globalDBdriver;
8970
		$filter_query = $this->getFilter($filters,true,true);
8971
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8972
		if ($globalTimezone != '') {
8973
			date_default_timezone_set($globalTimezone);
8974
			$datetime = new DateTime($date);
8975
			$offset = $datetime->format('P');
8976
		} else $offset = '+00:00';
8977
		
8978
		if ($globalDBdriver == 'mysql') {
8979
			$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
8980
				    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date  
8981
				    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
8982
				    ORDER BY route_count DESC";
8983
		} else {
8984
			$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
8985
				    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date  
8986
				    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
8987
				    ORDER BY route_count DESC";
8988
		}
8989
		
8990
		$sth = $this->db->prepare($query);
8991
		$sth->execute(array(':date' => $date, ':offset' => $offset));
8992
      
8993
		$routes_array = array();
8994
		$temp_array = array();
8995
        
8996
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8997
		{
8998
			$temp_array['route_count'] = $row['route_count'];
8999
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9000
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9001
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9002
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9003
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9004
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9005
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9006
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9007
          
9008
			$routes_array[] = $temp_array;
9009
		}
9010
9011
		return $routes_array;
9012
	}
9013
	
9014
	
9015
	/**
9016
	* Gets all route combinations based on an ident/callsign
9017
	*
9018
	* @return Array the route list
9019
	*
9020
	*/
9021
	public function countAllRoutesByIdent($ident, $filters = array())
9022
	{
9023
		$filter_query = $this->getFilter($filters,true,true);
9024
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
9025
		$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
9026
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.ident = :ident   
9027
                    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
9028
                    ORDER BY route_count DESC";
9029
      
9030
		
9031
		$sth = $this->db->prepare($query);
9032
		$sth->execute(array(':ident' => $ident));
9033
      
9034
		$routes_array = array();
9035
		$temp_array = array();
9036
        
9037
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9038
		{
9039
			$temp_array['route_count'] = $row['route_count'];
9040
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9041
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9042
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9043
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9044
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9045
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9046
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9047
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9048
          
9049
			$routes_array[] = $temp_array;
9050
		}
9051
9052
		return $routes_array;
9053
	}
9054
	
9055
	/**
9056
	* Gets all route combinations based on an owner
9057
	*
9058
	* @return Array the route list
9059
	*
9060
	*/
9061
	public function countAllRoutesByOwner($owner,$filters = array())
9062
	{
9063
		$filter_query = $this->getFilter($filters,true,true);
9064
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
9065
		$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
9066
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.owner_name = :owner 
9067
                    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
9068
                    ORDER BY route_count DESC";
9069
      
9070
		
9071
		$sth = $this->db->prepare($query);
9072
		$sth->execute(array(':owner' => $owner));
9073
      
9074
		$routes_array = array();
9075
		$temp_array = array();
9076
        
9077
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9078
		{
9079
			$temp_array['route_count'] = $row['route_count'];
9080
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9081
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9082
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9083
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9084
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9085
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9086
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9087
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9088
          
9089
			$routes_array[] = $temp_array;
9090
		}
9091
9092
		return $routes_array;
9093
	}
9094
	
9095
	/**
9096
	* Gets all route combinations based on a pilot
9097
	*
9098
	* @return Array the route list
9099
	*
9100
	*/
9101
	public function countAllRoutesByPilot($pilot,$filters = array())
9102
	{
9103
		$filter_query = $this->getFilter($filters,true,true);
9104
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
9105
		$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
9106
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
9107
                    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
9108
                    ORDER BY route_count DESC";
9109
      
9110
		
9111
		$sth = $this->db->prepare($query);
9112
		$sth->execute(array(':pilot' => $pilot));
9113
      
9114
		$routes_array = array();
9115
		$temp_array = array();
9116
        
9117
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9118
		{
9119
			$temp_array['route_count'] = $row['route_count'];
9120
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9121
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9122
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9123
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9124
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9125
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9126
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9127
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9128
          
9129
			$routes_array[] = $temp_array;
9130
		}
9131
9132
		return $routes_array;
9133
	}
9134
	
9135
	
9136
	/**
9137
	* Gets all route combinations based on an manufacturer
9138
	*
9139
	* @return Array the route list
9140
	*
9141
	*/
9142
	public function countAllRoutesByManufacturer($aircraft_manufacturer, $filters = array())
9143
	{
9144
		$filter_query = $this->getFilter($filters,true,true);
9145
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
9146
		$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
9147
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
9148
                    GROUP BY route
9149
                    ORDER BY route_count DESC";
9150
      
9151
		
9152
		$sth = $this->db->prepare($query);
9153
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
9154
      
9155
		$routes_array = array();
9156
		$temp_array = array();
9157
        
9158
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9159
		{
9160
			$temp_array['route_count'] = $row['route_count'];
9161
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9162
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9163
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9164
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9165
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9166
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9167
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9168
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9169
          
9170
			$routes_array[] = $temp_array;
9171
		}
9172
9173
		return $routes_array;
9174
	}
9175
9176
	
9177
	
9178
	/**
9179
	* Gets all route combinations with waypoints
9180
	*
9181
	* @return Array the route list
9182
	*
9183
	*/
9184
	public function countAllRoutesWithWaypoints($filters = array())
9185
	{
9186
		$filter_query = $this->getFilter($filters,true,true);
9187
		$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
9188
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.waypoints <> '' 
9189
                    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
9190
                    ORDER BY route_count DESC
9191
		    LIMIT 10 OFFSET 0";
9192
      
9193
		
9194
		$sth = $this->db->prepare($query);
9195
		$sth->execute();
9196
      
9197
		$routes_array = array();
9198
		$temp_array = array();
9199
        
9200
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9201
		{
9202
			$temp_array['spotter_id'] = $row['spotter_id'];
9203
			$temp_array['route_count'] = $row['route_count'];
9204
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9205
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9206
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9207
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9208
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9209
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9210
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9211
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9212
          
9213
			$routes_array[] = $temp_array;
9214
		}
9215
9216
		return $routes_array;
9217
	}
9218
	
9219
	/**
9220
	* Gets all callsigns that have flown over
9221
	*
9222
	* @return Array the callsign list
9223
	*
9224
	*/
9225
	public function countAllCallsigns($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '', $month = '', $day = '')
9226
	{
9227
		global $globalDBdriver;
9228
		$filter_query = $this->getFilter($filters,true,true);
9229
		$query  = "SELECT DISTINCT spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name, spotter_output.airline_icao  
9230
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''";
9231
		 if ($olderthanmonths > 0) {
9232
			if ($globalDBdriver == 'mysql') $query .= ' AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH)';
9233
			else $query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
9234
		}
9235
		if ($sincedate != '') {
9236
			if ($globalDBdriver == 'mysql') $query .= " AND spotter_output.date > '".$sincedate."'";
9237
			else $query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
9238
		}
9239
		$query_values = array();
9240
		if ($year != '') {
9241
			if ($globalDBdriver == 'mysql') {
9242
				$query .= " AND YEAR(spotter_output.date) = :year";
9243
				$query_values = array_merge($query_values,array(':year' => $year));
9244
			} else {
9245
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
9246
				$query_values = array_merge($query_values,array(':year' => $year));
9247
			}
9248
		}
9249
		if ($month != '') {
9250
			if ($globalDBdriver == 'mysql') {
9251
				$query .= " AND MONTH(spotter_output.date) = :month";
9252
				$query_values = array_merge($query_values,array(':month' => $month));
9253
			} else {
9254
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
9255
				$query_values = array_merge($query_values,array(':month' => $month));
9256
			}
9257
		}
9258
		if ($day != '') {
9259
			if ($globalDBdriver == 'mysql') {
9260
				$query .= " AND DAY(spotter_output.date) = :day";
9261
				$query_values = array_merge($query_values,array(':day' => $day));
9262
			} else {
9263
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
9264
				$query_values = array_merge($query_values,array(':day' => $day));
9265
			}
9266
		}
9267
		$query .= " GROUP BY spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
9268
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
9269
      		
9270
		$sth = $this->db->prepare($query);
9271
		$sth->execute($query_values);
9272
      
9273
		$callsign_array = array();
9274
		$temp_array = array();
9275
        
9276
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9277
		{
9278
			$temp_array['callsign_icao'] = $row['ident'];
9279
			$temp_array['airline_name'] = $row['airline_name'];
9280
			$temp_array['airline_icao'] = $row['airline_icao'];
9281
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
9282
          
9283
			$callsign_array[] = $temp_array;
9284
		}
9285
9286
		return $callsign_array;
9287
	}
9288
9289
	/**
9290
	* Gets all callsigns that have flown over
9291
	*
9292
	* @return Array the callsign list
9293
	*
9294
	*/
9295
	public function countAllCallsignsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $filters = array())
9296
	{
9297
		global $globalDBdriver;
9298
		$filter_query = $this->getFilter($filters,true,true);
9299
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name  
9300
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''  AND spotter_output.airline_icao <> '' ";
9301
		 if ($olderthanmonths > 0) {
9302
			if ($globalDBdriver == 'mysql') $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
9303
			else $query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
9304
		}
9305
		if ($sincedate != '') {
9306
			if ($globalDBdriver == 'mysql') $query .= "AND spotter_output.date > '".$sincedate."' ";
9307
			else $query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
9308
		}
9309
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
9310
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
9311
      		
9312
		$sth = $this->db->prepare($query);
9313
		$sth->execute();
9314
      
9315
		$callsign_array = array();
9316
		$temp_array = array();
9317
        
9318
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9319
		{
9320
			$temp_array['callsign_icao'] = $row['ident'];
9321
			$temp_array['airline_name'] = $row['airline_name'];
9322
			$temp_array['airline_icao'] = $row['airline_icao'];
9323
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
9324
          
9325
			$callsign_array[] = $temp_array;
9326
		}
9327
9328
		return $callsign_array;
9329
	}
9330
9331
9332
9333
9334
	/**
9335
	* Counts all dates
9336
	*
9337
	* @return Array the date list
9338
	*
9339
	*/
9340
	public function countAllDates($filters = array())
9341
	{
9342
		global $globalTimezone, $globalDBdriver;
9343
		if ($globalTimezone != '') {
9344
			date_default_timezone_set($globalTimezone);
9345
			$datetime = new DateTime();
9346
			$offset = $datetime->format('P');
9347
		} else $offset = '+00:00';
9348
9349
		if ($globalDBdriver == 'mysql') {
9350
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9351
								FROM spotter_output";
9352
			$query .= $this->getFilter($filters);
9353
			$query .= " GROUP BY date_name 
9354
								ORDER BY date_count DESC
9355
								LIMIT 10 OFFSET 0";
9356
		} else {
9357
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9358
								FROM spotter_output";
9359
			$query .= $this->getFilter($filters);
9360
			$query .= " GROUP BY date_name 
9361
								ORDER BY date_count DESC
9362
								LIMIT 10 OFFSET 0";
9363
		}
9364
      
9365
		
9366
		$sth = $this->db->prepare($query);
9367
		$sth->execute(array(':offset' => $offset));
9368
      
9369
		$date_array = array();
9370
		$temp_array = array();
9371
        
9372
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9373
		{
9374
			$temp_array['date_name'] = $row['date_name'];
9375
			$temp_array['date_count'] = $row['date_count'];
9376
9377
			$date_array[] = $temp_array;
9378
		}
9379
9380
		return $date_array;
9381
	}
9382
	
9383
	/**
9384
	* Counts all dates
9385
	*
9386
	* @return Array the date list
9387
	*
9388
	*/
9389
	public function countAllDatesByAirlines($filters = array())
9390
	{
9391
		global $globalTimezone, $globalDBdriver;
9392
		if ($globalTimezone != '') {
9393
			date_default_timezone_set($globalTimezone);
9394
			$datetime = new DateTime();
9395
			$offset = $datetime->format('P');
9396
		} else $offset = '+00:00';
9397
		$filter_query = $this->getFilter($filters,true,true);
9398
		if ($globalDBdriver == 'mysql') {
9399
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9400
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9401
								GROUP BY spotter_output.airline_icao, date_name 
9402
								ORDER BY date_count DESC
9403
								LIMIT 10 OFFSET 0";
9404
		} else {
9405
			$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
9406
								FROM spotter_output 
9407
								WHERE spotter_output.airline_icao <> '' 
9408
								GROUP BY spotter_output.airline_icao, date_name 
9409
								ORDER BY date_count DESC
9410
								LIMIT 10 OFFSET 0";
9411
		}
9412
      
9413
		
9414
		$sth = $this->db->prepare($query);
9415
		$sth->execute(array(':offset' => $offset));
9416
      
9417
		$date_array = array();
9418
		$temp_array = array();
9419
        
9420
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9421
		{
9422
			$temp_array['date_name'] = $row['date_name'];
9423
			$temp_array['date_count'] = $row['date_count'];
9424
			$temp_array['airline_icao'] = $row['airline_icao'];
9425
9426
			$date_array[] = $temp_array;
9427
		}
9428
9429
		return $date_array;
9430
	}	
9431
	
9432
	/**
9433
	* Counts all dates during the last 7 days
9434
	*
9435
	* @return Array the date list
9436
	*
9437
	*/
9438
	public function countAllDatesLast7Days($filters = array())
9439
	{
9440
		global $globalTimezone, $globalDBdriver;
9441
		if ($globalTimezone != '') {
9442
			date_default_timezone_set($globalTimezone);
9443
			$datetime = new DateTime();
9444
			$offset = $datetime->format('P');
9445
		} else $offset = '+00:00';
9446
		$filter_query = $this->getFilter($filters,true,true);
9447
		if ($globalDBdriver == 'mysql') {
9448
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9449
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY)";
9450
			$query .= " GROUP BY date_name 
9451
								ORDER BY spotter_output.date ASC";
9452
			$query_data = array(':offset' => $offset);
9453
		} else {
9454
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9455
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '7 DAYS'";
9456
			$query .= " GROUP BY date_name 
9457
								ORDER BY date_name ASC";
9458
			$query_data = array(':offset' => $offset);
9459
    		}
9460
		
9461
		$sth = $this->db->prepare($query);
9462
		$sth->execute($query_data);
9463
      
9464
		$date_array = array();
9465
		$temp_array = array();
9466
        
9467
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9468
		{
9469
			$temp_array['date_name'] = $row['date_name'];
9470
			$temp_array['date_count'] = $row['date_count'];
9471
          
9472
			$date_array[] = $temp_array;
9473
		}
9474
9475
		return $date_array;
9476
	}
9477
9478
	/**
9479
	* Counts all dates during the last month
9480
	*
9481
	* @return Array the date list
9482
	*
9483
	*/
9484
	public function countAllDatesLastMonth($filters = array())
9485
	{
9486
		global $globalTimezone, $globalDBdriver;
9487
		if ($globalTimezone != '') {
9488
			date_default_timezone_set($globalTimezone);
9489
			$datetime = new DateTime();
9490
			$offset = $datetime->format('P');
9491
		} else $offset = '+00:00';
9492
		$filter_query = $this->getFilter($filters,true,true);
9493
		if ($globalDBdriver == 'mysql') {
9494
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9495
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)";
9496
			$query .= " GROUP BY date_name 
9497
								ORDER BY spotter_output.date ASC";
9498
			$query_data = array(':offset' => $offset);
9499
		} else {
9500
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9501
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'";
9502
			$query .= " GROUP BY date_name 
9503
								ORDER BY date_name ASC";
9504
			$query_data = array(':offset' => $offset);
9505
    		}
9506
		
9507
		$sth = $this->db->prepare($query);
9508
		$sth->execute($query_data);
9509
      
9510
		$date_array = array();
9511
		$temp_array = array();
9512
        
9513
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9514
		{
9515
			$temp_array['date_name'] = $row['date_name'];
9516
			$temp_array['date_count'] = $row['date_count'];
9517
          
9518
			$date_array[] = $temp_array;
9519
		}
9520
9521
		return $date_array;
9522
	}
9523
9524
9525
	/**
9526
	* Counts all dates during the last month
9527
	*
9528
	* @return Array the date list
9529
	*
9530
	*/
9531
	public function countAllDatesLastMonthByAirlines($filters = array())
9532
	{
9533
		global $globalTimezone, $globalDBdriver;
9534
		$filter_query = $this->getFilter($filters,true,true);
9535
		if ($globalTimezone != '') {
9536
			date_default_timezone_set($globalTimezone);
9537
			$datetime = new DateTime();
9538
			$offset = $datetime->format('P');
9539
		} else $offset = '+00:00';
9540
		
9541
		if ($globalDBdriver == 'mysql') {
9542
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9543
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)
9544
								GROUP BY spotter_output.airline_icao, date_name 
9545
								ORDER BY spotter_output.date ASC";
9546
			$query_data = array(':offset' => $offset);
9547
		} else {
9548
			$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
9549
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'
9550
								GROUP BY spotter_output.airline_icao, date_name 
9551
								ORDER BY date_name ASC";
9552
			$query_data = array(':offset' => $offset);
9553
    		}
9554
		
9555
		$sth = $this->db->prepare($query);
9556
		$sth->execute($query_data);
9557
      
9558
		$date_array = array();
9559
		$temp_array = array();
9560
        
9561
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9562
		{
9563
			$temp_array['date_name'] = $row['date_name'];
9564
			$temp_array['date_count'] = $row['date_count'];
9565
			$temp_array['airline_icao'] = $row['airline_icao'];
9566
          
9567
			$date_array[] = $temp_array;
9568
		}
9569
9570
		return $date_array;
9571
	}
9572
	
9573
9574
	/**
9575
	* Counts all month
9576
	*
9577
	* @return Array the month list
9578
	*
9579
	*/
9580
	public function countAllMonths($filters = array())
9581
	{
9582
		global $globalTimezone, $globalDBdriver;
9583
		if ($globalTimezone != '') {
9584
			date_default_timezone_set($globalTimezone);
9585
			$datetime = new DateTime();
9586
			$offset = $datetime->format('P');
9587
		} else $offset = '+00:00';
9588
9589
		if ($globalDBdriver == 'mysql') {
9590
			$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
9591
								FROM spotter_output";
9592
			$query .= $this->getFilter($filters);
9593
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
9594
		} else {
9595
			$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
9596
								FROM spotter_output";
9597
			$query .= $this->getFilter($filters);
9598
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
9599
		}
9600
      
9601
		
9602
		$sth = $this->db->prepare($query);
9603
		$sth->execute(array(':offset' => $offset));
9604
      
9605
		$date_array = array();
9606
		$temp_array = array();
9607
        
9608
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9609
		{
9610
			$temp_array['month_name'] = $row['month_name'];
9611
			$temp_array['year_name'] = $row['year_name'];
9612
			$temp_array['date_count'] = $row['date_count'];
9613
9614
			$date_array[] = $temp_array;
9615
		}
9616
9617
		return $date_array;
9618
	}
9619
9620
	/**
9621
	* Counts all month
9622
	*
9623
	* @return Array the month list
9624
	*
9625
	*/
9626
	public function countAllMonthsByAirlines($filters = array())
9627
	{
9628
		global $globalTimezone, $globalDBdriver;
9629
		$filter_query = $this->getFilter($filters,true,true);
9630
		if ($globalTimezone != '') {
9631
			date_default_timezone_set($globalTimezone);
9632
			$datetime = new DateTime();
9633
			$offset = $datetime->format('P');
9634
		} else $offset = '+00:00';
9635
9636
		if ($globalDBdriver == 'mysql') {
9637
			$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
9638
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9639
								GROUP BY spotter_output.airline_icao, year_name, month_name 
9640
								ORDER BY date_count DESC";
9641
		} else {
9642
			$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
9643
								FROM spotter_output 
9644
								WHERE spotter_output.airline_icao <> '' 
9645
								GROUP BY spotter_output.airline_icao, year_name, month_name 
9646
								ORDER BY date_count DESC";
9647
		}
9648
      
9649
		
9650
		$sth = $this->db->prepare($query);
9651
		$sth->execute(array(':offset' => $offset));
9652
      
9653
		$date_array = array();
9654
		$temp_array = array();
9655
        
9656
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9657
		{
9658
			$temp_array['month_name'] = $row['month_name'];
9659
			$temp_array['year_name'] = $row['year_name'];
9660
			$temp_array['date_count'] = $row['date_count'];
9661
			$temp_array['airline_icao'] = $row['airline_icao'];
9662
9663
			$date_array[] = $temp_array;
9664
		}
9665
9666
		return $date_array;
9667
	}
9668
9669
	/**
9670
	* Counts all military month
9671
	*
9672
	* @return Array the month list
9673
	*
9674
	*/
9675
	public function countAllMilitaryMonths($filters = array())
9676
	{
9677
		global $globalTimezone, $globalDBdriver;
9678
		if ($globalTimezone != '') {
9679
			date_default_timezone_set($globalTimezone);
9680
			$datetime = new DateTime();
9681
			$offset = $datetime->format('P');
9682
		} else $offset = '+00:00';
9683
		$filter_query = $this->getFilter($filters,true,true);
9684
		if ($globalDBdriver == 'mysql') {
9685
			$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
9686
								FROM spotter_output".$filter_query." spotter_output.airline_type = 'military'
9687
								GROUP BY year_name, month_name 
9688
								ORDER BY date_count DESC";
9689
		} else {
9690
			$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
9691
								FROM spotter_output".$filter_query." spotter_output.airline_type = 'military'
9692
								GROUP BY year_name, month_name 
9693
								ORDER BY date_count DESC";
9694
		}
9695
		
9696
		$sth = $this->db->prepare($query);
9697
		$sth->execute(array(':offset' => $offset));
9698
      
9699
		$date_array = array();
9700
		$temp_array = array();
9701
        
9702
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9703
		{
9704
			$temp_array['month_name'] = $row['month_name'];
9705
			$temp_array['year_name'] = $row['year_name'];
9706
			$temp_array['date_count'] = $row['date_count'];
9707
9708
			$date_array[] = $temp_array;
9709
		}
9710
9711
		return $date_array;
9712
	}
9713
	
9714
	/**
9715
	* Counts all month owners
9716
	*
9717
	* @return Array the month list
9718
	*
9719
	*/
9720
	public function countAllMonthsOwners($filters = array())
9721
	{
9722
		global $globalTimezone, $globalDBdriver;
9723
		if ($globalTimezone != '') {
9724
			date_default_timezone_set($globalTimezone);
9725
			$datetime = new DateTime();
9726
			$offset = $datetime->format('P');
9727
		} else $offset = '+00:00';
9728
		$filter_query = $this->getFilter($filters,true,true);
9729
9730
		if ($globalDBdriver == 'mysql') {
9731
			$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
9732
								FROM spotter_output".$filter_query." owner_name <> ''
9733
								GROUP BY year_name, month_name
9734
								ORDER BY date_count DESC";
9735
		} else {
9736
			$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
9737
								FROM spotter_output".$filter_query." owner_name <> ''
9738
								GROUP BY year_name, month_name
9739
								ORDER BY date_count DESC";
9740
		}
9741
		
9742
		$sth = $this->db->prepare($query);
9743
		$sth->execute(array(':offset' => $offset));
9744
      
9745
		$date_array = array();
9746
		$temp_array = array();
9747
        
9748
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9749
		{
9750
			$temp_array['month_name'] = $row['month_name'];
9751
			$temp_array['year_name'] = $row['year_name'];
9752
			$temp_array['date_count'] = $row['date_count'];
9753
9754
			$date_array[] = $temp_array;
9755
		}
9756
9757
		return $date_array;
9758
	}
9759
	
9760
	/**
9761
	* Counts all month owners
9762
	*
9763
	* @return Array the month list
9764
	*
9765
	*/
9766
	public function countAllMonthsOwnersByAirlines($filters = array())
9767
	{
9768
		global $globalTimezone, $globalDBdriver;
9769
		$filter_query = $this->getFilter($filters,true,true);
9770
		if ($globalTimezone != '') {
9771
			date_default_timezone_set($globalTimezone);
9772
			$datetime = new DateTime();
9773
			$offset = $datetime->format('P');
9774
		} else $offset = '+00:00';
9775
9776
		if ($globalDBdriver == 'mysql') {
9777
			$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
9778
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
9779
								GROUP BY spotter_output.airline_icao, year_name, month_name
9780
								ORDER BY date_count DESC";
9781
		} else {
9782
			$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
9783
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
9784
								GROUP BY spotter_output.airline_icao, year_name, month_name
9785
								ORDER BY date_count DESC";
9786
		}
9787
		
9788
		$sth = $this->db->prepare($query);
9789
		$sth->execute(array(':offset' => $offset));
9790
      
9791
		$date_array = array();
9792
		$temp_array = array();
9793
        
9794
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9795
		{
9796
			$temp_array['month_name'] = $row['month_name'];
9797
			$temp_array['year_name'] = $row['year_name'];
9798
			$temp_array['date_count'] = $row['date_count'];
9799
			$temp_array['airline_icao'] = $row['airline_icao'];
9800
9801
			$date_array[] = $temp_array;
9802
		}
9803
9804
		return $date_array;
9805
	}
9806
9807
	/**
9808
	* Counts all month pilot
9809
	*
9810
	* @return Array the month list
9811
	*
9812
	*/
9813
	public function countAllMonthsPilots($filters = array())
9814
	{
9815
		global $globalTimezone, $globalDBdriver;
9816
		if ($globalTimezone != '') {
9817
			date_default_timezone_set($globalTimezone);
9818
			$datetime = new DateTime();
9819
			$offset = $datetime->format('P');
9820
		} else $offset = '+00:00';
9821
		$filter_query = $this->getFilter($filters,true,true);
9822
9823
		if ($globalDBdriver == 'mysql') {
9824
			$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
9825
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
9826
								GROUP BY year_name, month_name
9827
								ORDER BY date_count DESC";
9828
		} else {
9829
			$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
9830
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
9831
								GROUP BY year_name, month_name
9832
								ORDER BY date_count DESC";
9833
		}
9834
		
9835
		$sth = $this->db->prepare($query);
9836
		$sth->execute(array(':offset' => $offset));
9837
      
9838
		$date_array = array();
9839
		$temp_array = array();
9840
        
9841
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9842
		{
9843
			$temp_array['month_name'] = $row['month_name'];
9844
			$temp_array['year_name'] = $row['year_name'];
9845
			$temp_array['date_count'] = $row['date_count'];
9846
9847
			$date_array[] = $temp_array;
9848
		}
9849
9850
		return $date_array;
9851
	}
9852
	
9853
	/**
9854
	* Counts all month pilot
9855
	*
9856
	* @return Array the month list
9857
	*
9858
	*/
9859
	public function countAllMonthsPilotsByAirlines($filters = array())
9860
	{
9861
		global $globalTimezone, $globalDBdriver;
9862
		$filter_query = $this->getFilter($filters,true,true);
9863
		if ($globalTimezone != '') {
9864
			date_default_timezone_set($globalTimezone);
9865
			$datetime = new DateTime();
9866
			$offset = $datetime->format('P');
9867
		} else $offset = '+00:00';
9868
9869
		if ($globalDBdriver == 'mysql') {
9870
			$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
9871
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
9872
								GROUP BY spotter_output.airline_icao,year_name, month_name
9873
								ORDER BY date_count DESC";
9874
		} else {
9875
			$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
9876
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
9877
								GROUP BY spotter_output.airline_icao, year_name, month_name
9878
								ORDER BY date_count DESC";
9879
		}
9880
		
9881
		$sth = $this->db->prepare($query);
9882
		$sth->execute(array(':offset' => $offset));
9883
      
9884
		$date_array = array();
9885
		$temp_array = array();
9886
        
9887
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9888
		{
9889
			$temp_array['month_name'] = $row['month_name'];
9890
			$temp_array['year_name'] = $row['year_name'];
9891
			$temp_array['date_count'] = $row['date_count'];
9892
			$temp_array['airline_icao'] = $row['airline_icao'];
9893
9894
			$date_array[] = $temp_array;
9895
		}
9896
9897
		return $date_array;
9898
	}
9899
9900
	/**
9901
	* Counts all month airline
9902
	*
9903
	* @return Array the month list
9904
	*
9905
	*/
9906
	public function countAllMonthsAirlines($filters = array())
9907
	{
9908
		global $globalTimezone, $globalDBdriver;
9909
		$filter_query = $this->getFilter($filters,true,true);
9910
		if ($globalTimezone != '') {
9911
			date_default_timezone_set($globalTimezone);
9912
			$datetime = new DateTime();
9913
			$offset = $datetime->format('P');
9914
		} else $offset = '+00:00';
9915
9916
		if ($globalDBdriver == 'mysql') {
9917
			$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
9918
								FROM spotter_output".$filter_query." airline_icao <> '' 
9919
								GROUP BY year_name, month_name
9920
								ORDER BY date_count DESC";
9921
		} else {
9922
			$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
9923
								FROM spotter_output".$filter_query." airline_icao <> '' 
9924
								GROUP BY year_name, month_name
9925
								ORDER BY date_count DESC";
9926
		}
9927
		
9928
		$sth = $this->db->prepare($query);
9929
		$sth->execute(array(':offset' => $offset));
9930
      
9931
		$date_array = array();
9932
		$temp_array = array();
9933
        
9934
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9935
		{
9936
			$temp_array['month_name'] = $row['month_name'];
9937
			$temp_array['year_name'] = $row['year_name'];
9938
			$temp_array['date_count'] = $row['date_count'];
9939
9940
			$date_array[] = $temp_array;
9941
		}
9942
9943
		return $date_array;
9944
	}
9945
	
9946
	/**
9947
	* Counts all month aircraft
9948
	*
9949
	* @return Array the month list
9950
	*
9951
	*/
9952
	public function countAllMonthsAircrafts($filters = array())
9953
	{
9954
		global $globalTimezone, $globalDBdriver;
9955
		if ($globalTimezone != '') {
9956
			date_default_timezone_set($globalTimezone);
9957
			$datetime = new DateTime();
9958
			$offset = $datetime->format('P');
9959
		} else $offset = '+00:00';
9960
		$filter_query = $this->getFilter($filters,true,true);
9961
9962
		if ($globalDBdriver == 'mysql') {
9963
			$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
9964
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
9965
								GROUP BY year_name, month_name
9966
								ORDER BY date_count DESC";
9967
		} else {
9968
			$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
9969
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
9970
								GROUP BY year_name, month_name
9971
								ORDER BY date_count DESC";
9972
		}
9973
		
9974
		$sth = $this->db->prepare($query);
9975
		$sth->execute(array(':offset' => $offset));
9976
      
9977
		$date_array = array();
9978
		$temp_array = array();
9979
        
9980
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9981
		{
9982
			$temp_array['month_name'] = $row['month_name'];
9983
			$temp_array['year_name'] = $row['year_name'];
9984
			$temp_array['date_count'] = $row['date_count'];
9985
9986
			$date_array[] = $temp_array;
9987
		}
9988
9989
		return $date_array;
9990
	}
9991
	
9992
9993
	/**
9994
	* Counts all month aircraft
9995
	*
9996
	* @return Array the month list
9997
	*
9998
	*/
9999
	public function countAllMonthsAircraftsByAirlines($filters = array())
10000
	{
10001
		global $globalTimezone, $globalDBdriver;
10002
		$filter_query = $this->getFilter($filters,true,true);
10003
		if ($globalTimezone != '') {
10004
			date_default_timezone_set($globalTimezone);
10005
			$datetime = new DateTime();
10006
			$offset = $datetime->format('P');
10007
		} else $offset = '+00:00';
10008
10009
		if ($globalDBdriver == 'mysql') {
10010
			$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
10011
								FROM spotter_output".$filter_query." aircraft_icao <> ''  AND spotter_output.airline_icao <> '' 
10012
								GROUP BY spotter_output.airline_icao, year_name, month_name
10013
								ORDER BY date_count DESC";
10014
		} else {
10015
			$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
10016
								FROM spotter_output".$filter_query." aircraft_icao <> '' AND spotter_output.airline_icao <> '' 
10017
								GROUP BY spotter_output.airline_icao, year_name, month_name
10018
								ORDER BY date_count DESC";
10019
		}
10020
		
10021
		$sth = $this->db->prepare($query);
10022
		$sth->execute(array(':offset' => $offset));
10023
      
10024
		$date_array = array();
10025
		$temp_array = array();
10026
        
10027
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10028
		{
10029
			$temp_array['month_name'] = $row['month_name'];
10030
			$temp_array['year_name'] = $row['year_name'];
10031
			$temp_array['date_count'] = $row['date_count'];
10032
			$temp_array['airline_icao'] = $row['airline_icao'];
10033
10034
			$date_array[] = $temp_array;
10035
		}
10036
10037
		return $date_array;
10038
	}
10039
10040
	/**
10041
	* Counts all month real arrival
10042
	*
10043
	* @return Array the month list
10044
	*
10045
	*/
10046
	public function countAllMonthsRealArrivals($filters = array())
10047
	{
10048
		global $globalTimezone, $globalDBdriver;
10049
		if ($globalTimezone != '') {
10050
			date_default_timezone_set($globalTimezone);
10051
			$datetime = new DateTime();
10052
			$offset = $datetime->format('P');
10053
		} else $offset = '+00:00';
10054
		$filter_query = $this->getFilter($filters,true,true);
10055
10056
		if ($globalDBdriver == 'mysql') {
10057
			$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
10058
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
10059
								GROUP BY year_name, month_name
10060
								ORDER BY date_count DESC";
10061
		} else {
10062
			$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
10063
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
10064
								GROUP BY year_name, month_name
10065
								ORDER BY date_count DESC";
10066
		}
10067
		
10068
		$sth = $this->db->prepare($query);
10069
		$sth->execute(array(':offset' => $offset));
10070
      
10071
		$date_array = array();
10072
		$temp_array = array();
10073
        
10074
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10075
		{
10076
			$temp_array['month_name'] = $row['month_name'];
10077
			$temp_array['year_name'] = $row['year_name'];
10078
			$temp_array['date_count'] = $row['date_count'];
10079
10080
			$date_array[] = $temp_array;
10081
		}
10082
10083
		return $date_array;
10084
	}
10085
	
10086
10087
	/**
10088
	* Counts all month real arrival
10089
	*
10090
	* @return Array the month list
10091
	*
10092
	*/
10093
	public function countAllMonthsRealArrivalsByAirlines($filters = array())
10094
	{
10095
		global $globalTimezone, $globalDBdriver;
10096
		$filter_query = $this->getFilter($filters,true,true);
10097
		if ($globalTimezone != '') {
10098
			date_default_timezone_set($globalTimezone);
10099
			$datetime = new DateTime();
10100
			$offset = $datetime->format('P');
10101
		} else $offset = '+00:00';
10102
10103
		if ($globalDBdriver == 'mysql') {
10104
			$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
10105
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
10106
								GROUP BY spotter_output.airline_icao, year_name, month_name
10107
								ORDER BY date_count DESC";
10108
		} else {
10109
			$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
10110
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
10111
								GROUP BY spotter_output.airline_icao, year_name, month_name
10112
								ORDER BY date_count DESC";
10113
		}
10114
		
10115
		$sth = $this->db->prepare($query);
10116
		$sth->execute(array(':offset' => $offset));
10117
      
10118
		$date_array = array();
10119
		$temp_array = array();
10120
        
10121
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10122
		{
10123
			$temp_array['month_name'] = $row['month_name'];
10124
			$temp_array['year_name'] = $row['year_name'];
10125
			$temp_array['date_count'] = $row['date_count'];
10126
			$temp_array['airline_icao'] = $row['airline_icao'];
10127
10128
			$date_array[] = $temp_array;
10129
		}
10130
10131
		return $date_array;
10132
	}
10133
	
10134
10135
	/**
10136
	* Counts all dates during the last year
10137
	*
10138
	* @return Array the date list
10139
	*
10140
	*/
10141
	public function countAllMonthsLastYear($filters)
10142
	{
10143
		global $globalTimezone, $globalDBdriver;
10144
		if ($globalTimezone != '') {
10145
			date_default_timezone_set($globalTimezone);
10146
			$datetime = new DateTime();
10147
			$offset = $datetime->format('P');
10148
		} else $offset = '+00:00';
10149
		$filter_query = $this->getFilter($filters,true,true);
10150
		if ($globalDBdriver == 'mysql') {
10151
			$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
10152
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 YEAR)";
10153
			$query .= " GROUP BY year_name, month_name
10154
								ORDER BY year_name, month_name ASC";
10155
			$query_data = array(':offset' => $offset);
10156
		} else {
10157
			$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
10158
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 YEARS'";
10159
			$query .= " GROUP BY year_name, month_name
10160
								ORDER BY year_name, month_name ASC";
10161
			$query_data = array(':offset' => $offset);
10162
    		}
10163
		
10164
		$sth = $this->db->prepare($query);
10165
		$sth->execute($query_data);
10166
      
10167
		$date_array = array();
10168
		$temp_array = array();
10169
        
10170
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10171
		{
10172
			$temp_array['year_name'] = $row['year_name'];
10173
			$temp_array['month_name'] = $row['month_name'];
10174
			$temp_array['date_count'] = $row['date_count'];
10175
          
10176
			$date_array[] = $temp_array;
10177
		}
10178
10179
		return $date_array;
10180
	}
10181
	
10182
	
10183
	
10184
	/**
10185
	* Counts all hours
10186
	*
10187
	* @return Array the hour list
10188
	*
10189
	*/
10190
	public function countAllHours($orderby,$filters = array())
10191
	{
10192
		global $globalTimezone, $globalDBdriver;
10193
		if ($globalTimezone != '') {
10194
			date_default_timezone_set($globalTimezone);
10195
			$datetime = new DateTime();
10196
			$offset = $datetime->format('P');
10197
		} else $offset = '+00:00';
10198
10199
		$orderby_sql = '';
10200
		if ($orderby == "hour")
10201
		{
10202
			$orderby_sql = "ORDER BY hour_name ASC";
10203
		}
10204
		if ($orderby == "count")
10205
		{
10206
			$orderby_sql = "ORDER BY hour_count DESC";
10207
		}
10208
		
10209
		if ($globalDBdriver == 'mysql') {
10210
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10211
								FROM spotter_output";
10212
			$query .= $this->getFilter($filters);
10213
			$query .= " GROUP BY hour_name 
10214
								".$orderby_sql;
10215
10216
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
10217
								FROM spotter_output 
10218
								GROUP BY hour_name 
10219
								".$orderby_sql."
10220
								LIMIT 10 OFFSET 00";
10221
  */    
10222
		$query_data = array(':offset' => $offset);
10223
		} else {
10224
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10225
								FROM spotter_output";
10226
			$query .= $this->getFilter($filters);
10227
			$query .= " GROUP BY hour_name 
10228
								".$orderby_sql;
10229
			$query_data = array(':offset' => $offset);
10230
		}
10231
		
10232
		$sth = $this->db->prepare($query);
10233
		$sth->execute($query_data);
10234
      
10235
		$hour_array = array();
10236
		$temp_array = array();
10237
        
10238
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10239
		{
10240
			$temp_array['hour_name'] = $row['hour_name'];
10241
			$temp_array['hour_count'] = $row['hour_count'];
10242
          
10243
			$hour_array[] = $temp_array;
10244
		}
10245
10246
		return $hour_array;
10247
	}
10248
	
10249
	/**
10250
	* Counts all hours
10251
	*
10252
	* @return Array the hour list
10253
	*
10254
	*/
10255
	public function countAllHoursByAirlines($orderby, $filters = array())
10256
	{
10257
		global $globalTimezone, $globalDBdriver;
10258
		$filter_query = $this->getFilter($filters,true,true);
10259
		if ($globalTimezone != '') {
10260
			date_default_timezone_set($globalTimezone);
10261
			$datetime = new DateTime();
10262
			$offset = $datetime->format('P');
10263
		} else $offset = '+00:00';
10264
10265
		$orderby_sql = '';
10266
		if ($orderby == "hour")
10267
		{
10268
			$orderby_sql = "ORDER BY hour_name ASC";
10269
		}
10270
		if ($orderby == "count")
10271
		{
10272
			$orderby_sql = "ORDER BY hour_count DESC";
10273
		}
10274
		
10275
		if ($globalDBdriver == 'mysql') {
10276
			$query  = "SELECT spotter_output.airline_icao, HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10277
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
10278
								GROUP BY spotter_output.airline_icao, hour_name 
10279
								".$orderby_sql;
10280
10281
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
10282
								FROM spotter_output 
10283
								GROUP BY hour_name 
10284
								".$orderby_sql."
10285
								LIMIT 10 OFFSET 00";
10286
  */    
10287
		$query_data = array(':offset' => $offset);
10288
		} else {
10289
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10290
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
10291
								GROUP BY spotter_output.airline_icao, hour_name 
10292
								".$orderby_sql;
10293
			$query_data = array(':offset' => $offset);
10294
		}
10295
		
10296
		$sth = $this->db->prepare($query);
10297
		$sth->execute($query_data);
10298
      
10299
		$hour_array = array();
10300
		$temp_array = array();
10301
        
10302
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10303
		{
10304
			$temp_array['hour_name'] = $row['hour_name'];
10305
			$temp_array['hour_count'] = $row['hour_count'];
10306
			$temp_array['airline_icao'] = $row['airline_icao'];
10307
          
10308
			$hour_array[] = $temp_array;
10309
		}
10310
10311
		return $hour_array;
10312
	}
10313
10314
10315
10316
	/**
10317
	* Counts all hours by airline
10318
	*
10319
	* @return Array the hour list
10320
	*
10321
	*/
10322
	public function countAllHoursByAirline($airline_icao, $filters = array())
10323
	{
10324
		global $globalTimezone, $globalDBdriver;
10325
		$filter_query = $this->getFilter($filters,true,true);
10326
		if ($globalTimezone != '') {
10327
			date_default_timezone_set($globalTimezone);
10328
			$datetime = new DateTime();
10329
			$offset = $datetime->format('P');
10330
		} else $offset = '+00:00';
10331
10332
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
10333
10334
		if ($globalDBdriver == 'mysql') {
10335
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10336
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
10337
								GROUP BY hour_name 
10338
								ORDER BY hour_name ASC";
10339
		} else {
10340
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10341
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
10342
								GROUP BY hour_name 
10343
								ORDER BY hour_name ASC";
10344
		}
10345
		
10346
		$sth = $this->db->prepare($query);
10347
		$sth->execute(array(':airline_icao' => $airline_icao,':offset' => $offset));
10348
      
10349
		$hour_array = array();
10350
		$temp_array = array();
10351
        
10352
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10353
		{
10354
			$temp_array['hour_name'] = $row['hour_name'];
10355
			$temp_array['hour_count'] = $row['hour_count'];
10356
          
10357
			$hour_array[] = $temp_array;
10358
		}
10359
10360
		return $hour_array;
10361
	}
10362
	
10363
	
10364
	
10365
	
10366
	/**
10367
	* Counts all hours by aircraft
10368
	*
10369
	* @return Array the hour list
10370
	*
10371
	*/
10372
	public function countAllHoursByAircraft($aircraft_icao, $filters = array())
10373
	{
10374
		global $globalTimezone, $globalDBdriver;
10375
		$filter_query = $this->getFilter($filters,true,true);
10376
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
10377
		if ($globalTimezone != '') {
10378
			date_default_timezone_set($globalTimezone);
10379
			$datetime = new DateTime();
10380
			$offset = $datetime->format('P');
10381
		} else $offset = '+00:00';
10382
10383
		if ($globalDBdriver == 'mysql') {
10384
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10385
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
10386
								GROUP BY hour_name 
10387
								ORDER BY hour_name ASC";
10388
		} else {
10389
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10390
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
10391
								GROUP BY hour_name 
10392
								ORDER BY hour_name ASC";
10393
		}
10394
		
10395
		$sth = $this->db->prepare($query);
10396
		$sth->execute(array(':aircraft_icao' => $aircraft_icao,':offset' => $offset));
10397
      
10398
		$hour_array = array();
10399
		$temp_array = array();
10400
        
10401
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10402
		{
10403
			$temp_array['hour_name'] = $row['hour_name'];
10404
			$temp_array['hour_count'] = $row['hour_count'];
10405
          
10406
			$hour_array[] = $temp_array;
10407
		}
10408
10409
		return $hour_array;
10410
	}
10411
	
10412
	
10413
	/**
10414
	* Counts all hours by aircraft registration
10415
	*
10416
	* @return Array the hour list
10417
	*
10418
	*/
10419
	public function countAllHoursByRegistration($registration, $filters = array())
10420
	{
10421
		global $globalTimezone, $globalDBdriver;
10422
		$filter_query = $this->getFilter($filters,true,true);
10423
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
10424
		if ($globalTimezone != '') {
10425
			date_default_timezone_set($globalTimezone);
10426
			$datetime = new DateTime();
10427
			$offset = $datetime->format('P');
10428
		} else $offset = '+00:00';
10429
10430
		if ($globalDBdriver == 'mysql') {
10431
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10432
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
10433
								GROUP BY hour_name 
10434
								ORDER BY hour_name ASC";
10435
		} else {
10436
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10437
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
10438
								GROUP BY hour_name 
10439
								ORDER BY hour_name ASC";
10440
		}
10441
		
10442
		$sth = $this->db->prepare($query);
10443
		$sth->execute(array(':registration' => $registration,':offset' => $offset));
10444
      
10445
		$hour_array = array();
10446
		$temp_array = array();
10447
        
10448
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10449
		{
10450
			$temp_array['hour_name'] = $row['hour_name'];
10451
			$temp_array['hour_count'] = $row['hour_count'];
10452
          
10453
			$hour_array[] = $temp_array;
10454
		}
10455
10456
		return $hour_array;
10457
	}
10458
	
10459
	
10460
	/**
10461
	* Counts all hours by airport
10462
	*
10463
	* @return Array the hour list
10464
	*
10465
	*/
10466
	public function countAllHoursByAirport($airport_icao, $filters = array())
10467
	{
10468
		global $globalTimezone, $globalDBdriver;
10469
		$filter_query = $this->getFilter($filters,true,true);
10470
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
10471
		if ($globalTimezone != '') {
10472
			date_default_timezone_set($globalTimezone);
10473
			$datetime = new DateTime();
10474
			$offset = $datetime->format('P');
10475
		} else $offset = '+00:00';
10476
10477
		if ($globalDBdriver == 'mysql') {
10478
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10479
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
10480
								GROUP BY hour_name 
10481
								ORDER BY hour_name ASC";
10482
		} else {
10483
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10484
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
10485
								GROUP BY hour_name 
10486
								ORDER BY hour_name ASC";
10487
		}
10488
		
10489
		$sth = $this->db->prepare($query);
10490
		$sth->execute(array(':airport_icao' => $airport_icao,':offset' => $offset));
10491
      
10492
		$hour_array = array();
10493
		$temp_array = array();
10494
        
10495
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10496
		{
10497
			$temp_array['hour_name'] = $row['hour_name'];
10498
			$temp_array['hour_count'] = $row['hour_count'];
10499
          
10500
			$hour_array[] = $temp_array;
10501
		}
10502
10503
		return $hour_array;
10504
	}
10505
	
10506
	
10507
	
10508
	/**
10509
	* Counts all hours by manufacturer
10510
	*
10511
	* @return Array the hour list
10512
	*
10513
	*/
10514
	public function countAllHoursByManufacturer($aircraft_manufacturer,$filters =array())
10515
	{
10516
		global $globalTimezone, $globalDBdriver;
10517
		$filter_query = $this->getFilter($filters,true,true);
10518
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
10519
		if ($globalTimezone != '') {
10520
			date_default_timezone_set($globalTimezone);
10521
			$datetime = new DateTime();
10522
			$offset = $datetime->format('P');
10523
		} else $offset = '+00:00';
10524
10525
		if ($globalDBdriver == 'mysql') {
10526
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10527
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
10528
								GROUP BY hour_name 
10529
								ORDER BY hour_name ASC";
10530
		} else {
10531
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10532
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
10533
								GROUP BY hour_name 
10534
								ORDER BY hour_name ASC";
10535
		}
10536
		
10537
		$sth = $this->db->prepare($query);
10538
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer,':offset' => $offset));
10539
      
10540
		$hour_array = array();
10541
		$temp_array = array();
10542
        
10543
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10544
		{
10545
			$temp_array['hour_name'] = $row['hour_name'];
10546
			$temp_array['hour_count'] = $row['hour_count'];
10547
          
10548
			$hour_array[] = $temp_array;
10549
		}
10550
10551
		return $hour_array;
10552
	}
10553
	
10554
	
10555
	
10556
	/**
10557
	* Counts all hours by date
10558
	*
10559
	* @return Array the hour list
10560
	*
10561
	*/
10562
	public function countAllHoursByDate($date, $filters = array())
10563
	{
10564
		global $globalTimezone, $globalDBdriver;
10565
		$filter_query = $this->getFilter($filters,true,true);
10566
		$date = filter_var($date,FILTER_SANITIZE_STRING);
10567
		if ($globalTimezone != '') {
10568
			date_default_timezone_set($globalTimezone);
10569
			$datetime = new DateTime($date);
10570
			$offset = $datetime->format('P');
10571
		} else $offset = '+00:00';
10572
10573
		if ($globalDBdriver == 'mysql') {
10574
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10575
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
10576
								GROUP BY hour_name 
10577
								ORDER BY hour_name ASC";
10578
		} else {
10579
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10580
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset, 'YYYY-mm-dd') = :date
10581
								GROUP BY hour_name 
10582
								ORDER BY hour_name ASC";
10583
		}
10584
		
10585
		$sth = $this->db->prepare($query);
10586
		$sth->execute(array(':date' => $date, ':offset' => $offset));
10587
      
10588
		$hour_array = array();
10589
		$temp_array = array();
10590
        
10591
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10592
		{
10593
			$temp_array['hour_name'] = $row['hour_name'];
10594
			$temp_array['hour_count'] = $row['hour_count'];
10595
          
10596
			$hour_array[] = $temp_array;
10597
		}
10598
10599
		return $hour_array;
10600
	}
10601
	
10602
	
10603
	
10604
	/**
10605
	* Counts all hours by a ident/callsign
10606
	*
10607
	* @return Array the hour list
10608
	*
10609
	*/
10610
	public function countAllHoursByIdent($ident, $filters = array())
10611
	{
10612
		global $globalTimezone, $globalDBdriver;
10613
		$filter_query = $this->getFilter($filters,true,true);
10614
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
10615
		if ($globalTimezone != '') {
10616
			date_default_timezone_set($globalTimezone);
10617
			$datetime = new DateTime();
10618
			$offset = $datetime->format('P');
10619
		} else $offset = '+00:00';
10620
10621
		if ($globalDBdriver == 'mysql') {
10622
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10623
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
10624
								GROUP BY hour_name 
10625
								ORDER BY hour_name ASC";
10626
		} else {
10627
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10628
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
10629
								GROUP BY hour_name 
10630
								ORDER BY hour_name ASC";
10631
		}
10632
      
10633
		
10634
		$sth = $this->db->prepare($query);
10635
		$sth->execute(array(':ident' => $ident,':offset' => $offset));
10636
      
10637
		$hour_array = array();
10638
		$temp_array = array();
10639
        
10640
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10641
		{
10642
			$temp_array['hour_name'] = $row['hour_name'];
10643
			$temp_array['hour_count'] = $row['hour_count'];
10644
          
10645
			$hour_array[] = $temp_array;
10646
		}
10647
10648
		return $hour_array;
10649
	}
10650
	
10651
	/**
10652
	* Counts all hours by a owner
10653
	*
10654
	* @return Array the hour list
10655
	*
10656
	*/
10657
	public function countAllHoursByOwner($owner, $filters = array())
10658
	{
10659
		global $globalTimezone, $globalDBdriver;
10660
		$filter_query = $this->getFilter($filters,true,true);
10661
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
10662
		if ($globalTimezone != '') {
10663
			date_default_timezone_set($globalTimezone);
10664
			$datetime = new DateTime();
10665
			$offset = $datetime->format('P');
10666
		} else $offset = '+00:00';
10667
10668
		if ($globalDBdriver == 'mysql') {
10669
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10670
								FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
10671
								GROUP BY hour_name 
10672
								ORDER BY hour_name ASC";
10673
		} else {
10674
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10675
								FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
10676
								GROUP BY hour_name 
10677
								ORDER BY hour_name ASC";
10678
		}
10679
      
10680
		
10681
		$sth = $this->db->prepare($query);
10682
		$sth->execute(array(':owner' => $owner,':offset' => $offset));
10683
      
10684
		$hour_array = array();
10685
		$temp_array = array();
10686
        
10687
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10688
		{
10689
			$temp_array['hour_name'] = $row['hour_name'];
10690
			$temp_array['hour_count'] = $row['hour_count'];
10691
          
10692
			$hour_array[] = $temp_array;
10693
		}
10694
10695
		return $hour_array;
10696
	}
10697
	
10698
	/**
10699
	* Counts all hours by a pilot
10700
	*
10701
	* @return Array the hour list
10702
	*
10703
	*/
10704
	public function countAllHoursByPilot($pilot, $filters = array())
10705
	{
10706
		global $globalTimezone, $globalDBdriver;
10707
		$filter_query = $this->getFilter($filters,true,true);
10708
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
10709
		if ($globalTimezone != '') {
10710
			date_default_timezone_set($globalTimezone);
10711
			$datetime = new DateTime();
10712
			$offset = $datetime->format('P');
10713
		} else $offset = '+00:00';
10714
10715
		if ($globalDBdriver == 'mysql') {
10716
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10717
								FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
10718
								GROUP BY hour_name 
10719
								ORDER BY hour_name ASC";
10720
		} else {
10721
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10722
								FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
10723
								GROUP BY hour_name 
10724
								ORDER BY hour_name ASC";
10725
		}
10726
      
10727
		
10728
		$sth = $this->db->prepare($query);
10729
		$sth->execute(array(':pilot' => $pilot,':offset' => $offset));
10730
      
10731
		$hour_array = array();
10732
		$temp_array = array();
10733
        
10734
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10735
		{
10736
			$temp_array['hour_name'] = $row['hour_name'];
10737
			$temp_array['hour_count'] = $row['hour_count'];
10738
          
10739
			$hour_array[] = $temp_array;
10740
		}
10741
10742
		return $hour_array;
10743
	}
10744
	
10745
	
10746
	
10747
	/**
10748
	* Counts all hours by route
10749
	*
10750
	* @return Array the hour list
10751
	*
10752
	*/
10753
	public function countAllHoursByRoute($departure_airport_icao, $arrival_airport_icao, $filters =array())
10754
	{
10755
		global $globalTimezone, $globalDBdriver;
10756
		$filter_query = $this->getFilter($filters,true,true);
10757
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
10758
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
10759
		if ($globalTimezone != '') {
10760
			date_default_timezone_set($globalTimezone);
10761
			$datetime = new DateTime();
10762
			$offset = $datetime->format('P');
10763
		} else $offset = '+00:00';
10764
10765
		if ($globalDBdriver == 'mysql') {
10766
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10767
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
10768
								GROUP BY hour_name 
10769
								ORDER BY hour_name ASC";
10770
		} else {
10771
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10772
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
10773
								GROUP BY hour_name 
10774
								ORDER BY hour_name ASC";
10775
		}
10776
		
10777
		$sth = $this->db->prepare($query);
10778
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao,':offset' => $offset));
10779
      
10780
		$hour_array = array();
10781
		$temp_array = array();
10782
        
10783
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10784
		{
10785
			$temp_array['hour_name'] = $row['hour_name'];
10786
			$temp_array['hour_count'] = $row['hour_count'];
10787
          
10788
			$hour_array[] = $temp_array;
10789
		}
10790
10791
		return $hour_array;
10792
	}
10793
	
10794
	
10795
	/**
10796
	* Counts all hours by country
10797
	*
10798
	* @return Array the hour list
10799
	*
10800
	*/
10801
	public function countAllHoursByCountry($country, $filters = array())
10802
	{
10803
		global $globalTimezone, $globalDBdriver;
10804
		$filter_query = $this->getFilter($filters,true,true);
10805
		$country = filter_var($country,FILTER_SANITIZE_STRING);
10806
		if ($globalTimezone != '') {
10807
			date_default_timezone_set($globalTimezone);
10808
			$datetime = new DateTime();
10809
			$offset = $datetime->format('P');
10810
		} else $offset = '+00:00';
10811
10812
		if ($globalDBdriver == 'mysql') {
10813
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10814
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
10815
								GROUP BY hour_name 
10816
								ORDER BY hour_name ASC";
10817
		} else {
10818
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10819
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
10820
								GROUP BY hour_name 
10821
								ORDER BY hour_name ASC";
10822
		}
10823
		
10824
		$sth = $this->db->prepare($query);
10825
		$sth->execute(array(':country' => $country,':offset' => $offset));
10826
      
10827
		$hour_array = array();
10828
		$temp_array = array();
10829
        
10830
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10831
		{
10832
			$temp_array['hour_name'] = $row['hour_name'];
10833
			$temp_array['hour_count'] = $row['hour_count'];
10834
          
10835
			$hour_array[] = $temp_array;
10836
		}
10837
10838
		return $hour_array;
10839
	}
10840
10841
10842
10843
10844
	/**
10845
	* Counts all aircraft that have flown over
10846
	*
10847
	* @return Integer the number of aircrafts
10848
	*
10849
	*/
10850
	public function countOverallAircrafts($filters = array(),$year = '',$month = '')
10851
	{
10852
		global $globalDBdriver;
10853
		$filter_query = $this->getFilter($filters,true,true);
10854
		$query  = "SELECT COUNT(DISTINCT spotter_output.aircraft_icao) AS aircraft_count  
10855
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''";
10856
		$query_values = array();
10857
		if ($year != '') {
10858
			if ($globalDBdriver == 'mysql') {
10859
				$query .= " AND YEAR(spotter_output.date) = :year";
10860
				$query_values = array_merge($query_values,array(':year' => $year));
10861
			} else {
10862
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10863
				$query_values = array_merge($query_values,array(':year' => $year));
10864
			}
10865
		}
10866
		if ($month != '') {
10867
			if ($globalDBdriver == 'mysql') {
10868
				$query .= " AND MONTH(spotter_output.date) = :month";
10869
				$query_values = array_merge($query_values,array(':month' => $month));
10870
			} else {
10871
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10872
				$query_values = array_merge($query_values,array(':month' => $month));
10873
			}
10874
		}
10875
10876
		$sth = $this->db->prepare($query);
10877
		$sth->execute($query_values);
10878
		return $sth->fetchColumn();
10879
	}
10880
10881
	/**
10882
	* Counts all flight that really arrival
10883
	*
10884
	* @return Integer the number of aircrafts
10885
	*
10886
	*/
10887
	public function countOverallArrival($filters = array(),$year = '',$month = '')
10888
	{
10889
		global $globalDBdriver;
10890
		$filter_query = $this->getFilter($filters,true,true);
10891
		$query  = "SELECT COUNT(spotter_output.real_arrival_airport_icao) AS arrival_count  
10892
                    FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> ''";
10893
		$query_values = array();
10894
		if ($year != '') {
10895
			if ($globalDBdriver == 'mysql') {
10896
				$query .= " AND YEAR(spotter_output.date) = :year";
10897
				$query_values = array_merge($query_values,array(':year' => $year));
10898
			} else {
10899
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10900
				$query_values = array_merge($query_values,array(':year' => $year));
10901
			}
10902
		}
10903
		if ($month != '') {
10904
			if ($globalDBdriver == 'mysql') {
10905
				$query .= " AND MONTH(spotter_output.date) = :month";
10906
				$query_values = array_merge($query_values,array(':month' => $month));
10907
			} else {
10908
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10909
				$query_values = array_merge($query_values,array(':month' => $month));
10910
			}
10911
		}
10912
		
10913
		$sth = $this->db->prepare($query);
10914
		$sth->execute($query_values);
10915
		return $sth->fetchColumn();
10916
	}
10917
10918
	/**
10919
	* Counts all pilots that have flown over
10920
	*
10921
	* @return Integer the number of pilots
10922
	*
10923
	*/
10924
	public function countOverallPilots($filters = array(),$year = '',$month = '')
10925
	{
10926
		global $globalDBdriver;
10927
		$filter_query = $this->getFilter($filters,true,true);
10928
		$query  = "SELECT COUNT(DISTINCT spotter_output.pilot_id) AS pilot_count  
10929
                    FROM spotter_output".$filter_query." spotter_output.pilot_id <> ''";
10930
		$query_values = array();
10931
		if ($year != '') {
10932
			if ($globalDBdriver == 'mysql') {
10933
				$query .= " AND YEAR(spotter_output.date) = :year";
10934
				$query_values = array_merge($query_values,array(':year' => $year));
10935
			} else {
10936
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10937
				$query_values = array_merge($query_values,array(':year' => $year));
10938
			}
10939
		}
10940
		if ($month != '') {
10941
			if ($globalDBdriver == 'mysql') {
10942
				$query .= " AND MONTH(spotter_output.date) = :month";
10943
				$query_values = array_merge($query_values,array(':month' => $month));
10944
			} else {
10945
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10946
				$query_values = array_merge($query_values,array(':month' => $month));
10947
			}
10948
		}
10949
		$sth = $this->db->prepare($query);
10950
		$sth->execute($query_values);
10951
		return $sth->fetchColumn();
10952
	}
10953
10954
	/**
10955
	* Counts all owners that have flown over
10956
	*
10957
	* @return Integer the number of owners
10958
	*
10959
	*/
10960
	public function countOverallOwners($filters = array(),$year = '',$month = '')
10961
	{
10962
		global $globalDBdriver;
10963
		$filter_query = $this->getFilter($filters,true,true);
10964
		$query  = "SELECT COUNT(DISTINCT spotter_output.owner_name) AS owner_count  
10965
                    FROM spotter_output".$filter_query." spotter_output.owner_name <> ''";
10966
		$query_values = array();
10967
		if ($year != '') {
10968
			if ($globalDBdriver == 'mysql') {
10969
				$query .= " AND YEAR(spotter_output.date) = :year";
10970
				$query_values = array_merge($query_values,array(':year' => $year));
10971
			} else {
10972
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10973
				$query_values = array_merge($query_values,array(':year' => $year));
10974
			}
10975
		}
10976
		if ($month != '') {
10977
			if ($globalDBdriver == 'mysql') {
10978
				$query .= " AND MONTH(spotter_output.date) = :month";
10979
				$query_values = array_merge($query_values,array(':month' => $month));
10980
			} else {
10981
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10982
				$query_values = array_merge($query_values,array(':month' => $month));
10983
			}
10984
		}
10985
		$sth = $this->db->prepare($query);
10986
		$sth->execute($query_values);
10987
		return $sth->fetchColumn();
10988
	}
10989
	
10990
	
10991
	/**
10992
	* Counts all flights that have flown over
10993
	*
10994
	* @return Integer the number of flights
10995
	*
10996
	*/
10997
	public function countOverallFlights($filters = array(),$year = '',$month = '')
10998
	{
10999
		global $globalDBdriver;
11000
		$queryi  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count FROM spotter_output";
11001
		$query_values = array();
11002
		$query = '';
11003
		if ($year != '') {
11004
			if ($globalDBdriver == 'mysql') {
11005
				$query .= " AND YEAR(spotter_output.date) = :year";
11006
				$query_values = array_merge($query_values,array(':year' => $year));
11007
			} else {
11008
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
11009
				$query_values = array_merge($query_values,array(':year' => $year));
11010
			}
11011
		}
11012
		if ($month != '') {
11013
			if ($globalDBdriver == 'mysql') {
11014
				$query .= " AND MONTH(spotter_output.date) = :month";
11015
				$query_values = array_merge($query_values,array(':month' => $month));
11016
			} else {
11017
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
11018
				$query_values = array_merge($query_values,array(':month' => $month));
11019
			}
11020
		}
11021
		if (empty($query_values)) $queryi .= $this->getFilter($filters);
11022
		else $queryi .= $this->getFilter($filters,true,true).substr($query,4);
11023
		
11024
		$sth = $this->db->prepare($queryi);
11025
		$sth->execute($query_values);
11026
		return $sth->fetchColumn();
11027
	}
11028
	
11029
	/**
11030
	* Counts all military flights that have flown over
11031
	*
11032
	* @return Integer the number of flights
11033
	*
11034
	*/
11035
	public function countOverallMilitaryFlights($filters = array(),$year = '',$month = '')
11036
	{
11037
		global $globalDBdriver;
11038
		$filter_query = $this->getFilter($filters,true,true);
11039
		$query  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count  
11040
                    FROM airlines,spotter_output".$filter_query." spotter_output.airline_icao = airlines.icao AND airlines.type = 'military'";
11041
		$query_values = array();
11042
		if ($year != '') {
11043
			if ($globalDBdriver == 'mysql') {
11044
				$query .= " AND YEAR(spotter_output.date) = :year";
11045
				$query_values = array_merge($query_values,array(':year' => $year));
11046
			} else {
11047
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
11048
				$query_values = array_merge($query_values,array(':year' => $year));
11049
			}
11050
		}
11051
		if ($month != '') {
11052
			if ($globalDBdriver == 'mysql') {
11053
				$query .= " AND MONTH(spotter_output.date) = :month";
11054
				$query_values = array_merge($query_values,array(':month' => $month));
11055
			} else {
11056
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
11057
				$query_values = array_merge($query_values,array(':month' => $month));
11058
			}
11059
		}
11060
      
11061
		$sth = $this->db->prepare($query);
11062
		$sth->execute($query_values);
11063
		return $sth->fetchColumn();
11064
	}
11065
	
11066
	
11067
	
11068
	/**
11069
	* Counts all airlines that have flown over
11070
	*
11071
	* @return Integer the number of airlines
11072
	*
11073
	*/
11074
	public function countOverallAirlines($filters = array(),$year = '',$month = '')
11075
	{
11076
		global $globalDBdriver;
11077
		$queryi  = "SELECT COUNT(DISTINCT spotter_output.airline_name) AS airline_count 
11078
							FROM spotter_output";
11079
      
11080
		$query_values = array();
11081
		$query = '';
11082
		if ($year != '') {
11083
			if ($globalDBdriver == 'mysql') {
11084
				$query .= " AND YEAR(spotter_output.date) = :year";
11085
				$query_values = array_merge($query_values,array(':year' => $year));
11086
			} else {
11087
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
11088
				$query_values = array_merge($query_values,array(':year' => $year));
11089
			}
11090
		}
11091
		if ($month != '') {
11092
			if ($globalDBdriver == 'mysql') {
11093
				$query .= " AND MONTH(spotter_output.date) = :month";
11094
				$query_values = array_merge($query_values,array(':month' => $month));
11095
			} else {
11096
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
11097
				$query_values = array_merge($query_values,array(':month' => $month));
11098
			}
11099
		}
11100
                if ($query == '') $queryi .= $this->getFilter($filters);
11101
                else $queryi .= $this->getFilter($filters,true,true).substr($query,4);
11102
11103
11104
		$sth = $this->db->prepare($queryi);
11105
		$sth->execute($query_values);
11106
		return $sth->fetchColumn();
11107
	}
11108
11109
  
11110
	/**
11111
	* Counts all hours of today
11112
	*
11113
	* @return Array the hour list
11114
	*
11115
	*/
11116
	public function countAllHoursFromToday($filters = array())
11117
	{
11118
		global $globalTimezone, $globalDBdriver;
11119
		$filter_query = $this->getFilter($filters,true,true);
11120
		if ($globalTimezone != '') {
11121
			date_default_timezone_set($globalTimezone);
11122
			$datetime = new DateTime();
11123
			$offset = $datetime->format('P');
11124
		} else $offset = '+00:00';
11125
11126
		if ($globalDBdriver == 'mysql') {
11127
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
11128
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = CURDATE()
11129
								GROUP BY hour_name 
11130
								ORDER BY hour_name ASC";
11131
		} else {
11132
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
11133
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = CAST(NOW() AS date)
11134
								GROUP BY hour_name 
11135
								ORDER BY hour_name ASC";
11136
		}
11137
		
11138
		$sth = $this->db->prepare($query);
11139
		$sth->execute(array(':offset' => $offset));
11140
      
11141
		$hour_array = array();
11142
		$temp_array = array();
11143
        
11144
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11145
		{
11146
			$temp_array['hour_name'] = $row['hour_name'];
11147
			$temp_array['hour_count'] = $row['hour_count'];
11148
			$hour_array[] = $temp_array;
11149
		}
11150
11151
		return $hour_array;
11152
	}
11153
    
11154
	/**
11155
	* Gets all the spotter information based on calculated upcoming flights
11156
	*
11157
	* @return Array the spotter information
11158
	*
11159
	*/
11160
	public function getUpcomingFlights($limit = '', $sort = '', $filters = array())
11161
	{
11162
		global $global_query, $globalDBdriver, $globalTimezone;
11163
		$filter_query = $this->getFilter($filters,true,true);
11164
		date_default_timezone_set('UTC');
11165
		$limit_query = '';
11166
		if ($limit != "")
11167
		{
11168
			$limit_array = explode(",", $limit);
11169
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
11170
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
11171
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
11172
			{
11173
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
11174
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
11175
			}
11176
		}
11177
		$currentHour = date("G");
11178
		$next3Hours = date("G", strtotime("+3 hour"));
11179
		//if the next 3 hours is already equal to/past midnight, we limit it to stay there, otherwise the query will fail
11180
		if ($currentHour >= 21 && $next3Hours >= 00)
11181
		{
11182
			$next3Hours = 24;
11183
		}
11184
		$currentDayofWeek = date("l");
11185
		if ($globalDBdriver == 'mysql') {
11186
			if ($sort != "")
11187
			{
11188
				$search_orderby_array = $this->getOrderBy();
11189
				$orderby_query = $search_orderby_array[$sort]['sql'];
11190
			} else {
11191
				$orderby_query = " ORDER BY HOUR(spotter_output.date) ASC";
11192
			}
11193
/*
11194
			$query = "SELECT spotter_output.*, count(spotter_output.ident) as ident_count
11195
			    FROM spotter_output
11196
			    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'
11197
			    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";
11198
*/
11199
/*			$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
11200
			    FROM spotter_output
11201
			    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'
11202
			    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";
11203
*/
11204
			$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 
11205
			    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'
11206
			    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
11207
			    HAVING count(spotter_output.ident) > 5$orderby_query";
11208
11209
			$spotter_array = $this->getDataFromDB($query.$limit_query);
11210
		} else {
11211
			if ($sort != "")
11212
			{
11213
				$search_orderby_array = $this->getOrderBy();
11214
				$orderby_query = $search_orderby_array[$sort]['sql'];
11215
			} else {
11216
				$orderby_query = " ORDER BY to_char(spotter_output.date,'HH') ASC";
11217
			}
11218
			$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') 
11219
			    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 <> '' 
11220
			    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')
11221
			    HAVING count(spotter_output.ident) > 5$orderby_query";
11222
			//echo $query;
11223
			$spotter_array = $this->getDataFromDB($query.$limit_query,array(':timezone' => $globalTimezone));
11224
			/*
11225
			$sth = $this->db->prepare($query);
11226
			$sth->execute(array(':timezone' => $globalTimezone));
11227
			return $sth->fetchAll(PDO::FETCH_ASSOC);
11228
			*/
11229
		}
11230
		return $spotter_array;
11231
	}
11232
    
11233
    
11234
     /**
11235
	* Gets the Barrie Spotter ID based on the FlightAware ID
11236
	*
11237
	* @return Integer the Barrie Spotter ID
11238
q	*
11239
	*/
11240
	public function getSpotterIDBasedOnFlightAwareID($flightaware_id)
11241
	{
11242
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
11243
11244
		$query  = "SELECT spotter_output.spotter_id
11245
								FROM spotter_output 
11246
								WHERE spotter_output.flightaware_id = '".$flightaware_id."'";
11247
        
11248
		
11249
		$sth = $this->db->prepare($query);
11250
		$sth->execute();
11251
11252
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11253
		{
11254
			return $row['spotter_id'];
11255
		}
11256
	}
11257
  
11258
 
11259
	/**
11260
	* Parses a date string
11261
	*
11262
	* @param String $dateString the date string
11263
	* @param String $timezone the timezone of a user
11264
	* @return Array the time information
11265
	*
11266
	*/
11267
	public function parseDateString($dateString, $timezone = '')
11268
	{
11269
		$time_array = array();
11270
	
11271
		if ($timezone != "")
11272
		{
11273
			date_default_timezone_set($timezone);
11274
		}
11275
		
11276
		$current_date = date("Y-m-d H:i:s");
11277
		$date = date("Y-m-d H:i:s",strtotime($dateString." UTC"));
11278
		
11279
		$diff = abs(strtotime($current_date) - strtotime($date));
11280
11281
		$time_array['years'] = floor($diff / (365*60*60*24)); 
11282
		$years = $time_array['years'];
11283
		
11284
		$time_array['months'] = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
11285
		$months = $time_array['months'];
11286
		
11287
		$time_array['days'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
11288
		$days = $time_array['days'];
11289
		$time_array['hours'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24)/ (60*60));
11290
		$hours = $time_array['hours'];
11291
		$time_array['minutes'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60)/ 60);
11292
		$minutes = $time_array['minutes'];
11293
		$time_array['seconds'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60 - $minutes*60));  
11294
		
11295
		return $time_array;	
11296
	}	
11297
	
11298
	
11299
	
11300
	
11301
	/**
11302
	* Parses the direction degrees to working
11303
	*
11304
	* @param Float $direction the direction in degrees
11305
	* @return Array the direction information
11306
	*
11307
	*/
11308
	public function parseDirection($direction = 0)
11309
	{
11310
		if ($direction == '') $direction = 0;
11311
		$direction_array = array();
11312
		$temp_array = array();
11313
11314
		if ($direction == 360 || ($direction >= 0 && $direction < 22.5))
11315
		{
11316
			$temp_array['direction_degree'] = $direction;
11317
			$temp_array['direction_shortname'] = "N";
11318
			$temp_array['direction_fullname'] = "North";
11319
		} elseif ($direction >= 22.5 && $direction < 45){
11320
			$temp_array['direction_degree'] = $direction;
11321
			$temp_array['direction_shortname'] = "NNE";
11322
			$temp_array['direction_fullname'] = "North-Northeast";
11323
		} elseif ($direction >= 45 && $direction < 67.5){
11324
			$temp_array['direction_degree'] = $direction;
11325
			$temp_array['direction_shortname'] = "NE";
11326
			$temp_array['direction_fullname'] = "Northeast";
11327
		} elseif ($direction >= 67.5 && $direction < 90){
11328
			$temp_array['direction_degree'] = $direction;
11329
			$temp_array['direction_shortname'] = "ENE";
11330
			$temp_array['direction_fullname'] = "East-Northeast";
11331
		} elseif ($direction >= 90 && $direction < 112.5){
11332
			$temp_array['direction_degree'] = $direction;
11333
			$temp_array['direction_shortname'] = "E";
11334
			$temp_array['direction_fullname'] = "East";
11335
		} elseif ($direction >= 112.5 && $direction < 135){
11336
			$temp_array['direction_degree'] = $direction;
11337
			$temp_array['direction_shortname'] = "ESE";
11338
			$temp_array['direction_fullname'] = "East-Southeast";
11339
		} elseif ($direction >= 135 && $direction < 157.5){
11340
			$temp_array['direction_degree'] = $direction;
11341
			$temp_array['direction_shortname'] = "SE";
11342
			$temp_array['direction_fullname'] = "Southeast";
11343
		} elseif ($direction >= 157.5 && $direction < 180){
11344
			$temp_array['direction_degree'] = $direction;
11345
			$temp_array['direction_shortname'] = "SSE";
11346
			$temp_array['direction_fullname'] = "South-Southeast";
11347
		} elseif ($direction >= 180 && $direction < 202.5){
11348
			$temp_array['direction_degree'] = $direction;
11349
			$temp_array['direction_shortname'] = "S";
11350
			$temp_array['direction_fullname'] = "South";
11351
		} elseif ($direction >= 202.5 && $direction < 225){
11352
			$temp_array['direction_degree'] = $direction;
11353
			$temp_array['direction_shortname'] = "SSW";
11354
			$temp_array['direction_fullname'] = "South-Southwest";
11355
		} elseif ($direction >= 225 && $direction < 247.5){
11356
			$temp_array['direction_degree'] = $direction;
11357
			$temp_array['direction_shortname'] = "SW";
11358
			$temp_array['direction_fullname'] = "Southwest";
11359
		} elseif ($direction >= 247.5 && $direction < 270){
11360
			$temp_array['direction_degree'] = $direction;
11361
			$temp_array['direction_shortname'] = "WSW";
11362
			$temp_array['direction_fullname'] = "West-Southwest";
11363
		} elseif ($direction >= 270 && $direction < 292.5){
11364
			$temp_array['direction_degree'] = $direction;
11365
			$temp_array['direction_shortname'] = "W";
11366
			$temp_array['direction_fullname'] = "West";
11367
		} elseif ($direction >= 292.5 && $direction < 315){
11368
			$temp_array['direction_degree'] = $direction;
11369
			$temp_array['direction_shortname'] = "WNW";
11370
			$temp_array['direction_fullname'] = "West-Northwest";
11371
		} elseif ($direction >= 315 && $direction < 337.5){
11372
			$temp_array['direction_degree'] = $direction;
11373
			$temp_array['direction_shortname'] = "NW";
11374
			$temp_array['direction_fullname'] = "Northwest";
11375
		} elseif ($direction >= 337.5 && $direction < 360){
11376
			$temp_array['direction_degree'] = $direction;
11377
			$temp_array['direction_shortname'] = "NNW";
11378
			$temp_array['direction_fullname'] = "North-Northwest";
11379
		}
11380
		$direction_array[] = $temp_array;
11381
		return $direction_array;
11382
	}
11383
	
11384
	
11385
	/**
11386
	* Gets the aircraft registration
11387
	*
11388
	* @param String $flightaware_id the flight aware id
11389
	* @return String the aircraft registration
11390
	*
11391
	*/
11392
	
11393
	public function getAircraftRegistration($flightaware_id)
11394
	{
11395
		global $globalFlightAwareUsername, $globalFlightAwarePassword;
11396
        
11397
		$options = array(
11398
			'trace' => true,
11399
			'exceptions' => 0,
11400
			'login' => $globalFlightAwareUsername,
11401
			'password' => $globalFlightAwarePassword,
11402
		);
11403
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
11404
		
11405
		$params = array('faFlightID' => $flightaware_id);
11406
		$result = $client->AirlineFlightInfo($params);
11407
		
11408
		if (isset($result->AirlineFlightInfoResult))
11409
		{
11410
			$registration = $result->AirlineFlightInfoResult->tailnumber;
11411
		} else return '';
11412
		
11413
		$registration = $this->convertAircraftRegistration($registration);
11414
		
11415
		return $registration;
11416
	}
11417
11418
11419
	/**
11420
	* Gets the aircraft registration from ModeS
11421
	*
11422
	* @param String $aircraft_modes the flight ModeS in hex
11423
	* @return String the aircraft registration
11424
	*
11425
	*/
11426
	public function getAircraftRegistrationBymodeS($aircraft_modes)
11427
	{
11428
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
11429
	
11430
		$query  = "SELECT aircraft_modes.Registration FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes ORDER BY FirstCreated DESC LIMIT 1";
11431
		
11432
		$sth = $this->db->prepare($query);
11433
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
11434
    
11435
		$row = $sth->fetch(PDO::FETCH_ASSOC);
11436
		$sth->closeCursor();
11437
		if (count($row) > 0) {
11438
		    //return $row['Registration'];
11439
		    return $row['registration'];
11440
		} else return '';
11441
	
11442
	}
11443
11444
	/**
11445
	* Gets the aircraft type from ModeS
11446
	*
11447
	* @param String $aircraft_modes the flight ModeS in hex
11448
	* @return String the aircraft type
11449
	*
11450
	*/
11451
	public function getAircraftTypeBymodeS($aircraft_modes)
11452
	{
11453
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
11454
	
11455
		$query  = "SELECT aircraft_modes.type_flight FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes ORDER BY FirstCreated DESC LIMIT 1";
11456
		
11457
		$sth = $this->db->prepare($query);
11458
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
11459
    
11460
		$row = $sth->fetch(PDO::FETCH_ASSOC);
11461
		$sth->closeCursor();
11462
		if (count($row) > 0) {
11463
		    if ($row['type_flight'] == null) return '';
11464
		    else return $row['type_flight'];
11465
		} else return '';
11466
	
11467
	}
11468
11469
	/**
11470
	* Gets Country from latitude/longitude
11471
	*
11472
	* @param Float $latitude latitute of the flight
11473
	* @param Float $longitude longitute of the flight
11474
	* @return String the countrie
11475
	*/
11476
	public function getCountryFromLatitudeLongitude($latitude,$longitude)
11477
	{
11478
		global $globalDBdriver, $globalDebug;
11479
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
11480
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
11481
	
11482
		$Connection = new Connection($this->db);
11483
		if (!$Connection->tableExists('countries')) return '';
11484
	
11485
		try {
11486
			/*
11487
			if ($globalDBdriver == 'mysql') {
11488
				//$query  = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(:latitude :longitude)'), ogc_geom) LIMIT 1";
11489
				$query = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(".$longitude.' '.$latitude.")'), ogc_geom) LIMIT 1";
11490
			}
11491
			*/
11492
			// This query seems to work both for MariaDB and PostgreSQL
11493
			$query = "SELECT name,iso2,iso3 FROM countries WHERE ST_Within(ST_GeomFromText('POINT(".$longitude." ".$latitude.")',4326), ogc_geom) LIMIT 1";
11494
		
11495
			$sth = $this->db->prepare($query);
11496
			//$sth->execute(array(':latitude' => $latitude,':longitude' => $longitude));
11497
			$sth->execute();
11498
    
11499
			$row = $sth->fetch(PDO::FETCH_ASSOC);
11500
			$sth->closeCursor();
11501
			if (count($row) > 0) {
11502
				return $row;
11503
			} else return '';
11504
		} catch (PDOException $e) {
11505
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
11506
			return '';
11507
		}
11508
	
11509
	}
11510
11511
	/**
11512
	* Gets Country from iso2
11513
	*
11514
	* @param String $iso2 ISO2 country code
11515
	* @return String the countrie
11516
	*/
11517
	public function getCountryFromISO2($iso2)
11518
	{
11519
		global $globalDBdriver, $globalDebug;
11520
		$iso2 = filter_var($iso2,FILTER_SANITIZE_STRING);
11521
	
11522
		$Connection = new Connection($this->db);
11523
		if (!$Connection->tableExists('countries')) return '';
11524
	
11525
		try {
11526
			$query = "SELECT name,iso2,iso3 FROM countries WHERE iso2 = :iso2 LIMIT 1";
11527
		
11528
			$sth = $this->db->prepare($query);
11529
			$sth->execute(array(':iso2' => $iso2));
11530
    
11531
			$row = $sth->fetch(PDO::FETCH_ASSOC);
11532
			$sth->closeCursor();
11533
			if (count($row) > 0) {
11534
				return $row;
11535
			} else return '';
11536
		} catch (PDOException $e) {
11537
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
11538
			return '';
11539
		}
11540
	
11541
	}
11542
11543
	/**
11544
	* converts the registration code using the country prefix
11545
	*
11546
	* @param String $registration the aircraft registration
11547
	* @return String the aircraft registration
11548
	*
11549
	*/
11550
	public function convertAircraftRegistration($registration)
11551
	{
11552
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11553
		$registration_prefix = '';
11554
		$registration_1 = substr($registration, 0, 1);
11555
		$registration_2 = substr($registration, 0, 2);
11556
11557
		//first get the prefix based on two characters
11558
		$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_2";
11559
      
11560
		
11561
		$sth = $this->db->prepare($query);
11562
		$sth->execute(array(':registration_2' => $registration_2));
11563
        
11564
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11565
		{
11566
			$registration_prefix = $row['registration_prefix'];
11567
		}
11568
11569
		//if we didn't find a two chracter prefix lets just search the one with one character
11570
		if ($registration_prefix == '')
11571
		{
11572
			$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_1";
11573
			$sth = $this->db->prepare($query);
11574
			$sth->execute(array(':registration_1' => $registration_1));
11575
	        
11576
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11577
			{
11578
				$registration_prefix = $row['registration_prefix'];
11579
			}
11580
		}
11581
11582
		//determine which characters are being used and convert the registration code appropiately
11583
		if (strlen($registration_prefix) == 1)
11584
		{
11585
			if (0 === strpos($registration, 'N')) {
11586
				$registration = preg_replace("/^(.{1})/", "$1", $registration);
11587
			} else {
11588
				$registration = preg_replace("/^(.{1})/", "$1-", $registration);
11589
			}
11590
		} else if(strlen($registration_prefix) == 2){
11591
			if (0 === strpos($registration, 'N')) {
11592
				$registration = preg_replace("/^(.{2})/", "$1", $registration);
11593
			} else {
11594
				$registration = preg_replace("/^(.{2})/", "$1-", $registration);
11595
			}
11596
		}
11597
		return $registration;
11598
	}
11599
11600
	/**
11601
	* Country from the registration code
11602
	*
11603
	* @param String $registration the aircraft registration
11604
	* @return String the country
11605
	*
11606
	*/
11607
	public function countryFromAircraftRegistration($registration)
11608
	{
11609
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11610
		
11611
		$registration_prefix = '';
11612
		$registration_test = explode('-',$registration);
11613
		$country = '';
11614
		if ($registration_test[0] != $registration) {
11615
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11616
	      
11617
			$sth = $this->db->prepare($query);
11618
			$sth->execute(array(':registration_1' => $registration_test[0]));
11619
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11620
			{
11621
				//$registration_prefix = $row['registration_prefix'];
11622
				$country = $row['country'];
11623
			}
11624
		} else {
11625
    			$registration_1 = substr($registration, 0, 1);
11626
		        $registration_2 = substr($registration, 0, 2);
11627
11628
			$country = '';
11629
			//first get the prefix based on two characters
11630
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
11631
      
11632
			
11633
			$sth = $this->db->prepare($query);
11634
			$sth->execute(array(':registration_2' => $registration_2));
11635
        
11636
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11637
			{
11638
				$registration_prefix = $row['registration_prefix'];
11639
				$country = $row['country'];
11640
			}
11641
11642
			//if we didn't find a two chracter prefix lets just search the one with one character
11643
			if ($registration_prefix == "")
11644
			{
11645
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11646
	      
11647
				$sth = $this->db->prepare($query);
11648
				$sth->execute(array(':registration_1' => $registration_1));
11649
	        
11650
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
11651
				{
11652
					//$registration_prefix = $row['registration_prefix'];
11653
					$country = $row['country'];
11654
				}
11655
			}
11656
		}
11657
    
11658
		return $country;
11659
	}
11660
11661
	/**
11662
	* Registration prefix from the registration code
11663
	*
11664
	* @param String $registration the aircraft registration
11665
	* @return String the registration prefix
11666
	*
11667
	*/
11668
	public function registrationPrefixFromAircraftRegistration($registration)
11669
	{
11670
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11671
		
11672
		$registration_prefix = '';
11673
		$registration_test = explode('-',$registration);
11674
		//$country = '';
11675
		if ($registration_test[0] != $registration) {
11676
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11677
	      
11678
			$sth = $this->db->prepare($query);
11679
			$sth->execute(array(':registration_1' => $registration_test[0]));
11680
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11681
			{
11682
				$registration_prefix = $row['registration_prefix'];
11683
				//$country = $row['country'];
11684
			}
11685
		} else {
11686
    			$registration_1 = substr($registration, 0, 1);
11687
		        $registration_2 = substr($registration, 0, 2);
11688
11689
			//first get the prefix based on two characters
11690
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
11691
      
11692
			
11693
			$sth = $this->db->prepare($query);
11694
			$sth->execute(array(':registration_2' => $registration_2));
11695
        
11696
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11697
			{
11698
				$registration_prefix = $row['registration_prefix'];
11699
				//$country = $row['country'];
11700
			}
11701
11702
			//if we didn't find a two chracter prefix lets just search the one with one character
11703
			if ($registration_prefix == "")
11704
			{
11705
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11706
	      
11707
				$sth = $this->db->prepare($query);
11708
				$sth->execute(array(':registration_1' => $registration_1));
11709
	        
11710
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
11711
				{
11712
					$registration_prefix = $row['registration_prefix'];
11713
					//$country = $row['country'];
11714
				}
11715
			}
11716
		}
11717
    
11718
		return $registration_prefix;
11719
	}
11720
11721
11722
	/**
11723
	* Country from the registration code
11724
	*
11725
	* @param String $registration the aircraft registration
11726
	* @return String the country
11727
	*
11728
	*/
11729
	public function countryFromAircraftRegistrationCode($registration)
11730
	{
11731
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11732
		
11733
		$country = '';
11734
		$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration LIMIT 1";
11735
		$sth = $this->db->prepare($query);
11736
		$sth->execute(array(':registration' => $registration));
11737
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11738
		{
11739
			$country = $row['country'];
11740
		}
11741
		return $country;
11742
	}
11743
	
11744
	/**
11745
	* Set a new highlight value for a flight
11746
	*
11747
	* @param String $flightaware_id flightaware_id from spotter_output table
11748
	* @param String $highlight New highlight value
11749
	*/
11750
	public function setHighlightFlight($flightaware_id,$highlight) {
11751
		
11752
		$query  = "UPDATE spotter_output SET highlight = :highlight WHERE flightaware_id = :flightaware_id";
11753
		$sth = $this->db->prepare($query);
11754
		$sth->execute(array(':flightaware_id' => $flightaware_id, ':highlight' => $highlight));
11755
	}
11756
11757
	/**
11758
	* Set a new highlight value for a flight by Registration
11759
	*
11760
	* @param String $registration Registration of the aircraft
11761
	* @param String $date Date of spotted aircraft
11762
	* @param String $highlight New highlight value
11763
	*/
11764
	public function setHighlightFlightByRegistration($registration,$highlight, $date = '') {
11765
		if ($date == '') {
11766
			$query  = "UPDATE spotter_output SET highlight = :highlight WHERE spotter_id IN (SELECT MAX(spotter_id) FROM spotter_output WHERE registration = :registration)";
11767
			$query_values = array(':registration' => $registration, ':highlight' => $highlight);
11768
		} else {
11769
			$query  = "UPDATE spotter_output SET highlight = :highlight WHERE registration = :registration AND date(date) = :date";
11770
			$query_values = array(':registration' => $registration, ':highlight' => $highlight,':date' => $date);
11771
		}
11772
		$sth = $this->db->prepare($query);
11773
		$sth->execute($query_values);
11774
	}
11775
	
11776
	/**
11777
	* Gets the short url from bit.ly
11778
	*
11779
	* @param String $url the full url
11780
	* @return String the bit.ly url
11781
	*
11782
	*/
11783
	public function getBitlyURL($url)
11784
	{
11785
		global $globalBitlyAccessToken;
11786
		
11787
		if ($globalBitlyAccessToken == '') return $url;
11788
        
11789
		$google_url = 'https://api-ssl.bitly.com/v3/shorten?access_token='.$globalBitlyAccessToken.'&longUrl='.$url;
11790
		
11791
		$ch = curl_init();
11792
		curl_setopt($ch, CURLOPT_HEADER, 0);
11793
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
11794
		curl_setopt($ch, CURLOPT_URL, $google_url);
11795
		$bitly_data = curl_exec($ch);
11796
		curl_close($ch);
11797
		
11798
		$bitly_data = json_decode($bitly_data);
11799
		$bitly_url = '';
11800
		if ($bitly_data->status_txt = "OK"){
11801
			$bitly_url = $bitly_data->data->url;
11802
		}
11803
11804
		return $bitly_url;
11805
	}
11806
11807
11808
	public function getOrderBy()
11809
	{
11810
		$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"));
11811
		
11812
		return $orderby;
11813
		
11814
	}
11815
    
11816
/*
11817
	public function importFromFlightAware()
11818
	{
11819
		global $globalFlightAwareUsername, $globalFlightAwarePassword, $globalLatitudeMax, $globalLatitudeMin, $globalLongitudeMax, $globalLongitudeMin, $globalAirportIgnore;
11820
		$Spotter = new Spotter($this->db);
11821
		$SpotterLive = new SpotterLive($this->db);
11822
		$options = array(
11823
		            'trace' => true,
11824
		            'exceptions' => 0,
11825
		            'login' => $globalFlightAwareUsername,
11826
		            'password' => $globalFlightAwarePassword,
11827
		);
11828
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
11829
		$params = array('query' => '{range lat '.$globalLatitudeMin.' '.$globalLatitudeMax.'} {range lon '.$globalLongitudeMax.' '.$globalLongitudeMin.'} {true inAir}', 'howMany' => '15', 'offset' => '0');
11830
		$result = $client->SearchBirdseyeInFlight($params);
11831
		$dataFound = false;
11832
		$ignoreImport = false;
11833
		if (isset($result->SearchBirdseyeInFlightResult))
11834
		{
11835
			if (is_array($result->SearchBirdseyeInFlightResult->aircraft))
11836
			{
11837
				foreach($result->SearchBirdseyeInFlightResult->aircraft as $aircraft)
11838
				{
11839
					if (!strstr($aircraft->origin, 'L ') && !strstr($aircraft->destination, 'L '))
11840
					{
11841
						foreach($globalAirportIgnore as $airportIgnore)
11842
						{
11843
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
11844
							{
11845
								$ignoreImport = true; 
11846
							}
11847
						}
11848
						if ($ignoreImport == false)
11849
						{
11850
							$flightaware_id = $aircraft->faFlightID;
11851
							$ident = $aircraft->ident;
11852
							$aircraft_type = $aircraft->type;
11853
							$departure_airport = $aircraft->origin;
11854
							$arrival_airport = $aircraft->destination;
11855
							$latitude = $aircraft->latitude;
11856
							$longitude = $aircraft->longitude;
11857
							$waypoints = $aircraft->waypoints;
11858
							$altitude = $aircraft->altitude;
11859
							$heading = $aircraft->heading;
11860
							$groundspeed = $aircraft->groundspeed;
11861
							$dataFound = true;
11862
							//gets the callsign from the last hour
11863
							$last_hour_ident = $this->getIdentFromLastHour($ident);
11864
							//change the departure/arrival airport to NA if its not available
11865
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
11866
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
11867
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
11868
							if($last_hour_ident == "")
11869
							{
11870
								//adds the spotter data for the archive
11871
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11872
							}
11873
11874
							//adds the spotter LIVE data
11875
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11876
						}
11877
					}
11878
					$ignoreImport = false;
11879
				}
11880
			} else {
11881
				if (!strstr($result->SearchBirdseyeInFlightResult->aircraft->origin, 'L ') && !strstr($result->SearchBirdseyeInFlightResult->aircraft->destination, 'L '))
11882
				{
11883
					foreach($globalAirportIgnore as $airportIgnore)
11884
					{
11885
						foreach($globalAirportIgnore as $airportIgnore)
11886
						{
11887
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
11888
							{
11889
								$ignoreImport = true; 
11890
							}
11891
						}
11892
						if ($ignoreImport == false)
11893
						{
11894
							$flightaware_id = $result->SearchBirdseyeInFlightResult->aircraft->faFlightID;
11895
							$ident = $result->SearchBirdseyeInFlightResult->aircraft->ident;
11896
							$aircraft_type = $result->SearchBirdseyeInFlightResult->aircraft->type;
11897
							$departure_airport = $result->SearchBirdseyeInFlightResult->aircraft->origin;
11898
							$arrival_airport = $result->SearchBirdseyeInFlightResult->aircraft->destination;
11899
							$latitude = $result->SearchBirdseyeInFlightResult->aircraft->latitude;
11900
							$longitude = $result->SearchBirdseyeInFlightResult->aircraft->longitude;
11901
							$waypoints = $result->SearchBirdseyeInFlightResult->aircraft->waypoints;
11902
							$altitude = $result->SearchBirdseyeInFlightResult->aircraft->altitude;
11903
							$heading = $result->SearchBirdseyeInFlightResult->aircraft->heading;
11904
							$groundspeed = $result->SearchBirdseyeInFlightResult->aircraft->groundspeed;
11905
							$dataFound = true;
11906
							//gets the callsign from the last hour
11907
							$last_hour_ident = $this->getIdentFromLastHour($ident);
11908
							//change the departure/arrival airport to NA if its not available
11909
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
11910
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
11911
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
11912
							if($last_hour_ident == "")
11913
							{
11914
								//adds the spotter data for the archive
11915
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11916
							}
11917
							//adds the spotter LIVE data
11918
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11919
						}
11920
						$ignoreImport = false;
11921
					}
11922
				}
11923
			}
11924
		} 
11925
	}
11926
*/
11927
11928
	// Update flights data when new data in DB
11929
	public function updateFieldsFromOtherTables()
11930
	{
11931
		global $globalDebug, $globalDBdriver;
11932
		$Image = new Image($this->db);
11933
		
11934
11935
		// routes
11936
		if ($globalDebug) print "Routes...\n";
11937
		if ($globalDBdriver == 'mysql') {
11938
			$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)";
11939
		} else {
11940
			$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'";
11941
		}
11942
		$sth = $this->db->prepare($query);
11943
		$sth->execute();
11944
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11945
		{
11946
			$departure_airport_array = $this->getAllAirportInfo($row['fromairport_icao']);
11947
			$arrival_airport_array = $this->getAllAirportInfo($row['toairport_icao']);
11948
			if (count($departure_airport_array) > 0 && count($arrival_airport_array) > 0) {
11949
				$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";
11950
				$sthu = $this->db->prepare($update_query);
11951
				$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']));
11952
			}
11953
		}
11954
		
11955
		if ($globalDebug) print "Airlines...\n";
11956
		//airlines
11957
		if ($globalDBdriver == 'mysql') {
11958
			$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)";
11959
		} elseif ($globalDBdriver == 'pgsql') {
11960
			$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'";
11961
		}
11962
		$sth = $this->db->prepare($query);
11963
		$sth->execute();
11964
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11965
		{
11966
			if (is_numeric(substr($row['ident'], -1, 1)))
11967
			{
11968
				$fromsource = NULL;
11969
				if (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
11970
				elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
11971
				elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
11972
				elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
11973
				$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
11974
				if (isset($airline_array[0]['name'])) {
11975
					$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";
11976
					$sthu = $this->db->prepare($update_query);
11977
					$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']));
11978
				}
11979
			}
11980
		}
11981
11982
		if ($globalDebug) print "Remove Duplicate in aircraft_modes...\n";
11983
		//duplicate modes
11984
		$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";
11985
		$sth = $this->db->prepare($query);
11986
		$sth->execute();
11987
		
11988
		if ($globalDebug) print "Aircraft...\n";
11989
		//aircraft
11990
		if ($globalDBdriver == 'mysql') {
11991
			$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)";
11992
		} elseif ($globalDBdriver == 'pgsql') {
11993
			$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'";
11994
		}
11995
		$sth = $this->db->prepare($query);
11996
		$sth->execute();
11997
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11998
		{
11999
			if ($row['aircraft_icao'] != '') {
12000
				$aircraft_name = $this->getAllAircraftInfo($row['aircraft_icao']);
12001
				if ($row['registration'] != ""){
12002
					$image_array = $Image->getSpotterImage($row['registration']);
12003
					if (!isset($image_array[0]['registration'])) {
12004
						$Image->addSpotterImage($row['registration']);
12005
					}
12006
				}
12007
				if (count($aircraft_name) > 0) {
12008
					$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";
12009
					$sthu = $this->db->prepare($update_query);
12010
					$sthu->execute(array(':aircraft_name' => $aircraft_name[0]['type'], ':aircraft_manufacturer' => $aircraft_name[0]['manufacturer'], ':spotter_id' => $row['spotter_id']));
12011
				}
12012
			}
12013
		}
12014
	}	
12015
12016
	// Update arrival airports for data already in DB
12017
	public function updateArrivalAirports()
12018
	{
12019
		global $globalDebug, $globalDBdriver, $globalClosestMinDist;
12020
		$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";
12021
		$sth = $this->db->prepare($query);
12022
		$sth->execute();
12023
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
12024
		{
12025
			if ($row['last_latitude'] != '' && $row['last_longitude'] != '') {
12026
				$closestAirports = $this->closestAirports($row['last_latitude'],$row['last_longitude'],$globalClosestMinDist);
12027
				$airport_icao = '';
12028
				 if (isset($closestAirports[0])) {
12029
					if ($row['arrival_airport_icao'] == $closestAirports[0]['icao']) {
12030
						$airport_icao = $closestAirports[0]['icao'];
12031
						if ($globalDebug) echo "\o/ 1st ---++ Find arrival airport. airport_icao : ".$airport_icao."\n";
12032
					} elseif (count($closestAirports > 1) && $row['arrival_airport_icao'] != '' && $row['arrival_airport_icao'] != 'NA') {
12033
						foreach ($closestAirports as $airport) {
12034
							if ($row['arrival_airport_icao'] == $airport['icao']) {
12035
								$airport_icao = $airport['icao'];
12036
								if ($globalDebug) echo "\o/ try --++ Find arrival airport. airport_icao : ".$airport_icao."\n";
12037
								break;
12038
							}
12039
						}
12040
					} elseif ($row['last_altitude'] == 0 || ($row['last_altitude'] != '' && ($closestAirports[0]['altitude'] <= $row['last_altitude']*100+1000 && $row['last_altitude']*100 < $closestAirports[0]['altitude']+5000))) {
12041
						$airport_icao = $closestAirports[0]['icao'];
12042
						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";
12043
					} else {
12044
						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";
12045
					}
12046
				} else {
12047
					if ($globalDebug) echo "----- No Airport near last coord. Latitude : ".$row['last_latitude'].' - Longitude : '.$row['last_longitude'].' - MinDist : '.$globalClosestMinDist."\n";
12048
				}
12049
				if ($row['real_arrival_airport_icao'] != $airport_icao) {
12050
					if ($globalDebug) echo "Updating airport to ".$airport_icao."...\n";
12051
					$update_query="UPDATE spotter_output SET real_arrival_airport_icao = :airport_icao WHERE spotter_id = :spotter_id";
12052
					$sthu = $this->db->prepare($update_query);
12053
					$sthu->execute(array(':airport_icao' => $airport_icao,':spotter_id' => $row['spotter_id']));
12054
				}
12055
			}
12056
		}
12057
	}
12058
	
12059
	public function closestAirports($origLat,$origLon,$dist = 10) {
12060
		global $globalDBdriver;
12061
		$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
12062
/*
12063
		$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 
12064
                      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)) 
12065
                      having distance < $dist ORDER BY distance limit 100;";
12066
*/
12067
		if ($globalDBdriver == 'mysql') {
12068
			$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 
12069
	                      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)) 
12070
	                      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;";
12071
                } else {
12072
			$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 
12073
	                      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)) 
12074
	                      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;";
12075
    		}
12076
		$sth = $this->db->prepare($query);
12077
		$sth->execute();
12078
		return $sth->fetchAll(PDO::FETCH_ASSOC);
12079
	}
12080
}
12081
/*
12082
$Spotter = new Spotter();
12083
print_r($Spotter->closestAirports('-19.9813','-47.8286',10));
12084
*/
12085
/*
12086
$Spotter = new Spotter();
12087
$da = $Spotter->countAllDetectedArrivalAirports(true,0,'',true);
12088
$aa = $Spotter->countAllArrivalAirports(true,0,'',true);
12089
print_r($da);
12090
print_r($aa);
12091
print_r(array_merge($da,$aa));
12092
*/
12093
?>