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

Spotter::addSpotterData()   F

Complexity

Conditions 104
Paths > 20000

Size

Total Lines 306
Code Lines 194

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 104
eloc 194
nc 4294967295
nop 25
dl 0
loc 306
rs 2
c 0
b 0
f 0

How to fix   Long Method    Complexity    Many Parameters   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

Many Parameters

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

There are several approaches to avoid long parameter lists:

1
<?php
2
require_once(dirname(__FILE__).'/class.Scheduler.php');
3
require_once(dirname(__FILE__).'/class.ACARS.php');
4
require_once(dirname(__FILE__).'/class.Image.php');
5
$global_query = "SELECT spotter_output.* FROM spotter_output";
6
7
class Spotter{
8
	public $aircraft_correct_icaotype = array('CL64' => 'CL60',
9
					'F9LX' => 'F900',
10
					'K35T' => 'K35R',
11
					'F5EX' => 'FA50',
12
					'G102' => 'GLID',
13
					'LJ36' => 'LJ35',
14
					'G500' => 'EGRT',
15
					'A300' => 'A30B',
16
					'ROT' => 'B77W',
17
					'BPN' => 'B772',
18
					'0011' => 'B77W',
19
					'F9DX' => 'F900',
20
					'B757' => 'B752',
21
					'4/05' => 'A332',
22
					'F/A3' => 'A320',
23
					'F2EX' => 'F2TH',
24
					'EA55' => 'EA50',
25
					'B73B' => 'B737',
26
					'G450' => 'GLF4',
27
					'H25X' => 'H25B',
28
					'E175' => 'E75S',
29
					'B777' => 'B77W',
30
					'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
?>