Completed
Push — master ( 7b031c...3082e8 )
by Yannick
11:44
created

Spotter::addSpotterData()   F

Complexity

Conditions 103
Paths > 20000

Size

Total Lines 306
Code Lines 194

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 103
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;
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'])."')) so ON so.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'])."')) so ON so.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'])."')) so ON so.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'])."')) so ON so.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'])."')) so ON so.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'])."')) so ON so.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'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
111
			}
112
		if (isset($filter['source']) && !empty($filter['source'])) {
113
			$filter_query_where = " WHERE format_source IN ('".implode("','",$filter['source'])."')";
114
		}
115
		if (isset($filter['ident']) && !empty($filter['ident'])) {
116
			$filter_query_where = " WHERE ident = '".$filter['ident']."'";
117
		}
118
		if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
119
			if ($filter_query_where == '') {
120
				$filter_query_where = " WHERE format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
121
			} else {
122
				$filter_query_where .= " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
123
			}
124
		}
125
		if ($filter_query_where == '' && $where) $filter_query_where = ' WHERE';
126
		elseif ($filter_query_where != '' && $and) $filter_query_where .= ' AND';
127
		$filter_query = $filter_query_join.$filter_query_where;
128
		return $filter_query;
129
	}
130
131
	/**
132
	* Executes the SQL statements to get the spotter information
133
	*
134
	* @param String $query the SQL query
135
	* @param Array $params parameter of the query
136
	* @param String $limitQuery the limit query
137
	* @return Array the spotter information
138
	*
139
	*/
140
	public function getDataFromDB($query, $params = array(), $limitQuery = '',$schedules = false)
141
	{
142
		global $globalSquawkCountry, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalAirlinesSource, $globalVAM;
143
		$Image = new Image($this->db);
144
		$Schedule = new Schedule($this->db);
145
		$ACARS = new ACARS($this->db);
146
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
147
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
148
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
149
		if (!isset($globalVAM)) $globalVAM = FALSE;
150
		date_default_timezone_set('UTC');
151
		
152
		if (!is_string($query))
153
		{
154
			return false;
155
		}
156
		
157
		if ($limitQuery != "")
158
		{
159
			if (!is_string($limitQuery))
160
			{
161
				return false;
162
			}
163
		}
164
165
		
166
		try {
167
			$sth = $this->db->prepare($query.$limitQuery);
168
			$sth->execute($params);
169
		} catch (PDOException $e) {
170
			printf("Invalid query : %s\nWhole query: %s\n",$e->getMessage(), $query.$limitQuery);
171
			exit();
172
		}
173
		
174
	//	$num_rows = count($sth->fetchAll());
175
		$num_rows = 0;
176
177
		$spotter_array = array();
178
		
179
180
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
181
		{
182
			$num_rows++;
183
			$temp_array = array();
184
			if (isset($row['spotter_live_id'])) {
185
				//$temp_array['spotter_id'] = $row['spotter_live_id'];
186
				$temp_array['spotter_id'] = $this->getSpotterIDBasedOnFlightAwareID($row['flightaware_id']);
187
			} elseif (isset($row['spotter_archive_id'])) {
188
				$temp_array['spotter_id'] = $row['spotter_archive_id'];
189
			} elseif (isset($row['spotter_archive_output_id'])) {
190
				$temp_array['spotter_id'] = $row['spotter_archive_output_id'];
191
			} elseif (isset($row['spotter_id'])) {
192
				$temp_array['spotter_id'] = $row['spotter_id'];
193
			} else {
194
				$temp_array['spotter_id'] = '';
195
			}
196
			if (isset($row['flightaware_id'])) $temp_array['flightaware_id'] = $row['flightaware_id'];
197
			if (isset($row['modes'])) $temp_array['modes'] = $row['modes'];
198
			$temp_array['ident'] = $row['ident'];
199
			if (isset($row['registration']) && $row['registration'] != '') {
200
				$temp_array['registration'] = $row['registration'];
201
			} elseif (isset($temp_array['modes'])) {
202
				$temp_array['registration'] = $this->getAircraftRegistrationBymodeS($temp_array['modes']);
203
			} else $temp_array['registration'] = '';
204
			if (isset($row['aircraft_icao'])) $temp_array['aircraft_type'] = $row['aircraft_icao'];
205
			
206
			$temp_array['departure_airport'] = $row['departure_airport_icao'];
207
			$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
208
			if (isset($row['real_arrival_airport_icao']) && $row['real_arrival_airport_icao'] != NULL) $temp_array['real_arrival_airport'] = $row['real_arrival_airport_icao'];
209
			if (isset($row['latitude'])) $temp_array['latitude'] = $row['latitude'];
210
			if (isset($row['longitude'])) $temp_array['longitude'] = $row['longitude'];
211
			/*
212
			if (Connection->tableExists('countries')) {
213
				$country_info = $this->getCountryFromLatitudeLongitude($temp_array['latitude'],$temp_array['longitude']);
214
				if (is_array($country_info) && isset($country_info['name']) && isset($country_info['iso2'])) {
215
				    $temp_array['country'] = $country_info['name'];
216
				    $temp_array['country_iso2'] = $country_info['iso2'];
217
				}
218
			}
219
			*/
220
			if (isset($row['waypoints'])) $temp_array['waypoints'] = $row['waypoints'];
221
			if (isset($row['format_source'])) $temp_array['format_source'] = $row['format_source'];
222
			if (isset($row['route_stop'])) {
223
				$temp_array['route_stop'] = $row['route_stop'];
224
				if ($row['route_stop'] != '') {
225
					$allroute = explode(' ',$row['route_stop']);
226
			
227
					foreach ($allroute as $route) {
228
						$route_airport_array = $this->getAllAirportInfo($route);
229
						if (isset($route_airport_array[0]['name'])) {
230
							$route_stop_details = array();
231
							$route_stop_details['airport_name'] = $route_airport_array[0]['name'];
232
							$route_stop_details['airport_city'] = $route_airport_array[0]['city'];
233
							$route_stop_details['airport_country'] = $route_airport_array[0]['country'];
234
							$route_stop_details['airport_icao'] = $route_airport_array[0]['icao'];
235
							$temp_array['route_stop_details'][] = $route_stop_details;
236
						}
237
					}
238
				}
239
			}
240
			if (isset($row['altitude'])) $temp_array['altitude'] = $row['altitude'];
241
			if (isset($row['heading'])) {
242
				$temp_array['heading'] = $row['heading'];
243
				$heading_direction = $this->parseDirection($row['heading']);
244
				if (isset($heading_direction[0]['direction_fullname'])) $temp_array['heading_name'] = $heading_direction[0]['direction_fullname'];
245
			}
246
			if (isset($row['ground_speed'])) $temp_array['ground_speed'] = $row['ground_speed'];
247
			$temp_array['image'] = "";
248
			$temp_array['image_thumbnail'] = "";
249
			$temp_array['image_source'] = "";
250
			$temp_array['image_copyright'] = "";
251
 
252
			if (isset($row['highlight'])) {
253
				$temp_array['highlight'] = $row['highlight'];
254
			} else $temp_array['highlight'] = '';
255
			
256
			if (isset($row['date'])) {
257
				$dateArray = $this->parseDateString($row['date']);
258
				if ($dateArray['seconds'] < 10)
259
				{
260
					$temp_array['date'] = "a few seconds ago";
261
				} elseif ($dateArray['seconds'] >= 5 && $dateArray['seconds'] < 30)
262
				{
263
					$temp_array['date'] = "half a minute ago";
264
				} elseif ($dateArray['seconds'] >= 30 && $dateArray['seconds'] < 60)
265
				{
266
					$temp_array['date'] = "about a minute ago";
267
				} elseif ($dateArray['minutes'] < 5)
268
				{
269
					$temp_array['date'] = "a few minutes ago";
270
				} elseif ($dateArray['minutes'] >= 5 && $dateArray['minutes'] < 60)
271
				{
272
					$temp_array['date'] = "about ".$dateArray['minutes']." minutes ago";
273
				} elseif ($dateArray['hours'] < 2)
274
				{
275
					$temp_array['date'] = "about an hour ago";
276
				} elseif ($dateArray['hours'] >= 2 && $dateArray['hours'] < 24)
277
				{
278
					$temp_array['date'] = "about ".$dateArray['hours']." hours ago";
279
				} else {
280
					$temp_array['date'] = date("M j Y, g:i a",strtotime($row['date']." UTC"));
281
				}
282
				$temp_array['date_minutes_past'] = $dateArray['minutes'];
283
				$temp_array['date_iso_8601'] = date("c",strtotime($row['date']." UTC"));
284
				$temp_array['date_rfc_2822'] = date("r",strtotime($row['date']." UTC"));
285
				$temp_array['date_unix'] = strtotime($row['date']." UTC");
286
			}
287
			
288
			if (isset($row['aircraft_name']) && $row['aircraft_name'] != '' && isset($row['aircraft_shadow']) && $row['aircraft_shadow'] != '') {
289
				$temp_array['aircraft_name'] = $row['aircraft_name'];
290
				$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
291
				if (isset($row['aircraft_shadow'])) {
292
					$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
293
				}
294
			} elseif (isset($row['aircraft_icao'])) {
295
				$aircraft_array = $this->getAllAircraftInfo($row['aircraft_icao']);
296
				if (count($aircraft_array) > 0) {
297
					$temp_array['aircraft_name'] = $aircraft_array[0]['type'];
298
					$temp_array['aircraft_manufacturer'] = $aircraft_array[0]['manufacturer'];
299
				
300
					if ($aircraft_array[0]['aircraft_shadow'] != NULL) {
301
						$temp_array['aircraft_shadow'] = $aircraft_array[0]['aircraft_shadow'];
302
					} else $temp_array['aircraft_shadow'] = 'default.png';
303
                                } else {
304
                            		$temp_array['aircraft_shadow'] = 'default.png';
305
					$temp_array['aircraft_name'] = 'N/A';
306
					$temp_array['aircraft_manufacturer'] = 'N/A';
307
                            	}
308
			}
309
			$fromsource = NULL;
310
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
311
			elseif (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
312
			elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
313
			elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
314
			elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
315
			if (!isset($row['airline_name']) || $row['airline_name'] == '') {
316
				if (!is_numeric(substr($row['ident'], 0, 3))) {
317
					if (is_numeric(substr($row['ident'], 2, 1))) {
318
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 2),$fromsource);
319
					} elseif (is_numeric(substr($row['ident'], 3, 1))) {
320
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
321
					} else {
322
						$airline_array = $this->getAllAirlineInfo('NA');
323
					}
324
				} else {
325
					$airline_array = $this->getAllAirlineInfo('NA');
326
				}
327
				if (count($airline_array) > 0) {
328
					$temp_array['airline_icao'] = $airline_array[0]['icao'];
329
					$temp_array['airline_iata'] = $airline_array[0]['iata'];
330
					$temp_array['airline_name'] = $airline_array[0]['name'];
331
					$temp_array['airline_country'] = $airline_array[0]['country'];
332
					$temp_array['airline_callsign'] = $airline_array[0]['callsign'];
333
					$temp_array['airline_type'] = $airline_array[0]['type'];
334
				}
335
			} else {
336
				$temp_array['airline_icao'] = $row['airline_icao'];
337
				if (isset($row['airline_iata'])) $temp_array['airline_iata'] = $row['airline_iata'];
338
				else $temp_array['airline_iata'] = 'N/A';
339
				$temp_array['airline_name'] = $row['airline_name'];
340
				$temp_array['airline_country'] = $row['airline_country'];
341
				if (isset($row['airline_callsign'])) $temp_array['airline_callsign'] = $row['airline_callsign'];
342
				else $temp_array['airline_callsign'] = 'N/A';
343
				$temp_array['airline_type'] = $row['airline_type'];
344
				if ($temp_array['airline_icao'] != '' && $temp_array['airline_iata'] == 'N/A') {
345
					$airline_array = $this->getAllAirlineInfo($temp_array['airline_icao']);
346
					if (count($airline_array) > 0) {
347
						$temp_array['airline_icao'] = $airline_array[0]['icao'];
348
						$temp_array['airline_iata'] = $airline_array[0]['iata'];
349
						$temp_array['airline_name'] = $airline_array[0]['name'];
350
						$temp_array['airline_country'] = $airline_array[0]['country'];
351
						$temp_array['airline_callsign'] = $airline_array[0]['callsign'];
352
						$temp_array['airline_type'] = $airline_array[0]['type'];
353
					}
354
				}
355
			}
356
			if (isset($temp_array['airline_iata']) && $temp_array['airline_iata'] != '') {
357
				$acars_array = $ACARS->getLiveAcarsData($temp_array['airline_iata'].substr($temp_array['ident'],3));
358
				//$acars_array = ACARS->getLiveAcarsData('BA40YL');
359
				if (count($acars_array) > 0) {
360
					$temp_array['acars'] = $acars_array;
361
					//print_r($acars_array);
362
				}
363
			}
364
			if (isset($row['owner_name']) && $row['owner_name'] != '' && $row['owner_name'] != NULL) {
365
				$temp_array['aircraft_owner'] = $row['owner_name'];
366
			}
367
			if ($temp_array['registration'] != "" && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM && !isset($temp_array['aircraft_owner'])) {
368
				$owner_info = $this->getAircraftOwnerByRegistration($temp_array['registration']);
369
				if ($owner_info['owner'] != '') $temp_array['aircraft_owner'] = ucwords(strtolower($owner_info['owner']));
370
				$temp_array['aircraft_base'] = $owner_info['base'];
371
				$temp_array['aircraft_date_first_reg'] = $owner_info['date_first_reg'];
372
			}
373
374
			if($temp_array['registration'] != "" || ($globalIVAO && isset($temp_array['aircraft_type']) && $temp_array['aircraft_type'] != ''))
375
			{
376
				if ($globalIVAO) {
377
					if (isset($temp_array['airline_icao']))	$image_array = $Image->getSpotterImage('',$temp_array['aircraft_type'],$temp_array['airline_icao']);
378
					else $image_array = $Image->getSpotterImage('',$temp_array['aircraft_type']);
379
				} else $image_array = $Image->getSpotterImage($temp_array['registration']);
380
				if (count($image_array) > 0) {
381
					$temp_array['image'] = $image_array[0]['image'];
382
					$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
383
					$temp_array['image_source'] = $image_array[0]['image_source'];
384
					$temp_array['image_source_website'] = $image_array[0]['image_source_website'];
385
					if ($temp_array['image_source_website'] == '' && $temp_array['image_source'] == 'planespotters') {
386
						$planespotter_url_array = explode("_", $temp_array['image']);
387
						$planespotter_id = str_replace(".jpg", "", $planespotter_url_array[1]);
388
						$temp_array['image_source_website'] = 'http://www.planespotters.net/Aviation_Photos/photo.show?id='.$planespotter_id;
389
					 }
390
					$temp_array['image_copyright'] = $image_array[0]['image_copyright'];
391
				}
392
			}
393
394
395
			if (isset($row['departure_airport_time']) && $row['departure_airport_time'] != '') {
396
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
397
			}
398
			if (isset($row['arrival_airport_time']) && $row['arrival_airport_time'] != '') {
399
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
400
			}
401
			
402
			if ((!isset($globalIVAO) || ! $globalIVAO) && (!isset($globalVATSIM) || !$globalVATSIM) && (!isset($globalphpVMS) || !$globalphpVMS) && (!isset($globalVAM) || !$globalVAM)) {
403
				if ($schedules === true) {
404
					$schedule_array = $Schedule->getSchedule($temp_array['ident']);
405
					//print_r($schedule_array);
406
					if (count($schedule_array) > 0) {
407
						if ($schedule_array['departure_airport_icao'] != '') {
408
							$row['departure_airport_icao'] = $schedule_array['departure_airport_icao'];
409
							$temp_array['departure_airport'] = $row['departure_airport_icao'];
410
						}
411
						if ($schedule_array['arrival_airport_icao'] != '') {
412
							$row['arrival_airport_icao'] = $schedule_array['arrival_airport_icao'];
413
							$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
414
						}
415
						$temp_array['departure_airport_time'] = $schedule_array['departure_airport_time'];
416
						$temp_array['arrival_airport_time'] = $schedule_array['arrival_airport_time'];
417
					}
418
				}
419
			} else {
420
				if (isset($row['real_departure_airport_time']) && $row['real_departure_airport_time'] != '') {
421
					$temp_array['departure_airport_time'] = $row['real_departure_airport_time'];
422
				}
423
				if (isset($row['real_arrival_airport_time']) && $row['real_arrival_airport_time'] != '') {
424
					$temp_array['real_arrival_airport_time'] = $row['real_arrival_airport_time'];
425
				}
426
			}
427
			
428
			//if ($row['departure_airport_icao'] != '' && $row['departure_airport_name'] == '') {
429
			if ($row['departure_airport_icao'] != '') {
430
				$departure_airport_array = $this->getAllAirportInfo($row['departure_airport_icao']);
431
				if (!isset($departure_airport_array[0]['name'])) $departure_airport_array = $this->getAllAirportInfo('NA');
432
			/*
433
			} elseif ($row['departure_airport_name'] != '') {
434
				$temp_array['departure_airport_name'] = $row['departure_airport_name'];
435
				$temp_array['departure_airport_city'] = $row['departure_airport_city'];
436
				$temp_array['departure_airport_country'] = $row['departure_airport_country'];
437
				$temp_array['departure_airport_icao'] = $row['departure_airport_icao'];
438
			*/
439
			} else $departure_airport_array = $this->getAllAirportInfo('NA');
440
			if (isset($departure_airport_array[0]['name'])) {
441
				$temp_array['departure_airport_name'] = $departure_airport_array[0]['name'];
442
				$temp_array['departure_airport_city'] = $departure_airport_array[0]['city'];
443
				$temp_array['departure_airport_country'] = $departure_airport_array[0]['country'];
444
				$temp_array['departure_airport_iata'] = $departure_airport_array[0]['iata'];
445
				$temp_array['departure_airport_icao'] = $departure_airport_array[0]['icao'];
446
				$temp_array['departure_airport_latitude'] = $departure_airport_array[0]['latitude'];
447
				$temp_array['departure_airport_longitude'] = $departure_airport_array[0]['longitude'];
448
				$temp_array['departure_airport_altitude'] = $departure_airport_array[0]['altitude'];
449
			}
450
451
			/*
452
			if (isset($row['departure_airport_time'])) {
453
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
454
			}
455
			*/
456
			
457
			if ($row['arrival_airport_icao'] != '') {
458
				$arrival_airport_array = $this->getAllAirportInfo($row['arrival_airport_icao']);
459
				if (count($arrival_airport_array) == 0) $arrival_airport_array = $this->getAllAirportInfo('NA');
460
			} else $arrival_airport_array = $this->getAllAirportInfo('NA');
461
			if (isset($arrival_airport_array[0]['name'])) {
462
				$temp_array['arrival_airport_name'] = $arrival_airport_array[0]['name'];
463
				$temp_array['arrival_airport_city'] = $arrival_airport_array[0]['city'];
464
				$temp_array['arrival_airport_country'] = $arrival_airport_array[0]['country'];
465
				$temp_array['arrival_airport_iata'] = $arrival_airport_array[0]['iata'];
466
				$temp_array['arrival_airport_icao'] = $arrival_airport_array[0]['icao'];
467
				$temp_array['arrival_airport_latitude'] = $arrival_airport_array[0]['latitude'];
468
				$temp_array['arrival_airport_longitude'] = $arrival_airport_array[0]['longitude'];
469
				$temp_array['arrival_airport_altitude'] = $arrival_airport_array[0]['altitude'];
470
			}
471
			/*
472
			if (isset($row['arrival_airport_time'])) {
473
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
474
			}
475
			*/
476
			if (isset($row['pilot_id']) && $row['pilot_id'] != '') $temp_array['pilot_id'] = $row['pilot_id'];
477
			if (isset($row['pilot_name']) && $row['pilot_name'] != '') $temp_array['pilot_name'] = $row['pilot_name'];
478
			if (isset($row['source_name']) && $row['source_name'] != '') $temp_array['source_name'] = $row['source_name'];
479
			if (isset($row['over_country']) && $row['over_country'] != '') $temp_array['over_country'] = $row['over_country'];
480
			if (isset($row['distance']) && $row['distance'] != '') $temp_array['distance'] = $row['distance'];
481
			if (isset($row['squawk'])) {
482
				$temp_array['squawk'] = $row['squawk'];
483
				if ($row['squawk'] != '' && isset($temp_array['country_iso2'])) {
484
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['country_iso2']);
485
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
486
				} elseif ($row['squawk'] != '' && isset($temp_array['over_country'])) {
487
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['over_country']);
488
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
489
				} elseif ($row['squawk'] != '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
490
			}
491
    			
492
			$temp_array['query_number_rows'] = $num_rows;
493
			
494
			$spotter_array[] = $temp_array;
495
		}
496
		if ($num_rows == 0) return array();
497
		$spotter_array[0]['query_number_rows'] = $num_rows;
498
		return $spotter_array;
499
	}	
500
	
501
	
502
	/**
503
	* Gets all the spotter information
504
	*
505
	* @return Array the spotter information
506
	*
507
	*/
508
	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())
509
	{
510
		global $globalTimezone, $globalDBdriver;
511
		require_once(dirname(__FILE__).'/class.Translation.php');
512
		$Translation = new Translation();
513
514
		date_default_timezone_set('UTC');
515
516
		$query_values = array();
517
		$additional_query = '';
518
		$filter_query = $this->getFilter($filters,true,true);
519
		if ($q != "")
520
		{
521
			if (!is_string($q))
522
			{
523
				return false;
524
			} else {
525
				$q_array = explode(" ", $q);
526
				foreach ($q_array as $q_item){
527
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
528
					$additional_query .= " AND (";
529
					if (is_int($q_item)) $additional_query .= "(spotter_output.spotter_id like '%".$q_item."%') OR ";
530
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
531
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
532
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
533
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
534
					$additional_query .= "(spotter_output.airline_name like '%".$q_item."%') OR ";
535
					$additional_query .= "(spotter_output.airline_country like '%".$q_item."%') OR ";
536
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
537
					$additional_query .= "(spotter_output.departure_airport_name like '%".$q_item."%') OR ";
538
					$additional_query .= "(spotter_output.departure_airport_city like '%".$q_item."%') OR ";
539
					$additional_query .= "(spotter_output.departure_airport_country like '%".$q_item."%') OR ";
540
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
541
					$additional_query .= "(spotter_output.arrival_airport_name like '%".$q_item."%') OR ";
542
					$additional_query .= "(spotter_output.arrival_airport_city like '%".$q_item."%') OR ";
543
					$additional_query .= "(spotter_output.arrival_airport_country like '%".$q_item."%') OR ";
544
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
545
					$additional_query .= "(spotter_output.owner_name like '%".$q_item."%') OR ";
546
					$additional_query .= "(spotter_output.pilot_id like '%".$q_item."%') OR ";
547
					$additional_query .= "(spotter_output.pilot_name like '%".$q_item."%') OR ";
548
					$additional_query .= "(spotter_output.ident like '%".$q_item."%') OR ";
549
					$translate = $Translation->ident2icao($q_item);
550
					if ($translate != $q_item) $additional_query .= "(spotter_output.ident like '%".$translate."%') OR ";
551
					$additional_query .= "(spotter_output.highlight like '%".$q_item."%')";
552
					$additional_query .= ")";
553
				}
554
			}
555
		}
556
557
		if ($registration != "")
558
		{
559
			$registration = filter_var($registration,FILTER_SANITIZE_STRING);
560
			if (!is_string($registration))
561
			{
562
				return false;
563
			} else {
564
				$additional_query .= " AND spotter_output.registration = :registration";
565
				$query_values = array_merge($query_values,array(':registration' => $registration));
566
			}
567
		}
568
569
		if ($aircraft_icao != "")
570
		{
571
			$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
572
			if (!is_string($aircraft_icao))
573
			{
574
				return false;
575
			} else {
576
				$additional_query .= " AND spotter_output.aircraft_icao = :aircraft_icao";
577
				$query_values = array_merge($query_values,array(':aircraft_icao' => $aircraft_icao));
578
			}
579
		}
580
581
		if ($aircraft_manufacturer != "")
582
		{
583
			$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
584
			if (!is_string($aircraft_manufacturer))
585
			{
586
				return false;
587
			} else {
588
				$additional_query .= " AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer";
589
				$query_values = array_merge($query_values,array(':aircraft_manufacturer' => $aircraft_manufacturer));
590
			}
591
		}
592
593
		if ($highlights == "true")
594
		{
595
			if (!is_string($highlights))
596
			{
597
				return false;
598
			} else {
599
				$additional_query .= " AND (spotter_output.highlight <> '')";
600
			}
601
		}
602
603
		if ($airline_icao != "")
604
		{
605
			$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
606
			if (!is_string($airline_icao))
607
			{
608
				return false;
609
			} else {
610
				$additional_query .= " AND spotter_output.airline_icao = :airline_icao";
611
				$query_values = array_merge($query_values,array(':airline_icao' => $airline_icao));
612
			}
613
		}
614
615
		if ($airline_country != "")
616
		{
617
			$airline_country = filter_var($airline_country,FILTER_SANITIZE_STRING);
618
			if (!is_string($airline_country))
619
			{
620
				return false;
621
			} else {
622
				$additional_query .= " AND spotter_output.airline_country = :airline_country";
623
				$query_values = array_merge($query_values,array(':airline_country' => $airline_country));
624
			}
625
		}
626
627
		if ($airline_type != "")
628
		{
629
			if (!is_string($airline_type))
630
			{
631
				return false;
632
			} else {
633
				if ($airline_type == "passenger")
634
				{
635
					$additional_query .= " AND (spotter_output.airline_type = 'passenger')";
636
				}
637
				if ($airline_type == "cargo")
638
				{
639
					$additional_query .= " AND (spotter_output.airline_type = 'cargo')";
640
				}
641
				if ($airline_type == "military")
642
				{
643
					$additional_query .= " AND (spotter_output.airline_type = 'military')";
644
				}
645
			}
646
		}
647
648
		if ($airport != "")
649
		{
650
			$airport = filter_var($airport,FILTER_SANITIZE_STRING);
651
			if (!is_string($airport))
652
			{
653
				return false;
654
			} else {
655
				$additional_query .= " AND (spotter_output.departure_airport_icao = :airport OR spotter_output.arrival_airport_icao = :airport)";
656
				$query_values = array_merge($query_values,array(':airport' => $airport));
657
			}
658
		}
659
660
		if ($airport_country != "")
661
		{
662
			$airport_country = filter_var($airport_country,FILTER_SANITIZE_STRING);
663
			if (!is_string($airport_country))
664
			{
665
				return false;
666
			} else {
667
				$additional_query .= " AND (spotter_output.departure_airport_country = :airport_country OR spotter_output.arrival_airport_country = :airport_country)";
668
				$query_values = array_merge($query_values,array(':airport_country' => $airport_country));
669
			}
670
		}
671
    
672
		if ($callsign != "")
673
		{
674
			$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
675
			if (!is_string($callsign))
676
			{
677
				return false;
678
			} else {
679
				$translate = $Translation->ident2icao($callsign);
680
				if ($translate != $callsign) {
681
					$additional_query .= " AND (spotter_output.ident = :callsign OR spotter_output.ident = :translate)";
682
					$query_values = array_merge($query_values,array(':callsign' => $callsign,':translate' => $translate));
683
				} else {
684
					$additional_query .= " AND spotter_output.ident = :callsign";
685
					$query_values = array_merge($query_values,array(':callsign' => $callsign));
686
				}
687
			}
688
		}
689
690
		if ($owner != "")
691
		{
692
			$owner = filter_var($owner,FILTER_SANITIZE_STRING);
693
			if (!is_string($owner))
694
			{
695
				return false;
696
			} else {
697
				$additional_query .= " AND spotter_output.owner_name = :owner";
698
				$query_values = array_merge($query_values,array(':owner' => $owner));
699
			}
700
		}
701
702
		if ($pilot_name != "")
703
		{
704
			$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
705
			if (!is_string($pilot_name))
706
			{
707
				return false;
708
			} else {
709
				$additional_query .= " AND spotter_output.pilot_name = :pilot_name";
710
				$query_values = array_merge($query_values,array(':pilot_name' => $pilot_name));
711
			}
712
		}
713
714
		if ($pilot_id != "")
715
		{
716
			$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_NUMBER_INT);
717
			if (!is_string($pilot_id))
718
			{
719
				return false;
720
			} else {
721
				$additional_query .= " AND spotter_output.pilot_id = :pilot_id";
722
				$query_values = array_merge($query_values,array(':pilot_id' => $pilot_id));
723
			}
724
		}
725
726
		if ($departure_airport_route != "")
727
		{
728
			$departure_airport_route = filter_var($departure_airport_route,FILTER_SANITIZE_STRING);
729
			if (!is_string($departure_airport_route))
730
			{
731
				return false;
732
			} else {
733
				$additional_query .= " AND spotter_output.departure_airport_icao = :departure_airport_route";
734
				$query_values = array_merge($query_values,array(':departure_airport_route' => $departure_airport_route));
735
			}
736
		}
737
738
		if ($arrival_airport_route != "")
739
		{
740
			$arrival_airport_route = filter_var($arrival_airport_route,FILTER_SANITIZE_STRING);
741
			if (!is_string($arrival_airport_route))
742
			{
743
				return false;
744
			} else {
745
				$additional_query .= " AND spotter_output.arrival_airport_icao = :arrival_airport_route";
746
				$query_values = array_merge($query_values,array(':arrival_airport_route' => $arrival_airport_route));
747
			}
748
		}
749
750
		if ($altitude != "")
751
		{
752
			$altitude_array = explode(",", $altitude);
753
			$altitude_array[0] = filter_var($altitude_array[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
754
			$altitude_array[1] = filter_var($altitude_array[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
755
756
			if ($altitude_array[1] != "")
757
			{                
758
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
759
				$altitude_array[1] = substr($altitude_array[1], 0, -2);
760
				$additional_query .= " AND altitude BETWEEN '".$altitude_array[0]."' AND '".$altitude_array[1]."' ";
761
			} else {
762
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
763
				$additional_query .= " AND altitude <= '".$altitude_array[0]."' ";
764
			}
765
		}
766
767
		if ($date_posted != "")
768
		{
769
			$date_array = explode(",", $date_posted);
770
			$date_array[0] = filter_var($date_array[0],FILTER_SANITIZE_STRING);
771
			$date_array[1] = filter_var($date_array[1],FILTER_SANITIZE_STRING);
772
773
			if ($globalTimezone != '') {
774
				date_default_timezone_set($globalTimezone);
775
				$datetime = new DateTime();
776
				$offset = $datetime->format('P');
777
			} else $offset = '+00:00';
778
779
			if ($date_array[1] != "")
780
			{
781
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
782
				$date_array[1] = date("Y-m-d H:i:s", strtotime($date_array[1]));
783
				if ($globalDBdriver == 'mysql') {
784
					$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]."' ";
785
				} else {
786
					$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]."' ";
787
				}
788
			} else {
789
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
790
				if ($globalDBdriver == 'mysql') {
791
					$additional_query .= " AND TIMESTAMP(CONVERT_TZ(spotter_output.date,'+00:00', '".$offset."')) >= '".$date_array[0]."' ";
792
				} else {
793
					$additional_query .= " AND CAST(spotter_output.date AT TIME ZONE INTERVAL ".$offset." AS TIMESTAMP) >= '".$date_array[0]."' ";
794
				}
795
			}
796
		}
797
798
		if ($limit != "")
799
		{
800
			$limit_array = explode(",", $limit);
801
			
802
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
803
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
804
			
805
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
806
			{
807
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
808
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
809
			} else $limit_query = "";
810
		} else $limit_query = "";
811
812
813
		if ($sort != "")
814
		{
815
			$search_orderby_array = $this->getOrderBy();
816
			$orderby_query = $search_orderby_array[$sort]['sql'];
817
		} else {
818
			if ($origLat != "" && $origLon != "" && $dist != "") {
819
				$orderby_query = " ORDER BY distance ASC";
820
			} else {
821
				$orderby_query = " ORDER BY spotter_output.date DESC";
822
			}
823
		}
824
825
		if ($includegeodata == "true")
826
		{
827
			$additional_query .= " AND spotter_output.waypoints <> ''";
828
		}
829
830
831
		if ($origLat != "" && $origLon != "" && $dist != "") {
832
			$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
833
834
			if ($globalDBdriver == 'mysql') {
835
				$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 
836
						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)) 
837
						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;
838
			} else {
839
				$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 
840
						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)) 
841
						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;
842
			}
843
		} else {		
844
			$query  = "SELECT spotter_output.* FROM spotter_output".$filter_query." spotter_output.ident <> '' 
845
					".$additional_query."
846
					".$orderby_query;
847
		}
848
		$spotter_array = $this->getDataFromDB($query, $query_values,$limit_query);
849
		return $spotter_array;
850
	}
851
	
852
	
853
	/**
854
	* Gets all the spotter information based on the latest data entry
855
	*
856
	* @return Array the spotter information
857
	*
858
	*/
859
	public function getLatestSpotterData($limit = '', $sort = '', $filter = array())
860
	{
861
		global $global_query;
862
		
863
		date_default_timezone_set('UTC');
864
865
		$filter_query = $this->getFilter($filter);
866
		
867
		if ($limit != "")
868
		{
869
			$limit_array = explode(",", $limit);
870
			
871
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
872
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
873
			
874
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
875
			{
876
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
877
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
878
			} else $limit_query = "";
879
		} else $limit_query = "";
880
		
881
		if ($sort != "")
882
		{
883
			$search_orderby_array = $this->getOrderBy();
884
			$orderby_query = $search_orderby_array[$sort]['sql'];
885
		} else {
886
			$orderby_query = " ORDER BY spotter_output.date DESC";
887
		}
888
889
		$query  = $global_query.$filter_query." ".$orderby_query;
890
891
		$spotter_array = $this->getDataFromDB($query, array(),$limit_query,true);
892
893
		return $spotter_array;
894
	}
895
    
896
    
897
    /**
898
	* Gets all the spotter information based on a user's latitude and longitude
899
	*
900
	* @return Array the spotter information
901
	*
902
	*/
903
	public function getLatestSpotterForLayar($lat, $lng, $radius, $interval)
904
	{
905
		date_default_timezone_set('UTC');
906
		$limit_query = '';
907
		if ($lat != "")
908
		{
909
			if (!is_numeric($lat))
910
			{
911
				return false;
912
			}
913
		}
914
        
915
		if ($lng != "")
916
		{
917
			if (!is_numeric($lng))
918
			{
919
				return false;
920
			}
921
		}
922
		
923
		if ($radius != "")
924
		{
925
			if (!is_numeric($radius))
926
			{
927
				return false;
928
			}
929
		}
930
    		$additional_query = '';
931
		if ($interval != "")
932
		{
933
			if (!is_string($interval))
934
			{
935
				return false;
936
			} else {
937
				if ($interval == "30m"){
938
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 MINUTE) <= $this_output.date ';
939
				} else if ($interval == "1h"){
940
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) <= $this_output.date ';
941
				} else if ($interval == "3h"){
942
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 3 HOUR) <= $this_output.date ';
943
				} else if ($interval == "6h"){
944
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 6 HOUR) <= $this_output.date ';
945
				} else if ($interval == "12h"){
946
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 12 HOUR) <= $this_output.date ';
947
				} else if ($interval == "24h"){
948
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 24 HOUR) <= $this_output.date ';
949
				} else if ($interval == "7d"){
950
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY) <= $this_output.date ';
951
				} else if ($interval == "30d"){
952
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 DAY) <= $this_output.date ';
953
				} 
954
			}
955
		}
956
957
		$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 
958
                   WHERE spotter_output.latitude <> '' 
959
				   AND spotter_output.longitude <> '' 
960
                   ".$additional_query."
961
                   HAVING distance < :radius  
962
				   ORDER BY distance";
963
964
		$spotter_array = $this->getDataFromDB($query, array(':radius' => $radius),$limit_query);
965
966
		return $spotter_array;
967
	}
968
    
969
    
970
    /**
971
	* Gets all the spotter information sorted by the newest aircraft type
972
	*
973
	* @return Array the spotter information
974
	*
975
	*/
976
	public function getNewestSpotterDataSortedByAircraftType($limit = '', $sort = '',$filter = array())
977
	{
978
		global $global_query;
979
		
980
		date_default_timezone_set('UTC');
981
982
		$filter_query = $this->getFilter($filter,true,true);
983
984
		$limit_query = '';
985
		if ($limit != "")
986
		{
987
			$limit_array = explode(",", $limit);
988
			
989
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
990
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
991
			
992
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
993
			{
994
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
995
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
996
			}
997
		}
998
		
999
		if ($sort != "")
1000
		{
1001
			$search_orderby_array = $this->getOrderBy();
1002
			$orderby_query = $search_orderby_array[$sort]['sql'];
1003
		} else {
1004
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1005
		}
1006
1007
		$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;
1008
1009
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1010
1011
		return $spotter_array;
1012
	}
1013
    
1014
    
1015
	/**
1016
	* Gets all the spotter information sorted by the newest aircraft registration
1017
	*
1018
	* @return Array the spotter information
1019
	*
1020
	*/
1021
	public function getNewestSpotterDataSortedByAircraftRegistration($limit = '', $sort = '', $filter = array())
1022
	{
1023
		global $global_query;
1024
		
1025
		date_default_timezone_set('UTC');
1026
		$filter_query = $this->getFilter($filter,true,true);
1027
1028
		$limit_query = '';
1029
		if ($limit != "")
1030
		{
1031
			$limit_array = explode(",", $limit);
1032
			
1033
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1034
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1035
			
1036
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1037
			{
1038
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1039
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1040
			}
1041
		}
1042
		
1043
		if ($sort != "")
1044
		{
1045
			$search_orderby_array = $this->getOrderBy();
1046
			$orderby_query = $search_orderby_array[$sort]['sql'];
1047
		} else {
1048
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1049
		}
1050
1051
		$query  = $global_query." ".$filter_query." spotter_output.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;
1052
1053
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1054
1055
		return $spotter_array;
1056
	}
1057
1058
1059
	/**
1060
	* Gets all the spotter information sorted by the newest airline
1061
	*
1062
	* @return Array the spotter information
1063
	*
1064
	*/
1065
	public function getNewestSpotterDataSortedByAirline($limit = '', $sort = '',$filter = array())
1066
	{
1067
		global $global_query;
1068
		
1069
		date_default_timezone_set('UTC');
1070
		$filter_query = $this->getFilter($filter,true,true);
1071
		
1072
		$limit_query = '';
1073
		if ($limit != "")
1074
		{
1075
			$limit_array = explode(",", $limit);
1076
			
1077
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1078
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1079
			
1080
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1081
			{
1082
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1083
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1084
			}
1085
		}
1086
		
1087
		if ($sort != "")
1088
		{
1089
			$search_orderby_array = $this->getOrderBy();
1090
			$orderby_query = $search_orderby_array[$sort]['sql'];
1091
		} else {
1092
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1093
		}
1094
1095
		$query  = $global_query." ".$filter_query." spotter_output.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;
1096
1097
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1098
1099
		return $spotter_array;
1100
	}
1101
    
1102
    
1103
    /**
1104
	* Gets all the spotter information sorted by the newest departure airport
1105
	*
1106
	* @return Array the spotter information
1107
	*
1108
	*/
1109
	public function getNewestSpotterDataSortedByDepartureAirport($limit = '', $sort = '', $filter = array())
1110
	{
1111
		global $global_query;
1112
		
1113
		date_default_timezone_set('UTC');
1114
		
1115
		$filter_query = $this->getFilter($filter,true,true);
1116
		
1117
		$limit_query = '';
1118
		
1119
		if ($limit != "")
1120
		{
1121
			$limit_array = explode(",", $limit);
1122
			
1123
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1124
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1125
			
1126
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1127
			{
1128
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1129
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1130
			}
1131
		}
1132
		
1133
		if ($sort != "")
1134
		{
1135
			$search_orderby_array = $this->getOrderBy();
1136
			$orderby_query = $search_orderby_array[$sort]['sql'];
1137
		} else {
1138
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1139
		}
1140
1141
		$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;
1142
1143
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1144
1145
		return $spotter_array;
1146
	}
1147
1148
1149
	/**
1150
	* Gets all the spotter information sorted by the newest arrival airport
1151
	*
1152
	* @return Array the spotter information
1153
	*
1154
	*/
1155
	public function getNewestSpotterDataSortedByArrivalAirport($limit = '', $sort = '', $filter = array())
1156
	{
1157
		global $global_query;
1158
		
1159
		date_default_timezone_set('UTC');
1160
		$filter_query = $this->getFilter($filter,true,true);
1161
		$limit_query = '';
1162
		if ($limit != "")
1163
		{
1164
			$limit_array = explode(",", $limit);
1165
			
1166
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1167
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1168
			
1169
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1170
			{
1171
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1172
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1173
			}
1174
		}
1175
		
1176
		if ($sort != "")
1177
		{
1178
			$search_orderby_array = $this->getOrderBy();
1179
			$orderby_query = $search_orderby_array[$sort]['sql'];
1180
		} else {
1181
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1182
		}
1183
1184
		$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;
1185
1186
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1187
1188
		return $spotter_array;
1189
	}
1190
	
1191
1192
	/**
1193
	* Gets all the spotter information based on the spotter id
1194
	*
1195
	* @return Array the spotter information
1196
	*
1197
	*/
1198
	public function getSpotterDataByID($id = '')
1199
	{
1200
		global $global_query;
1201
		
1202
		date_default_timezone_set('UTC');
1203
		if ($id == '') return array();
1204
		$additional_query = "spotter_output.spotter_id = :id";
1205
		$query_values = array(':id' => $id);
1206
1207
		//$query  = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ";
1208
		$query  = $global_query." WHERE ".$additional_query." ";
1209
1210
		$spotter_array = $this->getDataFromDB($query,$query_values);
1211
1212
		return $spotter_array;
1213
	}
1214
1215
	
1216
	
1217
	
1218
	/**
1219
	* Gets all the spotter information based on the callsign
1220
	*
1221
	* @return Array the spotter information
1222
	*
1223
	*/
1224
	public function getSpotterDataByIdent($ident = '', $limit = '', $sort = '')
1225
	{
1226
		global $global_query;
1227
		
1228
		date_default_timezone_set('UTC');
1229
		
1230
		$query_values = array();
1231
		$limit_query = '';
1232
		$additional_query = '';
1233
		if ($ident != "")
1234
		{
1235
			if (!is_string($ident))
1236
			{
1237
				return false;
1238
			} else {
1239
				$additional_query = " AND (spotter_output.ident = :ident)";
1240
				$query_values = array(':ident' => $ident);
1241
			}
1242
		}
1243
		
1244
		if ($limit != "")
1245
		{
1246
			$limit_array = explode(",", $limit);
1247
			
1248
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1249
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1250
			
1251
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1252
			{
1253
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1254
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1255
			}
1256
		}
1257
1258
		if ($sort != "")
1259
		{
1260
			$search_orderby_array = $this->getOrderBy();
1261
			$orderby_query = $search_orderby_array[$sort]['sql'];
1262
		} else {
1263
			$orderby_query = " ORDER BY spotter_output.date DESC";
1264
		}
1265
1266
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1267
1268
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1269
1270
		return $spotter_array;
1271
	}
1272
	
1273
	/**
1274
	* Gets all the spotter information based on the owner
1275
	*
1276
	* @return Array the spotter information
1277
	*
1278
	*/
1279
	public function getSpotterDataByOwner($owner = '', $limit = '', $sort = '')
1280
	{
1281
		global $global_query;
1282
		
1283
		date_default_timezone_set('UTC');
1284
		
1285
		$query_values = array();
1286
		$limit_query = '';
1287
		$additional_query = '';
1288
		if ($owner != "")
1289
		{
1290
			if (!is_string($owner))
1291
			{
1292
				return false;
1293
			} else {
1294
				$additional_query = " AND (spotter_output.owner_name = :owner)";
1295
				$query_values = array(':owner' => $owner);
1296
			}
1297
		}
1298
		
1299
		if ($limit != "")
1300
		{
1301
			$limit_array = explode(",", $limit);
1302
			
1303
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1304
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1305
			
1306
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1307
			{
1308
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1309
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1310
			}
1311
		}
1312
1313
		if ($sort != "")
1314
		{
1315
			$search_orderby_array = $this->getOrderBy();
1316
			$orderby_query = $search_orderby_array[$sort]['sql'];
1317
		} else {
1318
			$orderby_query = " ORDER BY spotter_output.date DESC";
1319
		}
1320
1321
		$query = $global_query." WHERE spotter_output.owner_name <> '' ".$additional_query." ".$orderby_query;
1322
1323
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1324
1325
		return $spotter_array;
1326
	}
1327
	
1328
	/**
1329
	* Gets all the spotter information based on the pilot
1330
	*
1331
	* @return Array the spotter information
1332
	*
1333
	*/
1334
	public function getSpotterDataByPilot($pilot = '', $limit = '', $sort = '')
1335
	{
1336
		global $global_query;
1337
		
1338
		date_default_timezone_set('UTC');
1339
		
1340
		$query_values = array();
1341
		$limit_query = '';
1342
		$additional_query = '';
1343
		if ($pilot != "")
1344
		{
1345
			$additional_query = " AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot)";
1346
			$query_values = array(':pilot' => $pilot);
1347
		}
1348
		
1349
		if ($limit != "")
1350
		{
1351
			$limit_array = explode(",", $limit);
1352
			
1353
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1354
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1355
			
1356
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1357
			{
1358
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1359
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1360
			}
1361
		}
1362
1363
		if ($sort != "")
1364
		{
1365
			$search_orderby_array = $this->getOrderBy();
1366
			$orderby_query = $search_orderby_array[$sort]['sql'];
1367
		} else {
1368
			$orderby_query = " ORDER BY spotter_output.date DESC";
1369
		}
1370
1371
		$query = $global_query." WHERE spotter_output.pilot_name <> '' ".$additional_query." ".$orderby_query;
1372
1373
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1374
1375
		return $spotter_array;
1376
	}
1377
	
1378
	
1379
	
1380
	/**
1381
	* Gets all the spotter information based on the aircraft type
1382
	*
1383
	* @return Array the spotter information
1384
	*
1385
	*/
1386
	public function getSpotterDataByAircraft($aircraft_type = '', $limit = '', $sort = '', $filter = array())
1387
	{
1388
		global $global_query;
1389
		
1390
		date_default_timezone_set('UTC');
1391
		
1392
		$query_values = array();
1393
		$limit_query = '';
1394
		$additional_query = '';
1395
		$filter_query = $this->getFilter($filter,true,true);
1396
		
1397
		if ($aircraft_type != "")
1398
		{
1399
			if (!is_string($aircraft_type))
1400
			{
1401
				return false;
1402
			} else {
1403
				$additional_query = " AND (spotter_output.aircraft_icao = :aircraft_type)";
1404
				$query_values = array(':aircraft_type' => $aircraft_type);
1405
			}
1406
		}
1407
		
1408
		if ($limit != "")
1409
		{
1410
			$limit_array = explode(",", $limit);
1411
			
1412
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1413
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1414
			
1415
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1416
			{
1417
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1418
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1419
			}
1420
		}
1421
1422
		if ($sort != "")
1423
		{
1424
			$search_orderby_array = $this->getOrderBy();
1425
			$orderby_query = $search_orderby_array[$sort]['sql'];
1426
		} else {
1427
			$orderby_query = " ORDER BY spotter_output.date DESC";
1428
		}
1429
1430
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1431
1432
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1433
1434
		return $spotter_array;
1435
	}
1436
	
1437
	
1438
	/**
1439
	* Gets all the spotter information based on the aircraft registration
1440
	*
1441
	* @return Array the spotter information
1442
	*
1443
	*/
1444
	public function getSpotterDataByRegistration($registration = '', $limit = '', $sort = '', $filter = array())
1445
	{
1446
		global $global_query;
1447
		
1448
		date_default_timezone_set('UTC');
1449
		
1450
		$query_values = array();
1451
		$limit_query = '';
1452
		$additional_query = '';
1453
		
1454
		if ($registration != "")
1455
		{
1456
			if (!is_string($registration))
1457
			{
1458
				return false;
1459
			} else {
1460
				$additional_query = " (spotter_output.registration = :registration)";
1461
				$query_values = array(':registration' => $registration);
1462
			}
1463
		}
1464
		
1465
		if ($limit != "")
1466
		{
1467
			$limit_array = explode(",", $limit);
1468
			
1469
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1470
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1471
			
1472
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1473
			{
1474
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1475
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1476
			}
1477
		}
1478
1479
		if ($sort != "")
1480
		{
1481
			$search_orderby_array = $this->getOrderBy();
1482
			$orderby_query = $search_orderby_array[$sort]['sql'];
1483
		} else {
1484
			$orderby_query = " ORDER BY spotter_output.date DESC";
1485
		}
1486
		$filter_query = $this->getFilter($filter,true,true);
1487
1488
		//$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1489
		$query = $global_query.$filter_query." ".$additional_query." ".$orderby_query;
1490
1491
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1492
1493
		return $spotter_array;
1494
	}
1495
1496
	
1497
	
1498
	
1499
	/**
1500
	* Gets all the spotter information based on the airline
1501
	*
1502
	* @return Array the spotter information
1503
	*
1504
	*/
1505
	public function getSpotterDataByAirline($airline = '', $limit = '', $sort = '',$filters = array())
1506
	{
1507
		global $global_query;
1508
		
1509
		date_default_timezone_set('UTC');
1510
1511
		$query_values = array();
1512
		$limit_query = '';
1513
		$additional_query = '';
1514
		$filter_query = $this->getFilter($filters,true,true);
1515
		
1516
		if ($airline != "")
1517
		{
1518
			if (!is_string($airline))
1519
			{
1520
				return false;
1521
			} else {
1522
				$additional_query = " AND (spotter_output.airline_icao = :airline)";
1523
				$query_values = array(':airline' => $airline);
1524
			}
1525
		}
1526
		
1527
		if ($limit != "")
1528
		{
1529
			$limit_array = explode(",", $limit);
1530
			
1531
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1532
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1533
			
1534
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1535
			{
1536
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1537
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1538
			}
1539
		}
1540
		
1541
		if ($sort != "")
1542
		{
1543
			$search_orderby_array = $this->getOrderBy();
1544
			$orderby_query = $search_orderby_array[$sort]['sql'];
1545
		} else {
1546
			$orderby_query = " ORDER BY spotter_output.date DESC";
1547
		}
1548
1549
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1550
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1551
1552
		return $spotter_array;
1553
	}
1554
	
1555
	
1556
	/**
1557
	* Gets all the spotter information based on the airport
1558
	*
1559
	* @return Array the spotter information
1560
	*
1561
	*/
1562
	public function getSpotterDataByAirport($airport = '', $limit = '', $sort = '',$filters = array())
1563
	{
1564
		global $global_query;
1565
		
1566
		date_default_timezone_set('UTC');
1567
		$query_values = array();
1568
		$limit_query = '';
1569
		$additional_query = '';
1570
		$filter_query = $this->getFilter($filters,true,true);
1571
		
1572
		if ($airport != "")
1573
		{
1574
			if (!is_string($airport))
1575
			{
1576
				return false;
1577
			} else {
1578
				$additional_query .= " AND ((spotter_output.departure_airport_icao = :airport) OR (spotter_output.arrival_airport_icao = :airport))";
1579
				$query_values = array(':airport' => $airport);
1580
			}
1581
		}
1582
		
1583
		if ($limit != "")
1584
		{
1585
			$limit_array = explode(",", $limit);
1586
			
1587
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1588
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1589
			
1590
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1591
			{
1592
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1593
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1594
			}
1595
		}
1596
		
1597
		if ($sort != "")
1598
		{
1599
			$search_orderby_array = $this->getOrderBy();
1600
			$orderby_query = $search_orderby_array[$sort]['sql'];
1601
		} else {
1602
			$orderby_query = " ORDER BY spotter_output.date DESC";
1603
		}
1604
1605
		$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;
1606
1607
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1608
1609
		return $spotter_array;
1610
	}
1611
1612
1613
1614
	/**
1615
	* Gets all the spotter information based on the date
1616
	*
1617
	* @return Array the spotter information
1618
	*
1619
	*/
1620
	public function getSpotterDataByDate($date = '', $limit = '', $sort = '',$filter = array())
1621
	{
1622
		global $global_query, $globalTimezone, $globalDBdriver;
1623
		
1624
		$query_values = array();
1625
		$limit_query = '';
1626
		$additional_query = '';
1627
1628
		$filter_query = $this->getFilter($filter,true,true);
1629
		
1630
		if ($date != "")
1631
		{
1632
			if ($globalTimezone != '') {
1633
				date_default_timezone_set($globalTimezone);
1634
				$datetime = new DateTime($date);
1635
				$offset = $datetime->format('P');
1636
			} else {
1637
				date_default_timezone_set('UTC');
1638
				$datetime = new DateTime($date);
1639
				$offset = '+00:00';
1640
			}
1641
			if ($globalDBdriver == 'mysql') {
1642
				$additional_query = " AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date ";
1643
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':offset' => $offset);
1644
			} elseif ($globalDBdriver == 'pgsql') {
1645
				//$globalTimezone = 'UTC';
1646
				$additional_query = " AND to_char(spotter_output.date AT TIME ZONE :timezone,'YYYY-mm-dd') = :date ";
1647
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':timezone' => $globalTimezone);
1648
				//$additional_query = " AND to_char(spotter_output.date,'YYYY-mm-dd') = :date ";
1649
				//$query_values = array(':date' => $datetime->format('Y-m-d'));
1650
			}
1651
		}
1652
		
1653
		if ($limit != "")
1654
		{
1655
			$limit_array = explode(",", $limit);
1656
			
1657
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1658
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1659
			
1660
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1661
			{
1662
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1663
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1664
			}
1665
		}
1666
1667
		if ($sort != "")
1668
		{
1669
			$search_orderby_array = $this->getOrderBy();
1670
			$orderby_query = $search_orderby_array[$sort]['sql'];
1671
		} else {
1672
			$orderby_query = " ORDER BY spotter_output.date DESC";
1673
		}
1674
1675
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query.$orderby_query;
1676
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1677
		return $spotter_array;
1678
	}
1679
1680
1681
1682
	/**
1683
	* Gets all the spotter information based on the country name
1684
	*
1685
	* @return Array the spotter information
1686
	*
1687
	*/
1688
	public function getSpotterDataByCountry($country = '', $limit = '', $sort = '',$filters = array())
1689
	{
1690
		global $global_query;
1691
		
1692
		date_default_timezone_set('UTC');
1693
		
1694
		$query_values = array();
1695
		$limit_query = '';
1696
		$additional_query = '';
1697
		$filter_query = $this->getFilter($filters,true,true);
1698
		if ($country != "")
1699
		{
1700
			if (!is_string($country))
1701
			{
1702
				return false;
1703
			} else {
1704
				$additional_query .= " AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country))";
1705
				$additional_query .= " OR spotter_output.airline_country = :country";
1706
				$query_values = array(':country' => $country);
1707
			}
1708
		}
1709
		
1710
		if ($limit != "")
1711
		{
1712
			$limit_array = explode(",", $limit);
1713
			
1714
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1715
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1716
			
1717
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1718
			{
1719
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1720
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1721
			}
1722
		}
1723
					
1724
		if ($sort != "")
1725
		{
1726
			$search_orderby_array = $this->getOrderBy();
1727
			$orderby_query = $search_orderby_array[$sort]['sql'];
1728
		} else {
1729
			$orderby_query = " ORDER BY spotter_output.date DESC";
1730
		}
1731
1732
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1733
1734
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1735
1736
		return $spotter_array;
1737
	}	
1738
	
1739
	
1740
	/**
1741
	* Gets all the spotter information based on the manufacturer name
1742
	*
1743
	* @return Array the spotter information
1744
	*
1745
	*/
1746
	public function getSpotterDataByManufacturer($aircraft_manufacturer = '', $limit = '', $sort = '', $filters = array())
1747
	{
1748
		global $global_query;
1749
		
1750
		date_default_timezone_set('UTC');
1751
		
1752
		$query_values = array();
1753
		$additional_query = '';
1754
		$limit_query = '';
1755
		$filter_query = $this->getFilter($filters,true,true);
1756
		
1757
		if ($aircraft_manufacturer != "")
1758
		{
1759
			if (!is_string($aircraft_manufacturer))
1760
			{
1761
				return false;
1762
			} else {
1763
				$additional_query .= " AND (spotter_output.aircraft_manufacturer = :aircraft_manufacturer)";
1764
				$query_values = array(':aircraft_manufacturer' => $aircraft_manufacturer);
1765
			}
1766
		}
1767
		
1768
		if ($limit != "")
1769
		{
1770
			$limit_array = explode(",", $limit);
1771
			
1772
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1773
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1774
			
1775
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1776
			{
1777
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1778
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1779
			}
1780
		}
1781
1782
		if ($sort != "")
1783
		{
1784
			$search_orderby_array = $this->getOrderBy();
1785
			$orderby_query = $search_orderby_array[$sort]['sql'];
1786
		} else {
1787
			$orderby_query = " ORDER BY spotter_output.date DESC";
1788
		}
1789
1790
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1791
1792
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1793
1794
		return $spotter_array;
1795
	}
1796
1797
1798
  
1799
  
1800
	/**
1801
	* Gets a list of all aircraft that take a route
1802
	*
1803
	* @param String $departure_airport_icao ICAO code of departure airport
1804
	* @param String $arrival_airport_icao ICAO code of arrival airport
1805
	* @return Array the spotter information
1806
	*
1807
	*/
1808
	public function getSpotterDataByRoute($departure_airport_icao = '', $arrival_airport_icao = '', $limit = '', $sort = '', $filters = array())
1809
	{
1810
		global $global_query;
1811
		
1812
		$query_values = array();
1813
		$additional_query = '';
1814
		$limit_query = '';
1815
		$filter_query = $this->getFilter($filters,true,true);
1816
		if ($departure_airport_icao != "")
1817
		{
1818
			if (!is_string($departure_airport_icao))
1819
			{
1820
				return false;
1821
			} else {
1822
				$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
1823
				$additional_query .= " AND (spotter_output.departure_airport_icao = :departure_airport_icao)";
1824
				//$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";
1825
				$query_values = array(':departure_airport_icao' => $departure_airport_icao);
1826
			}
1827
		}
1828
		
1829
		if ($arrival_airport_icao != "")
1830
		{
1831
			if (!is_string($arrival_airport_icao))
1832
			{
1833
				return false;
1834
			} else {
1835
				$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
1836
				$additional_query .= " AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)";
1837
				//$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)";
1838
				$query_values = array_merge($query_values,array(':arrival_airport_icao' => $arrival_airport_icao));
1839
			}
1840
		}
1841
		
1842
		if ($limit != "")
1843
		{
1844
			$limit_array = explode(",", $limit);
1845
			
1846
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1847
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1848
			
1849
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1850
			{
1851
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1852
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1853
			}
1854
		}
1855
	
1856
		if ($sort != "")
1857
		{
1858
			$search_orderby_array = $this->getOrderBy();
1859
			$orderby_query = $search_orderby_array[$sort]['sql'];
1860
		} else {
1861
			$orderby_query = " ORDER BY spotter_output.date DESC";
1862
		}
1863
1864
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1865
          
1866
		//$result = mysqli_query($GLOBALS["___mysqli_ston"], $query);
1867
1868
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1869
1870
		return $spotter_array;
1871
	}
1872
	
1873
	
1874
	
1875
	/**
1876
	* Gets all the spotter information based on the special column in the table
1877
	*
1878
	* @return Array the spotter information
1879
	*
1880
	*/
1881
	public function getSpotterDataByHighlight($limit = '', $sort = '', $filter = array())
1882
	{
1883
		global $global_query;
1884
		
1885
		date_default_timezone_set('UTC');
1886
		$filter_query = $this->getFilter($filter,true,true);
1887
		$limit_query = '';
1888
		
1889
		if ($limit != "")
1890
		{
1891
			$limit_array = explode(",", $limit);
1892
			
1893
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1894
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1895
			
1896
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1897
			{
1898
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1899
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1900
			}
1901
		}
1902
		
1903
		if ($sort != "")
1904
		{
1905
			$search_orderby_array = $this->getOrderBy();
1906
			$orderby_query = $search_orderby_array[$sort]['sql'];
1907
		} else {
1908
			$orderby_query = " ORDER BY spotter_output.date DESC";
1909
		}
1910
1911
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' ".$orderby_query;
1912
1913
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1914
1915
		return $spotter_array;
1916
	}
1917
1918
	/**
1919
	* Gets all the highlight based on a aircraft registration
1920
	*
1921
	* @return String the highlight text
1922
	*
1923
	*/
1924
	public function getHighlightByRegistration($registration,$filter = array())
1925
	{
1926
		global $global_query;
1927
		
1928
		date_default_timezone_set('UTC');
1929
		$filter_query = $this->getFilter($filter,true,true);
1930
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
1931
		
1932
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' AND spotter_output.registration = :registration";
1933
		$sth = $this->db->prepare($query);
1934
		$sth->execute(array(':registration' => $registration));
1935
1936
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1937
		{
1938
			$highlight = $row['highlight'];
1939
		}
1940
		if (isset($highlight)) return $highlight;
1941
	}
1942
1943
	
1944
	/**
1945
	* Gets the squawk usage from squawk code
1946
	*
1947
	* @param String $squawk squawk code
1948
	* @param String $country country
1949
	* @return String usage
1950
	*
1951
	*/
1952
	public function getSquawkUsage($squawk = '',$country = 'FR')
1953
	{
1954
		
1955
		$squawk = filter_var($squawk,FILTER_SANITIZE_STRING);
1956
		$country = filter_var($country,FILTER_SANITIZE_STRING);
1957
1958
		$query  = "SELECT squawk.* FROM squawk WHERE squawk.code = :squawk AND squawk.country = :country LIMIT 1";
1959
		$query_values = array(':squawk' => ltrim($squawk,'0'), ':country' => $country);
1960
		
1961
		$sth = $this->db->prepare($query);
1962
		$sth->execute($query_values);
1963
    
1964
		$row = $sth->fetch(PDO::FETCH_ASSOC);
1965
		$sth->closeCursor();
1966
		if (count($row) > 0) {
1967
			return $row['usage'];
1968
		} else return '';
1969
	}
1970
1971
	/**
1972
	* Gets the airport icao from the iata
1973
	*
1974
	* @param String $airport_iata the iata code of the airport
1975
	* @return String airport iata
1976
	*
1977
	*/
1978
	public function getAirportIcao($airport_iata = '')
1979
	{
1980
		
1981
		$airport_iata = filter_var($airport_iata,FILTER_SANITIZE_STRING);
1982
1983
		$query  = "SELECT airport.* FROM airport WHERE airport.iata = :airport LIMIT 1";
1984
		$query_values = array(':airport' => $airport_iata);
1985
		
1986
		$sth = $this->db->prepare($query);
1987
		$sth->execute($query_values);
1988
		
1989
		$row = $sth->fetch(PDO::FETCH_ASSOC);
1990
		$sth->closeCursor();
1991
		if (count($row) > 0) {
1992
			return $row['icao'];
1993
		} else return '';
1994
	}
1995
1996
	/**
1997
	* Gets the airport distance
1998
	*
1999
	* @param String $airport_icao the icao code of the airport
2000
	* @param Float $latitude the latitude
2001
	* @param Float $longitude the longitude
2002
	* @return Float distance to the airport
2003
	*
2004
	*/
2005
	public function getAirportDistance($airport_icao,$latitude,$longitude)
2006
	{
2007
		
2008
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
2009
2010
		$query  = "SELECT airport.latitude, airport.longitude FROM airport WHERE airport.icao = :airport LIMIT 1";
2011
		$query_values = array(':airport' => $airport_icao);
2012
		$sth = $this->db->prepare($query);
2013
		$sth->execute($query_values);
2014
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2015
		$sth->closeCursor();
2016
		if (count($row) > 0) {
2017
			$airport_latitude = $row['latitude'];
2018
			$airport_longitude = $row['longitude'];
2019
			$Common = new Common();
2020
			return $Common->distance($latitude,$longitude,$airport_latitude,$airport_longitude);
2021
		} else return '';
2022
	}
2023
	
2024
	/**
2025
	* Gets the airport info based on the icao
2026
	*
2027
	* @param String $airport the icao code of the airport
2028
	* @return Array airport information
2029
	*
2030
	*/
2031
	public function getAllAirportInfo($airport = '')
2032
	{
2033
		
2034
		$airport = filter_var($airport,FILTER_SANITIZE_STRING);
2035
2036
		$query_values = array();
2037
		if ($airport == 'NA') {
2038
			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' => ''));
2039
		} elseif ($airport == '') {
2040
			$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";
2041
		} else {
2042
			$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";
2043
			$query_values = array(':airport' => $airport);
2044
		}
2045
		
2046
		$sth = $this->db->prepare($query);
2047
		$sth->execute($query_values);
2048
		/*
2049
		$airport_array = array();
2050
		$temp_array = array();
2051
		
2052
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2053
		{
2054
			$temp_array['name'] = $row['name'];
2055
			$temp_array['city'] = $row['city'];
2056
			$temp_array['country'] = $row['country'];
2057
			$temp_array['iata'] = $row['iata'];
2058
			$temp_array['icao'] = $row['icao'];
2059
			$temp_array['latitude'] = $row['latitude'];
2060
			$temp_array['longitude'] = $row['longitude'];
2061
			$temp_array['altitude'] = $row['altitude'];
2062
			$temp_array['home_link'] = $row['home_link'];
2063
			$temp_array['wikipedia_link'] = $row['wikipedia_link'];
2064
			$temp_array['image'] = $row['image'];
2065
			$temp_array['image_thumb'] = $row['image_thumb'];
2066
2067
			$airport_array[] = $temp_array;
2068
		}
2069
2070
		return $airport_array;
2071
		*/
2072
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2073
	}
2074
	
2075
	/**
2076
	* Gets the airport info based on the country
2077
	*
2078
	* @param Array $countries Airports countries
2079
	* @return Array airport information
2080
	*
2081
	*/
2082
	public function getAllAirportInfobyCountry($countries)
2083
	{
2084
		$lst_countries = '';
2085
		foreach ($countries as $country) {
2086
			$country = filter_var($country,FILTER_SANITIZE_STRING);
2087
			if ($lst_countries == '') {
2088
				$lst_countries = "'".$country."'";
2089
			} else {
2090
				$lst_countries .= ",'".$country."'";
2091
			}
2092
		}
2093
		$query  = "SELECT airport.* FROM airport WHERE airport.country IN (".$lst_countries.")";
2094
		
2095
		$sth = $this->db->prepare($query);
2096
		$sth->execute();
2097
    
2098
		$airport_array = array();
2099
		$temp_array = array();
2100
		
2101
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2102
		{
2103
			$temp_array['name'] = $row['name'];
2104
			$temp_array['city'] = $row['city'];
2105
			$temp_array['country'] = $row['country'];
2106
			$temp_array['iata'] = $row['iata'];
2107
			$temp_array['icao'] = $row['icao'];
2108
			$temp_array['latitude'] = $row['latitude'];
2109
			$temp_array['longitude'] = $row['longitude'];
2110
			$temp_array['altitude'] = $row['altitude'];
2111
2112
			$airport_array[] = $temp_array;
2113
		}
2114
2115
		return $airport_array;
2116
	}
2117
	
2118
	/**
2119
	* Gets airports info based on the coord
2120
	*
2121
	* @param Array $coord Airports longitude min,latitude min, longitude max, latitude max
2122
	* @return Array airport information
2123
	*
2124
	*/
2125
	public function getAllAirportInfobyCoord($coord)
2126
	{
2127
		global $globalDBdriver;
2128
		if (is_array($coord)) {
2129
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2130
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2131
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2132
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2133
		} else return array();
2134
		if ($globalDBdriver == 'mysql') {
2135
			$query  = "SELECT airport.* FROM airport WHERE airport.latitude BETWEEN ".$minlat." AND ".$maxlat." AND airport.longitude BETWEEN ".$minlong." AND ".$maxlong." AND airport.type != 'closed'";
2136
		} else {
2137
			$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'";
2138
		}
2139
		$sth = $this->db->prepare($query);
2140
		$sth->execute();
2141
    
2142
		$airport_array = array();
2143
		
2144
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2145
		{
2146
			$temp_array = $row;
2147
2148
			$airport_array[] = $temp_array;
2149
		}
2150
2151
		return $airport_array;
2152
	}
2153
2154
	/**
2155
	* Gets waypoints info based on the coord
2156
	*
2157
	* @param Array $coord waypoints coord
2158
	* @return Array airport information
2159
	*
2160
	*/
2161
	public function getAllWaypointsInfobyCoord($coord)
2162
	{
2163
		if (is_array($coord)) {
2164
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2165
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2166
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2167
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2168
		} else return array();
2169
		//$query  = "SELECT waypoints.* FROM waypoints WHERE waypoints.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_begin BETWEEN ".$minlong." AND ".$maxlong;
2170
		$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.")";
2171
		//$query  = "SELECT waypoints.* FROM waypoints";
2172
		//$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";
2173
		//$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;
2174
		//$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;
2175
		//echo $query;
2176
		
2177
		$sth = $this->db->prepare($query);
2178
		$sth->execute();
2179
    
2180
		$waypoints_array = array();
2181
		
2182
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2183
		{
2184
			$temp_array = $row;
2185
2186
			$waypoints_array[] = $temp_array;
2187
		}
2188
2189
		return $waypoints_array;
2190
	}
2191
	
2192
	
2193
	/**
2194
	* Gets the airline info based on the icao code or iata code
2195
	*
2196
	* @param String $airline_icao the iata code of the airport
2197
	* @return Array airport information
2198
	*
2199
	*/
2200
	public function getAllAirlineInfo($airline_icao, $fromsource = NULL)
2201
	{
2202
		global $globalUseRealAirlines;
2203
		if (isset($globalUseRealAirlines) && $globalUseRealAirlines) $fromsource = NULL;
2204
		$airline_icao = strtoupper(filter_var($airline_icao,FILTER_SANITIZE_STRING));
2205
		if ($airline_icao == 'NA') {
2206
			$airline_array = array();
2207
			$airline_array[] = array('name' => 'Not Available','iata' => 'NA', 'icao' => 'NA', 'callsign' => '', 'country' => 'NA', 'type' =>'');
2208
			return $airline_array;
2209
		} else {
2210
			if (strlen($airline_icao) == 2) {
2211
				if ($fromsource === NULL) {
2212
					$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";
2213
				} else {
2214
					$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";
2215
				}
2216
			} else {
2217
				if ($fromsource === NULL) {
2218
					$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";
2219
				} else {
2220
					$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";
2221
				}
2222
			}
2223
			
2224
			$sth = $this->db->prepare($query);
2225
			if ($fromsource === NULL) {
2226
				$sth->execute(array(':airline_icao' => $airline_icao));
2227
			} else {
2228
				$sth->execute(array(':airline_icao' => $airline_icao,':fromsource' => $fromsource));
2229
			}
2230
                        /*
2231
			$airline_array = array();
2232
			$temp_array = array();
2233
		
2234
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2235
			{
2236
				$temp_array['name'] = $row['name'];
2237
				$temp_array['iata'] = $row['iata'];
2238
				$temp_array['icao'] = $row['icao'];
2239
				$temp_array['callsign'] = $row['callsign'];
2240
				$temp_array['country'] = $row['country'];
2241
				$temp_array['type'] = $row['type'];
2242
				$airline_array[] = $temp_array;
2243
			}
2244
			return $airline_array;
2245
			*/
2246
			$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2247
			if (empty($result) && $fromsource !== NULL) {
2248
				/*
2249
				$query = 'SELECT COUNT(*) AS nb FROM airlines WHERE forsource = :fromsource';
2250
				$sth = $this->db->prepare($query);
2251
				$sth->execute(array(':fromsource' => $fromsource));
2252
				$row = $sth->fetch(PDO::FETCH_ASSOC);
2253
				$sth->closeCursor();
2254
				if ($row['nb'] == 0) $result = $this->getAllAirlineInfo($airline_icao);
2255
				*/
2256
				$result = $this->getAllAirlineInfo($airline_icao);
2257
			}
2258
			return $result;
2259
		}
2260
	}
2261
	
2262
	/**
2263
	* Gets the airline info based on the airline name
2264
	*
2265
	* @param String $airline_name the name of the airline
2266
	* @return Array airline information
2267
	*
2268
	*/
2269
	public function getAllAirlineInfoByName($airline_name, $fromsource = NULL)
2270
	{
2271
		global $globalUseRealAirlines;
2272
		if (isset($globalUseRealAirlines) && $globalUseRealAirlines) $fromsource = NULL;
2273
		$airline_name = strtolower(filter_var($airline_name,FILTER_SANITIZE_STRING));
2274
		$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";
2275
		$sth = $this->db->prepare($query);
2276
		if ($fromsource === NULL) {
2277
			$sth->execute(array(':airline_name' => $airline_name));
2278
		} else {
2279
			$sth->execute(array(':airline_name' => $airline_name,':fromsource' => $fromsource));
2280
		}
2281
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2282
		if (empty($result) && $fromsource !== NULL) {
2283
			$query = 'SELECT COUNT(*) AS nb FROM airlines WHERE forsource = :fromsource';
2284
			$sth = $this->db->prepare($query);
2285
			$sth->execute(array(':fromsource' => $fromsource));
2286
			$row = $sth->fetch(PDO::FETCH_ASSOC);
2287
			$sth->closeCursor();
2288
			if ($row['nb'] == 0) $result = $this->getAllAirlineInfoByName($airline_name);
2289
		}
2290
		return $result;
2291
	}
2292
	
2293
	
2294
	
2295
	/**
2296
	* Gets the aircraft info based on the aircraft type
2297
	*
2298
	* @param String $aircraft_type the aircraft type
2299
	* @return Array aircraft information
2300
	*
2301
	*/
2302
	public function getAllAircraftInfo($aircraft_type)
2303
	{
2304
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2305
2306
		if ($aircraft_type == 'NA') {
2307
			return array(array('icao' => 'NA','type' => 'Not Available', 'manufacturer' => 'Not Available', 'aircraft_shadow' => NULL));
2308
		}
2309
		$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";
2310
		
2311
		$sth = $this->db->prepare($query);
2312
		$sth->execute(array(':aircraft_type' => $aircraft_type));
2313
		/*
2314
		$aircraft_array = array();
2315
		$temp_array = array();
2316
		
2317
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2318
		{
2319
			$temp_array = array();
2320
			$temp_array['icao'] = $row['icao'];
2321
			$temp_array['type'] = $row['type'];
2322
			$temp_array['manufacturer'] = $row['manufacturer'];
2323
			$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
2324
2325
			$aircraft_array[] = $temp_array;
2326
		}
2327
		return $aircraft_array;
2328
		*/
2329
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2330
	}
2331
2332
	/**
2333
	* Gets the aircraft icao based on the aircraft name/type
2334
	*
2335
	* @param String $aircraft_type the aircraft type
2336
	* @return String aircraft information
2337
	*
2338
	*/
2339
	public function getAircraftIcao($aircraft_type)
2340
	{
2341
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2342
		$all_aircraft = array('737-300' => 'B733',
2343
				'777-200' => 'B772',
2344
				'777-200ER' => 'B772',
2345
				'777-300ER' => 'B77W',
2346
				'c172p' => 'C172',
2347
				'aerostar' => 'AEST',
2348
				'A320-211' => 'A320',
2349
				'747-8i' => 'B748',
2350
				'A380' => 'A388');
2351
		if (isset($all_aircraft[$aircraft_type])) return $all_aircraft[$aircraft_type];
2352
2353
		$query  = "SELECT aircraft.icao FROM aircraft WHERE aircraft.type LIKE :saircraft_type OR aircraft.type = :aircraft_type OR aircraft.icao = :aircraft_type LIMIT 1";
2354
		$aircraft_type = strtoupper($aircraft_type);
2355
		$sth = $this->db->prepare($query);
2356
		$sth->execute(array(':saircraft_type' => '%'.$aircraft_type.'%',':aircraft_type' => $aircraft_type,));
2357
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2358
		if (isset($result[0]['icao'])) return $result[0]['icao'];
2359
		else return '';
2360
	}
2361
	
2362
	/**
2363
	* Gets the aircraft info based on the aircraft modes
2364
	*
2365
	* @param String $aircraft_modes the aircraft ident (hex)
2366
	* @return String aircraft type
2367
	*
2368
	*/
2369
	public function getAllAircraftType($aircraft_modes)
2370
	{
2371
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
2372
2373
		$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes ORDER BY FirstCreated DESC LIMIT 1";
2374
		
2375
		$sth = $this->db->prepare($query);
2376
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
2377
2378
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2379
		$sth->closeCursor();
2380
		if (isset($row['icaotypecode'])) {
2381
			$icao = $row['icaotypecode'];
2382
			if (isset($this->aircraft_correct_icaotype[$icao])) $icao = $this->aircraft_correct_icaotype[$icao];
2383
			return $icao;
2384
		} else return '';
2385
	}
2386
2387
	/**
2388
	* Gets the aircraft info based on the aircraft registration
2389
	*
2390
	* @param String $registration the aircraft registration
2391
	* @return String aircraft type
2392
	*
2393
	*/
2394
	public function getAllAircraftTypeByRegistration($registration)
2395
	{
2396
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2397
2398
		$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.registration = :registration ORDER BY FirstCreated DESC LIMIT 1";
2399
		
2400
		$sth = $this->db->prepare($query);
2401
		$sth->execute(array(':registration' => $registration));
2402
2403
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2404
		$sth->closeCursor();
2405
		if (isset($row['icaotypecode'])) {
2406
			return $row['icaotypecode'];
2407
		} else return '';
2408
	}
2409
2410
	/**
2411
	* Gets the spotter_id and flightaware_id based on the aircraft registration
2412
	*
2413
	* @param String $registration the aircraft registration
2414
	* @return Array spotter_id and flightaware_id
2415
	*
2416
	*/
2417
	public function getAllIDByRegistration($registration)
2418
	{
2419
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2420
2421
		$query  = "SELECT spotter_id,flightaware_id, date FROM spotter_output WHERE spotter_output.registration = :registration";
2422
		
2423
		$sth = $this->db->prepare($query);
2424
		$sth->execute(array(':registration' => $registration));
2425
2426
		$idarray = array();
2427
		while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
2428
			$date = $row['date'];
2429
			$idarray[$date] = array('flightaware_id' => $row['flightaware_id'],'spotter_id' => $row['spotter_id']);
2430
		}
2431
		return $idarray;
2432
	}
2433
2434
	/**
2435
	* Gets correct aircraft operator code
2436
	*
2437
	* @param String $operator the aircraft operator code (callsign)
2438
	* @return String aircraft operator code
2439
	*
2440
	*/
2441
	public function getOperator($operator)
2442
	{
2443
		$operator = filter_var($operator,FILTER_SANITIZE_STRING);
2444
		$query  = "SELECT translation.operator_correct FROM translation WHERE translation.operator = :operator LIMIT 1";
2445
		
2446
		$sth = $this->db->prepare($query);
2447
		$sth->execute(array(':operator' => $operator));
2448
2449
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2450
		$sth->closeCursor();
2451
		if (isset($row['operator_correct'])) {
2452
			return $row['operator_correct'];
2453
		} else return $operator;
2454
	}
2455
2456
	/**
2457
	* Gets the aircraft route based on the aircraft callsign
2458
	*
2459
	* @param String $callsign the aircraft callsign
2460
	* @return Array aircraft type
2461
	*
2462
	*/
2463
	public function getRouteInfo($callsign)
2464
	{
2465
		$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
2466
                if ($callsign == '') return array();
2467
		$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";
2468
		
2469
		$sth = $this->db->prepare($query);
2470
		$sth->execute(array(':callsign' => $callsign));
2471
2472
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2473
		$sth->closeCursor();
2474
		if (count($row) > 0) {
2475
			return $row;
2476
		} else return array();
2477
	}
2478
	
2479
	/**
2480
	* Gets the aircraft info based on the aircraft registration
2481
	*
2482
	* @param String $registration the aircraft registration
2483
	* @return Array aircraft information
2484
	*
2485
	*/
2486
	public function getAircraftInfoByRegistration($registration)
2487
	{
2488
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2489
2490
		$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";
2491
		
2492
		$sth = $this->db->prepare($query);
2493
		$sth->execute(array(':registration' => $registration));
2494
2495
		$aircraft_array = array();
2496
		$temp_array = array();
2497
		
2498
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2499
		{
2500
			$temp_array['airline_icao'] = $row['airline_icao'];
2501
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2502
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2503
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2504
2505
			$aircraft_array[] = $temp_array;
2506
		}
2507
2508
		return $aircraft_array;
2509
	}
2510
	
2511
	/**
2512
	* Gets the aircraft owner & base based on the aircraft registration
2513
	*
2514
	* @param String $registration the aircraft registration
2515
	* @return Array aircraft information
2516
	*
2517
	*/
2518
	public function getAircraftOwnerByRegistration($registration)
2519
	{
2520
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2521
		$Connection = new Connection($this->db);
2522
		if ($Connection->tableExists('aircraft_owner')) {
2523
			$query  = "SELECT aircraft_owner.base, aircraft_owner.owner, aircraft_owner.date_first_reg FROM aircraft_owner WHERE registration = :registration LIMIT 1";
2524
			$sth = $this->db->prepare($query);
2525
			$sth->execute(array(':registration' => $registration));
2526
			$result = $sth->fetch(PDO::FETCH_ASSOC);
2527
			$sth->closeCursor();
2528
			return $result;
2529
		} else return array();
2530
	}
2531
	
2532
  
2533
  /**
2534
	* Gets all flights (but with only little info)
2535
	*
2536
	* @return Array basic flight information
2537
	*
2538
	*/
2539
	public function getAllFlightsforSitemap()
2540
	{
2541
		//$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 ";
2542
		$query  = "SELECT spotter_output.spotter_id FROM spotter_output ORDER BY spotter_id DESC LIMIT 200 OFFSET 0";
2543
		
2544
		$sth = $this->db->prepare($query);
2545
		$sth->execute();
2546
                  /*
2547
		$flight_array = array();
2548
		$temp_array = array();
2549
		
2550
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2551
		{
2552
			$temp_array['spotter_id'] = $row['spotter_id'];
2553
//			$temp_array['ident'] = $row['ident'];
2554
//			$temp_array['airline_name'] = $row['airline_name'];
2555
//			$temp_array['aircraft_type'] = $row['aircraft_icao'];
2556
//			$temp_array['aircraft_name'] = $row['aircraft_name'];
2557
			//$temp_array['image'] = $row['image'];
2558
2559
			$flight_array[] = $temp_array;
2560
		}
2561
2562
		return $flight_array;
2563
		*/
2564
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2565
	}
2566
  
2567
	/**
2568
	* Gets a list of all aircraft manufacturers
2569
	*
2570
	* @return Array list of aircraft types
2571
	*
2572
	*/
2573
	public function getAllManufacturers()
2574
	{
2575
		/*
2576
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer AS aircraft_manufacturer
2577
								FROM spotter_output
2578
								WHERE spotter_output.aircraft_manufacturer <> '' 
2579
								ORDER BY spotter_output.aircraft_manufacturer ASC";
2580
		  */
2581
		
2582
		$query = "SELECT DISTINCT manufacturer AS aircraft_manufacturer FROM aircraft WHERE manufacturer <> '' ORDER BY manufacturer ASC";
2583
		$sth = $this->db->prepare($query);
2584
		$sth->execute();
2585
2586
		$manufacturer_array = array();
2587
		$temp_array = array();
2588
		
2589
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2590
		{
2591
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2592
2593
			$manufacturer_array[] = $temp_array;
2594
		}
2595
2596
		return $manufacturer_array;
2597
	}
2598
  
2599
  
2600
  /**
2601
	* Gets a list of all aircraft types
2602
	*
2603
	* @return Array list of aircraft types
2604
	*
2605
	*/
2606
	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...
2607
	{
2608
		/*
2609
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao AS aircraft_icao, spotter_output.aircraft_name AS aircraft_name
2610
								FROM spotter_output  
2611
								WHERE spotter_output.aircraft_icao <> '' 
2612
								ORDER BY spotter_output.aircraft_name ASC";
2613
								
2614
		*/
2615
		//$filter_query = $this->getFilter($filters,true,true);
2616
		//$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";
2617
2618
		$query = "SELECT DISTINCT icao AS aircraft_icao, type AS aircraft_name, manufacturer AS aircraft_manufacturer FROM aircraft WHERE icao <> '' ORDER BY aircraft_manufacturer ASC";
2619
		
2620
		$sth = $this->db->prepare($query);
2621
		$sth->execute();
2622
2623
		$aircraft_array = array();
2624
		$temp_array = array();
2625
		
2626
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2627
		{
2628
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2629
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2630
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2631
2632
			$aircraft_array[] = $temp_array;
2633
		}
2634
2635
		return $aircraft_array;
2636
	}
2637
	
2638
	
2639
	/**
2640
	* Gets a list of all aircraft registrations
2641
	*
2642
	* @return Array list of aircraft registrations
2643
	*
2644
	*/
2645
	public function getAllAircraftRegistrations($filters = array())
2646
	{
2647
		$filter_query = $this->getFilter($filters,true,true);
2648
		$query  = "SELECT DISTINCT spotter_output.registration 
2649
				FROM spotter_output".$filter_query." spotter_output.registration <> '' 
2650
				ORDER BY spotter_output.registration ASC";
2651
2652
		$sth = $this->db->prepare($query);
2653
		$sth->execute();
2654
2655
		$aircraft_array = array();
2656
		$temp_array = array();
2657
		
2658
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2659
		{
2660
			$temp_array['registration'] = $row['registration'];
2661
2662
			$aircraft_array[] = $temp_array;
2663
		}
2664
2665
		return $aircraft_array;
2666
	}
2667
2668
	/**
2669
	* Gets all source name
2670
	*
2671
	* @param String type format of source
2672
	* @return Array list of source name
2673
	*
2674
	*/
2675
	public function getAllSourceName($type = '',$filters = array())
2676
	{
2677
		$filter_query = $this->getFilter($filters,true,true);
2678
		$query_values = array();
2679
		$query  = "SELECT DISTINCT spotter_output.source_name 
2680
				FROM spotter_output".$filter_query." spotter_output.source_name <> ''";
2681
		if ($type != '') {
2682
			$query_values = array(':type' => $type);
2683
			$query .= " AND format_source = :type";
2684
		}
2685
		$query .= " ORDER BY spotter_output.source_name ASC";
2686
2687
		$sth = $this->db->prepare($query);
2688
		if (!empty($query_values)) $sth->execute($query_values);
2689
		else $sth->execute();
2690
2691
		$source_array = array();
2692
		$temp_array = array();
2693
		
2694
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2695
		{
2696
			$temp_array['source_name'] = $row['source_name'];
2697
			$source_array[] = $temp_array;
2698
		}
2699
		return $source_array;
2700
	}
2701
2702
2703
2704
	/**
2705
	* Gets a list of all airline names
2706
	*
2707
	* @return Array list of airline names
2708
	*
2709
	*/
2710
	public function getAllAirlineNames($airline_type = '',$forsource = NULL,$filters = array())
2711
	{
2712
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2713
		$filter_query = $this->getFilter($filters,true,true);
2714
		$airline_type = filter_var($airline_type,FILTER_SANITIZE_STRING);
2715
		if ($airline_type == '' || $airline_type == 'all') {
2716
			/*
2717
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2718
								FROM spotter_output
2719
								WHERE spotter_output.airline_icao <> '' 
2720
								ORDER BY spotter_output.airline_name ASC";
2721
			*/
2722
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2723
			elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2724
			elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2725
			if ($forsource === NULL) {
2726
				$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";
2727
				$query_data = array();
2728
			} else {
2729
				$query = "SELECT DISTINCT icao AS airline_icao, name AS airline_name, type AS airline_type FROM airlines WHERE forsource = :forsource ORDER BY name ASC";
2730
				$query_data = array(':forsource' => $forsource);
2731
			}
2732
		} else {
2733
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2734
					FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
2735
					AND spotter_output.airline_type = :airline_type 
2736
					ORDER BY spotter_output.airline_icao ASC";
2737
			$query_data = array(':airline_type' => $airline_type);
2738
		}
2739
		
2740
		$sth = $this->db->prepare($query);
2741
		$sth->execute($query_data);
2742
    
2743
		$airline_array = array();
2744
		$temp_array = array();
2745
		
2746
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2747
		{
2748
			$temp_array['airline_icao'] = $row['airline_icao'];
2749
			$temp_array['airline_name'] = $row['airline_name'];
2750
			$temp_array['airline_type'] = $row['airline_type'];
2751
2752
			$airline_array[] = $temp_array;
2753
		}
2754
		return $airline_array;
2755
	}
2756
	
2757
	/**
2758
	* Gets a list of all alliance names
2759
	*
2760
	* @return Array list of alliance names
2761
	*
2762
	*/
2763
	public function getAllAllianceNames($forsource = NULL,$filters = array())
2764
	{
2765
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2766
		$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...
2767
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2768
		elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2769
		elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2770
		if ($forsource === NULL) {
2771
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND forsource IS NULL ORDER BY alliance ASC";
2772
			$query_data = array();
2773
		} else {
2774
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND  forsource = :forsource ORDER BY alliance ASC";
2775
			$query_data = array(':forsource' => $forsource);
2776
		}
2777
		
2778
		$sth = $this->db->prepare($query);
2779
		$sth->execute($query_data);
2780
    
2781
		$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...
2782
		$alliance_array = $sth->fetchAll(PDO::FETCH_ASSOC);
2783
		return $alliance_array;
2784
	}
2785
	
2786
	/**
2787
	* Gets a list of all airline countries
2788
	*
2789
	* @return Array list of airline countries
2790
	*
2791
	*/
2792
	public function getAllAirlineCountries($filters = array())
2793
	{
2794
		$filter_query = $this->getFilter($filters,true,true);
2795
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
2796
				FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
2797
				ORDER BY spotter_output.airline_country ASC";
2798
		
2799
		//$query = "SELECT DISTINCT country AS airline_country FROM airlines WHERE country <> '' AND active = 'Y' ORDER BY country ASC";
2800
		$sth = $this->db->prepare($query);
2801
		$sth->execute();
2802
2803
		$airline_array = array();
2804
		$temp_array = array();
2805
		
2806
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2807
		{
2808
			$temp_array['airline_country'] = $row['airline_country'];
2809
2810
			$airline_array[] = $temp_array;
2811
		}
2812
2813
		return $airline_array;
2814
	}
2815
2816
	
2817
	
2818
	/**
2819
	* Gets a list of all departure & arrival names
2820
	*
2821
	* @return Array list of airport names
2822
	*
2823
	*/
2824
	public function getAllAirportNames($filters = array())
2825
	{
2826
		$filter_query = $this->getFilter($filters,true,true);
2827
		$airport_array = array();
2828
		$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
2829
				FROM spotter_output".$filter_query." spotter_output.departure_airport_icao <> '' AND spotter_output.departure_airport_icao <> 'NA' 
2830
				ORDER BY spotter_output.departure_airport_city ASC";
2831
		
2832
		//$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";
2833
		$sth = $this->db->prepare($query);
2834
		$sth->execute();
2835
2836
		$temp_array = array();
2837
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2838
		{
2839
			$temp_array['airport_icao'] = $row['airport_icao'];
2840
			$temp_array['airport_name'] = $row['airport_name'];
2841
			$temp_array['airport_city'] = $row['airport_city'];
2842
			$temp_array['airport_country'] = $row['airport_country'];
2843
2844
			$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2845
		}
2846
2847
		$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
2848
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> '' AND spotter_output.arrival_airport_icao <> 'NA' 
2849
								ORDER BY spotter_output.arrival_airport_city ASC";
2850
					
2851
		$sth = $this->db->prepare($query);
2852
		$sth->execute();
2853
2854
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2855
			{
2856
		//	if ($airport_array[$row['airport_city'].",".$row['airport_name']]['airport_icao'] != $row['airport_icao'])
2857
		//	{
2858
				$temp_array['airport_icao'] = $row['airport_icao'];
2859
				$temp_array['airport_name'] = $row['airport_name'];
2860
				$temp_array['airport_city'] = $row['airport_city'];
2861
				$temp_array['airport_country'] = $row['airport_country'];
2862
				
2863
				$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2864
		//	}
2865
		}
2866
2867
		return $airport_array;
2868
	} 
2869
2870
	/**
2871
	* Gets a list of all owner names
2872
	*
2873
	* @return Array list of owner names
2874
	*
2875
	*/
2876
	public function getAllOwnerNames($filters = array())
2877
	{
2878
		$filter_query = $this->getFilter($filters,true,true);
2879
		$airport_array = array();
0 ignored issues
show
Unused Code introduced by
$airport_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...
2880
		$query  = "SELECT DISTINCT spotter_output.owner_name
2881
				FROM spotter_output".$filter_query." spotter_output.owner_name <> '' 
2882
				ORDER BY spotter_output.owner_name ASC";
2883
		
2884
		$sth = $this->db->prepare($query);
2885
		$sth->execute();
2886
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2887
	} 
2888
2889
	/**
2890
	* Gets a list of all pilot names and pilot ids
2891
	*
2892
	* @return Array list of pilot names and pilot ids
2893
	*
2894
	*/
2895
	public function getAllPilotNames($filters = array())
2896
	{
2897
		$filter_query = $this->getFilter($filters,true,true);
2898
		$airport_array = array();
0 ignored issues
show
Unused Code introduced by
$airport_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...
2899
		$query  = "SELECT DISTINCT spotter_output.pilot_name, spotter_output.pilot_id
2900
				FROM spotter_output".$filter_query." spotter_output.pilot_name <> '' 
2901
				ORDER BY spotter_output.pilot_name ASC";
2902
		
2903
		$sth = $this->db->prepare($query);
2904
		$sth->execute();
2905
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2906
	} 
2907
	
2908
	
2909
	/**
2910
	* Gets a list of all departure & arrival airport countries
2911
	*
2912
	* @return Array list of airport countries
2913
	*
2914
	*/
2915
	public function getAllAirportCountries($filters = array())
2916
	{
2917
		$airport_array = array();
2918
					
2919
		  /*
2920
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
2921
								FROM spotter_output
2922
								WHERE spotter_output.departure_airport_country <> '' 
2923
								ORDER BY spotter_output.departure_airport_country ASC";
2924
		*/
2925
		$query = "SELECT DISTINCT country AS airport_country FROM airport ORDER BY country ASC";
2926
		
2927
		$sth = $this->db->prepare($query);
2928
		$sth->execute();
2929
   
2930
		$temp_array = array();
2931
		
2932
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2933
		{
2934
			$temp_array['airport_country'] = $row['airport_country'];
2935
2936
			$airport_array[$row['airport_country']] = $temp_array;
2937
		}
2938
		$filter_query = $this->getFilter($filters,true,true);
2939
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
2940
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
2941
								ORDER BY spotter_output.arrival_airport_country ASC";
2942
					
2943
		$sth = $this->db->prepare($query);
2944
		$sth->execute();
2945
		
2946
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2947
		{
2948
			if (isset($airport_array[$row['airport_country']]['airport_country']) && $airport_array[$row['airport_country']]['airport_country'] != $row['airport_country'])
2949
			{
2950
				$temp_array['airport_country'] = $row['airport_country'];
2951
				$airport_array[$row['airport_country']] = $temp_array;
2952
			}
2953
		}
2954
2955
		return $airport_array;
2956
	} 
2957
	
2958
	
2959
	
2960
	
2961
	/**
2962
	* Gets a list of all countries (airline, departure airport & arrival airport)
2963
	*
2964
	* @return Array list of countries
2965
	*
2966
	*/
2967
	public function getAllCountries($filters = array())
2968
	{
2969
		$Connection= new Connection($this->db);
2970
		if ($Connection->tableExists('countries')) {
2971
			$query  = "SELECT countries.name AS airport_country
2972
				FROM countries
2973
				ORDER BY countries.name ASC";
2974
			$sth = $this->db->prepare($query);
2975
			$sth->execute();
2976
   
2977
			$temp_array = array();
2978
			$country_array = array();
2979
		
2980
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2981
			{
2982
				$temp_array['country'] = $row['airport_country'];
2983
				$country_array[$row['airport_country']] = $temp_array;
2984
			}
2985
		} else {
2986
			$filter_query = $this->getFilter($filters,true,true);
2987
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
2988
								FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' 
2989
								ORDER BY spotter_output.departure_airport_country ASC";
2990
2991
			$sth = $this->db->prepare($query);
2992
			$sth->execute();
2993
   
2994
			$temp_array = array();
2995
			$country_array = array();
2996
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2997
			{
2998
				$temp_array['country'] = $row['airport_country'];
2999
				$country_array[$row['airport_country']] = $temp_array;
3000
			}
3001
3002
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
3003
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
3004
								ORDER BY spotter_output.arrival_airport_country ASC";
3005
					
3006
		$sth = $this->db->prepare($query);
3007
		$sth->execute();
3008
		
3009
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3010
		{
3011
			if ($country_array[$row['airport_country']]['country'] != $row['airport_country'])
3012
			{
3013
				$temp_array['country'] = $row['airport_country'];
3014
				
3015
				$country_array[$row['country']] = $temp_array;
3016
			}
3017
		}
3018
		
3019
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
3020
								FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
3021
								ORDER BY spotter_output.airline_country ASC";
3022
					
3023
		$sth = $this->db->prepare($query);
3024
		$sth->execute();
3025
		
3026
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3027
		{
3028
			if (isset($country_array[$row['airline_country']]['country']) && $country_array[$row['airline_country']]['country'] != $row['airline_country'])
3029
			{
3030
				$temp_array['country'] = $row['airline_country'];
3031
				
3032
				$country_array[$row['country']] = $temp_array;
3033
			}
3034
		}
3035
		}  
3036
		return $country_array;
3037
	} 
3038
	
3039
	
3040
	
3041
	
3042
	/**
3043
	* Gets a list of all idents/callsigns
3044
	*
3045
	* @return Array list of ident/callsign names
3046
	*
3047
	*/
3048
	public function getAllIdents($filters = array())
3049
	{
3050
		$filter_query = $this->getFilter($filters,true,true);
3051
		$query  = "SELECT DISTINCT spotter_output.ident
3052
								FROM spotter_output".$filter_query." spotter_output.ident <> '' 
3053
								ORDER BY spotter_output.date ASC LIMIT 700 OFFSET 0";
3054
3055
		$sth = $this->db->prepare($query);
3056
		$sth->execute();
3057
    
3058
		$ident_array = array();
3059
		$temp_array = array();
3060
		
3061
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3062
		{
3063
			$temp_array['ident'] = $row['ident'];
3064
			$ident_array[] = $temp_array;
3065
		}
3066
3067
		return $ident_array;
3068
	}
3069
3070
	/**
3071
	* Get a list of flights from airport since 7 days
3072
	* @return Array number, icao, name and city of airports
3073
	*/
3074
3075
	public function getLast7DaysAirportsDeparture($airport_icao = '',$filters = array()) {
3076
		global $globalTimezone, $globalDBdriver;
3077
		$filter_query = $this->getFilter($filters,true,true);
3078
		if ($globalTimezone != '') {
3079
			date_default_timezone_set($globalTimezone);
3080
			$datetime = new DateTime();
3081
			$offset = $datetime->format('P');
3082
		} else $offset = '+00:00';
3083
		if ($airport_icao == '') {
3084
			if ($globalDBdriver == 'mysql') {
3085
				$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";
3086
			} else {
3087
				$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";
3088
			}
3089
			$sth = $this->db->prepare($query);
3090
			$sth->execute(array(':offset' => $offset));
3091
		} else {
3092
			if ($globalDBdriver == 'mysql') {
3093
				$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";
3094
			} else {
3095
				$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";
3096
			}
3097
			$sth = $this->db->prepare($query);
3098
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3099
		}
3100
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3101
	}
3102
3103
	/**
3104
	* Get a list of flights from airport since 7 days
3105
	* @return Array number, icao, name and city of airports
3106
	*/
3107
3108
	public function getLast7DaysAirportsDepartureByAirlines($airport_icao = '') {
3109
		global $globalTimezone, $globalDBdriver;
3110
		if ($globalTimezone != '') {
3111
			date_default_timezone_set($globalTimezone);
3112
			$datetime = new DateTime();
3113
			$offset = $datetime->format('P');
3114
		} else $offset = '+00:00';
3115
		if ($airport_icao == '') {
3116
			if ($globalDBdriver == 'mysql') {
3117
				$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";
3118
			} else {
3119
				$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";
3120
			}
3121
			$sth = $this->db->prepare($query);
3122
			$sth->execute(array(':offset' => $offset));
3123
		} else {
3124
			if ($globalDBdriver == 'mysql') {
3125
				$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";
3126
			} else {
3127
				$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";
3128
			}
3129
			$sth = $this->db->prepare($query);
3130
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3131
		}
3132
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3133
	}
3134
3135
	/**
3136
	* Get a list of flights from detected airport since 7 days
3137
	* @return Array number, icao, name and city of airports
3138
	*/
3139
3140
	public function getLast7DaysDetectedAirportsDeparture($airport_icao = '', $filters = array()) {
3141
		global $globalTimezone, $globalDBdriver;
3142
		$filter_query = $this->getFilter($filters,true,true);
3143
		if ($globalTimezone != '') {
3144
			date_default_timezone_set($globalTimezone);
3145
			$datetime = new DateTime();
3146
			$offset = $datetime->format('P');
3147
		} else $offset = '+00:00';
3148
		if ($airport_icao == '') {
3149
			if ($globalDBdriver == 'mysql') {
3150
				$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 
3151
				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 <> '' 
3152
				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";
3153
			} else {
3154
				$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 
3155
				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 <> '' 
3156
				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";
3157
			}
3158
			$sth = $this->db->prepare($query);
3159
			$sth->execute(array(':offset' => $offset));
3160
		} else {
3161
			if ($globalDBdriver == 'mysql') {
3162
				$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 
3163
				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 
3164
				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";
3165
			} else {
3166
				$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 
3167
				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";
3168
			}
3169
			$sth = $this->db->prepare($query);
3170
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3171
		}
3172
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3173
	}
3174
3175
	/**
3176
	* Get a list of flights from detected airport since 7 days
3177
	* @return Array number, icao, name and city of airports
3178
	*/
3179
3180
	public function getLast7DaysDetectedAirportsDepartureByAirlines($airport_icao = '') {
3181
		global $globalTimezone, $globalDBdriver;
3182
		if ($globalTimezone != '') {
3183
			date_default_timezone_set($globalTimezone);
3184
			$datetime = new DateTime();
3185
			$offset = $datetime->format('P');
3186
		} else $offset = '+00:00';
3187
		if ($airport_icao == '') {
3188
			if ($globalDBdriver == 'mysql') {
3189
				$query = "SELECT spotter_output.airline_icao, COUNT(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 `spotter_output`, airport 
3191
				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 <> '' 
3192
				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";
3193
			} else {
3194
				$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 
3195
				FROM spotter_output, airport 
3196
				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 <> '' 
3197
				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";
3198
			}
3199
			$sth = $this->db->prepare($query);
3200
			$sth->execute(array(':offset' => $offset));
3201
		} else {
3202
			if ($globalDBdriver == 'mysql') {
3203
				$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 
3204
				FROM `spotter_output`, airport 
3205
				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 
3206
				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";
3207
			} else {
3208
				$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 
3209
				FROM spotter_output, airport 
3210
				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";
3211
			}
3212
			$sth = $this->db->prepare($query);
3213
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3214
		}
3215
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3216
	}
3217
3218
3219
	/**
3220
	* Get a list of flights to airport since 7 days
3221
	* @return Array number, icao, name and city of airports
3222
	*/
3223
3224
	public function getLast7DaysAirportsArrival($airport_icao = '', $filters = array()) {
3225
		global $globalTimezone, $globalDBdriver;
3226
		$filter_query = $this->getFilter($filters,true,true);
3227
		if ($globalTimezone != '') {
3228
			date_default_timezone_set($globalTimezone);
3229
			$datetime = new DateTime();
3230
			$offset = $datetime->format('P');
3231
		} else $offset = '+00:00';
3232
		if ($airport_icao == '') {
3233
			if ($globalDBdriver == 'mysql') {
3234
				$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";
3235
			} else {
3236
				$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";
3237
			}
3238
			$sth = $this->db->prepare($query);
3239
			$sth->execute(array(':offset' => $offset));
3240
		} else {
3241
			if ($globalDBdriver == 'mysql') {
3242
				$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";
3243
			} else {
3244
				$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";
3245
			}
3246
			$sth = $this->db->prepare($query);
3247
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3248
		}
3249
		
3250
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3251
	}
3252
3253
3254
	/**
3255
	* Get a list of flights detected to airport since 7 days
3256
	* @return Array number, icao, name and city of airports
3257
	*/
3258
3259
	public function getLast7DaysDetectedAirportsArrival($airport_icao = '',$filters = array()) {
3260
		global $globalTimezone, $globalDBdriver;
3261
		$filter_query = $this->getFilter($filters,true,true);
3262
		if ($globalTimezone != '') {
3263
			date_default_timezone_set($globalTimezone);
3264
			$datetime = new DateTime();
3265
			$offset = $datetime->format('P');
3266
		} else $offset = '+00:00';
3267
		if ($airport_icao == '') {
3268
			if ($globalDBdriver == 'mysql') {
3269
				$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 
3270
				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 <> '' 
3271
				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";
3272
			} else {
3273
				$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 
3274
				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 <> '' 
3275
				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";
3276
			}
3277
			$sth = $this->db->prepare($query);
3278
			$sth->execute(array(':offset' => $offset));
3279
		} else {
3280
			if ($globalDBdriver == 'mysql') {
3281
				$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 
3282
				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 
3283
				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";
3284
			} else {
3285
				$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 
3286
				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 
3287
				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";
3288
			}
3289
			$sth = $this->db->prepare($query);
3290
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3291
		}
3292
		
3293
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3294
	}
3295
3296
3297
	/**
3298
	* Get a list of flights to airport since 7 days
3299
	* @return Array number, icao, name and city of airports
3300
	*/
3301
3302
	public function getLast7DaysAirportsArrivalByAirlines($airport_icao = '') {
3303
		global $globalTimezone, $globalDBdriver;
3304
		if ($globalTimezone != '') {
3305
			date_default_timezone_set($globalTimezone);
3306
			$datetime = new DateTime();
3307
			$offset = $datetime->format('P');
3308
		} else $offset = '+00:00';
3309
		if ($airport_icao == '') {
3310
			if ($globalDBdriver == 'mysql') {
3311
				$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";
3312
			} else {
3313
				$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";
3314
			}
3315
			$sth = $this->db->prepare($query);
3316
			$sth->execute(array(':offset' => $offset));
3317
		} else {
3318
			if ($globalDBdriver == 'mysql') {
3319
				$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";
3320
			} else {
3321
				$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";
3322
			}
3323
			$sth = $this->db->prepare($query);
3324
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3325
		}
3326
		
3327
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3328
	}
3329
3330
3331
	/**
3332
	* Get a list of flights detected to airport since 7 days
3333
	* @return Array number, icao, name and city of airports
3334
	*/
3335
3336
	public function getLast7DaysDetectedAirportsArrivalByAirlines($airport_icao = '') {
3337
		global $globalTimezone, $globalDBdriver;
3338
		if ($globalTimezone != '') {
3339
			date_default_timezone_set($globalTimezone);
3340
			$datetime = new DateTime();
3341
			$offset = $datetime->format('P');
3342
		} else $offset = '+00:00';
3343
		if ($airport_icao == '') {
3344
			if ($globalDBdriver == 'mysql') {
3345
				$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 
3346
				FROM `spotter_output`, airport 
3347
				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 <> '' 
3348
				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";
3349
			} else {
3350
				$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 
3351
				FROM spotter_output, airport 
3352
				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 <> '' 
3353
				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";
3354
			}
3355
			$sth = $this->db->prepare($query);
3356
			$sth->execute(array(':offset' => $offset));
3357
		} else {
3358
			if ($globalDBdriver == 'mysql') {
3359
				$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 
3360
				FROM `spotter_output`, airport 
3361
				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 
3362
				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";
3363
			} else {
3364
				$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 
3365
				FROM spotter_output, airport 
3366
				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 
3367
				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";
3368
			}
3369
			$sth = $this->db->prepare($query);
3370
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3371
		}
3372
		
3373
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3374
	}
3375
3376
3377
	/**
3378
	* Gets a list of all dates
3379
	*
3380
	* @return Array list of date names
3381
	*
3382
	*/
3383
	public function getAllDates()
3384
	{
3385
		global $globalTimezone, $globalDBdriver;
3386
		if ($globalTimezone != '') {
3387
			date_default_timezone_set($globalTimezone);
3388
			$datetime = new DateTime();
3389
			$offset = $datetime->format('P');
3390
		} else $offset = '+00:00';
3391
3392
		if ($globalDBdriver == 'mysql') {
3393
			$query  = "SELECT DISTINCT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) as date
3394
								FROM spotter_output
3395
								WHERE spotter_output.date <> '' 
3396
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3397
		} else {
3398
			$query  = "SELECT DISTINCT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date
3399
								FROM spotter_output
3400
								WHERE spotter_output.date <> '' 
3401
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3402
		}
3403
		
3404
		$sth = $this->db->prepare($query);
3405
		$sth->execute(array(':offset' => $offset));
3406
    
3407
		$date_array = array();
3408
		$temp_array = array();
3409
		
3410
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3411
		{
3412
			$temp_array['date'] = $row['date'];
3413
3414
			$date_array[] = $temp_array;
3415
		}
3416
3417
		return $date_array;
3418
	}
3419
	
3420
	
3421
	
3422
	/**
3423
	* Gets all route combinations
3424
	*
3425
	* @return Array the route list
3426
	*
3427
	*/
3428
	public function getAllRoutes()
3429
	{
3430
		$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 
3431
				FROM spotter_output
3432
				WHERE spotter_output.ident <> '' 
3433
				GROUP BY route
3434
				ORDER BY route ASC";
3435
3436
		$sth = $this->db->prepare($query);
3437
		$sth->execute();
3438
3439
		$routes_array = array();
3440
		$temp_array = array();
3441
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3442
		{
3443
			$temp_array['route'] = $row['route'];
3444
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
3445
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
3446
3447
			$routes_array[] = $temp_array;
3448
		}
3449
		return $routes_array;
3450
	}
3451
3452
	/**
3453
	* Update ident spotter data
3454
	*
3455
	* @param String $flightaware_id the ID from flightaware
3456
	* @param String $ident the flight ident
3457
	* @return String success or false
3458
	*
3459
	*/	
3460
	public function updateIdentSpotterData($flightaware_id = '', $ident = '',$fromsource = NULL)
3461
	{
3462
		if (!is_numeric(substr($ident, 0, 3)))
3463
		{
3464
			if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3465
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3466
			} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3467
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3468
			} else {
3469
				$airline_array = $this->getAllAirlineInfo("NA");
3470
			}
3471
			if (count($airline_array) == 0) {
3472
				$airline_array = $this->getAllAirlineInfo("NA");
3473
			}
3474
			if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3475
				$airline_array = $this->getAllAirlineInfo("NA");
3476
			}
3477
		} else {
3478
			$airline_array = $this->getAllAirlineInfo("NA");
3479
		}
3480
                $airline_name = $airline_array[0]['name'];
3481
                $airline_icao = $airline_array[0]['icao'];
3482
                $airline_country = $airline_array[0]['country'];
3483
                $airline_type = $airline_array[0]['type'];
3484
3485
3486
		$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';
3487
                $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);
3488
3489
		try {
3490
			$sth = $this->db->prepare($query);
3491
			$sth->execute($query_values);
3492
		} catch (PDOException $e) {
3493
			return "error : ".$e->getMessage();
3494
		}
3495
		
3496
		return "success";
3497
3498
	}
3499
	/**
3500
	* Update latest spotter data
3501
	*
3502
	* @param String $flightaware_id the ID from flightaware
3503
	* @param String $ident the flight ident
3504
	* @param String $arrival_airport_icao the arrival airport
3505
	* @return String success or false
3506
	*
3507
	*/	
3508
	public function updateLatestSpotterData($flightaware_id = '', $ident = '', $latitude = '', $longitude = '', $altitude = '', $ground = false, $groundspeed = NULL, $date = '', $arrival_airport_icao = '',$arrival_airport_time = '')
3509
	{
3510
		if ($groundspeed == '') $groundspeed = NULL;
3511
		$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';
3512
                $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);
3513
3514
		try {
3515
			$sth = $this->db->prepare($query);
3516
			$sth->execute($query_values);
3517
		} catch (PDOException $e) {
3518
			return "error : ".$e->getMessage();
3519
		}
3520
		
3521
		return "success";
3522
3523
	}
3524
3525
	/**
3526
	* Adds a new spotter data
3527
	*
3528
	* @param String $flightaware_id the ID from flightaware
3529
	* @param String $ident the flight ident
3530
	* @param String $aircraft_icao the aircraft type
3531
	* @param String $departure_airport_icao the departure airport
3532
	* @param String $arrival_airport_icao the arrival airport
3533
	* @param String $latitude latitude of flight
3534
	* @param String $longitude latitude of flight
3535
	* @param String $waypoints waypoints of flight
3536
	* @param String $altitude altitude of flight
3537
	* @param String $heading heading of flight
3538
	* @param String $groundspeed speed of flight
3539
	* @param String $date date of flight
3540
	* @param String $departure_airport_time departure time of flight
3541
	* @param String $arrival_airport_time arrival time of flight
3542
	* @param String $squawk squawk code of flight
3543
	* @param String $route_stop route stop of flight
3544
	* @param String $highlight highlight or not
3545
	* @param String $ModeS ModesS code of flight
3546
	* @param String $registration registration code of flight
3547
	* @param String $pilot_id pilot id of flight (for virtual airlines)
3548
	* @param String $pilot_name pilot name of flight (for virtual airlines)
3549
	* @param String $verticalrate vertival rate of flight
3550
	* @return String success or false
3551
	*/
3552
	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 = '')
3553
	{
3554
		global $globalURL, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalDebugTimeElapsed, $globalAirlinesSource, $globalVAM;
3555
		
3556
		//if (isset($globalDebugTimeElapsed) || $globalDebugTimeElapsed == '') $globalDebugTimeElapsed = FALSE;
3557
		$Image = new Image($this->db);
3558
		$Common = new Common();
3559
		
3560
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
3561
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
3562
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
3563
		if (!isset($globalVAM)) $globalVAM = FALSE;
3564
		date_default_timezone_set('UTC');
3565
		
3566
		//getting the registration
3567
		if ($flightaware_id != "" && $registration == '')
3568
		{
3569
			if (!is_string($flightaware_id))
3570
			{
3571
				return false;
3572
			} else {
3573
				if ($ModeS != '') {
3574
					$timeelapsed = microtime(true);
3575
					$registration = $this->getAircraftRegistrationBymodeS($ModeS);
3576
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3577
				} else {
3578
					$myhex = explode('-',$flightaware_id);
3579
					if (count($myhex) > 0) {
3580
						$timeelapsed = microtime(true);
3581
						$registration = $this->getAircraftRegistrationBymodeS($myhex[0]);
3582
						if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3583
					}
3584
				}
3585
			}
3586
		}
3587
		$fromsource = NULL;
3588
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
3589
		elseif ($format_source == 'vatsimtxt') $fromsource = 'vatsim';
3590
		elseif ($format_source == 'whazzup') $fromsource = 'ivao';
3591
		elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
3592
		elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
3593
		//getting the airline information
3594
		if ($ident != "")
3595
		{
3596
			if (!is_string($ident))
3597
			{
3598
				return false;
3599
			} else {
3600
				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'))
3601
				{
3602
					$timeelapsed = microtime(true);
3603
					if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3604
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3605
					} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3606
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3607
					} else {
3608
						$airline_array = $this->getAllAirlineInfo("NA");
3609
					}
3610
					if (count($airline_array) == 0) {
3611
						$airline_array = $this->getAllAirlineInfo("NA");
3612
					}
3613
					if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3614
						$airline_array = $this->getAllAirlineInfo("NA");
3615
					}
3616
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3617
3618
				} else {
3619
					$timeelapsed = microtime(true);
3620
					$airline_array = $this->getAllAirlineInfo("NA");
3621
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3622
				}
3623
			}
3624
		} else $airline_array = array();
3625
		
3626
		//getting the aircraft information
3627
		$aircraft_array = array();
3628
		if ($aircraft_icao != '')
3629
		{
3630
			if (!is_string($aircraft_icao))
3631
			{
3632
				return false;
3633
			} else {
3634
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3635
				{
3636
					$timeelapsed = microtime(true);
3637
					$aircraft_array = $this->getAllAircraftInfo("NA");
3638
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3639
				} else {
3640
					$timeelapsed = microtime(true);
3641
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3642
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3643
				}
3644
			}
3645
		} else {
3646
			if ($ModeS != '') {
3647
				$timeelapsed = microtime(true);
3648
				$aircraft_icao = $this->getAllAircraftType($ModeS);
3649
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAircraftType : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3650
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3651
				{
3652
					$timeelapsed = microtime(true);
3653
					$aircraft_array = $this->getAllAircraftInfo("NA");
3654
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3655
				} else {
3656
					$timeelapsed = microtime(true);
3657
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3658
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3659
				}
3660
			}
3661
		}
3662
		
3663
		//getting the departure airport information
3664
		$departure_airport_array = array();
3665
		$departure_airport_icao = trim($departure_airport_icao);
3666
		if ($departure_airport_icao != '')
3667
		{
3668
			if (!is_string($departure_airport_icao))
3669
			{
3670
				return false;
3671
			} else {
3672
				$timeelapsed = microtime(true);
3673
				$departure_airport_array = $this->getAllAirportInfo($departure_airport_icao);
3674
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3675
			}
3676
		}
3677
		
3678
		//getting the arrival airport information
3679
		$arrival_airport_array = array();
3680
		$arrival_airport_icao = trim($arrival_airport_icao);
3681
		if ($arrival_airport_icao != '')
3682
		{
3683
			if (!is_string($arrival_airport_icao))
3684
			{
3685
				return false;
3686
			} else {
3687
				$timeelapsed = microtime(true);
3688
				$arrival_airport_array = $this->getAllAirportInfo($arrival_airport_icao);
3689
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3690
			}
3691
		}
3692
3693
		if ($latitude != "")
3694
		{
3695
			if (!is_numeric($latitude))
3696
			{
3697
				return false;
3698
			}
3699
		}
3700
		
3701
		if ($longitude != "")
3702
		{
3703
			if (!is_numeric($longitude))
3704
			{
3705
				return false;
3706
			}
3707
		}
3708
		
3709
		if ($waypoints != "")
3710
		{
3711
			if (!is_string($waypoints))
3712
			{
3713
				return false;
3714
			}
3715
		}
3716
		
3717
		if ($altitude != "")
3718
		{
3719
			if (!is_numeric($altitude))
3720
			{
3721
				return false;
3722
			}
3723
		} else $altitude = 0;
3724
		
3725
		if ($heading != "")
3726
		{
3727
			if (!is_numeric($heading))
3728
			{
3729
				return false;
3730
			}
3731
		}
3732
		
3733
		if ($groundspeed != "")
3734
		{
3735
			if (!is_numeric($groundspeed))
3736
			{
3737
				return false;
3738
			}
3739
		}
3740
3741
    
3742
		if ($date == "")
3743
		{
3744
			$date = date("Y-m-d H:i:s", time());
3745
		}
3746
3747
		//getting the aircraft image
3748
		if (($registration != "" || $registration != 'NA') && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM)
3749
		{
3750
			$timeelapsed = microtime(true);
3751
			$image_array = $Image->getSpotterImage($registration);
3752
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getSpotterImage : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3753
			if (!isset($image_array[0]['registration']))
3754
			{
3755
				//echo "Add image !!!! \n";
3756
				$Image->addSpotterImage($registration);
3757
			}
3758
			$timeelapsed = microtime(true);
3759
			$owner_info = $this->getAircraftOwnerByRegistration($registration);
3760
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftOwnerByRegistration : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3761
			if ($owner_info['owner'] != '') $aircraft_owner = ucwords(strtolower($owner_info['owner']));
3762
		}
3763
    
3764
		if ($globalIVAO && $aircraft_icao != '')
3765
		{
3766
            		if (isset($airline_array[0]['icao'])) $airline_icao = $airline_array[0]['icao'];
3767
            		else $airline_icao = '';
3768
			$image_array = $Image->getSpotterImage('',$aircraft_icao,$airline_icao);
3769
			if (!isset($image_array[0]['registration']))
3770
			{
3771
				//echo "Add image !!!! \n";
3772
				$Image->addSpotterImage('',$aircraft_icao,$airline_icao);
3773
			}
3774
		}
3775
    
3776
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
3777
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
3778
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
3779
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
3780
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
3781
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
3782
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3783
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3784
		$waypoints = filter_var($waypoints,FILTER_SANITIZE_STRING);
3785
		$altitude = filter_var($altitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3786
		$heading = filter_var($heading,FILTER_SANITIZE_NUMBER_INT);
3787
		$groundspeed = filter_var($groundspeed,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3788
		$squawk = filter_var($squawk,FILTER_SANITIZE_NUMBER_INT);
3789
		$route_stop = filter_var($route_stop,FILTER_SANITIZE_STRING);
3790
		$ModeS = filter_var($ModeS,FILTER_SANITIZE_STRING);
3791
		$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_STRING);
3792
		$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
3793
		$format_source = filter_var($format_source,FILTER_SANITIZE_STRING);
3794
		$verticalrate = filter_var($verticalrate,FILTER_SANITIZE_NUMBER_INT);
3795
	
3796
		if (count($airline_array) == 0) 
3797
		{
3798
                        $airline_array = $this->getAllAirlineInfo('NA');
3799
                }
3800
                if (count($aircraft_array) == 0) 
3801
                {
3802
                        $aircraft_array = $this->getAllAircraftInfo('NA');
3803
                }
3804
                if (count($departure_airport_array) == 0 || $departure_airport_array[0]['icao'] == '' || $departure_airport_icao == '') 
3805
                {
3806
                        $departure_airport_array = $this->getAllAirportInfo('NA');
3807
                }
3808
                if (count($arrival_airport_array) == 0 || $arrival_airport_array[0]['icao'] == '' || $arrival_airport_icao == '') 
3809
                {
3810
                        $arrival_airport_array = $this->getAllAirportInfo('NA');
3811
                }
3812
                if ($registration == '') $registration = 'NA';
3813
                if ($latitude == '' && $longitude == '') {
3814
            		$latitude = 0;
3815
            		$longitude = 0;
3816
            	}
3817
                if ($squawk == '' || $Common->isInteger($squawk) === false) $squawk = NULL;
3818
                if ($verticalrate == '' || $Common->isInteger($verticalrate) === false) $verticalrate = NULL;
3819
                if ($heading == '' || $Common->isInteger($heading) === false) $heading = 0;
3820
                if ($groundspeed == '' || $Common->isInteger($groundspeed) === false) $groundspeed = 0;
3821
                if (!isset($aircraft_owner)) $aircraft_owner = NULL;
3822
                $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) 
3823
                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)";
3824
3825
                $airline_name = $airline_array[0]['name'];
3826
                $airline_icao = $airline_array[0]['icao'];
3827
                $airline_country = $airline_array[0]['country'];
3828
                $airline_type = $airline_array[0]['type'];
3829
		if ($airline_type == '') {
3830
			$timeelapsed = microtime(true);
3831
			$airline_type = $this->getAircraftTypeBymodeS($ModeS);
3832
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftTypeBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3833
		}
3834
		if ($airline_type == null) $airline_type = '';
3835
                $aircraft_type = $aircraft_array[0]['type'];
3836
                $aircraft_manufacturer = $aircraft_array[0]['manufacturer'];
3837
                $departure_airport_name = $departure_airport_array[0]['name'];
3838
	        $departure_airport_city = $departure_airport_array[0]['city'];
3839
            	$departure_airport_country = $departure_airport_array[0]['country'];
3840
                
3841
                $arrival_airport_name = $arrival_airport_array[0]['name'];
3842
                $arrival_airport_city = $arrival_airport_array[0]['city'];
3843
                $arrival_airport_country = $arrival_airport_array[0]['country'];
3844
                $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);
3845
3846
		try {
3847
		        
3848
			$sth = $this->db->prepare($query);
3849
			$sth->execute($query_values);
3850
			$this->db = null;
3851
		} catch (PDOException $e) {
3852
		    return "error : ".$e->getMessage();
3853
		}
3854
		
3855
		return "success";
3856
3857
	}
3858
	
3859
  
3860
	/**
3861
	* Gets the aircraft ident within the last hour
3862
	*
3863
	* @return String the ident
3864
	*
3865
	*/
3866
	public function getIdentFromLastHour($ident)
3867
	{
3868
		global $globalDBdriver, $globalTimezone;
3869
		if ($globalDBdriver == 'mysql') {
3870
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3871
								WHERE spotter_output.ident = :ident 
3872
								AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) 
3873
								AND spotter_output.date < UTC_TIMESTAMP()";
3874
			$query_data = array(':ident' => $ident);
3875
		} else {
3876
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3877
								WHERE spotter_output.ident = :ident 
3878
								AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INTERVAL '1 HOURS'
3879
								AND spotter_output.date < now() AT TIME ZONE 'UTC'";
3880
			$query_data = array(':ident' => $ident);
3881
    		}
3882
		
3883
		$sth = $this->db->prepare($query);
3884
		$sth->execute($query_data);
3885
    		$ident_result='';
3886
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3887
		{
3888
			$ident_result = $row['ident'];
3889
		}
3890
3891
		return $ident_result;
3892
	}
3893
	
3894
	
3895
	/**
3896
	* Gets the aircraft data from the last 20 seconds
3897
	*
3898
	* @return Array the spotter data
3899
	*
3900
	*/
3901
	public function getRealTimeData($q = '')
3902
	{
3903
		global $globalDBdriver;
3904
		$additional_query = '';
3905
		if ($q != "")
3906
		{
3907
			if (!is_string($q))
3908
			{
3909
				return false;
3910
			} else {
3911
				$q_array = explode(" ", $q);
3912
				foreach ($q_array as $q_item){
3913
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
3914
					$additional_query .= " AND (";
3915
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
3916
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
3917
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
3918
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
3919
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
3920
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
3921
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
3922
					$additional_query .= "(spotter_output.ident like '%".$q_item."%')";
3923
					$additional_query .= ")";
3924
				}
3925
			}
3926
		}
3927
		if ($globalDBdriver == 'mysql') {
3928
			$query  = "SELECT spotter_output.* FROM spotter_output 
3929
				WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 20 SECOND) ".$additional_query." 
3930
				AND spotter_output.date < UTC_TIMESTAMP()";
3931
		} else {
3932
			$query  = "SELECT spotter_output.* FROM spotter_output 
3933
				WHERE spotter_output.date::timestamp >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '20 SECONDS' ".$additional_query." 
3934
				AND spotter_output.date::timestamp < CURRENT_TIMESTAMP AT TIME ZONE 'UTC'";
3935
		}
3936
		$spotter_array = $this->getDataFromDB($query, array());
3937
3938
		return $spotter_array;
3939
	}
3940
	
3941
	
3942
	
3943
	 /**
3944
	* Gets all airlines that have flown over
3945
	*
3946
	* @return Array the airline list
3947
	*
3948
	*/
3949
	public function countAllAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(), $year = '', $month = '', $day = '')
3950
	{
3951
		global $globalDBdriver;
3952
		$filter_query = $this->getFilter($filters,true,true);
3953
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3954
		 			FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.airline_icao <> 'NA'";
3955
		if ($olderthanmonths > 0) {
3956
			if ($globalDBdriver == 'mysql') {
3957
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
3958
			} else {
3959
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
3960
			}
3961
		}
3962
                if ($sincedate != '') {
3963
			if ($globalDBdriver == 'mysql') {
3964
				$query .= " AND spotter_output.date > '".$sincedate."'";
3965
			} else {
3966
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3967
			}
3968
		}
3969
		$query_values = array();
3970
		if ($year != '') {
3971
			if ($globalDBdriver == 'mysql') {
3972
				$query .= " AND YEAR(spotter_output.date) = :year";
3973
				$query_values = array_merge($query_values,array(':year' => $year));
3974
			} else {
3975
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
3976
				$query_values = array_merge($query_values,array(':year' => $year));
3977
			}
3978
		}
3979
		if ($month != '') {
3980
			if ($globalDBdriver == 'mysql') {
3981
				$query .= " AND MONTH(spotter_output.date) = :month";
3982
				$query_values = array_merge($query_values,array(':month' => $month));
3983
			} else {
3984
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
3985
				$query_values = array_merge($query_values,array(':month' => $month));
3986
			}
3987
		}
3988
		if ($day != '') {
3989
			if ($globalDBdriver == 'mysql') {
3990
				$query .= " AND DAY(spotter_output.date) = :day";
3991
				$query_values = array_merge($query_values,array(':day' => $day));
3992
			} else {
3993
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
3994
				$query_values = array_merge($query_values,array(':day' => $day));
3995
			}
3996
		}
3997
		$query .= " GROUP BY spotter_output.airline_name,spotter_output.airline_icao, spotter_output.airline_country ORDER BY airline_count DESC";
3998
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3999
4000
		$sth = $this->db->prepare($query);
4001
		$sth->execute($query_values);
4002
		$airline_array = array();
4003
		$temp_array = array();
4004
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4005
		{
4006
			$temp_array['airline_name'] = $row['airline_name'];
4007
			$temp_array['airline_icao'] = $row['airline_icao'];
4008
			$temp_array['airline_count'] = $row['airline_count'];
4009
			$temp_array['airline_country'] = $row['airline_country'];
4010
			$airline_array[] = $temp_array;
4011
		}
4012
		return $airline_array;
4013
	}
4014
4015
	 /**
4016
	* Gets all pilots that have flown over
4017
	*
4018
	* @return Array the pilots list
4019
	*
4020
	*/
4021
	public function countAllPilots($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '', $month = '',$day = '')
4022
	{
4023
		global $globalDBdriver;
4024
		$filter_query = $this->getFilter($filters,true,true);
4025
		$query  = "SELECT DISTINCT spotter_output.pilot_id, spotter_output.pilot_name, COUNT(spotter_output.pilot_id) AS pilot_count, spotter_output.format_source
4026
		 			FROM spotter_output".$filter_query." spotter_output.pilot_id <> '' ";
4027
                if ($olderthanmonths > 0) {
4028
            		if ($globalDBdriver == 'mysql') {
4029
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4030
			} else {
4031
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4032
			}
4033
		}
4034
                if ($sincedate != '') {
4035
            		if ($globalDBdriver == 'mysql') {
4036
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4037
			} else {
4038
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4039
			}
4040
		}
4041
		$query_values = array();
4042
		if ($year != '') {
4043
			if ($globalDBdriver == 'mysql') {
4044
				$query .= " AND YEAR(spotter_output.date) = :year";
4045
				$query_values = array_merge($query_values,array(':year' => $year));
4046
			} else {
4047
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4048
				$query_values = array_merge($query_values,array(':year' => $year));
4049
			}
4050
		}
4051
		if ($month != '') {
4052
			if ($globalDBdriver == 'mysql') {
4053
				$query .= " AND MONTH(spotter_output.date) = :month";
4054
				$query_values = array_merge($query_values,array(':month' => $month));
4055
			} else {
4056
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4057
				$query_values = array_merge($query_values,array(':month' => $month));
4058
			}
4059
		}
4060
		if ($day != '') {
4061
			if ($globalDBdriver == 'mysql') {
4062
				$query .= " AND DAY(spotter_output.date) = :day";
4063
				$query_values = array_merge($query_values,array(':day' => $day));
4064
			} else {
4065
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4066
				$query_values = array_merge($query_values,array(':day' => $day));
4067
			}
4068
		}
4069
		
4070
		$query .= "GROUP BY spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
4071
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4072
      
4073
		
4074
		$sth = $this->db->prepare($query);
4075
		$sth->execute($query_values);
4076
		$airline_array = array();
4077
		$temp_array = array();
4078
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4079
		{
4080
			$temp_array['pilot_name'] = $row['pilot_name'];
4081
			$temp_array['pilot_id'] = $row['pilot_id'];
4082
			$temp_array['pilot_count'] = $row['pilot_count'];
4083
			$temp_array['format_source'] = $row['format_source'];
4084
			$airline_array[] = $temp_array;
4085
		}
4086
		return $airline_array;
4087
	}
4088
	
4089
	/**
4090
	* Gets all pilots that have flown over
4091
	*
4092
	* @return Array the pilots list
4093
	*
4094
	*/
4095
	public function countAllPilotsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '')
4096
	{
4097
		global $globalDBdriver;
4098
		$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
4099
		 			FROM spotter_output WHERE spotter_output.pilot_id <> '' ";
4100
                if ($olderthanmonths > 0) {
4101
            		if ($globalDBdriver == 'mysql') {
4102
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4103
			} else {
4104
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4105
			}
4106
		}
4107
                if ($sincedate != '') {
4108
            		if ($globalDBdriver == 'mysql') {
4109
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4110
			} else {
4111
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4112
			}
4113
		}
4114
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
4115
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4116
      
4117
		
4118
		$sth = $this->db->prepare($query);
4119
		$sth->execute();
4120
      
4121
		$airline_array = array();
4122
		$temp_array = array();
4123
        
4124
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4125
		{
4126
			$temp_array['pilot_name'] = $row['pilot_name'];
4127
			$temp_array['pilot_id'] = $row['pilot_id'];
4128
			$temp_array['pilot_count'] = $row['pilot_count'];
4129
			$temp_array['airline_icao'] = $row['airline_icao'];
4130
			$temp_array['format_source'] = $row['format_source'];
4131
			$airline_array[] = $temp_array;
4132
		}
4133
		return $airline_array;
4134
	}
4135
	
4136
	 /**
4137
	* Gets all owner that have flown over
4138
	*
4139
	* @return Array the pilots list
4140
	*
4141
	*/
4142
	public function countAllOwners($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
4143
	{
4144
		global $globalDBdriver;
4145
		$filter_query = $this->getFilter($filters,true,true);
4146
		$query  = "SELECT DISTINCT spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
4147
					FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL";
4148
                if ($olderthanmonths > 0) {
4149
            		if ($globalDBdriver == 'mysql') {
4150
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4151
			} else {
4152
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4153
			}
4154
		}
4155
                if ($sincedate != '') {
4156
            		if ($globalDBdriver == 'mysql') {
4157
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4158
			} else {
4159
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4160
			}
4161
		}
4162
		$query_values = array();
4163
		if ($year != '') {
4164
			if ($globalDBdriver == 'mysql') {
4165
				$query .= " AND YEAR(spotter_output.date) = :year";
4166
				$query_values = array_merge($query_values,array(':year' => $year));
4167
			} else {
4168
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4169
				$query_values = array_merge($query_values,array(':year' => $year));
4170
			}
4171
		}
4172
		if ($month != '') {
4173
			if ($globalDBdriver == 'mysql') {
4174
				$query .= " AND MONTH(spotter_output.date) = :month";
4175
				$query_values = array_merge($query_values,array(':month' => $month));
4176
			} else {
4177
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4178
				$query_values = array_merge($query_values,array(':month' => $month));
4179
			}
4180
		}
4181
		if ($day != '') {
4182
			if ($globalDBdriver == 'mysql') {
4183
				$query .= " AND DAY(spotter_output.date) = :day";
4184
				$query_values = array_merge($query_values,array(':day' => $day));
4185
			} else {
4186
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4187
				$query_values = array_merge($query_values,array(':day' => $day));
4188
			}
4189
		}
4190
		$query .= " GROUP BY spotter_output.owner_name ORDER BY owner_count DESC";
4191
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4192
		
4193
		$sth = $this->db->prepare($query);
4194
		$sth->execute($query_values);
4195
		$airline_array = array();
4196
		$temp_array = array();
4197
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4198
		{
4199
			$temp_array['owner_name'] = $row['owner_name'];
4200
			$temp_array['owner_count'] = $row['owner_count'];
4201
			$airline_array[] = $temp_array;
4202
		}
4203
		return $airline_array;
4204
	}
4205
	
4206
	 /**
4207
	* Gets all owner that have flown over
4208
	*
4209
	* @return Array the pilots list
4210
	*
4211
	*/
4212
	public function countAllOwnersByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
4213
	{
4214
		global $globalDBdriver;
4215
		$filter_query = $this->getFilter($filters,true,true);
4216
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
4217
		 			FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL ";
4218
                if ($olderthanmonths > 0) {
4219
            		if ($globalDBdriver == 'mysql') {
4220
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4221
			} else {
4222
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4223
			}
4224
		}
4225
                if ($sincedate != '') {
4226
            		if ($globalDBdriver == 'mysql') {
4227
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4228
			} else {
4229
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4230
			}
4231
		}
4232
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.owner_name ORDER BY owner_count DESC";
4233
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4234
      
4235
		
4236
		$sth = $this->db->prepare($query);
4237
		$sth->execute();
4238
      
4239
		$airline_array = array();
4240
		$temp_array = array();
4241
        
4242
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4243
		{
4244
			$temp_array['owner_name'] = $row['owner_name'];
4245
			$temp_array['owner_count'] = $row['owner_count'];
4246
			$temp_array['airline_icao'] = $row['airline_icao'];
4247
			$airline_array[] = $temp_array;
4248
		}
4249
		return $airline_array;
4250
	}
4251
4252
	/**
4253
	* Gets all airlines that have flown over by aircraft
4254
	*
4255
	* @return Array the airline list
4256
	*
4257
	*/
4258
	public function countAllAirlinesByAircraft($aircraft_icao,$filters = array())
4259
	{
4260
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4261
		$filter_query = $this->getFilter($filters,true,true);
4262
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4263
		 	    FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
4264
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
4265
			    ORDER BY airline_count DESC";
4266
      
4267
		
4268
		$sth = $this->db->prepare($query);
4269
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4270
      
4271
		$airline_array = array();
4272
		$temp_array = array();
4273
        
4274
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4275
		{
4276
			$temp_array['airline_name'] = $row['airline_name'];
4277
			$temp_array['airline_icao'] = $row['airline_icao'];
4278
			$temp_array['airline_count'] = $row['airline_count'];
4279
			$temp_array['airline_country'] = $row['airline_country'];
4280
4281
			$airline_array[] = $temp_array;
4282
		}
4283
4284
		return $airline_array;
4285
	}
4286
4287
4288
	/**
4289
	* Gets all airline countries that have flown over by aircraft
4290
	*
4291
	* @return Array the airline country list
4292
	*
4293
	*/
4294
	public function countAllAirlineCountriesByAircraft($aircraft_icao,$filters = array())
4295
	{
4296
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4297
		$filter_query = $this->getFilter($filters,true,true);
4298
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4299
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
4300
                    GROUP BY spotter_output.airline_country
4301
					ORDER BY airline_country_count DESC
4302
					LIMIT 10 OFFSET 0";
4303
      
4304
		
4305
		$sth = $this->db->prepare($query);
4306
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4307
      
4308
		$airline_country_array = array();
4309
		$temp_array = array();
4310
        
4311
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4312
		{
4313
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4314
			$temp_array['airline_country'] = $row['airline_country'];
4315
 
4316
			$airline_country_array[] = $temp_array;
4317
		}
4318
		return $airline_country_array;
4319
	}
4320
4321
4322
	
4323
	
4324
	/**
4325
	* Gets all airlines that have flown over by airport
4326
	*
4327
	* @return Array the airline list
4328
	*
4329
	*/
4330
	public function countAllAirlinesByAirport($airport_icao,$filters = array())
4331
	{
4332
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4333
		$filter_query = $this->getFilter($filters,true,true);
4334
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4335
		    FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao ) 
4336
                    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country
4337
		    ORDER BY airline_count DESC";
4338
      
4339
		
4340
		$sth = $this->db->prepare($query);
4341
		$sth->execute(array(':airport_icao' => $airport_icao));
4342
      
4343
		$airline_array = array();
4344
		$temp_array = array();
4345
        
4346
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4347
		{
4348
			$temp_array['airline_name'] = $row['airline_name'];
4349
			$temp_array['airline_icao'] = $row['airline_icao'];
4350
			$temp_array['airline_count'] = $row['airline_count'];
4351
			$temp_array['airline_country'] = $row['airline_country'];
4352
4353
			$airline_array[] = $temp_array;
4354
		}
4355
		return $airline_array;
4356
	}
4357
4358
4359
	/**
4360
	* Gets all airline countries that have flown over by airport icao
4361
	*
4362
	* @return Array the airline country list
4363
	*
4364
	*/
4365
	public function countAllAirlineCountriesByAirport($airport_icao,$filters = array())
4366
	{
4367
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4368
		$filter_query = $this->getFilter($filters,true,true);
4369
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4370
		 			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 )
4371
					GROUP BY spotter_output.airline_country
4372
					ORDER BY airline_country_count DESC
4373
					LIMIT 10 OFFSET 0";
4374
4375
		
4376
		$sth = $this->db->prepare($query);
4377
		$sth->execute(array(':airport_icao' => $airport_icao));
4378
4379
		$airline_country_array = array();
4380
		$temp_array = array();
4381
        
4382
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4383
		{
4384
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4385
			$temp_array['airline_country'] = $row['airline_country'];
4386
 
4387
			$airline_country_array[] = $temp_array;
4388
		}
4389
		return $airline_country_array;
4390
	}
4391
4392
4393
	/**
4394
	* Gets all airlines that have flown over by aircraft manufacturer
4395
	*
4396
	* @return Array the airline list
4397
	*
4398
	*/
4399
	public function countAllAirlinesByManufacturer($aircraft_manufacturer,$filters = array())
4400
	{
4401
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4402
		$filter_query = $this->getFilter($filters,true,true);
4403
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4404
		 			FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4405
					GROUP BY spotter_output.airline_name
4406
					ORDER BY airline_count DESC";
4407
 
4408
		$sth = $this->db->prepare($query);
4409
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4410
 
4411
		$airline_array = array();
4412
		$temp_array = array();
4413
        
4414
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4415
		{
4416
			$temp_array['airline_name'] = $row['airline_name'];
4417
			$temp_array['airline_icao'] = $row['airline_icao'];
4418
			$temp_array['airline_count'] = $row['airline_count'];
4419
			$temp_array['airline_country'] = $row['airline_country'];
4420
4421
			$airline_array[] = $temp_array;
4422
		}
4423
		return $airline_array;
4424
	}
4425
4426
4427
4428
	/**
4429
	* Gets all airline countries that have flown over by aircraft manufacturer
4430
	*
4431
	* @return Array the airline country list
4432
	*
4433
	*/
4434
	public function countAllAirlineCountriesByManufacturer($aircraft_manufacturer,$filters = array())
4435
	{
4436
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4437
		$filter_query = $this->getFilter($filters,true,true);
4438
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4439
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4440
					GROUP BY spotter_output.airline_country
4441
					ORDER BY airline_country_count DESC
4442
					LIMIT 10 OFFSET 0";
4443
      
4444
		
4445
		$sth = $this->db->prepare($query);
4446
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4447
4448
		$airline_country_array = array();
4449
		$temp_array = array();
4450
        
4451
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4452
		{
4453
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4454
			$temp_array['airline_country'] = $row['airline_country'];
4455
			$airline_country_array[] = $temp_array;
4456
		}
4457
		return $airline_country_array;
4458
	}
4459
4460
4461
	/**
4462
	* Gets all airlines that have flown over by date
4463
	*
4464
	* @return Array the airline list
4465
	*
4466
	*/
4467
	public function countAllAirlinesByDate($date,$filters = array())
4468
	{
4469
		global $globalTimezone, $globalDBdriver;
4470
		$filter_query = $this->getFilter($filters,true,true);
4471
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4472
		if ($globalTimezone != '') {
4473
			date_default_timezone_set($globalTimezone);
4474
			$datetime = new DateTime($date);
4475
			$offset = $datetime->format('P');
4476
		} else $offset = '+00:00';
4477
4478
		if ($globalDBdriver == 'mysql') {
4479
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4480
		 			FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4481
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country 
4482
					ORDER BY airline_count DESC";
4483
		} else {
4484
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4485
		 			FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4486
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country
4487
					ORDER BY airline_count DESC";
4488
		}
4489
		
4490
		$sth = $this->db->prepare($query);
4491
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4492
4493
		$airline_array = array();
4494
		$temp_array = array();
4495
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4496
		{
4497
			$temp_array['airline_name'] = $row['airline_name'];
4498
			$temp_array['airline_icao'] = $row['airline_icao'];
4499
			$temp_array['airline_count'] = $row['airline_count'];
4500
			$temp_array['airline_country'] = $row['airline_country'];
4501
 
4502
			$airline_array[] = $temp_array;
4503
		}
4504
4505
		return $airline_array;
4506
	}	
4507
	
4508
	
4509
	/**
4510
	* Gets all airline countries that have flown over by date
4511
	*
4512
	* @return Array the airline country list
4513
	*
4514
	*/
4515
	public function countAllAirlineCountriesByDate($date,$filters = array())
4516
	{
4517
		global $globalTimezone, $globalDBdriver;
4518
		$filter_query = $this->getFilter($filters,true,true);
4519
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4520
		if ($globalTimezone != '') {
4521
			date_default_timezone_set($globalTimezone);
4522
			$datetime = new DateTime($date);
4523
			$offset = $datetime->format('P');
4524
		} else $offset = '+00:00';
4525
		
4526
		if ($globalDBdriver == 'mysql') {
4527
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4528
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4529
					GROUP BY spotter_output.airline_country
4530
					ORDER BY airline_country_count DESC
4531
					LIMIT 10 OFFSET 0";
4532
		} else {
4533
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4534
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4535
					GROUP BY spotter_output.airline_country
4536
					ORDER BY airline_country_count DESC
4537
					LIMIT 10 OFFSET 0";
4538
		}
4539
4540
		$sth = $this->db->prepare($query);
4541
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4542
 
4543
		$airline_country_array = array();
4544
		$temp_array = array();
4545
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4546
		{
4547
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4548
			$temp_array['airline_country'] = $row['airline_country'];
4549
4550
			$airline_country_array[] = $temp_array;
4551
		}
4552
		return $airline_country_array;
4553
	}
4554
4555
4556
	/**
4557
	* Gets all airlines that have flown over by ident/callsign
4558
	*
4559
	* @return Array the airline list
4560
	*
4561
	*/
4562
	public function countAllAirlinesByIdent($ident,$filters = array())
4563
	{
4564
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
4565
		$filter_query = $this->getFilter($filters,true,true);
4566
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4567
		 		FROM spotter_output".$filter_query." spotter_output.ident = :ident  
4568
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4569
				ORDER BY airline_count DESC";
4570
      
4571
		
4572
		$sth = $this->db->prepare($query);
4573
		$sth->execute(array(':ident' => $ident));
4574
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4575
	}
4576
4577
	/**
4578
	* Gets all airlines by owner
4579
	*
4580
	* @return Array the airline list
4581
	*
4582
	*/
4583
	public function countAllAirlinesByOwner($owner,$filters = array())
4584
	{
4585
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
4586
		$filter_query = $this->getFilter($filters,true,true);
4587
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4588
		 		FROM spotter_output".$filter_query." spotter_output.owner_name = :owner  
4589
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4590
				ORDER BY airline_count DESC";
4591
      
4592
		
4593
		$sth = $this->db->prepare($query);
4594
		$sth->execute(array(':owner' => $owner));
4595
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4596
	}
4597
4598
	/**
4599
	* Gets all airlines used by pilot
4600
	*
4601
	* @return Array the airline list
4602
	*
4603
	*/
4604
	public function countAllAirlinesByPilot($pilot,$filters = array())
4605
	{
4606
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
4607
		$filter_query = $this->getFilter($filters,true,true);
4608
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4609
		 		FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
4610
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4611
				ORDER BY airline_count DESC";
4612
      
4613
		
4614
		$sth = $this->db->prepare($query);
4615
		$sth->execute(array(':pilot' => $pilot));
4616
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4617
	}
4618
4619
	/**
4620
	* Gets all airlines that have flown over by route
4621
	*
4622
	* @return Array the airline list
4623
	*
4624
	*/
4625
	public function countAllAirlinesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
4626
	{
4627
		$filter_query = $this->getFilter($filters,true,true);
4628
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4629
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4630
4631
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4632
		 			FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
4633
					GROUP BY spotter_output.airline_name
4634
					ORDER BY airline_count DESC";
4635
      
4636
		
4637
		$sth = $this->db->prepare($query);
4638
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4639
      
4640
		$airline_array = array();
4641
		$temp_array = array();
4642
        
4643
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4644
		{
4645
			$temp_array['airline_name'] = $row['airline_name'];
4646
			$temp_array['airline_icao'] = $row['airline_icao'];
4647
			$temp_array['airline_count'] = $row['airline_count'];
4648
			$temp_array['airline_country'] = $row['airline_country'];
4649
4650
			$airline_array[] = $temp_array;
4651
		}
4652
		return $airline_array;
4653
	}
4654
4655
	/**
4656
	* Gets all airline countries that have flown over by route
4657
	*
4658
	* @return Array the airline country list
4659
	*
4660
	*/
4661
	public function countAllAirlineCountriesByRoute($departure_airport_icao, $arrival_airport_icao,$filters= array())
4662
	{
4663
		$filter_query = $this->getFilter($filters,true,true);
4664
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4665
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4666
      
4667
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4668
		 		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) 
4669
				GROUP BY spotter_output.airline_country
4670
				ORDER BY airline_country_count DESC
4671
				LIMIT 10 OFFSET 0";
4672
      
4673
		
4674
		$sth = $this->db->prepare($query);
4675
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4676
      
4677
		$airline_country_array = array();
4678
		$temp_array = array();
4679
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4680
		{
4681
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4682
			$temp_array['airline_country'] = $row['airline_country'];
4683
4684
			$airline_country_array[] = $temp_array;
4685
		}
4686
4687
		return $airline_country_array;
4688
	}
4689
4690
4691
	/**
4692
	* Gets all airlines that have flown over by country
4693
	*
4694
	* @return Array the airline list
4695
	*
4696
	*/
4697
	public function countAllAirlinesByCountry($country,$filters = array())
4698
	{
4699
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4700
		$filter_query = $this->getFilter($filters,true,true);
4701
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4702
		 	    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
4703
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
4704
			    ORDER BY airline_count DESC";
4705
      
4706
		
4707
		$sth = $this->db->prepare($query);
4708
		$sth->execute(array(':country' => $country));
4709
4710
		$airline_array = array();
4711
		$temp_array = array();
4712
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4713
		{
4714
			$temp_array['airline_name'] = $row['airline_name'];
4715
			$temp_array['airline_icao'] = $row['airline_icao'];
4716
			$temp_array['airline_count'] = $row['airline_count'];
4717
			$temp_array['airline_country'] = $row['airline_country'];
4718
 
4719
			$airline_array[] = $temp_array;
4720
		}
4721
		return $airline_array;
4722
	}
4723
4724
4725
	/**
4726
	* Gets all airline countries that have flown over by country
4727
	*
4728
	* @return Array the airline country list
4729
	*
4730
	*/
4731
	public function countAllAirlineCountriesByCountry($country,$filters = array())
4732
	{
4733
		$filter_query = $this->getFilter($filters,true,true);
4734
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4735
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4736
		 		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 
4737
				GROUP BY spotter_output.airline_country
4738
				ORDER BY airline_country_count DESC
4739
				LIMIT 10 OFFSET 0";
4740
      
4741
		
4742
		$sth = $this->db->prepare($query);
4743
		$sth->execute(array(':country' => $country));
4744
4745
		$airline_country_array = array();
4746
		$temp_array = array();
4747
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4748
		{
4749
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4750
			$temp_array['airline_country'] = $row['airline_country'];
4751
4752
			$airline_country_array[] = $temp_array;
4753
		}
4754
		return $airline_country_array;
4755
	}
4756
4757
4758
	/**
4759
	* Gets all airlines countries
4760
	*
4761
	* @return Array the airline country list
4762
	*
4763
	*/
4764
	public function countAllAirlineCountries($limit = true, $filters = array(), $year = '', $month = '', $day = '')
4765
	{
4766
		global $globalDBdriver;
4767
		$filter_query = $this->getFilter($filters,true,true);
4768
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4769
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.airline_country <> 'NA'";
4770
		$query_values = array();
4771
		if ($year != '') {
4772
			if ($globalDBdriver == 'mysql') {
4773
				$query .= " AND YEAR(spotter_output.date) = :year";
4774
				$query_values = array_merge($query_values,array(':year' => $year));
4775
			} else {
4776
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4777
				$query_values = array_merge($query_values,array(':year' => $year));
4778
			}
4779
		}
4780
		if ($month != '') {
4781
			if ($globalDBdriver == 'mysql') {
4782
				$query .= " AND MONTH(spotter_output.date) = :month";
4783
				$query_values = array_merge($query_values,array(':month' => $month));
4784
			} else {
4785
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4786
				$query_values = array_merge($query_values,array(':month' => $month));
4787
			}
4788
		}
4789
		if ($day != '') {
4790
			if ($globalDBdriver == 'mysql') {
4791
				$query .= " AND DAY(spotter_output.date) = :day";
4792
				$query_values = array_merge($query_values,array(':day' => $day));
4793
			} else {
4794
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4795
				$query_values = array_merge($query_values,array(':day' => $day));
4796
			}
4797
		}
4798
		$query .= " GROUP BY spotter_output.airline_country
4799
					ORDER BY airline_country_count DESC";
4800
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4801
      
4802
		$sth = $this->db->prepare($query);
4803
		$sth->execute($query_values);
4804
4805
		$airline_array = array();
4806
		$temp_array = array();
4807
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4808
		{
4809
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4810
			$temp_array['airline_country'] = $row['airline_country'];
4811
4812
			$airline_array[] = $temp_array;
4813
		}
4814
		return $airline_array;
4815
	}
4816
4817
	/**
4818
	* Gets all number of flight over countries
4819
	*
4820
	* @return Array the airline country list
4821
	*
4822
	*/
4823
	public function countAllFlightOverCountries($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
4824
	{
4825
		global $globalDBdriver;
4826
		//$filter_query = $this->getFilter($filters,true,true);
4827
		$Connection= new Connection($this->db);
4828
		if (!$Connection->tableExists('countries')) return array();
4829
		/*
4830
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
4831
					FROM countries c, spotter_output s
4832
					WHERE Within(GeomFromText(CONCAT('POINT(',s.longitude,' ',s.latitude,')')), ogc_geom) ";
4833
		*/
4834
/*
4835
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
4836
					FROM countries c, spotter_live s
4837
					WHERE c.iso2 = s.over_country ";
4838
		$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 ";
4839
*/
4840
		require_once('class.SpotterLive.php');
4841
		$SpotterLive = new SpotterLive();
4842
		$filter_query = $SpotterLive->getFilter($filters,true,true);
4843
		$filter_query .= ' over_country IS NOT NULL';
4844
                if ($olderthanmonths > 0) {
4845
			if ($globalDBdriver == 'mysql') {
4846
				$filter_query .= ' AND spotter_live.date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
4847
			} else {
4848
				$filter_query .= " AND spotter_live.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4849
			}
4850
		}
4851
                if ($sincedate != '') {
4852
            		if ($globalDBdriver == 'mysql') {
4853
				$filter_query .= " AND spotter_live.date > '".$sincedate."' ";
4854
			} else {
4855
				$filter_query .= " AND spotter_live.date > CAST('".$sincedate."' AS TIMESTAMP)";
4856
			}
4857
		}
4858
		$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 ";
4859
		$query .= "GROUP BY c.name,c.iso3,c.iso2 ORDER BY nb DESC";
4860
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4861
      
4862
		
4863
		$sth = $this->db->prepare($query);
4864
		$sth->execute();
4865
 
4866
		$flight_array = array();
4867
		$temp_array = array();
4868
        
4869
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4870
		{
4871
			$temp_array['flight_count'] = $row['nb'];
4872
			$temp_array['flight_country'] = $row['name'];
4873
			$temp_array['flight_country_iso3'] = $row['iso3'];
4874
			$temp_array['flight_country_iso2'] = $row['iso2'];
4875
			$flight_array[] = $temp_array;
4876
		}
4877
		return $flight_array;
4878
	}
4879
	
4880
	
4881
	/**
4882
	* Gets all aircraft types that have flown over
4883
	*
4884
	* @return Array the aircraft list
4885
	*
4886
	*/
4887
	public function countAllAircraftTypes($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
4888
	{
4889
		global $globalDBdriver;
4890
		$filter_query = $this->getFilter($filters,true,true);
4891
		$query  = "SELECT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
4892
		    FROM spotter_output ".$filter_query." spotter_output.aircraft_name  <> '' AND spotter_output.aircraft_icao  <> ''";
4893
		if ($olderthanmonths > 0) {
4894
			if ($globalDBdriver == 'mysql') {
4895
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4896
			} else {
4897
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4898
			}
4899
		}
4900
		if ($sincedate != '') {
4901
			if ($globalDBdriver == 'mysql') {
4902
				$query .= " AND spotter_output.date > '".$sincedate."'";
4903
			} else {
4904
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4905
			}
4906
		}
4907
		$query_values = array();
4908
		if ($year != '') {
4909
			if ($globalDBdriver == 'mysql') {
4910
				$query .= " AND YEAR(spotter_output.date) = :year";
4911
				$query_values = array_merge($query_values,array(':year' => $year));
4912
			} else {
4913
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4914
				$query_values = array_merge($query_values,array(':year' => $year));
4915
			}
4916
		}
4917
		if ($month != '') {
4918
			if ($globalDBdriver == 'mysql') {
4919
				$query .= " AND MONTH(spotter_output.date) = :month";
4920
				$query_values = array_merge($query_values,array(':month' => $month));
4921
			} else {
4922
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4923
				$query_values = array_merge($query_values,array(':month' => $month));
4924
			}
4925
		}
4926
		if ($day != '') {
4927
			if ($globalDBdriver == 'mysql') {
4928
				$query .= " AND DAY(spotter_output.date) = :day";
4929
				$query_values = array_merge($query_values,array(':day' => $day));
4930
			} else {
4931
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4932
				$query_values = array_merge($query_values,array(':day' => $day));
4933
			}
4934
		}
4935
4936
		$query .= " GROUP BY spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer ORDER BY aircraft_icao_count DESC";
4937
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4938
 
4939
		$sth = $this->db->prepare($query);
4940
		$sth->execute($query_values);
4941
4942
		$aircraft_array = array();
4943
		$temp_array = array();
4944
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4945
		{
4946
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4947
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4948
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4949
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4950
			$aircraft_array[] = $temp_array;
4951
		}
4952
		return $aircraft_array;
4953
	}
4954
4955
	/**
4956
	* Gets all aircraft types that have flown over by airline
4957
	*
4958
	* @return Array the aircraft list
4959
	*
4960
	*/
4961
	public function countAllAircraftTypesByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '',$month = '', $day = '')
4962
	{
4963
		global $globalDBdriver;
4964
		$filter_query = $this->getFilter($filters,true,true);
4965
		$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 
4966
		    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' ";
4967
		if ($olderthanmonths > 0) {
4968
			if ($globalDBdriver == 'mysql') {
4969
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4970
			} else {
4971
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4972
			}
4973
		}
4974
		if ($sincedate != '') {
4975
			if ($globalDBdriver == 'mysql') {
4976
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4977
			} else {
4978
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4979
			}
4980
		}
4981
		$query_values = array();
4982
		if ($year != '') {
4983
			if ($globalDBdriver == 'mysql') {
4984
				$query .= " AND YEAR(spotter_output.date) = :year";
4985
				$query_values = array_merge($query_values,array(':year' => $year));
4986
			} else {
4987
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4988
				$query_values = array_merge($query_values,array(':year' => $year));
4989
			}
4990
		}
4991
		if ($month != '') {
4992
			if ($globalDBdriver == 'mysql') {
4993
				$query .= " AND MONTH(spotter_output.date) = :month";
4994
				$query_values = array_merge($query_values,array(':month' => $month));
4995
			} else {
4996
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4997
				$query_values = array_merge($query_values,array(':month' => $month));
4998
			}
4999
		}
5000
		if ($day != '') {
5001
			if ($globalDBdriver == 'mysql') {
5002
				$query .= " AND DAY(spotter_output.date) = :day";
5003
				$query_values = array_merge($query_values,array(':day' => $day));
5004
			} else {
5005
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5006
				$query_values = array_merge($query_values,array(':day' => $day));
5007
			}
5008
		}
5009
5010
		$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";
5011
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5012
 
5013
		$sth = $this->db->prepare($query);
5014
		$sth->execute($query_values);
5015
5016
		$aircraft_array = array();
5017
		$temp_array = array();
5018
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5019
		{
5020
			$temp_array['airline_icao'] = $row['airline_icao'];
5021
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5022
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5023
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5024
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5025
			$aircraft_array[] = $temp_array;
5026
		}
5027
		return $aircraft_array;
5028
	}
5029
5030
	/**
5031
	* Gets all aircraft types that have flown over by months
5032
	*
5033
	* @return Array the aircraft list
5034
	*
5035
	*/
5036
	public function countAllAircraftTypesByMonths($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
5037
	{
5038
		global $globalDBdriver;
5039
		$filter_query = $this->getFilter($filters,true,true);
5040
		$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 
5041
		    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' ";
5042
		if ($olderthanmonths > 0) {
5043
			if ($globalDBdriver == 'mysql') {
5044
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5045
			} else {
5046
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5047
			}
5048
		}
5049
		if ($sincedate != '') {
5050
			if ($globalDBdriver == 'mysql') {
5051
				$query .= "AND spotter_output.date > '".$sincedate."' ";
5052
			} else {
5053
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5054
			}
5055
		}
5056
5057
		$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";
5058
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5059
 
5060
		$sth = $this->db->prepare($query);
5061
		$sth->execute();
5062
5063
		$aircraft_array = array();
5064
		$temp_array = array();
5065
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5066
		{
5067
			//$temp_array['airline_icao'] = $row['airline_icao'];
5068
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5069
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5070
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5071
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5072
			$aircraft_array[] = $temp_array;
5073
		}
5074
		return $aircraft_array;
5075
	}
5076
5077
5078
	/**
5079
	* Gets all aircraft registration that have flown over by aircaft icao
5080
	*
5081
	* @return Array the aircraft list
5082
	*
5083
	*/
5084
	public function countAllAircraftRegistrationByAircraft($aircraft_icao,$filters = array())
5085
	{
5086
		$Image = new Image($this->db);
5087
		$filter_query = $this->getFilter($filters,true,true);
5088
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
5089
5090
		$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  
5091
				FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_icao = :aircraft_icao  
5092
				GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name  
5093
				ORDER BY registration_count DESC";
5094
5095
		$sth = $this->db->prepare($query);
5096
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
5097
5098
		$aircraft_array = array();
5099
		$temp_array = array();
5100
        
5101
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5102
		{
5103
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5104
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5105
			$temp_array['registration'] = $row['registration'];
5106
			$temp_array['airline_name'] = $row['airline_name'];
5107
			$temp_array['image_thumbnail'] = "";
5108
			if($row['registration'] != "")
5109
			{
5110
				$image_array = $Image->getSpotterImage($row['registration']);
5111
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5112
			}
5113
			$temp_array['registration_count'] = $row['registration_count'];
5114
5115
			$aircraft_array[] = $temp_array;
5116
		}
5117
		return $aircraft_array;
5118
	}
5119
5120
5121
	/**
5122
	* Gets all aircraft types that have flown over by airline icao
5123
	*
5124
	* @return Array the aircraft list
5125
	*
5126
	*/
5127
	public function countAllAircraftTypesByAirline($airline_icao,$filters = array())
5128
	{
5129
		$filter_query = $this->getFilter($filters,true,true);
5130
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5131
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5132
			    FROM spotter_output".$filter_query." spotter_output.aircraft_icao <> '' AND spotter_output.airline_icao = :airline_icao 
5133
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5134
			    ORDER BY aircraft_icao_count DESC";
5135
5136
		$sth = $this->db->prepare($query);
5137
		$sth->execute(array(':airline_icao' => $airline_icao));
5138
5139
		$aircraft_array = array();
5140
		$temp_array = array();
5141
5142
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5143
		{
5144
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5145
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5146
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5147
5148
			$aircraft_array[] = $temp_array;
5149
		}
5150
		return $aircraft_array;
5151
	}
5152
5153
5154
	/**
5155
	* Gets all aircraft registration that have flown over by airline icao
5156
	*
5157
	* @return Array the aircraft list
5158
	*
5159
	*/
5160
	public function countAllAircraftRegistrationByAirline($airline_icao,$filters = array())
5161
	{
5162
		$filter_query = $this->getFilter($filters,true,true);
5163
		$Image = new Image($this->db);
5164
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5165
5166
		$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 
5167
			    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.airline_icao = :airline_icao 
5168
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
5169
			    ORDER BY registration_count DESC";
5170
5171
		$sth = $this->db->prepare($query);
5172
		$sth->execute(array(':airline_icao' => $airline_icao));
5173
5174
		$aircraft_array = array();
5175
		$temp_array = array();
5176
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5177
		{
5178
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5179
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5180
			$temp_array['registration'] = $row['registration'];
5181
			$temp_array['airline_name'] = $row['airline_name'];
5182
			$temp_array['image_thumbnail'] = "";
5183
			if($row['registration'] != "")
5184
			{
5185
				$image_array = $Image->getSpotterImage($row['registration']);
5186
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5187
			}
5188
			$temp_array['registration_count'] = $row['registration_count'];
5189
5190
			$aircraft_array[] = $temp_array;
5191
		}
5192
		return $aircraft_array;
5193
	}
5194
5195
5196
	/**
5197
	* Gets all aircraft manufacturer that have flown over by airline icao
5198
	*
5199
	* @return Array the aircraft list
5200
	*
5201
	*/
5202
	public function countAllAircraftManufacturerByAirline($airline_icao,$filters = array())
5203
	{
5204
		$filter_query = $this->getFilter($filters,true,true);
5205
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5206
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5207
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.airline_icao = :airline_icao 
5208
				GROUP BY spotter_output.aircraft_manufacturer 
5209
				ORDER BY aircraft_manufacturer_count DESC";
5210
5211
		$sth = $this->db->prepare($query);
5212
		$sth->execute(array(':airline_icao' => $airline_icao));
5213
5214
		$aircraft_array = array();
5215
		$temp_array = array();
5216
5217
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5218
		{
5219
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5220
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5221
5222
			$aircraft_array[] = $temp_array;
5223
		}
5224
		return $aircraft_array;
5225
	}
5226
5227
5228
	/**
5229
	* Gets all aircraft types that have flown over by airline icao
5230
	*
5231
	* @return Array the aircraft list
5232
	*
5233
	*/
5234
	public function countAllAircraftTypesByAirport($airport_icao,$filters = array())
5235
	{
5236
		$filter_query = $this->getFilter($filters,true,true);
5237
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5238
5239
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5240
				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) 
5241
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5242
				ORDER BY aircraft_icao_count DESC";
5243
 
5244
		$sth = $this->db->prepare($query);
5245
		$sth->execute(array(':airport_icao' => $airport_icao));
5246
5247
		$aircraft_array = array();
5248
		$temp_array = array();
5249
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5250
		{
5251
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5252
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5253
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5254
5255
			$aircraft_array[] = $temp_array;
5256
		}
5257
		return $aircraft_array;
5258
	}
5259
5260
5261
	/**
5262
	* Gets all aircraft registration that have flown over by airport icao
5263
	*
5264
	* @return Array the aircraft list
5265
	*
5266
	*/
5267
	public function countAllAircraftRegistrationByAirport($airport_icao,$filters = array())
5268
	{
5269
		$filter_query = $this->getFilter($filters,true,true);
5270
		$Image = new Image($this->db);
5271
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5272
5273
		$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  
5274
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)   
5275
                    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5276
		    ORDER BY registration_count DESC";
5277
5278
		$sth = $this->db->prepare($query);
5279
		$sth->execute(array(':airport_icao' => $airport_icao));
5280
5281
		$aircraft_array = array();
5282
		$temp_array = array();
5283
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5284
		{
5285
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5286
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5287
			$temp_array['registration'] = $row['registration'];
5288
			$temp_array['airline_name'] = $row['airline_name'];
5289
			$temp_array['image_thumbnail'] = "";
5290
			if($row['registration'] != "")
5291
			{
5292
				$image_array = $Image->getSpotterImage($row['registration']);
5293
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5294
			}
5295
			$temp_array['registration_count'] = $row['registration_count'];
5296
			$aircraft_array[] = $temp_array;
5297
		}
5298
		return $aircraft_array;
5299
	}
5300
	
5301
	
5302
	/**
5303
	* Gets all aircraft manufacturer that have flown over by airport icao
5304
	*
5305
	* @return Array the aircraft list
5306
	*
5307
	*/
5308
	public function countAllAircraftManufacturerByAirport($airport_icao,$filters = array())
5309
	{
5310
		$filter_query = $this->getFilter($filters,true,true);
5311
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5312
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5313
                    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)  
5314
                    GROUP BY spotter_output.aircraft_manufacturer 
5315
					ORDER BY aircraft_manufacturer_count DESC";
5316
5317
		
5318
		$sth = $this->db->prepare($query);
5319
		$sth->execute(array(':airport_icao' => $airport_icao));
5320
5321
		$aircraft_array = array();
5322
		$temp_array = array();
5323
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5324
		{
5325
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5326
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5327
			$aircraft_array[] = $temp_array;
5328
		}
5329
		return $aircraft_array;
5330
	}
5331
5332
	/**
5333
	* Gets all aircraft types that have flown over by aircraft manufacturer
5334
	*
5335
	* @return Array the aircraft list
5336
	*
5337
	*/
5338
	public function countAllAircraftTypesByManufacturer($aircraft_manufacturer,$filters = array())
5339
	{
5340
		$filter_query = $this->getFilter($filters,true,true);
5341
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5342
5343
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5344
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
5345
                    GROUP BY spotter_output.aircraft_name 
5346
					ORDER BY aircraft_icao_count DESC";
5347
5348
		$sth = $this->db->prepare($query);
5349
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5350
		$aircraft_array = array();
5351
		$temp_array = array();
5352
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5353
		{
5354
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5355
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5356
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5357
			$aircraft_array[] = $temp_array;
5358
		}
5359
		return $aircraft_array;
5360
	}
5361
5362
5363
	/**
5364
	* Gets all aircraft registration that have flown over by aircaft manufacturer
5365
	*
5366
	* @return Array the aircraft list
5367
	*
5368
	*/
5369
	public function countAllAircraftRegistrationByManufacturer($aircraft_manufacturer, $filters = array())
5370
	{
5371
		$filter_query = $this->getFilter($filters,true,true);
5372
		$Image = new Image($this->db);
5373
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5374
5375
		$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   
5376
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
5377
                    GROUP BY spotter_output.registration 
5378
					ORDER BY registration_count DESC";
5379
5380
		
5381
		$sth = $this->db->prepare($query);
5382
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5383
		$aircraft_array = array();
5384
		$temp_array = array();
5385
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5386
		{
5387
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5388
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5389
			$temp_array['registration'] = $row['registration'];
5390
			$temp_array['airline_name'] = $row['airline_name'];
5391
			$temp_array['image_thumbnail'] = "";
5392
			if($row['registration'] != "")
5393
			{
5394
				$image_array = $Image->getSpotterImage($row['registration']);
5395
				$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5396
			}
5397
			$temp_array['registration_count'] = $row['registration_count'];
5398
			$aircraft_array[] = $temp_array;
5399
		}
5400
		return $aircraft_array;
5401
	}
5402
5403
	/**
5404
	* Gets all aircraft types that have flown over by date
5405
	*
5406
	* @return Array the aircraft list
5407
	*
5408
	*/
5409
	public function countAllAircraftTypesByDate($date,$filters = array())
5410
	{
5411
		global $globalTimezone, $globalDBdriver;
5412
		$filter_query = $this->getFilter($filters,true,true);
5413
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5414
		if ($globalTimezone != '') {
5415
			date_default_timezone_set($globalTimezone);
5416
			$datetime = new DateTime($date);
5417
			$offset = $datetime->format('P');
5418
		} else $offset = '+00:00';
5419
5420
		if ($globalDBdriver == 'mysql') {
5421
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5422
					FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
5423
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5424
					ORDER BY aircraft_icao_count DESC";
5425
		} else {
5426
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5427
					FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date
5428
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5429
					ORDER BY aircraft_icao_count DESC";
5430
		}
5431
		
5432
		$sth = $this->db->prepare($query);
5433
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5434
5435
		$aircraft_array = array();
5436
		$temp_array = array();
5437
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5438
		{
5439
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5440
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5441
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5442
5443
			$aircraft_array[] = $temp_array;
5444
		}
5445
		return $aircraft_array;
5446
	}
5447
5448
5449
	/**
5450
	* Gets all aircraft registration that have flown over by date
5451
	*
5452
	* @return Array the aircraft list
5453
	*
5454
	*/
5455
	public function countAllAircraftRegistrationByDate($date,$filters = array())
5456
	{
5457
		global $globalTimezone, $globalDBdriver;
5458
		$filter_query = $this->getFilter($filters,true,true);
5459
		$Image = new Image($this->db);
5460
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5461
		if ($globalTimezone != '') {
5462
			date_default_timezone_set($globalTimezone);
5463
			$datetime = new DateTime($date);
5464
			$offset = $datetime->format('P');
5465
		} else $offset = '+00:00';
5466
5467
		if ($globalDBdriver == 'mysql') {
5468
			$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 
5469
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5470
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5471
					ORDER BY registration_count DESC";
5472
		} else {
5473
			$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    
5474
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5475
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5476
					ORDER BY registration_count DESC";
5477
		}
5478
		
5479
		$sth = $this->db->prepare($query);
5480
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5481
5482
		$aircraft_array = array();
5483
		$temp_array = array();
5484
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5485
		{
5486
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5487
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5488
			$temp_array['registration'] = $row['registration'];
5489
			$temp_array['airline_name'] = $row['airline_name'];
5490
			$temp_array['image_thumbnail'] = "";
5491
			if($row['registration'] != "")
5492
			{
5493
				$image_array = $Image->getSpotterImage($row['registration']);
5494
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5495
			}
5496
			$temp_array['registration_count'] = $row['registration_count'];
5497
 
5498
			$aircraft_array[] = $temp_array;
5499
		}
5500
		return $aircraft_array;
5501
	}
5502
5503
5504
	/**
5505
	* Gets all aircraft manufacturer that have flown over by date
5506
	*
5507
	* @return Array the aircraft manufacturer list
5508
	*
5509
	*/
5510
	public function countAllAircraftManufacturerByDate($date,$filters = array())
5511
	{
5512
		global $globalTimezone, $globalDBdriver;
5513
		$filter_query = $this->getFilter($filters,true,true);
5514
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5515
		if ($globalTimezone != '') {
5516
			date_default_timezone_set($globalTimezone);
5517
			$datetime = new DateTime($date);
5518
			$offset = $datetime->format('P');
5519
		} else $offset = '+00:00';
5520
5521
		if ($globalDBdriver == 'mysql') {
5522
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5523
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5524
				GROUP BY spotter_output.aircraft_manufacturer 
5525
				ORDER BY aircraft_manufacturer_count DESC";
5526
		} else {
5527
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5528
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5529
				GROUP BY spotter_output.aircraft_manufacturer 
5530
				ORDER BY aircraft_manufacturer_count DESC";
5531
		}
5532
		
5533
		$sth = $this->db->prepare($query);
5534
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5535
5536
		$aircraft_array = array();
5537
		$temp_array = array();
5538
5539
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5540
		{
5541
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5542
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5543
5544
			$aircraft_array[] = $temp_array;
5545
		}
5546
		return $aircraft_array;
5547
	}
5548
5549
5550
	/**
5551
	* Gets all aircraft types that have flown over by ident/callsign
5552
	*
5553
	* @return Array the aircraft list
5554
	*
5555
	*/
5556
	public function countAllAircraftTypesByIdent($ident,$filters = array())
5557
	{
5558
		$filter_query = $this->getFilter($filters,true,true);
5559
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5560
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5561
				FROM spotter_output".$filter_query." spotter_output.ident = :ident 
5562
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao
5563
				ORDER BY aircraft_icao_count DESC";
5564
5565
		$sth = $this->db->prepare($query);
5566
		$sth->execute(array(':ident' => $ident));
5567
      
5568
		$aircraft_array = array();
5569
		$temp_array = array();
5570
5571
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5572
		{
5573
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5574
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5575
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5576
5577
			$aircraft_array[] = $temp_array;
5578
		}
5579
		return $aircraft_array;
5580
	}
5581
5582
	/**
5583
	* Gets all aircraft types that have flown over by pilot
5584
	*
5585
	* @return Array the aircraft list
5586
	*
5587
	*/
5588
	public function countAllAircraftTypesByPilot($pilot,$filters = array())
5589
	{
5590
		$filter_query = $this->getFilter($filters,true,true);
5591
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
5592
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5593
				FROM spotter_output".$filter_query." (spotter_output.pilot_id = :pilot OR spotter_output.pilot_name = :pilot) 
5594
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao
5595
				ORDER BY aircraft_icao_count DESC";
5596
5597
		$sth = $this->db->prepare($query);
5598
		$sth->execute(array(':pilot' => $pilot));
5599
		return $sth->fetchAll(PDO::FETCH_ASSOC);
5600
	}
5601
5602
	/**
5603
	* Gets all aircraft types that have flown over by owner
5604
	*
5605
	* @return Array the aircraft list
5606
	*
5607
	*/
5608
	public function countAllAircraftTypesByOwner($owner,$filters = array())
5609
	{
5610
		$filter_query = $this->getFilter($filters,true,true);
5611
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
5612
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
5613
				FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
5614
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.aircraft_icao
5615
				ORDER BY aircraft_icao_count DESC";
5616
5617
		$sth = $this->db->prepare($query);
5618
		$sth->execute(array(':owner' => $owner));
5619
		return $sth->fetchAll(PDO::FETCH_ASSOC);
5620
	}
5621
5622
5623
	/**
5624
	* Gets all aircraft registration that have flown over by ident/callsign
5625
	*
5626
	* @return Array the aircraft list
5627
	*
5628
	*/
5629
	public function countAllAircraftRegistrationByIdent($ident,$filters = array())
5630
	{
5631
		$filter_query = $this->getFilter($filters,true,true);
5632
		$Image = new Image($this->db);
5633
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5634
5635
		$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  
5636
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.ident = :ident   
5637
                    GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
5638
		    ORDER BY registration_count DESC";
5639
5640
		
5641
		$sth = $this->db->prepare($query);
5642
		$sth->execute(array(':ident' => $ident));
5643
      
5644
		$aircraft_array = array();
5645
		$temp_array = array();
5646
        
5647
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5648
		{
5649
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5650
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5651
			$temp_array['registration'] = $row['registration'];
5652
			$temp_array['airline_name'] = $row['airline_name'];
5653
			$temp_array['image_thumbnail'] = "";
5654
			if($row['registration'] != "")
5655
			{
5656
				$image_array = $Image->getSpotterImage($row['registration']);
5657
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5658
				else $temp_array['image_thumbnail'] = '';
5659
			}
5660
			$temp_array['registration_count'] = $row['registration_count'];
5661
			$aircraft_array[] = $temp_array;
5662
		}
5663
		return $aircraft_array;
5664
	}
5665
5666
	/**
5667
	* Gets all aircraft registration that have flown over by owner
5668
	*
5669
	* @return Array the aircraft list
5670
	*
5671
	*/
5672
	public function countAllAircraftRegistrationByOwner($owner,$filters = array())
5673
	{
5674
		$filter_query = $this->getFilter($filters,true,true);
5675
		$Image = new Image($this->db);
5676
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
5677
5678
		$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  
5679
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.owner_name = :owner 
5680
                    GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.airline_name
5681
		    ORDER BY registration_count DESC";
5682
5683
		
5684
		$sth = $this->db->prepare($query);
5685
		$sth->execute(array(':owner' => $owner));
5686
      
5687
		$aircraft_array = array();
5688
		$temp_array = array();
5689
        
5690
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5691
		{
5692
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5693
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5694
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5695
			$temp_array['registration'] = $row['registration'];
5696
			$temp_array['airline_name'] = $row['airline_name'];
5697
			$temp_array['image_thumbnail'] = "";
5698
			if($row['registration'] != "")
5699
			{
5700
				$image_array = $Image->getSpotterImage($row['registration']);
5701
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5702
				else $temp_array['image_thumbnail'] = '';
5703
			}
5704
			$temp_array['registration_count'] = $row['registration_count'];
5705
			$aircraft_array[] = $temp_array;
5706
		}
5707
		return $aircraft_array;
5708
	}
5709
5710
	/**
5711
	* Gets all aircraft registration that have flown over by pilot
5712
	*
5713
	* @return Array the aircraft list
5714
	*
5715
	*/
5716
	public function countAllAircraftRegistrationByPilot($pilot,$filters = array())
5717
	{
5718
		$filter_query = $this->getFilter($filters,true,true);
5719
		$Image = new Image($this->db);
5720
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
5721
5722
		$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  
5723
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
5724
                    GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.airline_name
5725
		    ORDER BY registration_count DESC";
5726
5727
		
5728
		$sth = $this->db->prepare($query);
5729
		$sth->execute(array(':pilot' => $pilot));
5730
      
5731
		$aircraft_array = array();
5732
		$temp_array = array();
5733
        
5734
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5735
		{
5736
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5737
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5738
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5739
			$temp_array['registration'] = $row['registration'];
5740
			$temp_array['airline_name'] = $row['airline_name'];
5741
			$temp_array['image_thumbnail'] = "";
5742
			if($row['registration'] != "")
5743
			{
5744
				$image_array = $Image->getSpotterImage($row['registration']);
5745
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5746
				else $temp_array['image_thumbnail'] = '';
5747
			}
5748
			$temp_array['registration_count'] = $row['registration_count'];
5749
			$aircraft_array[] = $temp_array;
5750
		}
5751
		return $aircraft_array;
5752
	}
5753
5754
5755
	/**
5756
	* Gets all aircraft manufacturer that have flown over by ident/callsign
5757
	*
5758
	* @return Array the aircraft manufacturer list
5759
	*
5760
	*/
5761
	public function countAllAircraftManufacturerByIdent($ident,$filters = array())
5762
	{
5763
		$filter_query = $this->getFilter($filters,true,true);
5764
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5765
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5766
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.ident = :ident  
5767
                    GROUP BY spotter_output.aircraft_manufacturer 
5768
					ORDER BY aircraft_manufacturer_count DESC";
5769
5770
		
5771
		$sth = $this->db->prepare($query);
5772
		$sth->execute(array(':ident' => $ident));
5773
		$aircraft_array = array();
5774
		$temp_array = array();
5775
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5776
		{
5777
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5778
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5779
			$aircraft_array[] = $temp_array;
5780
		}
5781
		return $aircraft_array;
5782
	}
5783
5784
	/**
5785
	* Gets all aircraft manufacturer that have flown over by owner
5786
	*
5787
	* @return Array the aircraft manufacturer list
5788
	*
5789
	*/
5790
	public function countAllAircraftManufacturerByOwner($owner,$filters = array())
5791
	{
5792
		$filter_query = $this->getFilter($filters,true,true);
5793
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
5794
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5795
		    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.owner_name = :owner 
5796
		    GROUP BY spotter_output.aircraft_manufacturer 
5797
		    ORDER BY aircraft_manufacturer_count DESC";
5798
5799
		
5800
		$sth = $this->db->prepare($query);
5801
		$sth->execute(array(':owner' => $owner));
5802
		return $sth->fetchAll(PDO::FETCH_ASSOC);
5803
	}
5804
5805
	/**
5806
	* Gets all aircraft manufacturer that have flown over by pilot
5807
	*
5808
	* @return Array the aircraft manufacturer list
5809
	*
5810
	*/
5811
	public function countAllAircraftManufacturerByPilot($pilot,$filters = array())
5812
	{
5813
		$filter_query = $this->getFilter($filters,true,true);
5814
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
5815
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5816
		    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
5817
		    GROUP BY spotter_output.aircraft_manufacturer 
5818
		    ORDER BY aircraft_manufacturer_count DESC";
5819
5820
		
5821
		$sth = $this->db->prepare($query);
5822
		$sth->execute(array(':pilot' => $pilot));
5823
		return $sth->fetchAll(PDO::FETCH_ASSOC);
5824
	}
5825
5826
5827
	/**
5828
	* Gets all aircraft types that have flown over by route
5829
	*
5830
	* @return Array the aircraft list
5831
	*
5832
	*/
5833
	public function countAllAircraftTypesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
5834
	{
5835
		$filter_query = $this->getFilter($filters,true,true);
5836
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
5837
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
5838
		
5839
5840
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5841
                    FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
5842
                    GROUP BY spotter_output.aircraft_name 
5843
					ORDER BY aircraft_icao_count DESC";
5844
 
5845
		
5846
		$sth = $this->db->prepare($query);
5847
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
5848
		$aircraft_array = array();
5849
		$temp_array = array();
5850
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5851
		{
5852
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5853
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5854
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5855
			$aircraft_array[] = $temp_array;
5856
		}
5857
		return $aircraft_array;
5858
	}
5859
5860
	/**
5861
	* Gets all aircraft registration that have flown over by route
5862
	*
5863
	* @return Array the aircraft list
5864
	*
5865
	*/
5866
	public function countAllAircraftRegistrationByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
5867
	{
5868
		$filter_query = $this->getFilter($filters,true,true);
5869
		$Image = new Image($this->db);
5870
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
5871
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
5872
5873
		$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   
5874
                    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)   
5875
                    GROUP BY spotter_output.registration 
5876
					ORDER BY registration_count DESC";
5877
5878
		
5879
		$sth = $this->db->prepare($query);
5880
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
5881
      
5882
		$aircraft_array = array();
5883
		$temp_array = array();
5884
        
5885
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5886
		{
5887
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5888
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5889
			$temp_array['registration'] = $row['registration'];
5890
			$temp_array['airline_name'] = $row['airline_name'];
5891
			$temp_array['image_thumbnail'] = "";
5892
			if($row['registration'] != "")
5893
			{
5894
				$image_array = $Image->getSpotterImage($row['registration']);
5895
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5896
			}
5897
			$temp_array['registration_count'] = $row['registration_count'];
5898
          
5899
			$aircraft_array[] = $temp_array;
5900
		}
5901
5902
		return $aircraft_array;
5903
	}
5904
	
5905
	
5906
	/**
5907
	* Gets all aircraft manufacturer that have flown over by route
5908
	*
5909
	* @return Array the aircraft manufacturer list
5910
	*
5911
	*/
5912
	public function countAllAircraftManufacturerByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
5913
	{
5914
		$filter_query = $this->getFilter($filters,true,true);
5915
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
5916
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
5917
5918
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5919
                    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) 
5920
                    GROUP BY spotter_output.aircraft_manufacturer 
5921
					ORDER BY aircraft_manufacturer_count DESC";
5922
5923
		
5924
		$sth = $this->db->prepare($query);
5925
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
5926
      
5927
		$aircraft_array = array();
5928
		$temp_array = array();
5929
        
5930
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5931
		{
5932
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5933
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5934
          
5935
			$aircraft_array[] = $temp_array;
5936
		}
5937
5938
		return $aircraft_array;
5939
	}	
5940
5941
	
5942
	
5943
	
5944
	/**
5945
	* Gets all aircraft types that have flown over by country
5946
	*
5947
	* @return Array the aircraft list
5948
	*
5949
	*/
5950
	public function countAllAircraftTypesByCountry($country,$filters = array())
5951
	{
5952
		$filter_query = $this->getFilter($filters,true,true);
5953
		$country = filter_var($country,FILTER_SANITIZE_STRING);
5954
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5955
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
5956
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5957
			    ORDER BY aircraft_icao_count DESC";
5958
 
5959
		
5960
		$sth = $this->db->prepare($query);
5961
		$sth->execute(array(':country' => $country));
5962
      
5963
		$aircraft_array = array();
5964
		$temp_array = array();
5965
        
5966
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5967
		{
5968
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5969
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5970
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5971
          
5972
			$aircraft_array[] = $temp_array;
5973
		}
5974
5975
		return $aircraft_array;
5976
	}
5977
5978
5979
	/**
5980
	* Gets all aircraft registration that have flown over by country
5981
	*
5982
	* @return Array the aircraft list
5983
	*
5984
	*/
5985
	public function countAllAircraftRegistrationByCountry($country,$filters = array())
5986
	{
5987
		$filter_query = $this->getFilter($filters,true,true);
5988
		$Image = new Image($this->db);
5989
		$country = filter_var($country,FILTER_SANITIZE_STRING);
5990
		$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 
5991
			    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)    
5992
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5993
			    ORDER BY registration_count DESC";
5994
5995
		
5996
		$sth = $this->db->prepare($query);
5997
		$sth->execute(array(':country' => $country));
5998
      
5999
		$aircraft_array = array();
6000
		$temp_array = array();
6001
        
6002
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6003
		{
6004
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6005
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6006
			$temp_array['registration'] = $row['registration'];
6007
			$temp_array['airline_name'] = $row['airline_name'];
6008
			$temp_array['image_thumbnail'] = "";
6009
			if($row['registration'] != "")
6010
			{
6011
				$image_array = $Image->getSpotterImage($row['registration']);
6012
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6013
			}
6014
			$temp_array['registration_count'] = $row['registration_count'];
6015
          
6016
			$aircraft_array[] = $temp_array;
6017
		}
6018
6019
		return $aircraft_array;
6020
	}
6021
	
6022
	
6023
	/**
6024
	* Gets all aircraft manufacturer that have flown over by country
6025
	*
6026
	* @return Array the aircraft manufacturer list
6027
	*
6028
	*/
6029
	public function countAllAircraftManufacturerByCountry($country,$filters = array())
6030
	{
6031
		$filter_query = $this->getFilter($filters,true,true);
6032
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6033
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6034
                    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) 
6035
                    GROUP BY spotter_output.aircraft_manufacturer 
6036
					ORDER BY aircraft_manufacturer_count DESC";
6037
6038
		
6039
		$sth = $this->db->prepare($query);
6040
		$sth->execute(array(':country' => $country));
6041
      
6042
		$aircraft_array = array();
6043
		$temp_array = array();
6044
        
6045
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6046
		{
6047
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6048
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6049
          
6050
			$aircraft_array[] = $temp_array;
6051
		}
6052
6053
		return $aircraft_array;
6054
	}	
6055
	
6056
	
6057
	
6058
	/**
6059
	* Gets all aircraft manufacturers that have flown over
6060
	*
6061
	* @return Array the aircraft list
6062
	*
6063
	*/
6064
	public function countAllAircraftManufacturers($filters = array(),$year = '',$month = '',$day = '')
6065
	{
6066
		global $globalDBdriver;
6067
		$filter_query = $this->getFilter($filters,true,true);
6068
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6069
                    FROM spotter_output ".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.aircraft_manufacturer <> 'Not Available'";
6070
                $query_values = array();
6071
		if ($year != '') {
6072
			if ($globalDBdriver == 'mysql') {
6073
				$query .= " AND YEAR(spotter_output.date) = :year";
6074
				$query_values = array_merge($query_values,array(':year' => $year));
6075
			} else {
6076
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6077
				$query_values = array_merge($query_values,array(':year' => $year));
6078
			}
6079
		}
6080
		if ($month != '') {
6081
			if ($globalDBdriver == 'mysql') {
6082
				$query .= " AND MONTH(spotter_output.date) = :month";
6083
				$query_values = array_merge($query_values,array(':month' => $month));
6084
			} else {
6085
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6086
				$query_values = array_merge($query_values,array(':month' => $month));
6087
			}
6088
		}
6089
		if ($day != '') {
6090
			if ($globalDBdriver == 'mysql') {
6091
				$query .= " AND DAY(spotter_output.date) = :day";
6092
				$query_values = array_merge($query_values,array(':day' => $day));
6093
			} else {
6094
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6095
				$query_values = array_merge($query_values,array(':day' => $day));
6096
			}
6097
		}
6098
		$query .= " GROUP BY spotter_output.aircraft_manufacturer
6099
					ORDER BY aircraft_manufacturer_count DESC
6100
					LIMIT 10";
6101
      
6102
		
6103
		$sth = $this->db->prepare($query);
6104
		$sth->execute($query_values);
6105
      
6106
		$manufacturer_array = array();
6107
		$temp_array = array();
6108
        
6109
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6110
		{
6111
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6112
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6113
          
6114
			$manufacturer_array[] = $temp_array;
6115
		}
6116
6117
		return $manufacturer_array;
6118
	}
6119
	
6120
	
6121
	
6122
	/**
6123
	* Gets all aircraft registrations that have flown over
6124
	*
6125
	* @return Array the aircraft list
6126
	*
6127
	*/
6128
	public function countAllAircraftRegistrations($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '', $month = '', $day = '')
6129
	{
6130
		global $globalDBdriver;
6131
		$Image = new Image($this->db);
6132
		$filter_query = $this->getFilter($filters,true,true);
6133
		$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    
6134
                    FROM spotter_output ".$filter_query." spotter_output.registration <> '' AND spotter_output.registration <> 'NA'";
6135
                if ($olderthanmonths > 0) {
6136
            		if ($globalDBdriver == 'mysql') {
6137
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6138
			} else {
6139
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6140
			}
6141
		}
6142
                if ($sincedate != '') {
6143
            		if ($globalDBdriver == 'mysql') {
6144
				$query .= " AND spotter_output.date > '".$sincedate."'";
6145
			} else {
6146
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6147
			}
6148
		}
6149
		$query_values = array();
6150
		if ($year != '') {
6151
			if ($globalDBdriver == 'mysql') {
6152
				$query .= " AND YEAR(spotter_output.date) = :year";
6153
				$query_values = array_merge($query_values,array(':year' => $year));
6154
			} else {
6155
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6156
				$query_values = array_merge($query_values,array(':year' => $year));
6157
			}
6158
		}
6159
		if ($month != '') {
6160
			if ($globalDBdriver == 'mysql') {
6161
				$query .= " AND MONTH(spotter_output.date) = :month";
6162
				$query_values = array_merge($query_values,array(':month' => $month));
6163
			} else {
6164
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6165
				$query_values = array_merge($query_values,array(':month' => $month));
6166
			}
6167
		}
6168
		if ($day != '') {
6169
			if ($globalDBdriver == 'mysql') {
6170
				$query .= " AND DAY(spotter_output.date) = :day";
6171
				$query_values = array_merge($query_values,array(':day' => $day));
6172
			} else {
6173
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6174
				$query_values = array_merge($query_values,array(':day' => $day));
6175
			}
6176
		}
6177
		$query .= " GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name ORDER BY aircraft_registration_count DESC";
6178
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6179
		
6180
		$sth = $this->db->prepare($query);
6181
		$sth->execute($query_values);
6182
      
6183
		$aircraft_array = array();
6184
		$temp_array = array();
6185
        
6186
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6187
		{
6188
			$temp_array['registration'] = $row['registration'];
6189
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
6190
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6191
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6192
			$temp_array['airline_name'] = $row['airline_name'];
6193
			$temp_array['image_thumbnail'] = "";
6194
			if($row['registration'] != "")
6195
			{
6196
				$image_array = $Image->getSpotterImage($row['registration']);
6197
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6198
			}
6199
          
6200
			$aircraft_array[] = $temp_array;
6201
		}
6202
6203
		return $aircraft_array;
6204
	}
6205
6206
6207
	/**
6208
	* Gets all aircraft registrations that have flown over
6209
	*
6210
	* @return Array the aircraft list
6211
	*
6212
	*/
6213
	public function countAllAircraftRegistrationsByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
6214
	{
6215
		global $globalDBdriver;
6216
		$filter_query = $this->getFilter($filters,true,true);
6217
		$Image = new Image($this->db);
6218
		$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    
6219
                    FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.registration <> '' AND spotter_output.registration <> 'NA' ";
6220
                if ($olderthanmonths > 0) {
6221
            		if ($globalDBdriver == 'mysql') {
6222
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6223
			} else {
6224
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6225
			}
6226
		}
6227
                if ($sincedate != '') {
6228
            		if ($globalDBdriver == 'mysql') {
6229
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6230
			} else {
6231
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6232
			}
6233
		}
6234
6235
		// if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6236
		//if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6237
                $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";
6238
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6239
		
6240
		$sth = $this->db->prepare($query);
6241
		$sth->execute();
6242
      
6243
		$aircraft_array = array();
6244
		$temp_array = array();
6245
        
6246
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6247
		{
6248
			$temp_array['registration'] = $row['registration'];
6249
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
6250
			$temp_array['airline_icao'] = $row['airline_icao'];
6251
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6252
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6253
			$temp_array['airline_name'] = $row['airline_name'];
6254
			$temp_array['image_thumbnail'] = "";
6255
			if($row['registration'] != "")
6256
			{
6257
				$image_array = $Image->getSpotterImage($row['registration']);
6258
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6259
			}
6260
          
6261
			$aircraft_array[] = $temp_array;
6262
		}
6263
6264
		return $aircraft_array;
6265
	}
6266
	
6267
	
6268
	/**
6269
	* Gets all departure airports of the airplanes that have flown over
6270
	*
6271
	* @return Array the airport list
6272
	*
6273
	*/
6274
	public function countAllDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
6275
	{
6276
		global $globalDBdriver;
6277
		$filter_query = $this->getFilter($filters,true,true);
6278
		$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 
6279
				FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> ''";
6280
                if ($olderthanmonths > 0) {
6281
            		if ($globalDBdriver == 'mysql') {
6282
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6283
			} else {
6284
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6285
			}
6286
                }
6287
                if ($sincedate != '') {
6288
            		if ($globalDBdriver == 'mysql') {
6289
				$query .= " AND spotter_output.date > '".$sincedate."'";
6290
			} else {
6291
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6292
			}
6293
		}
6294
		$query_values = array();
6295
		if ($year != '') {
6296
			if ($globalDBdriver == 'mysql') {
6297
				$query .= " AND YEAR(spotter_output.date) = :year";
6298
				$query_values = array_merge($query_values,array(':year' => $year));
6299
			} else {
6300
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6301
				$query_values = array_merge($query_values,array(':year' => $year));
6302
			}
6303
		}
6304
		if ($month != '') {
6305
			if ($globalDBdriver == 'mysql') {
6306
				$query .= " AND MONTH(spotter_output.date) = :month";
6307
				$query_values = array_merge($query_values,array(':month' => $month));
6308
			} else {
6309
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6310
				$query_values = array_merge($query_values,array(':month' => $month));
6311
			}
6312
		}
6313
		if ($day != '') {
6314
			if ($globalDBdriver == 'mysql') {
6315
				$query .= " AND DAY(spotter_output.date) = :day";
6316
				$query_values = array_merge($query_values,array(':day' => $day));
6317
			} else {
6318
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6319
				$query_values = array_merge($query_values,array(':day' => $day));
6320
			}
6321
		}
6322
                $query .= " GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6323
				ORDER BY airport_departure_icao_count DESC";
6324
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6325
6326
		$sth = $this->db->prepare($query);
6327
		$sth->execute($query_values);
6328
6329
		$airport_array = array();
6330
		$temp_array = array();
6331
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6332
		{
6333
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6334
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6335
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6336
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6337
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6338
          
6339
			$airport_array[] = $temp_array;
6340
		}
6341
		return $airport_array;
6342
	}
6343
6344
	/**
6345
	* Gets all departure airports of the airplanes that have flown over
6346
	*
6347
	* @return Array the airport list
6348
	*
6349
	*/
6350
	public function countAllDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
6351
	{
6352
		global $globalDBdriver;
6353
		$filter_query = $this->getFilter($filters,true,true);
6354
		$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 
6355
			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 <> '' ";
6356
                if ($olderthanmonths > 0) {
6357
            		if ($globalDBdriver == 'mysql') {
6358
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6359
			} else {
6360
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6361
			}
6362
                }
6363
                if ($sincedate != '') {
6364
            		if ($globalDBdriver == 'mysql') {
6365
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6366
			} else {
6367
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6368
			}
6369
		}
6370
6371
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6372
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6373
                $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
6374
				ORDER BY airport_departure_icao_count DESC";
6375
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6376
      
6377
		$sth = $this->db->prepare($query);
6378
		$sth->execute();
6379
      
6380
		$airport_array = array();
6381
		$temp_array = array();
6382
        
6383
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6384
		{
6385
			$temp_array['airline_icao'] = $row['airline_icao'];
6386
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6387
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6388
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6389
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6390
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6391
          
6392
			$airport_array[] = $temp_array;
6393
		}
6394
		return $airport_array;
6395
	}
6396
6397
	/**
6398
	* Gets all detected departure airports of the airplanes that have flown over
6399
	*
6400
	* @return Array the airport list
6401
	*
6402
	*/
6403
	public function countAllDetectedDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
6404
	{
6405
		global $globalDBdriver;
6406
		$filter_query = $this->getFilter($filters,true,true);
6407
		$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
6408
				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";
6409
                if ($olderthanmonths > 0) {
6410
            		if ($globalDBdriver == 'mysql') {
6411
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6412
			} else {
6413
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6414
			}
6415
                }
6416
                if ($sincedate != '') {
6417
            		if ($globalDBdriver == 'mysql') {
6418
				$query .= " AND spotter_output.date > '".$sincedate."'";
6419
			} else {
6420
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6421
			}
6422
		}
6423
		$query_values = array();
6424
		if ($year != '') {
6425
			if ($globalDBdriver == 'mysql') {
6426
				$query .= " AND YEAR(spotter_output.date) = :year";
6427
				$query_values = array_merge($query_values,array(':year' => $year));
6428
			} else {
6429
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6430
				$query_values = array_merge($query_values,array(':year' => $year));
6431
			}
6432
		}
6433
		if ($month != '') {
6434
			if ($globalDBdriver == 'mysql') {
6435
				$query .= " AND MONTH(spotter_output.date) = :month";
6436
				$query_values = array_merge($query_values,array(':month' => $month));
6437
			} else {
6438
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6439
				$query_values = array_merge($query_values,array(':month' => $month));
6440
			}
6441
		}
6442
		if ($day != '') {
6443
			if ($globalDBdriver == 'mysql') {
6444
				$query .= " AND DAY(spotter_output.date) = :day";
6445
				$query_values = array_merge($query_values,array(':day' => $day));
6446
			} else {
6447
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6448
				$query_values = array_merge($query_values,array(':day' => $day));
6449
			}
6450
		}
6451
                $query .= " GROUP BY spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
6452
				ORDER BY airport_departure_icao_count DESC";
6453
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6454
    		//echo $query;
6455
		$sth = $this->db->prepare($query);
6456
		$sth->execute($query_values);
6457
      
6458
		$airport_array = array();
6459
		$temp_array = array();
6460
        
6461
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6462
		{
6463
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6464
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6465
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6466
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6467
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6468
          
6469
			$airport_array[] = $temp_array;
6470
		}
6471
		return $airport_array;
6472
	}
6473
	
6474
	/**
6475
	* Gets all detected departure airports of the airplanes that have flown over
6476
	*
6477
	* @return Array the airport list
6478
	*
6479
	*/
6480
	public function countAllDetectedDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
6481
	{
6482
		global $globalDBdriver;
6483
		$filter_query = $this->getFilter($filters,true,true);
6484
		$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
6485
				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 ";
6486
                if ($olderthanmonths > 0) {
6487
            		if ($globalDBdriver == 'mysql') {
6488
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6489
			} else {
6490
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6491
			}
6492
                }
6493
                if ($sincedate != '') {
6494
            		if ($globalDBdriver == 'mysql') {
6495
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6496
			} else {
6497
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
6498
			}
6499
		}
6500
6501
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6502
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6503
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
6504
				ORDER BY airport_departure_icao_count DESC";
6505
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6506
      
6507
		$sth = $this->db->prepare($query);
6508
		$sth->execute();
6509
      
6510
		$airport_array = array();
6511
		$temp_array = array();
6512
        
6513
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6514
		{
6515
			$temp_array['airline_icao'] = $row['airline_icao'];
6516
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6517
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6518
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6519
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6520
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6521
          
6522
			$airport_array[] = $temp_array;
6523
		}
6524
		return $airport_array;
6525
	}	
6526
	
6527
	/**
6528
	* Gets all departure airports of the airplanes that have flown over based on an airline icao
6529
	*
6530
	* @return Array the airport list
6531
	*
6532
	*/
6533
	public function countAllDepartureAirportsByAirline($airline_icao,$filters = array())
6534
	{
6535
		$filter_query = $this->getFilter($filters,true,true);
6536
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6537
		$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 
6538
			    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 <> '' 
6539
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6540
			    ORDER BY airport_departure_icao_count DESC";
6541
      
6542
		
6543
		$sth = $this->db->prepare($query);
6544
		$sth->execute(array(':airline_icao' => $airline_icao));
6545
      
6546
		$airport_array = array();
6547
		$temp_array = array();
6548
        
6549
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6550
		{
6551
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6552
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6553
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6554
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6555
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6556
          
6557
			$airport_array[] = $temp_array;
6558
		}
6559
6560
		return $airport_array;
6561
	}
6562
	
6563
	
6564
	
6565
	/**
6566
	* Gets all departure airports by country of the airplanes that have flown over based on an airline icao
6567
	*
6568
	* @return Array the airport list
6569
	*
6570
	*/
6571
	public function countAllDepartureAirportCountriesByAirline($airline_icao,$filters = array())
6572
	{
6573
		$filter_query = $this->getFilter($filters,true,true);
6574
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6575
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6576
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
6577
                    GROUP BY spotter_output.departure_airport_country
6578
					ORDER BY airport_departure_country_count DESC";
6579
      
6580
		
6581
		$sth = $this->db->prepare($query);
6582
		$sth->execute(array(':airline_icao' => $airline_icao));
6583
      
6584
		$airport_array = array();
6585
		$temp_array = array();
6586
        
6587
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6588
		{
6589
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6590
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6591
          
6592
			$airport_array[] = $temp_array;
6593
		}
6594
6595
		return $airport_array;
6596
	}
6597
	
6598
	
6599
	
6600
	/**
6601
	* Gets all departure airports of the airplanes that have flown over based on an aircraft icao
6602
	*
6603
	* @return Array the airport list
6604
	*
6605
	*/
6606
	public function countAllDepartureAirportsByAircraft($aircraft_icao,$filters = array())
6607
	{
6608
		$filter_query = $this->getFilter($filters,true,true);
6609
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
6610
		$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 
6611
			    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 <> '' 
6612
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6613
			    ORDER BY airport_departure_icao_count DESC";
6614
      
6615
		
6616
		$sth = $this->db->prepare($query);
6617
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
6618
      
6619
		$airport_array = array();
6620
		$temp_array = array();
6621
        
6622
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6623
		{
6624
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6625
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6626
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6627
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6628
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6629
          
6630
			$airport_array[] = $temp_array;
6631
		}
6632
6633
		return $airport_array;
6634
	}
6635
	
6636
	
6637
	/**
6638
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
6639
	*
6640
	* @return Array the airport list
6641
	*
6642
	*/
6643
	public function countAllDepartureAirportCountriesByAircraft($aircraft_icao,$filters = array())
6644
	{
6645
		$filter_query = $this->getFilter($filters,true,true);
6646
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
6647
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6648
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
6649
                    GROUP BY spotter_output.departure_airport_country
6650
					ORDER BY airport_departure_country_count DESC";
6651
      
6652
		
6653
		$sth = $this->db->prepare($query);
6654
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
6655
      
6656
		$airport_array = array();
6657
		$temp_array = array();
6658
        
6659
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6660
		{
6661
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6662
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6663
          
6664
			$airport_array[] = $temp_array;
6665
		}
6666
6667
		return $airport_array;
6668
	}
6669
	
6670
	
6671
	/**
6672
	* Gets all departure airports of the airplanes that have flown over based on an aircraft registration
6673
	*
6674
	* @return Array the airport list
6675
	*
6676
	*/
6677
	public function countAllDepartureAirportsByRegistration($registration,$filters = array())
6678
	{
6679
		$filter_query = $this->getFilter($filters,true,true);
6680
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
6681
		$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 
6682
			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 <> '' 
6683
                    GROUP BY spotter_output.departure_airport_icao
6684
					ORDER BY airport_departure_icao_count DESC";
6685
      
6686
		
6687
		$sth = $this->db->prepare($query);
6688
		$sth->execute(array(':registration' => $registration));
6689
      
6690
		$airport_array = array();
6691
		$temp_array = array();
6692
        
6693
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6694
		{
6695
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6696
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6697
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6698
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6699
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6700
          
6701
			$airport_array[] = $temp_array;
6702
		}
6703
6704
		return $airport_array;
6705
	}
6706
	
6707
	
6708
	/**
6709
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft registration
6710
	*
6711
	* @return Array the airport list
6712
	*
6713
	*/
6714
	public function countAllDepartureAirportCountriesByRegistration($registration,$filters = array())
6715
	{
6716
		$filter_query = $this->getFilter($filters,true,true);
6717
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
6718
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6719
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.registration = :registration 
6720
                    GROUP BY spotter_output.departure_airport_country
6721
					ORDER BY airport_departure_country_count DESC";
6722
      
6723
		
6724
		$sth = $this->db->prepare($query);
6725
		$sth->execute(array(':registration' => $registration));
6726
      
6727
		$airport_array = array();
6728
		$temp_array = array();
6729
        
6730
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6731
		{
6732
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6733
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6734
          
6735
			$airport_array[] = $temp_array;
6736
		}
6737
6738
		return $airport_array;
6739
	}
6740
	
6741
	
6742
	/**
6743
	* Gets all departure airports of the airplanes that have flown over based on an arrivl airport icao
6744
	*
6745
	* @return Array the airport list
6746
	*
6747
	*/
6748
	public function countAllDepartureAirportsByAirport($airport_icao,$filters = array())
6749
	{
6750
		$filter_query = $this->getFilter($filters,true,true);
6751
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
6752
		$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 
6753
			    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 <> '' 
6754
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6755
			    ORDER BY airport_departure_icao_count DESC";
6756
      
6757
		
6758
		$sth = $this->db->prepare($query);
6759
		$sth->execute(array(':airport_icao' => $airport_icao));
6760
      
6761
		$airport_array = array();
6762
		$temp_array = array();
6763
        
6764
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6765
		{
6766
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6767
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6768
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6769
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6770
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6771
          
6772
			$airport_array[] = $temp_array;
6773
		}
6774
6775
		return $airport_array;
6776
	}
6777
	
6778
	
6779
	/**
6780
	* Gets all departure airports by country of the airplanes that have flown over based on an airport icao
6781
	*
6782
	* @return Array the airport list
6783
	*
6784
	*/
6785
	public function countAllDepartureAirportCountriesByAirport($airport_icao,$filters = array())
6786
	{
6787
		$filter_query = $this->getFilter($filters,true,true);
6788
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
6789
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6790
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.arrival_airport_icao = :airport_icao 
6791
                    GROUP BY spotter_output.departure_airport_country
6792
					ORDER BY airport_departure_country_count DESC";
6793
      
6794
		
6795
		$sth = $this->db->prepare($query);
6796
		$sth->execute(array(':airport_icao' => $airport_icao));
6797
      
6798
		$airport_array = array();
6799
		$temp_array = array();
6800
        
6801
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6802
		{
6803
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6804
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6805
          
6806
			$airport_array[] = $temp_array;
6807
		}
6808
6809
		return $airport_array;
6810
	}
6811
	
6812
	
6813
	
6814
	/**
6815
	* Gets all departure airports of the airplanes that have flown over based on an aircraft manufacturer
6816
	*
6817
	* @return Array the airport list
6818
	*
6819
	*/
6820
	public function countAllDepartureAirportsByManufacturer($aircraft_manufacturer,$filters = array())
6821
	{
6822
		$filter_query = $this->getFilter($filters,true,true);
6823
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
6824
		$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 
6825
			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 <> '' 
6826
                    GROUP BY spotter_output.departure_airport_icao
6827
					ORDER BY airport_departure_icao_count DESC";
6828
      
6829
		
6830
		$sth = $this->db->prepare($query);
6831
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
6832
      
6833
		$airport_array = array();
6834
		$temp_array = array();
6835
        
6836
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6837
		{
6838
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6839
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6840
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6841
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6842
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6843
          
6844
			$airport_array[] = $temp_array;
6845
		}
6846
6847
		return $airport_array;
6848
	}
6849
	
6850
	
6851
	/**
6852
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft manufacturer
6853
	*
6854
	* @return Array the airport list
6855
	*
6856
	*/
6857
	public function countAllDepartureAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
6858
	{
6859
		$filter_query = $this->getFilter($filters,true,true);
6860
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
6861
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6862
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
6863
                    GROUP BY spotter_output.departure_airport_country
6864
					ORDER BY airport_departure_country_count DESC";
6865
      
6866
		
6867
		$sth = $this->db->prepare($query);
6868
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
6869
      
6870
		$airport_array = array();
6871
		$temp_array = array();
6872
        
6873
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6874
		{
6875
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6876
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6877
          
6878
			$airport_array[] = $temp_array;
6879
		}
6880
6881
		return $airport_array;
6882
	}
6883
	
6884
	
6885
	/**
6886
	* Gets all departure airports of the airplanes that have flown over based on a date
6887
	*
6888
	* @return Array the airport list
6889
	*
6890
	*/
6891
	public function countAllDepartureAirportsByDate($date,$filters = array())
6892
	{
6893
		global $globalTimezone, $globalDBdriver;
6894
		$filter_query = $this->getFilter($filters,true,true);
6895
		$date = filter_var($date,FILTER_SANITIZE_STRING);
6896
		if ($globalTimezone != '') {
6897
			date_default_timezone_set($globalTimezone);
6898
			$datetime = new DateTime($date);
6899
			$offset = $datetime->format('P');
6900
		} else $offset = '+00:00';
6901
6902
		if ($globalDBdriver == 'mysql') {
6903
			$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 
6904
					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
6905
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6906
					ORDER BY airport_departure_icao_count DESC";
6907
		} else {
6908
			$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 
6909
					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
6910
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6911
					ORDER BY airport_departure_icao_count DESC";
6912
		}
6913
6914
		$sth = $this->db->prepare($query);
6915
		$sth->execute(array(':date' => $date, ':offset' => $offset));
6916
      
6917
		$airport_array = array();
6918
		$temp_array = array();
6919
        
6920
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6921
		{
6922
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6923
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6924
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6925
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6926
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6927
          
6928
			$airport_array[] = $temp_array;
6929
		}
6930
		return $airport_array;
6931
	}
6932
	
6933
	
6934
	
6935
	/**
6936
	* Gets all departure airports by country of the airplanes that have flown over based on a date
6937
	*
6938
	* @return Array the airport list
6939
	*
6940
	*/
6941
	public function countAllDepartureAirportCountriesByDate($date,$filters = array())
6942
	{
6943
		global $globalTimezone, $globalDBdriver;
6944
		$filter_query = $this->getFilter($filters,true,true);
6945
		$date = filter_var($date,FILTER_SANITIZE_STRING);
6946
		if ($globalTimezone != '') {
6947
			date_default_timezone_set($globalTimezone);
6948
			$datetime = new DateTime($date);
6949
			$offset = $datetime->format('P');
6950
		} else $offset = '+00:00';
6951
6952
		if ($globalDBdriver == 'mysql') {
6953
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6954
					FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
6955
					GROUP BY spotter_output.departure_airport_country
6956
					ORDER BY airport_departure_country_count DESC";
6957
		} else {
6958
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6959
					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 
6960
					GROUP BY spotter_output.departure_airport_country
6961
					ORDER BY airport_departure_country_count DESC";
6962
		}
6963
		
6964
		$sth = $this->db->prepare($query);
6965
		$sth->execute(array(':date' => $date, ':offset' => $offset));
6966
      
6967
		$airport_array = array();
6968
		$temp_array = array();
6969
        
6970
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6971
		{
6972
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6973
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6974
          
6975
			$airport_array[] = $temp_array;
6976
		}
6977
		return $airport_array;
6978
	}
6979
	
6980
	
6981
	
6982
	/**
6983
	* Gets all departure airports of the airplanes that have flown over based on a ident/callsign
6984
	*
6985
	* @return Array the airport list
6986
	*
6987
	*/
6988
	public function countAllDepartureAirportsByIdent($ident,$filters = array())
6989
	{
6990
		$filter_query = $this->getFilter($filters,true,true);
6991
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
6992
		$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 
6993
		    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 
6994
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6995
		    ORDER BY airport_departure_icao_count DESC";
6996
      
6997
		
6998
		$sth = $this->db->prepare($query);
6999
		$sth->execute(array(':ident' => $ident));
7000
      
7001
		$airport_array = array();
7002
		$temp_array = array();
7003
        
7004
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7005
		{
7006
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7007
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7008
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7009
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7010
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7011
          
7012
			$airport_array[] = $temp_array;
7013
		}
7014
7015
		return $airport_array;
7016
	}
7017
	
7018
	/**
7019
	* Gets all departure airports of the airplanes that have flown over based on a owner
7020
	*
7021
	* @return Array the airport list
7022
	*
7023
	*/
7024
	public function countAllDepartureAirportsByOwner($owner,$filters = array())
7025
	{
7026
		$filter_query = $this->getFilter($filters,true,true);
7027
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
7028
		$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 
7029
		    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 
7030
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7031
		    ORDER BY airport_departure_icao_count DESC";
7032
      
7033
		
7034
		$sth = $this->db->prepare($query);
7035
		$sth->execute(array(':owner' => $owner));
7036
      
7037
		$airport_array = array();
7038
		$temp_array = array();
7039
        
7040
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7041
		{
7042
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7043
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7044
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7045
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7046
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7047
          
7048
			$airport_array[] = $temp_array;
7049
		}
7050
7051
		return $airport_array;
7052
	}
7053
	
7054
	/**
7055
	* Gets all departure airports of the airplanes that have flown over based on a pilot
7056
	*
7057
	* @return Array the airport list
7058
	*
7059
	*/
7060
	public function countAllDepartureAirportsByPilot($pilot,$filters = array())
7061
	{
7062
		$filter_query = $this->getFilter($filters,true,true);
7063
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
7064
		$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 
7065
		    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) 
7066
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7067
		    ORDER BY airport_departure_icao_count DESC";
7068
		
7069
		$sth = $this->db->prepare($query);
7070
		$sth->execute(array(':pilot' => $pilot));
7071
      
7072
		$airport_array = array();
7073
		$temp_array = array();
7074
        
7075
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7076
		{
7077
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7078
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7079
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7080
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7081
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7082
          
7083
			$airport_array[] = $temp_array;
7084
		}
7085
7086
		return $airport_array;
7087
	}
7088
	
7089
	
7090
	
7091
	/**
7092
	* Gets all departure airports by country of the airplanes that have flown over based on a callsign/ident
7093
	*
7094
	* @return Array the airport list
7095
	*
7096
	*/
7097
	public function countAllDepartureAirportCountriesByIdent($ident,$filters = array())
7098
	{
7099
		$filter_query = $this->getFilter($filters,true,true);
7100
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7101
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7102
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.ident = :ident 
7103
                    GROUP BY spotter_output.departure_airport_country
7104
					ORDER BY airport_departure_country_count DESC";
7105
      
7106
		
7107
		$sth = $this->db->prepare($query);
7108
		$sth->execute(array(':ident' => $ident));
7109
      
7110
		$airport_array = array();
7111
		$temp_array = array();
7112
        
7113
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7114
		{
7115
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7116
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7117
          
7118
			$airport_array[] = $temp_array;
7119
		}
7120
7121
		return $airport_array;
7122
	}
7123
	
7124
	/**
7125
	* Gets all departure airports by country of the airplanes that have flown over based on owner
7126
	*
7127
	* @return Array the airport list
7128
	*
7129
	*/
7130
	public function countAllDepartureAirportCountriesByOwner($owner,$filters = array())
7131
	{
7132
		$filter_query = $this->getFilter($filters,true,true);
7133
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
7134
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7135
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.owner_name = :owner 
7136
			GROUP BY spotter_output.departure_airport_country
7137
			ORDER BY airport_departure_country_count DESC";
7138
		
7139
		$sth = $this->db->prepare($query);
7140
		$sth->execute(array(':owner' => $owner));
7141
		return $sth->fetchAll(PDO::FETCH_ASSOC);
7142
	}
7143
	
7144
	/**
7145
	* Gets all departure airports by country of the airplanes that have flown over based on pilot
7146
	*
7147
	* @return Array the airport list
7148
	*
7149
	*/
7150
	public function countAllDepartureAirportCountriesByPilot($pilot,$filters = array())
7151
	{
7152
		$filter_query = $this->getFilter($filters,true,true);
7153
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
7154
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7155
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
7156
			GROUP BY spotter_output.departure_airport_country
7157
			ORDER BY airport_departure_country_count DESC";
7158
		
7159
		$sth = $this->db->prepare($query);
7160
		$sth->execute(array(':pilot' => $pilot));
7161
		return $sth->fetchAll(PDO::FETCH_ASSOC);
7162
	}
7163
	
7164
	
7165
	
7166
	/**
7167
	* Gets all departure airports of the airplanes that have flown over based on a country
7168
	*
7169
	* @return Array the airport list
7170
	*
7171
	*/
7172
	public function countAllDepartureAirportsByCountry($country,$filters = array())
7173
	{
7174
		$filter_query = $this->getFilter($filters,true,true);
7175
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7176
7177
		$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 
7178
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
7179
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7180
			    ORDER BY airport_departure_icao_count DESC";
7181
      
7182
		
7183
		$sth = $this->db->prepare($query);
7184
		$sth->execute(array(':country' => $country));
7185
      
7186
		$airport_array = array();
7187
		$temp_array = array();
7188
        
7189
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7190
		{
7191
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7192
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7193
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7194
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7195
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7196
          
7197
			$airport_array[] = $temp_array;
7198
		}
7199
7200
		return $airport_array;
7201
	}
7202
7203
7204
	/**
7205
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
7206
	*
7207
	* @return Array the airport list
7208
	*
7209
	*/
7210
	public function countAllDepartureAirportCountriesByCountry($country,$filters = array())
7211
	{
7212
		$filter_query = $this->getFilter($filters,true,true);
7213
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7214
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7215
			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 
7216
                    GROUP BY spotter_output.departure_airport_country
7217
					ORDER BY airport_departure_country_count DESC";
7218
      
7219
		
7220
		$sth = $this->db->prepare($query);
7221
		$sth->execute(array(':country' => $country));
7222
      
7223
		$airport_array = array();
7224
		$temp_array = array();
7225
        
7226
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7227
		{
7228
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7229
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7230
          
7231
			$airport_array[] = $temp_array;
7232
		}
7233
7234
		return $airport_array;
7235
	}
7236
	
7237
7238
	/**
7239
	* Gets all arrival airports of the airplanes that have flown over
7240
	*
7241
	* @param Boolean $limit Limit result to 10 or not
7242
	* @param Integer $olderthanmonths Only show result older than x months
7243
	* @param String $sincedate Only show result since x date
7244
	* @param Boolean $icaoaskey Show result by ICAO
7245
	* @param Array $filters Filter used here
7246
	* @return Array the airport list
7247
	*
7248
	*/
7249
	public function countAllArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array(),$year = '',$month = '',$day = '')
7250
	{
7251
		global $globalDBdriver;
7252
		$filter_query = $this->getFilter($filters,true,true);
7253
		$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 
7254
				FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''";
7255
                if ($olderthanmonths > 0) {
7256
            		if ($globalDBdriver == 'mysql') {
7257
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
7258
			} else {
7259
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
7260
			}
7261
		}
7262
                if ($sincedate != '') {
7263
            		if ($globalDBdriver == 'mysql') {
7264
				$query .= " AND spotter_output.date > '".$sincedate."'";
7265
			} else {
7266
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7267
			}
7268
		}
7269
		$query_values = array();
7270
		if ($year != '') {
7271
			if ($globalDBdriver == 'mysql') {
7272
				$query .= " AND YEAR(spotter_output.date) = :year";
7273
				$query_values = array_merge($query_values,array(':year' => $year));
7274
			} else {
7275
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
7276
				$query_values = array_merge($query_values,array(':year' => $year));
7277
			}
7278
		}
7279
		if ($month != '') {
7280
			if ($globalDBdriver == 'mysql') {
7281
				$query .= " AND MONTH(spotter_output.date) = :month";
7282
				$query_values = array_merge($query_values,array(':month' => $month));
7283
			} else {
7284
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
7285
				$query_values = array_merge($query_values,array(':month' => $month));
7286
			}
7287
		}
7288
		if ($day != '') {
7289
			if ($globalDBdriver == 'mysql') {
7290
				$query .= " AND DAY(spotter_output.date) = :day";
7291
				$query_values = array_merge($query_values,array(':day' => $day));
7292
			} else {
7293
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
7294
				$query_values = array_merge($query_values,array(':day' => $day));
7295
			}
7296
		}
7297
                $query .= " GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7298
					ORDER BY airport_arrival_icao_count DESC";
7299
		if ($limit) $query .= " LIMIT 10";
7300
      
7301
		
7302
		$sth = $this->db->prepare($query);
7303
		$sth->execute($query_values);
7304
      
7305
		$airport_array = array();
7306
		$temp_array = array();
7307
        
7308
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7309
		{
7310
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7311
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7312
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7313
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7314
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7315
          
7316
			if ($icaoaskey) {
7317
				$icao = $row['arrival_airport_icao'];
7318
				$airport_array[$icao] = $temp_array;
7319
			} else $airport_array[] = $temp_array;
7320
		}
7321
7322
		return $airport_array;
7323
	}
7324
7325
	/**
7326
	* Gets all arrival airports of the airplanes that have flown over
7327
	*
7328
	* @return Array the airport list
7329
	*
7330
	*/
7331
	public function countAllArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array())
7332
	{
7333
		global $globalDBdriver;
7334
		$filter_query = $this->getFilter($filters,true,true);
7335
		$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 
7336
			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 <> '' ";
7337
                if ($olderthanmonths > 0) {
7338
            		if ($globalDBdriver == 'mysql') {
7339
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
7340
			} else {
7341
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
7342
			}
7343
		}
7344
                if ($sincedate != '') {
7345
            		if ($globalDBdriver == 'mysql') {
7346
				$query .= "AND spotter_output.date > '".$sincedate."' ";
7347
			} else {
7348
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7349
			}
7350
		}
7351
7352
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
7353
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
7354
                $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
7355
					ORDER BY airport_arrival_icao_count DESC";
7356
		if ($limit) $query .= " LIMIT 10";
7357
      
7358
		
7359
		$sth = $this->db->prepare($query);
7360
		$sth->execute();
7361
      
7362
		$airport_array = array();
7363
		$temp_array = array();
7364
        
7365
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7366
		{
7367
			$temp_array['airline_icao'] = $row['airline_icao'];
7368
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7369
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7370
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7371
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7372
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7373
          
7374
			if ($icaoaskey) {
7375
				$icao = $row['arrival_airport_icao'];
7376
				$airport_array[$icao] = $temp_array;
7377
			} else $airport_array[] = $temp_array;
7378
		}
7379
7380
		return $airport_array;
7381
	}
7382
7383
7384
	/**
7385
	* Gets all detected arrival airports of the airplanes that have flown over
7386
	*
7387
	* @return Array the airport list
7388
	*
7389
	*/
7390
	public function countAllDetectedArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array(),$year = '',$month = '',$day = '')
7391
	{
7392
		global $globalDBdriver;
7393
		$filter_query = $this->getFilter($filters,true,true);
7394
		$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 
7395
			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";
7396
                if ($olderthanmonths > 0) {
7397
            		if ($globalDBdriver == 'mysql') {
7398
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
7399
			} else {
7400
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
7401
			}
7402
		}
7403
                if ($sincedate != '') {
7404
            		if ($globalDBdriver == 'mysql') {
7405
				$query .= " AND spotter_output.date > '".$sincedate."'";
7406
			} else {
7407
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7408
			}
7409
		}
7410
		$query_values = array();
7411
		if ($year != '') {
7412
			if ($globalDBdriver == 'mysql') {
7413
				$query .= " AND YEAR(spotter_output.date) = :year";
7414
				$query_values = array_merge($query_values,array(':year' => $year));
7415
			} else {
7416
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
7417
				$query_values = array_merge($query_values,array(':year' => $year));
7418
			}
7419
		}
7420
		if ($month != '') {
7421
			if ($globalDBdriver == 'mysql') {
7422
				$query .= " AND MONTH(spotter_output.date) = :month";
7423
				$query_values = array_merge($query_values,array(':month' => $month));
7424
			} else {
7425
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
7426
				$query_values = array_merge($query_values,array(':month' => $month));
7427
			}
7428
		}
7429
		if ($day != '') {
7430
			if ($globalDBdriver == 'mysql') {
7431
				$query .= " AND DAY(spotter_output.date) = :day";
7432
				$query_values = array_merge($query_values,array(':day' => $day));
7433
			} else {
7434
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
7435
				$query_values = array_merge($query_values,array(':day' => $day));
7436
			}
7437
		}
7438
                $query .= " GROUP BY spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
7439
					ORDER BY airport_arrival_icao_count DESC";
7440
		if ($limit) $query .= " LIMIT 10";
7441
      
7442
		
7443
		$sth = $this->db->prepare($query);
7444
		$sth->execute($query_values);
7445
      
7446
		$airport_array = array();
7447
		$temp_array = array();
7448
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7449
		{
7450
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7451
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7452
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7453
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7454
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7455
          
7456
			if ($icaoaskey) {
7457
				$icao = $row['arrival_airport_icao'];
7458
				$airport_array[$icao] = $temp_array;
7459
			} else $airport_array[] = $temp_array;
7460
		}
7461
7462
		return $airport_array;
7463
	}
7464
	
7465
	/**
7466
	* Gets all detected arrival airports of the airplanes that have flown over
7467
	*
7468
	* @return Array the airport list
7469
	*
7470
	*/
7471
	public function countAllDetectedArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array())
7472
	{
7473
		global $globalDBdriver;
7474
		$filter_query = $this->getFilter($filters,true,true);
7475
		$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 
7476
			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 ";
7477
                if ($olderthanmonths > 0) {
7478
            		if ($globalDBdriver == 'mysql') {
7479
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
7480
			} else {
7481
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
7482
			}
7483
		}
7484
                if ($sincedate != '') {
7485
            		if ($globalDBdriver == 'mysql') {
7486
				$query .= "AND spotter_output.date > '".$sincedate."' ";
7487
			} else {
7488
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7489
			}
7490
		}
7491
7492
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
7493
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
7494
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
7495
					ORDER BY airport_arrival_icao_count DESC";
7496
		if ($limit) $query .= " LIMIT 10";
7497
      
7498
		
7499
		$sth = $this->db->prepare($query);
7500
		$sth->execute();
7501
      
7502
		$airport_array = array();
7503
		$temp_array = array();
7504
        
7505
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7506
		{
7507
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7508
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7509
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7510
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7511
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7512
			$temp_array['airline_icao'] = $row['airline_icao'];
7513
          
7514
			if ($icaoaskey) {
7515
				$icao = $row['arrival_airport_icao'];
7516
				$airport_array[$icao] = $temp_array;
7517
			} else $airport_array[] = $temp_array;
7518
		}
7519
7520
		return $airport_array;
7521
	}	
7522
	
7523
	/**
7524
	* Gets all arrival airports of the airplanes that have flown over based on an airline icao
7525
	*
7526
	* @return Array the airport list
7527
	*
7528
	*/
7529
	public function countAllArrivalAirportsByAirline($airline_icao, $filters = array())
7530
	{
7531
		$filter_query = $this->getFilter($filters,true,true);
7532
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7533
		$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 
7534
			    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 
7535
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7536
			    ORDER BY airport_arrival_icao_count DESC";
7537
		
7538
		$sth = $this->db->prepare($query);
7539
		$sth->execute(array(':airline_icao' => $airline_icao));
7540
      
7541
		$airport_array = array();
7542
		$temp_array = array();
7543
        
7544
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7545
		{
7546
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7547
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7548
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7549
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7550
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7551
          
7552
			$airport_array[] = $temp_array;
7553
		}
7554
7555
		return $airport_array;
7556
	}
7557
	
7558
	
7559
	/**
7560
	* Gets all arrival airports by country of the airplanes that have flown over based on an airline icao
7561
	*
7562
	* @return Array the airport list
7563
	*
7564
	*/
7565
	public function countAllArrivalAirportCountriesByAirline($airline_icao,$filters = array())
7566
	{
7567
		$filter_query = $this->getFilter($filters,true,true);
7568
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7569
					
7570
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7571
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
7572
                    GROUP BY spotter_output.arrival_airport_country
7573
					ORDER BY airport_arrival_country_count DESC";
7574
      
7575
		
7576
		$sth = $this->db->prepare($query);
7577
		$sth->execute(array(':airline_icao' => $airline_icao));
7578
      
7579
		$airport_array = array();
7580
		$temp_array = array();
7581
        
7582
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7583
		{
7584
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7585
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7586
          
7587
			$airport_array[] = $temp_array;
7588
		}
7589
7590
		return $airport_array;
7591
	}
7592
	
7593
	
7594
	/**
7595
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft icao
7596
	*
7597
	* @return Array the airport list
7598
	*
7599
	*/
7600
	public function countAllArrivalAirportsByAircraft($aircraft_icao,$filters = array())
7601
	{
7602
		$filter_query = $this->getFilter($filters,true,true);
7603
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7604
		$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 
7605
			    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 
7606
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7607
			    ORDER BY airport_arrival_icao_count DESC";
7608
      
7609
		
7610
		$sth = $this->db->prepare($query);
7611
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7612
      
7613
		$airport_array = array();
7614
		$temp_array = array();
7615
        
7616
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7617
		{
7618
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7619
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7620
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7621
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7622
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7623
          
7624
			$airport_array[] = $temp_array;
7625
		}
7626
7627
		return $airport_array;
7628
	}
7629
	
7630
	
7631
	
7632
	/**
7633
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft icao
7634
	*
7635
	* @return Array the airport list
7636
	*
7637
	*/
7638
	public function countAllArrivalAirportCountriesByAircraft($aircraft_icao,$filters = array())
7639
	{
7640
		$filter_query = $this->getFilter($filters,true,true);
7641
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7642
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7643
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
7644
                    GROUP BY spotter_output.arrival_airport_country
7645
					ORDER BY airport_arrival_country_count DESC";
7646
      
7647
		
7648
		$sth = $this->db->prepare($query);
7649
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7650
      
7651
		$airport_array = array();
7652
		$temp_array = array();
7653
        
7654
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7655
		{
7656
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7657
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7658
          
7659
			$airport_array[] = $temp_array;
7660
		}
7661
7662
		return $airport_array;
7663
	}
7664
	
7665
	
7666
	/**
7667
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft registration
7668
	*
7669
	* @return Array the airport list
7670
	*
7671
	*/
7672
	public function countAllArrivalAirportsByRegistration($registration,$filters = array())
7673
	{
7674
		$filter_query = $this->getFilter($filters,true,true);
7675
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
7676
7677
		$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 
7678
			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 
7679
                    GROUP BY spotter_output.arrival_airport_icao
7680
					ORDER BY airport_arrival_icao_count DESC";
7681
      
7682
		
7683
		$sth = $this->db->prepare($query);
7684
		$sth->execute(array(':registration' => $registration));
7685
      
7686
		$airport_array = array();
7687
		$temp_array = array();
7688
        
7689
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7690
		{
7691
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7692
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7693
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7694
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7695
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7696
          
7697
			$airport_array[] = $temp_array;
7698
		}
7699
7700
		return $airport_array;
7701
	}
7702
	
7703
	
7704
	/**
7705
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft registration
7706
	*
7707
	* @return Array the airport list
7708
	*
7709
	*/
7710
	public function countAllArrivalAirportCountriesByRegistration($registration,$filters = array())
7711
	{
7712
		$filter_query = $this->getFilter($filters,true,true);
7713
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
7714
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7715
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.registration = :registration 
7716
                    GROUP BY spotter_output.arrival_airport_country
7717
					ORDER BY airport_arrival_country_count DESC";
7718
      
7719
		
7720
		$sth = $this->db->prepare($query);
7721
		$sth->execute(array(':registration' => $registration));
7722
      
7723
		$airport_array = array();
7724
		$temp_array = array();
7725
        
7726
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7727
		{
7728
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7729
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7730
          
7731
			$airport_array[] = $temp_array;
7732
		}
7733
7734
		return $airport_array;
7735
	}
7736
	
7737
	
7738
	
7739
	/**
7740
	* Gets all arrival airports of the airplanes that have flown over based on an departure airport
7741
	*
7742
	* @return Array the airport list
7743
	*
7744
	*/
7745
	public function countAllArrivalAirportsByAirport($airport_icao,$filters = array())
7746
	{
7747
		$filter_query = $this->getFilter($filters,true,true);
7748
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7749
		$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 
7750
			    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 
7751
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7752
			    ORDER BY airport_arrival_icao_count DESC";
7753
      
7754
		
7755
		$sth = $this->db->prepare($query);
7756
		$sth->execute(array(':airport_icao' => $airport_icao));
7757
      
7758
		$airport_array = array();
7759
		$temp_array = array();
7760
        
7761
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7762
		{
7763
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7764
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7765
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7766
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7767
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7768
          
7769
			$airport_array[] = $temp_array;
7770
		}
7771
7772
		return $airport_array;
7773
	}
7774
	
7775
	
7776
	/**
7777
	* Gets all arrival airports by country of the airplanes that have flown over based on an airport icao
7778
	*
7779
	* @return Array the airport list
7780
	*
7781
	*/
7782
	public function countAllArrivalAirportCountriesByAirport($airport_icao,$filters = array())
7783
	{
7784
		$filter_query = $this->getFilter($filters,true,true);
7785
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7786
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7787
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.departure_airport_icao = :airport_icao 
7788
                    GROUP BY spotter_output.arrival_airport_country
7789
					ORDER BY airport_arrival_country_count DESC";
7790
      
7791
		
7792
		$sth = $this->db->prepare($query);
7793
		$sth->execute(array(':airport_icao' => $airport_icao));
7794
      
7795
		$airport_array = array();
7796
		$temp_array = array();
7797
        
7798
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7799
		{
7800
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7801
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7802
          
7803
			$airport_array[] = $temp_array;
7804
		}
7805
7806
		return $airport_array;
7807
	}
7808
	
7809
	
7810
	/**
7811
	* Gets all arrival airports of the airplanes that have flown over based on a aircraft manufacturer
7812
	*
7813
	* @return Array the airport list
7814
	*
7815
	*/
7816
	public function countAllArrivalAirportsByManufacturer($aircraft_manufacturer,$filters = array())
7817
	{
7818
		$filter_query = $this->getFilter($filters,true,true);
7819
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7820
		$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 
7821
			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 
7822
                    GROUP BY spotter_output.arrival_airport_icao
7823
					ORDER BY airport_arrival_icao_count DESC";
7824
      
7825
		
7826
		$sth = $this->db->prepare($query);
7827
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7828
      
7829
		$airport_array = array();
7830
		$temp_array = array();
7831
        
7832
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7833
		{
7834
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7835
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7836
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7837
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7838
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7839
          
7840
			$airport_array[] = $temp_array;
7841
		}
7842
7843
		return $airport_array;
7844
	}
7845
	
7846
	
7847
	
7848
	/**
7849
	* Gets all arrival airports by country of the airplanes that have flown over based on a aircraft manufacturer
7850
	*
7851
	* @return Array the airport list
7852
	*
7853
	*/
7854
	public function countAllArrivalAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
7855
	{
7856
		$filter_query = $this->getFilter($filters,true,true);
7857
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7858
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7859
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
7860
                    GROUP BY spotter_output.arrival_airport_country
7861
					ORDER BY airport_arrival_country_count DESC";
7862
      
7863
		
7864
		$sth = $this->db->prepare($query);
7865
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7866
      
7867
		$airport_array = array();
7868
		$temp_array = array();
7869
        
7870
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7871
		{
7872
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7873
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7874
          
7875
			$airport_array[] = $temp_array;
7876
		}
7877
7878
		return $airport_array;
7879
	}
7880
	
7881
	
7882
	
7883
	/**
7884
	* Gets all arrival airports of the airplanes that have flown over based on a date
7885
	*
7886
	* @return Array the airport list
7887
	*
7888
	*/
7889
	public function countAllArrivalAirportsByDate($date,$filters = array())
7890
	{
7891
		global $globalTimezone, $globalDBdriver;
7892
		$filter_query = $this->getFilter($filters,true,true);
7893
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7894
		if ($globalTimezone != '') {
7895
			date_default_timezone_set($globalTimezone);
7896
			$datetime = new DateTime($date);
7897
			$offset = $datetime->format('P');
7898
		} else $offset = '+00:00';
7899
7900
		if ($globalDBdriver == 'mysql') {
7901
			$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 
7902
					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  
7903
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7904
					ORDER BY airport_arrival_icao_count DESC";
7905
		} else {
7906
			$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 
7907
					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  
7908
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7909
					ORDER BY airport_arrival_icao_count DESC";
7910
		}
7911
		
7912
		$sth = $this->db->prepare($query);
7913
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7914
      
7915
		$airport_array = array();
7916
		$temp_array = array();
7917
        
7918
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7919
		{
7920
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7921
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7922
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7923
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7924
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7925
          
7926
			$airport_array[] = $temp_array;
7927
		}
7928
		return $airport_array;
7929
	}
7930
	
7931
	
7932
	
7933
	/**
7934
	* Gets all arrival airports by country of the airplanes that have flown over based on a date
7935
	*
7936
	* @return Array the airport list
7937
	*
7938
	*/
7939
	public function countAllArrivalAirportCountriesByDate($date, $filters = array())
7940
	{
7941
		global $globalTimezone, $globalDBdriver;
7942
		$filter_query = $this->getFilter($filters,true,true);
7943
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7944
		if ($globalTimezone != '') {
7945
			date_default_timezone_set($globalTimezone);
7946
			$datetime = new DateTime($date);
7947
			$offset = $datetime->format('P');
7948
		} else $offset = '+00:00';
7949
7950
		if ($globalDBdriver == 'mysql') {
7951
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7952
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
7953
					GROUP BY spotter_output.arrival_airport_country
7954
					ORDER BY airport_arrival_country_count DESC";
7955
		} else {
7956
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7957
					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 
7958
					GROUP BY spotter_output.arrival_airport_country
7959
					ORDER BY airport_arrival_country_count DESC";
7960
		}
7961
		
7962
		$sth = $this->db->prepare($query);
7963
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7964
      
7965
		$airport_array = array();
7966
		$temp_array = array();
7967
        
7968
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7969
		{
7970
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7971
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7972
          
7973
			$airport_array[] = $temp_array;
7974
		}
7975
		return $airport_array;
7976
	}
7977
	
7978
	
7979
	
7980
	/**
7981
	* Gets all arrival airports of the airplanes that have flown over based on a ident/callsign
7982
	*
7983
	* @return Array the airport list
7984
	*
7985
	*/
7986
	public function countAllArrivalAirportsByIdent($ident,$filters = array())
7987
	{
7988
		$filter_query = $this->getFilter($filters,true,true);
7989
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7990
		$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 
7991
		    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  
7992
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7993
		    ORDER BY airport_arrival_icao_count DESC";
7994
      
7995
		
7996
		$sth = $this->db->prepare($query);
7997
		$sth->execute(array(':ident' => $ident));
7998
      
7999
		$airport_array = array();
8000
		$temp_array = array();
8001
        
8002
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8003
		{
8004
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8005
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8006
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8007
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8008
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8009
          
8010
			$airport_array[] = $temp_array;
8011
		}
8012
8013
		return $airport_array;
8014
	}
8015
	
8016
	/**
8017
	* Gets all arrival airports of the airplanes that have flown over based on a owner
8018
	*
8019
	* @return Array the airport list
8020
	*
8021
	*/
8022
	public function countAllArrivalAirportsByOwner($owner,$filters = array())
8023
	{
8024
		$filter_query = $this->getFilter($filters,true,true);
8025
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
8026
		$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 
8027
		    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 
8028
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8029
		    ORDER BY airport_arrival_icao_count DESC";
8030
      
8031
		
8032
		$sth = $this->db->prepare($query);
8033
		$sth->execute(array(':owner' => $owner));
8034
		$airport_array = array();
8035
		$temp_array = array();
8036
        
8037
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8038
		{
8039
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8040
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8041
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8042
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8043
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8044
          
8045
			$airport_array[] = $temp_array;
8046
		}
8047
8048
		return $airport_array;
8049
	}
8050
8051
	/**
8052
	* Gets all arrival airports of the airplanes that have flown over based on a pilot
8053
	*
8054
	* @return Array the airport list
8055
	*
8056
	*/
8057
	public function countAllArrivalAirportsByPilot($pilot,$filters = array())
8058
	{
8059
		$filter_query = $this->getFilter($filters,true,true);
8060
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
8061
		$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 
8062
		    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) 
8063
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8064
		    ORDER BY airport_arrival_icao_count DESC";
8065
      
8066
		
8067
		$sth = $this->db->prepare($query);
8068
		$sth->execute(array(':pilot' => $pilot));
8069
		$airport_array = array();
8070
		$temp_array = array();
8071
        
8072
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8073
		{
8074
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8075
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8076
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8077
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8078
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8079
          
8080
			$airport_array[] = $temp_array;
8081
		}
8082
8083
		return $airport_array;
8084
	}
8085
	
8086
	/**
8087
	* Gets all arrival airports by country of the airplanes that have flown over based on a callsign/ident
8088
	*
8089
	* @return Array the airport list
8090
	*
8091
	*/
8092
	public function countAllArrivalAirportCountriesByIdent($ident, $filters = array())
8093
	{
8094
		$filter_query = $this->getFilter($filters,true,true);
8095
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
8096
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8097
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.ident = :ident 
8098
                    GROUP BY spotter_output.arrival_airport_country
8099
					ORDER BY airport_arrival_country_count DESC";
8100
      
8101
		
8102
		$sth = $this->db->prepare($query);
8103
		$sth->execute(array(':ident' => $ident));
8104
      
8105
		$airport_array = array();
8106
		$temp_array = array();
8107
        
8108
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8109
		{
8110
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8111
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8112
          
8113
			$airport_array[] = $temp_array;
8114
		}
8115
8116
		return $airport_array;
8117
	}
8118
	
8119
	/**
8120
	* Gets all arrival airports by country of the airplanes that have flown over based on a owner
8121
	*
8122
	* @return Array the airport list
8123
	*
8124
	*/
8125
	public function countAllArrivalAirportCountriesByOwner($owner, $filters = array())
8126
	{
8127
		$filter_query = $this->getFilter($filters,true,true);
8128
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
8129
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8130
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.owner_name = :owner 
8131
                    GROUP BY spotter_output.arrival_airport_country
8132
		    ORDER BY airport_arrival_country_count DESC";
8133
8134
		$sth = $this->db->prepare($query);
8135
		$sth->execute(array(':owner' => $owner));
8136
		return $sth->fetchAll(PDO::FETCH_ASSOC);
8137
	}
8138
	
8139
	/**
8140
	* Gets all arrival airports by country of the airplanes that have flown over based on a pilot
8141
	*
8142
	* @return Array the airport list
8143
	*
8144
	*/
8145
	public function countAllArrivalAirportCountriesByPilot($pilot, $filters = array())
8146
	{
8147
		$filter_query = $this->getFilter($filters,true,true);
8148
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
8149
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8150
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
8151
                    GROUP BY spotter_output.arrival_airport_country
8152
		    ORDER BY airport_arrival_country_count DESC";
8153
8154
		$sth = $this->db->prepare($query);
8155
		$sth->execute(array(':pilot' => $pilot));
8156
		return $sth->fetchAll(PDO::FETCH_ASSOC);
8157
	}
8158
	
8159
	
8160
	
8161
	/**
8162
	* Gets all arrival airports of the airplanes that have flown over based on a country
8163
	*
8164
	* @return Array the airport list
8165
	*
8166
	*/
8167
	public function countAllArrivalAirportsByCountry($country,$filters = array())
8168
	{
8169
		$filter_query = $this->getFilter($filters,true,true);
8170
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8171
		$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 
8172
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
8173
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8174
			    ORDER BY airport_arrival_icao_count DESC";
8175
      
8176
		
8177
		$sth = $this->db->prepare($query);
8178
		$sth->execute(array(':country' => $country));
8179
      
8180
		$airport_array = array();
8181
		$temp_array = array();
8182
        
8183
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8184
		{
8185
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8186
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8187
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8188
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8189
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8190
          
8191
			$airport_array[] = $temp_array;
8192
		}
8193
8194
		return $airport_array;
8195
	}
8196
	
8197
	
8198
	/**
8199
	* Gets all arrival airports by country of the airplanes that have flown over based on a country
8200
	*
8201
	* @return Array the airport list
8202
	*
8203
	*/
8204
	public function countAllArrivalAirportCountriesByCountry($country,$filters = array())
8205
	{
8206
		global $globalDBdriver;
8207
		$filter_query = $this->getFilter($filters,true,true);
8208
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8209
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8210
			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 
8211
                    GROUP BY spotter_output.arrival_airport_country
8212
					ORDER BY airport_arrival_country_count DESC";
8213
      
8214
		
8215
		$sth = $this->db->prepare($query);
8216
		$sth->execute(array(':country' => $country));
8217
      
8218
		$airport_array = array();
8219
		$temp_array = array();
8220
        
8221
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8222
		{
8223
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8224
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8225
          
8226
			$airport_array[] = $temp_array;
8227
		}
8228
8229
		return $airport_array;
8230
	}
8231
8232
8233
8234
	/**
8235
	* Counts all airport departure countries
8236
	*
8237
	* @return Array the airport departure list
8238
	*
8239
	*/
8240
	public function countAllDepartureCountries($filters = array(),$year = '',$month = '', $day = '')
8241
	{
8242
		global $globalDBdriver;
8243
		$filter_query = $this->getFilter($filters,true,true);
8244
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
8245
				FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> ''";
8246
		$query_values = array();
8247
		if ($year != '') {
8248
			if ($globalDBdriver == 'mysql') {
8249
				$query .= " AND YEAR(spotter_output.date) = :year";
8250
				$query_values = array_merge($query_values,array(':year' => $year));
8251
			} else {
8252
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
8253
				$query_values = array_merge($query_values,array(':year' => $year));
8254
			}
8255
		}
8256
		if ($month != '') {
8257
			if ($globalDBdriver == 'mysql') {
8258
				$query .= " AND MONTH(spotter_output.date) = :month";
8259
				$query_values = array_merge($query_values,array(':month' => $month));
8260
			} else {
8261
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
8262
				$query_values = array_merge($query_values,array(':month' => $month));
8263
			}
8264
		}
8265
		if ($day != '') {
8266
			if ($globalDBdriver == 'mysql') {
8267
				$query .= " AND DAY(spotter_output.date) = :day";
8268
				$query_values = array_merge($query_values,array(':day' => $day));
8269
			} else {
8270
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
8271
				$query_values = array_merge($query_values,array(':day' => $day));
8272
			}
8273
		}
8274
		$query .= " GROUP BY spotter_output.departure_airport_country
8275
					ORDER BY airport_departure_country_count DESC
8276
					LIMIT 10 OFFSET 0";
8277
      
8278
		
8279
		$sth = $this->db->prepare($query);
8280
		$sth->execute($query_values);
8281
      
8282
		$airport_array = array();
8283
		$temp_array = array();
8284
        
8285
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8286
		{
8287
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
8288
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
8289
          
8290
			$airport_array[] = $temp_array;
8291
		}
8292
8293
		return $airport_array;
8294
	}
8295
	
8296
	
8297
	/**
8298
	* Counts all airport arrival countries
8299
	*
8300
	* @return Array the airport arrival list
8301
	*
8302
	*/
8303
	public function countAllArrivalCountries($limit = true,$filters = array(),$year = '',$month = '',$day = '')
8304
	{
8305
		global $globalDBdriver;
8306
		$filter_query = $this->getFilter($filters,true,true);
8307
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8308
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''";
8309
		$query_values = array();
8310
		if ($year != '') {
8311
			if ($globalDBdriver == 'mysql') {
8312
				$query .= " AND YEAR(spotter_output.date) = :year";
8313
				$query_values = array_merge($query_values,array(':year' => $year));
8314
			} else {
8315
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
8316
				$query_values = array_merge($query_values,array(':year' => $year));
8317
			}
8318
		}
8319
		if ($month != '') {
8320
			if ($globalDBdriver == 'mysql') {
8321
				$query .= " AND MONTH(spotter_output.date) = :month";
8322
				$query_values = array_merge($query_values,array(':month' => $month));
8323
			} else {
8324
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
8325
				$query_values = array_merge($query_values,array(':month' => $month));
8326
			}
8327
		}
8328
		if ($day != '') {
8329
			if ($globalDBdriver == 'mysql') {
8330
				$query .= " AND DAY(spotter_output.date) = :day";
8331
				$query_values = array_merge($query_values,array(':day' => $day));
8332
			} else {
8333
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
8334
				$query_values = array_merge($query_values,array(':day' => $day));
8335
			}
8336
		}
8337
		$query .= " GROUP BY spotter_output.arrival_airport_country
8338
					ORDER BY airport_arrival_country_count DESC";
8339
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
8340
      
8341
		
8342
		$sth = $this->db->prepare($query);
8343
		$sth->execute($query_values);
8344
      
8345
		$airport_array = array();
8346
		$temp_array = array();
8347
        
8348
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8349
		{
8350
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8351
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8352
          
8353
			$airport_array[] = $temp_array;
8354
		}
8355
8356
		return $airport_array;
8357
	}
8358
8359
8360
8361
8362
8363
	/**
8364
	* Gets all route combinations
8365
	*
8366
	* @return Array the route list
8367
	*
8368
	*/
8369
	public function countAllRoutes($filters = array())
8370
	{
8371
		$filter_query = $this->getFilter($filters,true,true);
8372
		$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
8373
		    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 <> ''
8374
                    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
8375
                    ORDER BY route_count DESC
8376
		    LIMIT 10 OFFSET 0";
8377
      
8378
		
8379
		$sth = $this->db->prepare($query);
8380
		$sth->execute();
8381
      
8382
		$routes_array = array();
8383
		$temp_array = array();
8384
        
8385
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8386
		{
8387
			$temp_array['route_count'] = $row['route_count'];
8388
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8389
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8390
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8391
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8392
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8393
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8394
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8395
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8396
          
8397
			$routes_array[] = $temp_array;
8398
		}
8399
8400
		return $routes_array;
8401
	}
8402
	
8403
	
8404
	
8405
	
8406
	/**
8407
	* Gets all route combinations based on an aircraft
8408
	*
8409
	* @return Array the route list
8410
	*
8411
	*/
8412
	public function countAllRoutesByAircraft($aircraft_icao,$filters = array())
8413
	{
8414
		$filter_query = $this->getFilter($filters,true,true);
8415
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
8416
		$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
8417
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
8418
			    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 
8419
			    ORDER BY route_count DESC";
8420
		
8421
		$sth = $this->db->prepare($query);
8422
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
8423
      
8424
		$routes_array = array();
8425
		$temp_array = array();
8426
        
8427
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8428
		{
8429
			$temp_array['route_count'] = $row['route_count'];
8430
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8431
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8432
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8433
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8434
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8435
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8436
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8437
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8438
          
8439
			$routes_array[] = $temp_array;
8440
		}
8441
8442
		return $routes_array;
8443
	}
8444
	
8445
	
8446
	/**
8447
	* Gets all route combinations based on an aircraft registration
8448
	*
8449
	* @return Array the route list
8450
	*
8451
	*/
8452
	public function countAllRoutesByRegistration($registration, $filters = array())
8453
	{
8454
		$filter_query = $this->getFilter($filters,true,true);
8455
		$registration = filter_var($registration, FILTER_SANITIZE_STRING);
8456
		$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
8457
			FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.registration = :registration 
8458
                    GROUP BY route
8459
                    ORDER BY route_count DESC";
8460
      
8461
		
8462
		$sth = $this->db->prepare($query);
8463
		$sth->execute(array(':registration' => $registration));
8464
      
8465
		$routes_array = array();
8466
		$temp_array = array();
8467
        
8468
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8469
		{
8470
			$temp_array['route_count'] = $row['route_count'];
8471
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8472
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8473
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8474
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8475
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8476
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8477
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8478
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8479
          
8480
			$routes_array[] = $temp_array;
8481
		}
8482
8483
		return $routes_array;
8484
	}
8485
	
8486
	
8487
	
8488
	/**
8489
	* Gets all route combinations based on an airline
8490
	*
8491
	* @return Array the route list
8492
	*
8493
	*/
8494
	public function countAllRoutesByAirline($airline_icao, $filters = array())
8495
	{
8496
		$filter_query = $this->getFilter($filters,true,true);
8497
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
8498
		$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
8499
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.airline_icao = :airline_icao 
8500
			    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 
8501
			    ORDER BY route_count DESC";
8502
      
8503
		
8504
		$sth = $this->db->prepare($query);
8505
		$sth->execute(array(':airline_icao' => $airline_icao));
8506
      
8507
		$routes_array = array();
8508
		$temp_array = array();
8509
        
8510
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8511
		{
8512
			$temp_array['route_count'] = $row['route_count'];
8513
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8514
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8515
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8516
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8517
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8518
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8519
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8520
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8521
          
8522
			$routes_array[] = $temp_array;
8523
		}
8524
8525
		return $routes_array;
8526
	}
8527
	
8528
	
8529
	
8530
	/**
8531
	* Gets all route combinations based on an airport
8532
	*
8533
	* @return Array the route list
8534
	*
8535
	*/
8536
	public function countAllRoutesByAirport($airport_icao, $filters = array())
8537
	{
8538
		$filter_query = $this->getFilter($filters,true,true);
8539
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8540
		$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
8541
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
8542
			    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 
8543
			    ORDER BY route_count DESC";
8544
		
8545
		$sth = $this->db->prepare($query);
8546
		$sth->execute(array(':airport_icao' => $airport_icao));
8547
      
8548
		$routes_array = array();
8549
		$temp_array = array();
8550
        
8551
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8552
		{
8553
			$temp_array['route_count'] = $row['route_count'];
8554
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8555
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8556
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8557
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8558
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8559
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8560
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8561
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8562
          
8563
			$routes_array[] = $temp_array;
8564
		}
8565
8566
		return $routes_array;
8567
	}
8568
	
8569
	
8570
	
8571
	/**
8572
	* Gets all route combinations based on an country
8573
	*
8574
	* @return Array the route list
8575
	*
8576
	*/
8577
	public function countAllRoutesByCountry($country, $filters = array())
8578
	{
8579
		$filter_query = $this->getFilter($filters,true,true);
8580
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8581
		$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
8582
			    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 
8583
			    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 
8584
			    ORDER BY route_count DESC";
8585
		
8586
		$sth = $this->db->prepare($query);
8587
		$sth->execute(array(':country' => $country));
8588
      
8589
		$routes_array = array();
8590
		$temp_array = array();
8591
        
8592
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8593
		{
8594
			$temp_array['route_count'] = $row['route_count'];
8595
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8596
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8597
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8598
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8599
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8600
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8601
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8602
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8603
          
8604
			$routes_array[] = $temp_array;
8605
		}
8606
8607
		return $routes_array;
8608
	}
8609
8610
8611
	/**
8612
	* Gets all route combinations based on an date
8613
	*
8614
	* @return Array the route list
8615
	*
8616
	*/
8617
	public function countAllRoutesByDate($date, $filters = array())
8618
	{
8619
		global $globalTimezone, $globalDBdriver;
8620
		$filter_query = $this->getFilter($filters,true,true);
8621
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8622
		if ($globalTimezone != '') {
8623
			date_default_timezone_set($globalTimezone);
8624
			$datetime = new DateTime($date);
8625
			$offset = $datetime->format('P');
8626
		} else $offset = '+00:00';
8627
		
8628
		if ($globalDBdriver == 'mysql') {
8629
			$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
8630
				    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date  
8631
				    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
8632
				    ORDER BY route_count DESC";
8633
		} else {
8634
			$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
8635
				    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date  
8636
				    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
8637
				    ORDER BY route_count DESC";
8638
		}
8639
		
8640
		$sth = $this->db->prepare($query);
8641
		$sth->execute(array(':date' => $date, ':offset' => $offset));
8642
      
8643
		$routes_array = array();
8644
		$temp_array = array();
8645
        
8646
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8647
		{
8648
			$temp_array['route_count'] = $row['route_count'];
8649
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8650
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8651
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8652
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8653
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8654
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8655
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8656
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8657
          
8658
			$routes_array[] = $temp_array;
8659
		}
8660
8661
		return $routes_array;
8662
	}
8663
	
8664
	
8665
	/**
8666
	* Gets all route combinations based on an ident/callsign
8667
	*
8668
	* @return Array the route list
8669
	*
8670
	*/
8671
	public function countAllRoutesByIdent($ident, $filters = array())
8672
	{
8673
		$filter_query = $this->getFilter($filters,true,true);
8674
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
8675
		$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
8676
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.ident = :ident   
8677
                    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
8678
                    ORDER BY route_count DESC";
8679
      
8680
		
8681
		$sth = $this->db->prepare($query);
8682
		$sth->execute(array(':ident' => $ident));
8683
      
8684
		$routes_array = array();
8685
		$temp_array = array();
8686
        
8687
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8688
		{
8689
			$temp_array['route_count'] = $row['route_count'];
8690
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8691
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8692
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8693
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8694
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8695
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8696
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8697
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8698
          
8699
			$routes_array[] = $temp_array;
8700
		}
8701
8702
		return $routes_array;
8703
	}
8704
	
8705
	/**
8706
	* Gets all route combinations based on an owner
8707
	*
8708
	* @return Array the route list
8709
	*
8710
	*/
8711
	public function countAllRoutesByOwner($owner,$filters = array())
8712
	{
8713
		$filter_query = $this->getFilter($filters,true,true);
8714
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
8715
		$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
8716
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.owner_name = :owner 
8717
                    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
8718
                    ORDER BY route_count DESC";
8719
      
8720
		
8721
		$sth = $this->db->prepare($query);
8722
		$sth->execute(array(':owner' => $owner));
8723
      
8724
		$routes_array = array();
8725
		$temp_array = array();
8726
        
8727
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8728
		{
8729
			$temp_array['route_count'] = $row['route_count'];
8730
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8731
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8732
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8733
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8734
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8735
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8736
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8737
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8738
          
8739
			$routes_array[] = $temp_array;
8740
		}
8741
8742
		return $routes_array;
8743
	}
8744
	
8745
	/**
8746
	* Gets all route combinations based on a pilot
8747
	*
8748
	* @return Array the route list
8749
	*
8750
	*/
8751
	public function countAllRoutesByPilot($pilot,$filters = array())
8752
	{
8753
		$filter_query = $this->getFilter($filters,true,true);
8754
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
8755
		$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
8756
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
8757
                    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
8758
                    ORDER BY route_count DESC";
8759
      
8760
		
8761
		$sth = $this->db->prepare($query);
8762
		$sth->execute(array(':pilot' => $pilot));
8763
      
8764
		$routes_array = array();
8765
		$temp_array = array();
8766
        
8767
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8768
		{
8769
			$temp_array['route_count'] = $row['route_count'];
8770
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8771
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8772
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8773
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8774
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8775
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8776
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8777
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8778
          
8779
			$routes_array[] = $temp_array;
8780
		}
8781
8782
		return $routes_array;
8783
	}
8784
	
8785
	
8786
	/**
8787
	* Gets all route combinations based on an manufacturer
8788
	*
8789
	* @return Array the route list
8790
	*
8791
	*/
8792
	public function countAllRoutesByManufacturer($aircraft_manufacturer, $filters = array())
8793
	{
8794
		$filter_query = $this->getFilter($filters,true,true);
8795
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
8796
		$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
8797
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
8798
                    GROUP BY route
8799
                    ORDER BY route_count DESC";
8800
      
8801
		
8802
		$sth = $this->db->prepare($query);
8803
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
8804
      
8805
		$routes_array = array();
8806
		$temp_array = array();
8807
        
8808
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8809
		{
8810
			$temp_array['route_count'] = $row['route_count'];
8811
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8812
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8813
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8814
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8815
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8816
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8817
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8818
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8819
          
8820
			$routes_array[] = $temp_array;
8821
		}
8822
8823
		return $routes_array;
8824
	}
8825
8826
	
8827
	
8828
	/**
8829
	* Gets all route combinations with waypoints
8830
	*
8831
	* @return Array the route list
8832
	*
8833
	*/
8834
	public function countAllRoutesWithWaypoints($filters = array())
8835
	{
8836
		$filter_query = $this->getFilter($filters,true,true);
8837
		$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
8838
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.waypoints <> '' 
8839
                    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
8840
                    ORDER BY route_count DESC
8841
		    LIMIT 10 OFFSET 0";
8842
      
8843
		
8844
		$sth = $this->db->prepare($query);
8845
		$sth->execute();
8846
      
8847
		$routes_array = array();
8848
		$temp_array = array();
8849
        
8850
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8851
		{
8852
			$temp_array['spotter_id'] = $row['spotter_id'];
8853
			$temp_array['route_count'] = $row['route_count'];
8854
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8855
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8856
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8857
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8858
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8859
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8860
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8861
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8862
          
8863
			$routes_array[] = $temp_array;
8864
		}
8865
8866
		return $routes_array;
8867
	}
8868
	
8869
	/**
8870
	* Gets all callsigns that have flown over
8871
	*
8872
	* @return Array the callsign list
8873
	*
8874
	*/
8875
	public function countAllCallsigns($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '', $month = '', $day = '')
8876
	{
8877
		global $globalDBdriver;
8878
		$filter_query = $this->getFilter($filters,true,true);
8879
		$query  = "SELECT DISTINCT spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name, spotter_output.airline_icao  
8880
                    FROM spotter_output".$filter_query." spotter_output.ident <> '' ";
8881
		 if ($olderthanmonths > 0) {
8882
			if ($globalDBdriver == 'mysql') $query .= ' AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH)';
8883
			else $query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
8884
		}
8885
		if ($sincedate != '') {
8886
			if ($globalDBdriver == 'mysql') $query .= " AND spotter_output.date > '".$sincedate."'";
8887
			else $query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
8888
		}
8889
		$query_values = array();
8890
		if ($year != '') {
8891
			if ($globalDBdriver == 'mysql') {
8892
				$query .= " AND YEAR(spotter_output.date) = :year";
8893
				$query_values = array_merge($query_values,array(':year' => $year));
8894
			} else {
8895
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
8896
				$query_values = array_merge($query_values,array(':year' => $year));
8897
			}
8898
		}
8899
		if ($month != '') {
8900
			if ($globalDBdriver == 'mysql') {
8901
				$query .= " AND MONTH(spotter_output.date) = :month";
8902
				$query_values = array_merge($query_values,array(':month' => $month));
8903
			} else {
8904
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
8905
				$query_values = array_merge($query_values,array(':month' => $month));
8906
			}
8907
		}
8908
		if ($day != '') {
8909
			if ($globalDBdriver == 'mysql') {
8910
				$query .= " AND DAY(spotter_output.date) = :day";
8911
				$query_values = array_merge($query_values,array(':day' => $day));
8912
			} else {
8913
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
8914
				$query_values = array_merge($query_values,array(':day' => $day));
8915
			}
8916
		}
8917
		$query .= " GROUP BY spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
8918
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
8919
      		
8920
		$sth = $this->db->prepare($query);
8921
		$sth->execute($query_values);
8922
      
8923
		$callsign_array = array();
8924
		$temp_array = array();
8925
        
8926
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8927
		{
8928
			$temp_array['callsign_icao'] = $row['ident'];
8929
			$temp_array['airline_name'] = $row['airline_name'];
8930
			$temp_array['airline_icao'] = $row['airline_icao'];
8931
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
8932
          
8933
			$callsign_array[] = $temp_array;
8934
		}
8935
8936
		return $callsign_array;
8937
	}
8938
8939
	/**
8940
	* Gets all callsigns that have flown over
8941
	*
8942
	* @return Array the callsign list
8943
	*
8944
	*/
8945
	public function countAllCallsignsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $filters = array())
8946
	{
8947
		global $globalDBdriver;
8948
		$filter_query = $this->getFilter($filters,true,true);
8949
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name  
8950
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''  AND spotter_output.airline_icao <> '' ";
8951
		 if ($olderthanmonths > 0) {
8952
			if ($globalDBdriver == 'mysql') $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
8953
			else $query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
8954
		}
8955
		if ($sincedate != '') {
8956
			if ($globalDBdriver == 'mysql') $query .= "AND spotter_output.date > '".$sincedate."' ";
8957
			else $query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
8958
		}
8959
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
8960
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
8961
      		
8962
		$sth = $this->db->prepare($query);
8963
		$sth->execute();
8964
      
8965
		$callsign_array = array();
8966
		$temp_array = array();
8967
        
8968
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8969
		{
8970
			$temp_array['callsign_icao'] = $row['ident'];
8971
			$temp_array['airline_name'] = $row['airline_name'];
8972
			$temp_array['airline_icao'] = $row['airline_icao'];
8973
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
8974
          
8975
			$callsign_array[] = $temp_array;
8976
		}
8977
8978
		return $callsign_array;
8979
	}
8980
8981
8982
8983
8984
	/**
8985
	* Counts all dates
8986
	*
8987
	* @return Array the date list
8988
	*
8989
	*/
8990
	public function countAllDates($filters = array())
8991
	{
8992
		global $globalTimezone, $globalDBdriver;
8993
		if ($globalTimezone != '') {
8994
			date_default_timezone_set($globalTimezone);
8995
			$datetime = new DateTime();
8996
			$offset = $datetime->format('P');
8997
		} else $offset = '+00:00';
8998
8999
		if ($globalDBdriver == 'mysql') {
9000
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9001
								FROM spotter_output";
9002
			$query .= $this->getFilter($filters);
9003
			$query .= " GROUP BY date_name 
9004
								ORDER BY date_count DESC
9005
								LIMIT 10 OFFSET 0";
9006
		} else {
9007
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9008
								FROM spotter_output";
9009
			$query .= $this->getFilter($filters);
9010
			$query .= " GROUP BY date_name 
9011
								ORDER BY date_count DESC
9012
								LIMIT 10 OFFSET 0";
9013
		}
9014
      
9015
		
9016
		$sth = $this->db->prepare($query);
9017
		$sth->execute(array(':offset' => $offset));
9018
      
9019
		$date_array = array();
9020
		$temp_array = array();
9021
        
9022
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9023
		{
9024
			$temp_array['date_name'] = $row['date_name'];
9025
			$temp_array['date_count'] = $row['date_count'];
9026
9027
			$date_array[] = $temp_array;
9028
		}
9029
9030
		return $date_array;
9031
	}
9032
	
9033
	/**
9034
	* Counts all dates
9035
	*
9036
	* @return Array the date list
9037
	*
9038
	*/
9039
	public function countAllDatesByAirlines($filters = array())
9040
	{
9041
		global $globalTimezone, $globalDBdriver;
9042
		if ($globalTimezone != '') {
9043
			date_default_timezone_set($globalTimezone);
9044
			$datetime = new DateTime();
9045
			$offset = $datetime->format('P');
9046
		} else $offset = '+00:00';
9047
		$filter_query = $this->getFilter($filters,true,true);
9048
		if ($globalDBdriver == 'mysql') {
9049
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9050
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9051
								GROUP BY spotter_output.airline_icao, date_name 
9052
								ORDER BY date_count DESC
9053
								LIMIT 10 OFFSET 0";
9054
		} else {
9055
			$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
9056
								FROM spotter_output 
9057
								WHERE spotter_output.airline_icao <> '' 
9058
								GROUP BY spotter_output.airline_icao, date_name 
9059
								ORDER BY date_count DESC
9060
								LIMIT 10 OFFSET 0";
9061
		}
9062
      
9063
		
9064
		$sth = $this->db->prepare($query);
9065
		$sth->execute(array(':offset' => $offset));
9066
      
9067
		$date_array = array();
9068
		$temp_array = array();
9069
        
9070
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9071
		{
9072
			$temp_array['date_name'] = $row['date_name'];
9073
			$temp_array['date_count'] = $row['date_count'];
9074
			$temp_array['airline_icao'] = $row['airline_icao'];
9075
9076
			$date_array[] = $temp_array;
9077
		}
9078
9079
		return $date_array;
9080
	}	
9081
	
9082
	/**
9083
	* Counts all dates during the last 7 days
9084
	*
9085
	* @return Array the date list
9086
	*
9087
	*/
9088
	public function countAllDatesLast7Days($filters = array())
9089
	{
9090
		global $globalTimezone, $globalDBdriver;
9091
		if ($globalTimezone != '') {
9092
			date_default_timezone_set($globalTimezone);
9093
			$datetime = new DateTime();
9094
			$offset = $datetime->format('P');
9095
		} else $offset = '+00:00';
9096
		$filter_query = $this->getFilter($filters,true,true);
9097
		if ($globalDBdriver == 'mysql') {
9098
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9099
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY)";
9100
			$query .= " GROUP BY date_name 
9101
								ORDER BY spotter_output.date ASC";
9102
			$query_data = array(':offset' => $offset);
9103
		} else {
9104
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9105
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '7 DAYS'";
9106
			$query .= " GROUP BY date_name 
9107
								ORDER BY date_name ASC";
9108
			$query_data = array(':offset' => $offset);
9109
    		}
9110
		
9111
		$sth = $this->db->prepare($query);
9112
		$sth->execute($query_data);
9113
      
9114
		$date_array = array();
9115
		$temp_array = array();
9116
        
9117
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9118
		{
9119
			$temp_array['date_name'] = $row['date_name'];
9120
			$temp_array['date_count'] = $row['date_count'];
9121
          
9122
			$date_array[] = $temp_array;
9123
		}
9124
9125
		return $date_array;
9126
	}
9127
9128
	/**
9129
	* Counts all dates during the last month
9130
	*
9131
	* @return Array the date list
9132
	*
9133
	*/
9134
	public function countAllDatesLastMonth($filters = array())
9135
	{
9136
		global $globalTimezone, $globalDBdriver;
9137
		if ($globalTimezone != '') {
9138
			date_default_timezone_set($globalTimezone);
9139
			$datetime = new DateTime();
9140
			$offset = $datetime->format('P');
9141
		} else $offset = '+00:00';
9142
		$filter_query = $this->getFilter($filters,true,true);
9143
		if ($globalDBdriver == 'mysql') {
9144
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9145
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)";
9146
			$query .= " GROUP BY date_name 
9147
								ORDER BY spotter_output.date ASC";
9148
			$query_data = array(':offset' => $offset);
9149
		} else {
9150
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9151
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'";
9152
			$query .= " GROUP BY date_name 
9153
								ORDER BY date_name ASC";
9154
			$query_data = array(':offset' => $offset);
9155
    		}
9156
		
9157
		$sth = $this->db->prepare($query);
9158
		$sth->execute($query_data);
9159
      
9160
		$date_array = array();
9161
		$temp_array = array();
9162
        
9163
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9164
		{
9165
			$temp_array['date_name'] = $row['date_name'];
9166
			$temp_array['date_count'] = $row['date_count'];
9167
          
9168
			$date_array[] = $temp_array;
9169
		}
9170
9171
		return $date_array;
9172
	}
9173
9174
9175
	/**
9176
	* Counts all dates during the last month
9177
	*
9178
	* @return Array the date list
9179
	*
9180
	*/
9181
	public function countAllDatesLastMonthByAirlines($filters = array())
9182
	{
9183
		global $globalTimezone, $globalDBdriver;
9184
		$filter_query = $this->getFilter($filters,true,true);
9185
		if ($globalTimezone != '') {
9186
			date_default_timezone_set($globalTimezone);
9187
			$datetime = new DateTime();
9188
			$offset = $datetime->format('P');
9189
		} else $offset = '+00:00';
9190
		
9191
		if ($globalDBdriver == 'mysql') {
9192
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9193
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)
9194
								GROUP BY spotter_output.airline_icao, date_name 
9195
								ORDER BY spotter_output.date ASC";
9196
			$query_data = array(':offset' => $offset);
9197
		} else {
9198
			$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
9199
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'
9200
								GROUP BY spotter_output.airline_icao, date_name 
9201
								ORDER BY date_name ASC";
9202
			$query_data = array(':offset' => $offset);
9203
    		}
9204
		
9205
		$sth = $this->db->prepare($query);
9206
		$sth->execute($query_data);
9207
      
9208
		$date_array = array();
9209
		$temp_array = array();
9210
        
9211
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9212
		{
9213
			$temp_array['date_name'] = $row['date_name'];
9214
			$temp_array['date_count'] = $row['date_count'];
9215
			$temp_array['airline_icao'] = $row['airline_icao'];
9216
          
9217
			$date_array[] = $temp_array;
9218
		}
9219
9220
		return $date_array;
9221
	}
9222
	
9223
9224
	/**
9225
	* Counts all month
9226
	*
9227
	* @return Array the month list
9228
	*
9229
	*/
9230
	public function countAllMonths($filters = array())
9231
	{
9232
		global $globalTimezone, $globalDBdriver;
9233
		if ($globalTimezone != '') {
9234
			date_default_timezone_set($globalTimezone);
9235
			$datetime = new DateTime();
9236
			$offset = $datetime->format('P');
9237
		} else $offset = '+00:00';
9238
9239
		if ($globalDBdriver == 'mysql') {
9240
			$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
9241
								FROM spotter_output";
9242
			$query .= $this->getFilter($filters);
9243
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
9244
		} else {
9245
			$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
9246
								FROM spotter_output";
9247
			$query .= $this->getFilter($filters);
9248
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
9249
		}
9250
      
9251
		
9252
		$sth = $this->db->prepare($query);
9253
		$sth->execute(array(':offset' => $offset));
9254
      
9255
		$date_array = array();
9256
		$temp_array = array();
9257
        
9258
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9259
		{
9260
			$temp_array['month_name'] = $row['month_name'];
9261
			$temp_array['year_name'] = $row['year_name'];
9262
			$temp_array['date_count'] = $row['date_count'];
9263
9264
			$date_array[] = $temp_array;
9265
		}
9266
9267
		return $date_array;
9268
	}
9269
9270
	/**
9271
	* Counts all month
9272
	*
9273
	* @return Array the month list
9274
	*
9275
	*/
9276
	public function countAllMonthsByAirlines($filters = array())
9277
	{
9278
		global $globalTimezone, $globalDBdriver;
9279
		$filter_query = $this->getFilter($filters,true,true);
9280
		if ($globalTimezone != '') {
9281
			date_default_timezone_set($globalTimezone);
9282
			$datetime = new DateTime();
9283
			$offset = $datetime->format('P');
9284
		} else $offset = '+00:00';
9285
9286
		if ($globalDBdriver == 'mysql') {
9287
			$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
9288
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9289
								GROUP BY spotter_output.airline_icao, year_name, month_name 
9290
								ORDER BY date_count DESC";
9291
		} else {
9292
			$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
9293
								FROM spotter_output 
9294
								WHERE spotter_output.airline_icao <> '' 
9295
								GROUP BY spotter_output.airline_icao, year_name, month_name 
9296
								ORDER BY date_count DESC";
9297
		}
9298
      
9299
		
9300
		$sth = $this->db->prepare($query);
9301
		$sth->execute(array(':offset' => $offset));
9302
      
9303
		$date_array = array();
9304
		$temp_array = array();
9305
        
9306
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9307
		{
9308
			$temp_array['month_name'] = $row['month_name'];
9309
			$temp_array['year_name'] = $row['year_name'];
9310
			$temp_array['date_count'] = $row['date_count'];
9311
			$temp_array['airline_icao'] = $row['airline_icao'];
9312
9313
			$date_array[] = $temp_array;
9314
		}
9315
9316
		return $date_array;
9317
	}
9318
9319
	/**
9320
	* Counts all military month
9321
	*
9322
	* @return Array the month list
9323
	*
9324
	*/
9325
	public function countAllMilitaryMonths($filters = array())
9326
	{
9327
		global $globalTimezone, $globalDBdriver;
9328
		if ($globalTimezone != '') {
9329
			date_default_timezone_set($globalTimezone);
9330
			$datetime = new DateTime();
9331
			$offset = $datetime->format('P');
9332
		} else $offset = '+00:00';
9333
		$filter_query = $this->getFilter($filters,true,true);
9334
		if ($globalDBdriver == 'mysql') {
9335
			$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
9336
								FROM spotter_output".$filter_query." spotter_output.airline_type = 'military'
9337
								GROUP BY year_name, month_name 
9338
								ORDER BY date_count DESC";
9339
		} else {
9340
			$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
9341
								FROM spotter_output".$filter_query." spotter_output.airline_type = 'military'
9342
								GROUP BY year_name, month_name 
9343
								ORDER BY date_count DESC";
9344
		}
9345
		
9346
		$sth = $this->db->prepare($query);
9347
		$sth->execute(array(':offset' => $offset));
9348
      
9349
		$date_array = array();
9350
		$temp_array = array();
9351
        
9352
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9353
		{
9354
			$temp_array['month_name'] = $row['month_name'];
9355
			$temp_array['year_name'] = $row['year_name'];
9356
			$temp_array['date_count'] = $row['date_count'];
9357
9358
			$date_array[] = $temp_array;
9359
		}
9360
9361
		return $date_array;
9362
	}
9363
	
9364
	/**
9365
	* Counts all month owners
9366
	*
9367
	* @return Array the month list
9368
	*
9369
	*/
9370
	public function countAllMonthsOwners($filters = array())
9371
	{
9372
		global $globalTimezone, $globalDBdriver;
9373
		if ($globalTimezone != '') {
9374
			date_default_timezone_set($globalTimezone);
9375
			$datetime = new DateTime();
9376
			$offset = $datetime->format('P');
9377
		} else $offset = '+00:00';
9378
		$filter_query = $this->getFilter($filters,true,true);
9379
9380
		if ($globalDBdriver == 'mysql') {
9381
			$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
9382
								FROM spotter_output".$filter_query." owner_name <> ''
9383
								GROUP BY year_name, month_name
9384
								ORDER BY date_count DESC";
9385
		} else {
9386
			$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
9387
								FROM spotter_output".$filter_query." owner_name <> ''
9388
								GROUP BY year_name, month_name
9389
								ORDER BY date_count DESC";
9390
		}
9391
		
9392
		$sth = $this->db->prepare($query);
9393
		$sth->execute(array(':offset' => $offset));
9394
      
9395
		$date_array = array();
9396
		$temp_array = array();
9397
        
9398
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9399
		{
9400
			$temp_array['month_name'] = $row['month_name'];
9401
			$temp_array['year_name'] = $row['year_name'];
9402
			$temp_array['date_count'] = $row['date_count'];
9403
9404
			$date_array[] = $temp_array;
9405
		}
9406
9407
		return $date_array;
9408
	}
9409
	
9410
	/**
9411
	* Counts all month owners
9412
	*
9413
	* @return Array the month list
9414
	*
9415
	*/
9416
	public function countAllMonthsOwnersByAirlines($filters = array())
9417
	{
9418
		global $globalTimezone, $globalDBdriver;
9419
		$filter_query = $this->getFilter($filters,true,true);
9420
		if ($globalTimezone != '') {
9421
			date_default_timezone_set($globalTimezone);
9422
			$datetime = new DateTime();
9423
			$offset = $datetime->format('P');
9424
		} else $offset = '+00:00';
9425
9426
		if ($globalDBdriver == 'mysql') {
9427
			$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
9428
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
9429
								GROUP BY spotter_output.airline_icao, year_name, month_name
9430
								ORDER BY date_count DESC";
9431
		} else {
9432
			$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
9433
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
9434
								GROUP BY spotter_output.airline_icao, year_name, month_name
9435
								ORDER BY date_count DESC";
9436
		}
9437
		
9438
		$sth = $this->db->prepare($query);
9439
		$sth->execute(array(':offset' => $offset));
9440
      
9441
		$date_array = array();
9442
		$temp_array = array();
9443
        
9444
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9445
		{
9446
			$temp_array['month_name'] = $row['month_name'];
9447
			$temp_array['year_name'] = $row['year_name'];
9448
			$temp_array['date_count'] = $row['date_count'];
9449
			$temp_array['airline_icao'] = $row['airline_icao'];
9450
9451
			$date_array[] = $temp_array;
9452
		}
9453
9454
		return $date_array;
9455
	}
9456
9457
	/**
9458
	* Counts all month pilot
9459
	*
9460
	* @return Array the month list
9461
	*
9462
	*/
9463
	public function countAllMonthsPilots($filters = array())
9464
	{
9465
		global $globalTimezone, $globalDBdriver;
9466
		if ($globalTimezone != '') {
9467
			date_default_timezone_set($globalTimezone);
9468
			$datetime = new DateTime();
9469
			$offset = $datetime->format('P');
9470
		} else $offset = '+00:00';
9471
		$filter_query = $this->getFilter($filters,true,true);
9472
9473
		if ($globalDBdriver == 'mysql') {
9474
			$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
9475
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
9476
								GROUP BY year_name, month_name
9477
								ORDER BY date_count DESC";
9478
		} else {
9479
			$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
9480
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
9481
								GROUP BY year_name, month_name
9482
								ORDER BY date_count DESC";
9483
		}
9484
		
9485
		$sth = $this->db->prepare($query);
9486
		$sth->execute(array(':offset' => $offset));
9487
      
9488
		$date_array = array();
9489
		$temp_array = array();
9490
        
9491
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9492
		{
9493
			$temp_array['month_name'] = $row['month_name'];
9494
			$temp_array['year_name'] = $row['year_name'];
9495
			$temp_array['date_count'] = $row['date_count'];
9496
9497
			$date_array[] = $temp_array;
9498
		}
9499
9500
		return $date_array;
9501
	}
9502
	
9503
	/**
9504
	* Counts all month pilot
9505
	*
9506
	* @return Array the month list
9507
	*
9508
	*/
9509
	public function countAllMonthsPilotsByAirlines($filters = array())
9510
	{
9511
		global $globalTimezone, $globalDBdriver;
9512
		$filter_query = $this->getFilter($filters,true,true);
9513
		if ($globalTimezone != '') {
9514
			date_default_timezone_set($globalTimezone);
9515
			$datetime = new DateTime();
9516
			$offset = $datetime->format('P');
9517
		} else $offset = '+00:00';
9518
9519
		if ($globalDBdriver == 'mysql') {
9520
			$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
9521
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
9522
								GROUP BY spotter_output.airline_icao,year_name, month_name
9523
								ORDER BY date_count DESC";
9524
		} else {
9525
			$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
9526
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
9527
								GROUP BY spotter_output.airline_icao, year_name, month_name
9528
								ORDER BY date_count DESC";
9529
		}
9530
		
9531
		$sth = $this->db->prepare($query);
9532
		$sth->execute(array(':offset' => $offset));
9533
      
9534
		$date_array = array();
9535
		$temp_array = array();
9536
        
9537
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9538
		{
9539
			$temp_array['month_name'] = $row['month_name'];
9540
			$temp_array['year_name'] = $row['year_name'];
9541
			$temp_array['date_count'] = $row['date_count'];
9542
			$temp_array['airline_icao'] = $row['airline_icao'];
9543
9544
			$date_array[] = $temp_array;
9545
		}
9546
9547
		return $date_array;
9548
	}
9549
9550
	/**
9551
	* Counts all month airline
9552
	*
9553
	* @return Array the month list
9554
	*
9555
	*/
9556
	public function countAllMonthsAirlines($filters = array())
9557
	{
9558
		global $globalTimezone, $globalDBdriver;
9559
		$filter_query = $this->getFilter($filters,true,true);
9560
		if ($globalTimezone != '') {
9561
			date_default_timezone_set($globalTimezone);
9562
			$datetime = new DateTime();
9563
			$offset = $datetime->format('P');
9564
		} else $offset = '+00:00';
9565
9566
		if ($globalDBdriver == 'mysql') {
9567
			$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
9568
								FROM spotter_output".$filter_query." airline_icao <> '' 
9569
								GROUP BY year_name, month_name
9570
								ORDER BY date_count DESC";
9571
		} else {
9572
			$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
9573
								FROM spotter_output".$filter_query." airline_icao <> '' 
9574
								GROUP BY year_name, month_name
9575
								ORDER BY date_count DESC";
9576
		}
9577
		
9578
		$sth = $this->db->prepare($query);
9579
		$sth->execute(array(':offset' => $offset));
9580
      
9581
		$date_array = array();
9582
		$temp_array = array();
9583
        
9584
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9585
		{
9586
			$temp_array['month_name'] = $row['month_name'];
9587
			$temp_array['year_name'] = $row['year_name'];
9588
			$temp_array['date_count'] = $row['date_count'];
9589
9590
			$date_array[] = $temp_array;
9591
		}
9592
9593
		return $date_array;
9594
	}
9595
	
9596
	/**
9597
	* Counts all month aircraft
9598
	*
9599
	* @return Array the month list
9600
	*
9601
	*/
9602
	public function countAllMonthsAircrafts($filters = array())
9603
	{
9604
		global $globalTimezone, $globalDBdriver;
9605
		if ($globalTimezone != '') {
9606
			date_default_timezone_set($globalTimezone);
9607
			$datetime = new DateTime();
9608
			$offset = $datetime->format('P');
9609
		} else $offset = '+00:00';
9610
		$filter_query = $this->getFilter($filters,true,true);
9611
9612
		if ($globalDBdriver == 'mysql') {
9613
			$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
9614
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
9615
								GROUP BY year_name, month_name
9616
								ORDER BY date_count DESC";
9617
		} else {
9618
			$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
9619
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
9620
								GROUP BY year_name, month_name
9621
								ORDER BY date_count DESC";
9622
		}
9623
		
9624
		$sth = $this->db->prepare($query);
9625
		$sth->execute(array(':offset' => $offset));
9626
      
9627
		$date_array = array();
9628
		$temp_array = array();
9629
        
9630
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9631
		{
9632
			$temp_array['month_name'] = $row['month_name'];
9633
			$temp_array['year_name'] = $row['year_name'];
9634
			$temp_array['date_count'] = $row['date_count'];
9635
9636
			$date_array[] = $temp_array;
9637
		}
9638
9639
		return $date_array;
9640
	}
9641
	
9642
9643
	/**
9644
	* Counts all month aircraft
9645
	*
9646
	* @return Array the month list
9647
	*
9648
	*/
9649
	public function countAllMonthsAircraftsByAirlines($filters = array())
9650
	{
9651
		global $globalTimezone, $globalDBdriver;
9652
		$filter_query = $this->getFilter($filters,true,true);
9653
		if ($globalTimezone != '') {
9654
			date_default_timezone_set($globalTimezone);
9655
			$datetime = new DateTime();
9656
			$offset = $datetime->format('P');
9657
		} else $offset = '+00:00';
9658
9659
		if ($globalDBdriver == 'mysql') {
9660
			$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
9661
								FROM spotter_output".$filter_query." aircraft_icao <> ''  AND spotter_output.airline_icao <> '' 
9662
								GROUP BY spotter_output.airline_icao, year_name, month_name
9663
								ORDER BY date_count DESC";
9664
		} else {
9665
			$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
9666
								FROM spotter_output".$filter_query." aircraft_icao <> '' AND spotter_output.airline_icao <> '' 
9667
								GROUP BY spotter_output.airline_icao, year_name, month_name
9668
								ORDER BY date_count DESC";
9669
		}
9670
		
9671
		$sth = $this->db->prepare($query);
9672
		$sth->execute(array(':offset' => $offset));
9673
      
9674
		$date_array = array();
9675
		$temp_array = array();
9676
        
9677
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9678
		{
9679
			$temp_array['month_name'] = $row['month_name'];
9680
			$temp_array['year_name'] = $row['year_name'];
9681
			$temp_array['date_count'] = $row['date_count'];
9682
			$temp_array['airline_icao'] = $row['airline_icao'];
9683
9684
			$date_array[] = $temp_array;
9685
		}
9686
9687
		return $date_array;
9688
	}
9689
9690
	/**
9691
	* Counts all month real arrival
9692
	*
9693
	* @return Array the month list
9694
	*
9695
	*/
9696
	public function countAllMonthsRealArrivals($filters = array())
9697
	{
9698
		global $globalTimezone, $globalDBdriver;
9699
		if ($globalTimezone != '') {
9700
			date_default_timezone_set($globalTimezone);
9701
			$datetime = new DateTime();
9702
			$offset = $datetime->format('P');
9703
		} else $offset = '+00:00';
9704
		$filter_query = $this->getFilter($filters,true,true);
9705
9706
		if ($globalDBdriver == 'mysql') {
9707
			$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
9708
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
9709
								GROUP BY year_name, month_name
9710
								ORDER BY date_count DESC";
9711
		} else {
9712
			$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
9713
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
9714
								GROUP BY year_name, month_name
9715
								ORDER BY date_count DESC";
9716
		}
9717
		
9718
		$sth = $this->db->prepare($query);
9719
		$sth->execute(array(':offset' => $offset));
9720
      
9721
		$date_array = array();
9722
		$temp_array = array();
9723
        
9724
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9725
		{
9726
			$temp_array['month_name'] = $row['month_name'];
9727
			$temp_array['year_name'] = $row['year_name'];
9728
			$temp_array['date_count'] = $row['date_count'];
9729
9730
			$date_array[] = $temp_array;
9731
		}
9732
9733
		return $date_array;
9734
	}
9735
	
9736
9737
	/**
9738
	* Counts all month real arrival
9739
	*
9740
	* @return Array the month list
9741
	*
9742
	*/
9743
	public function countAllMonthsRealArrivalsByAirlines($filters = array())
9744
	{
9745
		global $globalTimezone, $globalDBdriver;
9746
		$filter_query = $this->getFilter($filters,true,true);
9747
		if ($globalTimezone != '') {
9748
			date_default_timezone_set($globalTimezone);
9749
			$datetime = new DateTime();
9750
			$offset = $datetime->format('P');
9751
		} else $offset = '+00:00';
9752
9753
		if ($globalDBdriver == 'mysql') {
9754
			$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
9755
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
9756
								GROUP BY spotter_output.airline_icao, year_name, month_name
9757
								ORDER BY date_count DESC";
9758
		} else {
9759
			$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
9760
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
9761
								GROUP BY spotter_output.airline_icao, year_name, month_name
9762
								ORDER BY date_count DESC";
9763
		}
9764
		
9765
		$sth = $this->db->prepare($query);
9766
		$sth->execute(array(':offset' => $offset));
9767
      
9768
		$date_array = array();
9769
		$temp_array = array();
9770
        
9771
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9772
		{
9773
			$temp_array['month_name'] = $row['month_name'];
9774
			$temp_array['year_name'] = $row['year_name'];
9775
			$temp_array['date_count'] = $row['date_count'];
9776
			$temp_array['airline_icao'] = $row['airline_icao'];
9777
9778
			$date_array[] = $temp_array;
9779
		}
9780
9781
		return $date_array;
9782
	}
9783
	
9784
9785
	/**
9786
	* Counts all dates during the last year
9787
	*
9788
	* @return Array the date list
9789
	*
9790
	*/
9791
	public function countAllMonthsLastYear($filters)
9792
	{
9793
		global $globalTimezone, $globalDBdriver;
9794
		if ($globalTimezone != '') {
9795
			date_default_timezone_set($globalTimezone);
9796
			$datetime = new DateTime();
9797
			$offset = $datetime->format('P');
9798
		} else $offset = '+00:00';
9799
		$filter_query = $this->getFilter($filters,true,true);
9800
		if ($globalDBdriver == 'mysql') {
9801
			$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
9802
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 YEAR)";
9803
			$query .= " GROUP BY year_name, month_name
9804
								ORDER BY year_name, month_name ASC";
9805
			$query_data = array(':offset' => $offset);
9806
		} else {
9807
			$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
9808
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 YEARS'";
9809
			$query .= " GROUP BY year_name, month_name
9810
								ORDER BY year_name, month_name ASC";
9811
			$query_data = array(':offset' => $offset);
9812
    		}
9813
		
9814
		$sth = $this->db->prepare($query);
9815
		$sth->execute($query_data);
9816
      
9817
		$date_array = array();
9818
		$temp_array = array();
9819
        
9820
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9821
		{
9822
			$temp_array['year_name'] = $row['year_name'];
9823
			$temp_array['month_name'] = $row['month_name'];
9824
			$temp_array['date_count'] = $row['date_count'];
9825
          
9826
			$date_array[] = $temp_array;
9827
		}
9828
9829
		return $date_array;
9830
	}
9831
	
9832
	
9833
	
9834
	/**
9835
	* Counts all hours
9836
	*
9837
	* @return Array the hour list
9838
	*
9839
	*/
9840
	public function countAllHours($orderby,$filters = array())
9841
	{
9842
		global $globalTimezone, $globalDBdriver;
9843
		if ($globalTimezone != '') {
9844
			date_default_timezone_set($globalTimezone);
9845
			$datetime = new DateTime();
9846
			$offset = $datetime->format('P');
9847
		} else $offset = '+00:00';
9848
9849
		$orderby_sql = '';
9850
		if ($orderby == "hour")
9851
		{
9852
			$orderby_sql = "ORDER BY hour_name ASC";
9853
		}
9854
		if ($orderby == "count")
9855
		{
9856
			$orderby_sql = "ORDER BY hour_count DESC";
9857
		}
9858
		
9859
		if ($globalDBdriver == 'mysql') {
9860
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9861
								FROM spotter_output";
9862
			$query .= $this->getFilter($filters);
9863
			$query .= " GROUP BY hour_name 
9864
								".$orderby_sql;
9865
9866
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
9867
								FROM spotter_output 
9868
								GROUP BY hour_name 
9869
								".$orderby_sql."
9870
								LIMIT 10 OFFSET 00";
9871
  */    
9872
		$query_data = array(':offset' => $offset);
9873
		} else {
9874
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9875
								FROM spotter_output";
9876
			$query .= $this->getFilter($filters);
9877
			$query .= " GROUP BY hour_name 
9878
								".$orderby_sql;
9879
			$query_data = array(':offset' => $offset);
9880
		}
9881
		
9882
		$sth = $this->db->prepare($query);
9883
		$sth->execute($query_data);
9884
      
9885
		$hour_array = array();
9886
		$temp_array = array();
9887
        
9888
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9889
		{
9890
			$temp_array['hour_name'] = $row['hour_name'];
9891
			$temp_array['hour_count'] = $row['hour_count'];
9892
          
9893
			$hour_array[] = $temp_array;
9894
		}
9895
9896
		return $hour_array;
9897
	}
9898
	
9899
	/**
9900
	* Counts all hours
9901
	*
9902
	* @return Array the hour list
9903
	*
9904
	*/
9905
	public function countAllHoursByAirlines($orderby, $filters = array())
9906
	{
9907
		global $globalTimezone, $globalDBdriver;
9908
		$filter_query = $this->getFilter($filters,true,true);
9909
		if ($globalTimezone != '') {
9910
			date_default_timezone_set($globalTimezone);
9911
			$datetime = new DateTime();
9912
			$offset = $datetime->format('P');
9913
		} else $offset = '+00:00';
9914
9915
		$orderby_sql = '';
9916
		if ($orderby == "hour")
9917
		{
9918
			$orderby_sql = "ORDER BY hour_name ASC";
9919
		}
9920
		if ($orderby == "count")
9921
		{
9922
			$orderby_sql = "ORDER BY hour_count DESC";
9923
		}
9924
		
9925
		if ($globalDBdriver == 'mysql') {
9926
			$query  = "SELECT spotter_output.airline_icao, HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9927
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9928
								GROUP BY spotter_output.airline_icao, hour_name 
9929
								".$orderby_sql;
9930
9931
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
9932
								FROM spotter_output 
9933
								GROUP BY hour_name 
9934
								".$orderby_sql."
9935
								LIMIT 10 OFFSET 00";
9936
  */    
9937
		$query_data = array(':offset' => $offset);
9938
		} else {
9939
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9940
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9941
								GROUP BY spotter_output.airline_icao, hour_name 
9942
								".$orderby_sql;
9943
			$query_data = array(':offset' => $offset);
9944
		}
9945
		
9946
		$sth = $this->db->prepare($query);
9947
		$sth->execute($query_data);
9948
      
9949
		$hour_array = array();
9950
		$temp_array = array();
9951
        
9952
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9953
		{
9954
			$temp_array['hour_name'] = $row['hour_name'];
9955
			$temp_array['hour_count'] = $row['hour_count'];
9956
			$temp_array['airline_icao'] = $row['airline_icao'];
9957
          
9958
			$hour_array[] = $temp_array;
9959
		}
9960
9961
		return $hour_array;
9962
	}
9963
9964
9965
9966
	/**
9967
	* Counts all hours by airline
9968
	*
9969
	* @return Array the hour list
9970
	*
9971
	*/
9972
	public function countAllHoursByAirline($airline_icao, $filters = array())
9973
	{
9974
		global $globalTimezone, $globalDBdriver;
9975
		$filter_query = $this->getFilter($filters,true,true);
9976
		if ($globalTimezone != '') {
9977
			date_default_timezone_set($globalTimezone);
9978
			$datetime = new DateTime();
9979
			$offset = $datetime->format('P');
9980
		} else $offset = '+00:00';
9981
9982
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
9983
9984
		if ($globalDBdriver == 'mysql') {
9985
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9986
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
9987
								GROUP BY hour_name 
9988
								ORDER BY hour_name ASC";
9989
		} else {
9990
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9991
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
9992
								GROUP BY hour_name 
9993
								ORDER BY hour_name ASC";
9994
		}
9995
		
9996
		$sth = $this->db->prepare($query);
9997
		$sth->execute(array(':airline_icao' => $airline_icao,':offset' => $offset));
9998
      
9999
		$hour_array = array();
10000
		$temp_array = array();
10001
        
10002
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10003
		{
10004
			$temp_array['hour_name'] = $row['hour_name'];
10005
			$temp_array['hour_count'] = $row['hour_count'];
10006
          
10007
			$hour_array[] = $temp_array;
10008
		}
10009
10010
		return $hour_array;
10011
	}
10012
	
10013
	
10014
	
10015
	
10016
	/**
10017
	* Counts all hours by aircraft
10018
	*
10019
	* @return Array the hour list
10020
	*
10021
	*/
10022
	public function countAllHoursByAircraft($aircraft_icao, $filters = array())
10023
	{
10024
		global $globalTimezone, $globalDBdriver;
10025
		$filter_query = $this->getFilter($filters,true,true);
10026
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
10027
		if ($globalTimezone != '') {
10028
			date_default_timezone_set($globalTimezone);
10029
			$datetime = new DateTime();
10030
			$offset = $datetime->format('P');
10031
		} else $offset = '+00:00';
10032
10033
		if ($globalDBdriver == 'mysql') {
10034
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10035
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
10036
								GROUP BY hour_name 
10037
								ORDER BY hour_name ASC";
10038
		} else {
10039
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10040
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
10041
								GROUP BY hour_name 
10042
								ORDER BY hour_name ASC";
10043
		}
10044
		
10045
		$sth = $this->db->prepare($query);
10046
		$sth->execute(array(':aircraft_icao' => $aircraft_icao,':offset' => $offset));
10047
      
10048
		$hour_array = array();
10049
		$temp_array = array();
10050
        
10051
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10052
		{
10053
			$temp_array['hour_name'] = $row['hour_name'];
10054
			$temp_array['hour_count'] = $row['hour_count'];
10055
          
10056
			$hour_array[] = $temp_array;
10057
		}
10058
10059
		return $hour_array;
10060
	}
10061
	
10062
	
10063
	/**
10064
	* Counts all hours by aircraft registration
10065
	*
10066
	* @return Array the hour list
10067
	*
10068
	*/
10069
	public function countAllHoursByRegistration($registration, $filters = array())
10070
	{
10071
		global $globalTimezone, $globalDBdriver;
10072
		$filter_query = $this->getFilter($filters,true,true);
10073
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
10074
		if ($globalTimezone != '') {
10075
			date_default_timezone_set($globalTimezone);
10076
			$datetime = new DateTime();
10077
			$offset = $datetime->format('P');
10078
		} else $offset = '+00:00';
10079
10080
		if ($globalDBdriver == 'mysql') {
10081
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10082
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
10083
								GROUP BY hour_name 
10084
								ORDER BY hour_name ASC";
10085
		} else {
10086
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10087
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
10088
								GROUP BY hour_name 
10089
								ORDER BY hour_name ASC";
10090
		}
10091
		
10092
		$sth = $this->db->prepare($query);
10093
		$sth->execute(array(':registration' => $registration,':offset' => $offset));
10094
      
10095
		$hour_array = array();
10096
		$temp_array = array();
10097
        
10098
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10099
		{
10100
			$temp_array['hour_name'] = $row['hour_name'];
10101
			$temp_array['hour_count'] = $row['hour_count'];
10102
          
10103
			$hour_array[] = $temp_array;
10104
		}
10105
10106
		return $hour_array;
10107
	}
10108
	
10109
	
10110
	/**
10111
	* Counts all hours by airport
10112
	*
10113
	* @return Array the hour list
10114
	*
10115
	*/
10116
	public function countAllHoursByAirport($airport_icao, $filters = array())
10117
	{
10118
		global $globalTimezone, $globalDBdriver;
10119
		$filter_query = $this->getFilter($filters,true,true);
10120
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
10121
		if ($globalTimezone != '') {
10122
			date_default_timezone_set($globalTimezone);
10123
			$datetime = new DateTime();
10124
			$offset = $datetime->format('P');
10125
		} else $offset = '+00:00';
10126
10127
		if ($globalDBdriver == 'mysql') {
10128
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10129
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
10130
								GROUP BY hour_name 
10131
								ORDER BY hour_name ASC";
10132
		} else {
10133
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10134
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
10135
								GROUP BY hour_name 
10136
								ORDER BY hour_name ASC";
10137
		}
10138
		
10139
		$sth = $this->db->prepare($query);
10140
		$sth->execute(array(':airport_icao' => $airport_icao,':offset' => $offset));
10141
      
10142
		$hour_array = array();
10143
		$temp_array = array();
10144
        
10145
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10146
		{
10147
			$temp_array['hour_name'] = $row['hour_name'];
10148
			$temp_array['hour_count'] = $row['hour_count'];
10149
          
10150
			$hour_array[] = $temp_array;
10151
		}
10152
10153
		return $hour_array;
10154
	}
10155
	
10156
	
10157
	
10158
	/**
10159
	* Counts all hours by manufacturer
10160
	*
10161
	* @return Array the hour list
10162
	*
10163
	*/
10164
	public function countAllHoursByManufacturer($aircraft_manufacturer,$filters =array())
10165
	{
10166
		global $globalTimezone, $globalDBdriver;
10167
		$filter_query = $this->getFilter($filters,true,true);
10168
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
10169
		if ($globalTimezone != '') {
10170
			date_default_timezone_set($globalTimezone);
10171
			$datetime = new DateTime();
10172
			$offset = $datetime->format('P');
10173
		} else $offset = '+00:00';
10174
10175
		if ($globalDBdriver == 'mysql') {
10176
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10177
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
10178
								GROUP BY hour_name 
10179
								ORDER BY hour_name ASC";
10180
		} else {
10181
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10182
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
10183
								GROUP BY hour_name 
10184
								ORDER BY hour_name ASC";
10185
		}
10186
		
10187
		$sth = $this->db->prepare($query);
10188
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer,':offset' => $offset));
10189
      
10190
		$hour_array = array();
10191
		$temp_array = array();
10192
        
10193
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10194
		{
10195
			$temp_array['hour_name'] = $row['hour_name'];
10196
			$temp_array['hour_count'] = $row['hour_count'];
10197
          
10198
			$hour_array[] = $temp_array;
10199
		}
10200
10201
		return $hour_array;
10202
	}
10203
	
10204
	
10205
	
10206
	/**
10207
	* Counts all hours by date
10208
	*
10209
	* @return Array the hour list
10210
	*
10211
	*/
10212
	public function countAllHoursByDate($date, $filters = array())
10213
	{
10214
		global $globalTimezone, $globalDBdriver;
10215
		$filter_query = $this->getFilter($filters,true,true);
10216
		$date = filter_var($date,FILTER_SANITIZE_STRING);
10217
		if ($globalTimezone != '') {
10218
			date_default_timezone_set($globalTimezone);
10219
			$datetime = new DateTime($date);
10220
			$offset = $datetime->format('P');
10221
		} else $offset = '+00:00';
10222
10223
		if ($globalDBdriver == 'mysql') {
10224
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10225
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
10226
								GROUP BY hour_name 
10227
								ORDER BY hour_name ASC";
10228
		} else {
10229
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10230
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset, 'YYYY-mm-dd') = :date
10231
								GROUP BY hour_name 
10232
								ORDER BY hour_name ASC";
10233
		}
10234
		
10235
		$sth = $this->db->prepare($query);
10236
		$sth->execute(array(':date' => $date, ':offset' => $offset));
10237
      
10238
		$hour_array = array();
10239
		$temp_array = array();
10240
        
10241
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10242
		{
10243
			$temp_array['hour_name'] = $row['hour_name'];
10244
			$temp_array['hour_count'] = $row['hour_count'];
10245
          
10246
			$hour_array[] = $temp_array;
10247
		}
10248
10249
		return $hour_array;
10250
	}
10251
	
10252
	
10253
	
10254
	/**
10255
	* Counts all hours by a ident/callsign
10256
	*
10257
	* @return Array the hour list
10258
	*
10259
	*/
10260
	public function countAllHoursByIdent($ident, $filters = array())
10261
	{
10262
		global $globalTimezone, $globalDBdriver;
10263
		$filter_query = $this->getFilter($filters,true,true);
10264
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
10265
		if ($globalTimezone != '') {
10266
			date_default_timezone_set($globalTimezone);
10267
			$datetime = new DateTime();
10268
			$offset = $datetime->format('P');
10269
		} else $offset = '+00:00';
10270
10271
		if ($globalDBdriver == 'mysql') {
10272
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10273
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
10274
								GROUP BY hour_name 
10275
								ORDER BY hour_name ASC";
10276
		} else {
10277
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10278
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
10279
								GROUP BY hour_name 
10280
								ORDER BY hour_name ASC";
10281
		}
10282
      
10283
		
10284
		$sth = $this->db->prepare($query);
10285
		$sth->execute(array(':ident' => $ident,':offset' => $offset));
10286
      
10287
		$hour_array = array();
10288
		$temp_array = array();
10289
        
10290
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10291
		{
10292
			$temp_array['hour_name'] = $row['hour_name'];
10293
			$temp_array['hour_count'] = $row['hour_count'];
10294
          
10295
			$hour_array[] = $temp_array;
10296
		}
10297
10298
		return $hour_array;
10299
	}
10300
	
10301
	/**
10302
	* Counts all hours by a owner
10303
	*
10304
	* @return Array the hour list
10305
	*
10306
	*/
10307
	public function countAllHoursByOwner($owner, $filters = array())
10308
	{
10309
		global $globalTimezone, $globalDBdriver;
10310
		$filter_query = $this->getFilter($filters,true,true);
10311
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
10312
		if ($globalTimezone != '') {
10313
			date_default_timezone_set($globalTimezone);
10314
			$datetime = new DateTime();
10315
			$offset = $datetime->format('P');
10316
		} else $offset = '+00:00';
10317
10318
		if ($globalDBdriver == 'mysql') {
10319
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10320
								FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
10321
								GROUP BY hour_name 
10322
								ORDER BY hour_name ASC";
10323
		} else {
10324
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10325
								FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
10326
								GROUP BY hour_name 
10327
								ORDER BY hour_name ASC";
10328
		}
10329
      
10330
		
10331
		$sth = $this->db->prepare($query);
10332
		$sth->execute(array(':owner' => $owner,':offset' => $offset));
10333
      
10334
		$hour_array = array();
10335
		$temp_array = array();
10336
        
10337
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10338
		{
10339
			$temp_array['hour_name'] = $row['hour_name'];
10340
			$temp_array['hour_count'] = $row['hour_count'];
10341
          
10342
			$hour_array[] = $temp_array;
10343
		}
10344
10345
		return $hour_array;
10346
	}
10347
	
10348
	/**
10349
	* Counts all hours by a pilot
10350
	*
10351
	* @return Array the hour list
10352
	*
10353
	*/
10354
	public function countAllHoursByPilot($pilot, $filters = array())
10355
	{
10356
		global $globalTimezone, $globalDBdriver;
10357
		$filter_query = $this->getFilter($filters,true,true);
10358
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
10359
		if ($globalTimezone != '') {
10360
			date_default_timezone_set($globalTimezone);
10361
			$datetime = new DateTime();
10362
			$offset = $datetime->format('P');
10363
		} else $offset = '+00:00';
10364
10365
		if ($globalDBdriver == 'mysql') {
10366
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10367
								FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
10368
								GROUP BY hour_name 
10369
								ORDER BY hour_name ASC";
10370
		} else {
10371
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10372
								FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
10373
								GROUP BY hour_name 
10374
								ORDER BY hour_name ASC";
10375
		}
10376
      
10377
		
10378
		$sth = $this->db->prepare($query);
10379
		$sth->execute(array(':pilot' => $pilot,':offset' => $offset));
10380
      
10381
		$hour_array = array();
10382
		$temp_array = array();
10383
        
10384
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10385
		{
10386
			$temp_array['hour_name'] = $row['hour_name'];
10387
			$temp_array['hour_count'] = $row['hour_count'];
10388
          
10389
			$hour_array[] = $temp_array;
10390
		}
10391
10392
		return $hour_array;
10393
	}
10394
	
10395
	
10396
	
10397
	/**
10398
	* Counts all hours by route
10399
	*
10400
	* @return Array the hour list
10401
	*
10402
	*/
10403
	public function countAllHoursByRoute($departure_airport_icao, $arrival_airport_icao, $filters =array())
10404
	{
10405
		global $globalTimezone, $globalDBdriver;
10406
		$filter_query = $this->getFilter($filters,true,true);
10407
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
10408
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
10409
		if ($globalTimezone != '') {
10410
			date_default_timezone_set($globalTimezone);
10411
			$datetime = new DateTime();
10412
			$offset = $datetime->format('P');
10413
		} else $offset = '+00:00';
10414
10415
		if ($globalDBdriver == 'mysql') {
10416
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10417
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
10418
								GROUP BY hour_name 
10419
								ORDER BY hour_name ASC";
10420
		} else {
10421
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10422
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
10423
								GROUP BY hour_name 
10424
								ORDER BY hour_name ASC";
10425
		}
10426
		
10427
		$sth = $this->db->prepare($query);
10428
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao,':offset' => $offset));
10429
      
10430
		$hour_array = array();
10431
		$temp_array = array();
10432
        
10433
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10434
		{
10435
			$temp_array['hour_name'] = $row['hour_name'];
10436
			$temp_array['hour_count'] = $row['hour_count'];
10437
          
10438
			$hour_array[] = $temp_array;
10439
		}
10440
10441
		return $hour_array;
10442
	}
10443
	
10444
	
10445
	/**
10446
	* Counts all hours by country
10447
	*
10448
	* @return Array the hour list
10449
	*
10450
	*/
10451
	public function countAllHoursByCountry($country, $filters = array())
10452
	{
10453
		global $globalTimezone, $globalDBdriver;
10454
		$filter_query = $this->getFilter($filters,true,true);
10455
		$country = filter_var($country,FILTER_SANITIZE_STRING);
10456
		if ($globalTimezone != '') {
10457
			date_default_timezone_set($globalTimezone);
10458
			$datetime = new DateTime();
10459
			$offset = $datetime->format('P');
10460
		} else $offset = '+00:00';
10461
10462
		if ($globalDBdriver == 'mysql') {
10463
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10464
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
10465
								GROUP BY hour_name 
10466
								ORDER BY hour_name ASC";
10467
		} else {
10468
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10469
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
10470
								GROUP BY hour_name 
10471
								ORDER BY hour_name ASC";
10472
		}
10473
		
10474
		$sth = $this->db->prepare($query);
10475
		$sth->execute(array(':country' => $country,':offset' => $offset));
10476
      
10477
		$hour_array = array();
10478
		$temp_array = array();
10479
        
10480
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10481
		{
10482
			$temp_array['hour_name'] = $row['hour_name'];
10483
			$temp_array['hour_count'] = $row['hour_count'];
10484
          
10485
			$hour_array[] = $temp_array;
10486
		}
10487
10488
		return $hour_array;
10489
	}
10490
10491
10492
10493
10494
	/**
10495
	* Counts all aircraft that have flown over
10496
	*
10497
	* @return Integer the number of aircrafts
10498
	*
10499
	*/
10500
	public function countOverallAircrafts($filters = array(),$year = '',$month = '')
10501
	{
10502
		global $globalDBdriver;
10503
		$filter_query = $this->getFilter($filters,true,true);
10504
		$query  = "SELECT COUNT(DISTINCT spotter_output.aircraft_icao) AS aircraft_count  
10505
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''";
10506
		$query_values = array();
10507
		if ($year != '') {
10508
			if ($globalDBdriver == 'mysql') {
10509
				$query .= " AND YEAR(spotter_output.date) = :year";
10510
				$query_values = array_merge($query_values,array(':year' => $year));
10511
			} else {
10512
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10513
				$query_values = array_merge($query_values,array(':year' => $year));
10514
			}
10515
		}
10516
		if ($month != '') {
10517
			if ($globalDBdriver == 'mysql') {
10518
				$query .= " AND MONTH(spotter_output.date) = :month";
10519
				$query_values = array_merge($query_values,array(':month' => $month));
10520
			} else {
10521
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10522
				$query_values = array_merge($query_values,array(':month' => $month));
10523
			}
10524
		}
10525
10526
		$sth = $this->db->prepare($query);
10527
		$sth->execute($query_values);
10528
		return $sth->fetchColumn();
10529
	}
10530
10531
	/**
10532
	* Counts all flight that really arrival
10533
	*
10534
	* @return Integer the number of aircrafts
10535
	*
10536
	*/
10537
	public function countOverallArrival($filters = array(),$year = '',$month = '')
10538
	{
10539
		global $globalDBdriver;
10540
		$filter_query = $this->getFilter($filters,true,true);
10541
		$query  = "SELECT COUNT(spotter_output.real_arrival_airport_icao) AS arrival_count  
10542
                    FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> ''";
10543
		$query_values = array();
10544
		if ($year != '') {
10545
			if ($globalDBdriver == 'mysql') {
10546
				$query .= " AND YEAR(spotter_output.date) = :year";
10547
				$query_values = array_merge($query_values,array(':year' => $year));
10548
			} else {
10549
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10550
				$query_values = array_merge($query_values,array(':year' => $year));
10551
			}
10552
		}
10553
		if ($month != '') {
10554
			if ($globalDBdriver == 'mysql') {
10555
				$query .= " AND MONTH(spotter_output.date) = :month";
10556
				$query_values = array_merge($query_values,array(':month' => $month));
10557
			} else {
10558
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10559
				$query_values = array_merge($query_values,array(':month' => $month));
10560
			}
10561
		}
10562
		
10563
		$sth = $this->db->prepare($query);
10564
		$sth->execute($query_values);
10565
		return $sth->fetchColumn();
10566
	}
10567
10568
	/**
10569
	* Counts all pilots that have flown over
10570
	*
10571
	* @return Integer the number of pilots
10572
	*
10573
	*/
10574
	public function countOverallPilots($filters = array(),$year = '',$month = '')
10575
	{
10576
		global $globalDBdriver;
10577
		$filter_query = $this->getFilter($filters,true,true);
10578
		$query  = "SELECT COUNT(DISTINCT spotter_output.pilot_id) AS pilot_count  
10579
                    FROM spotter_output".$filter_query." spotter_output.pilot_id <> ''";
10580
		$query_values = array();
10581
		if ($year != '') {
10582
			if ($globalDBdriver == 'mysql') {
10583
				$query .= " AND YEAR(spotter_output.date) = :year";
10584
				$query_values = array_merge($query_values,array(':year' => $year));
10585
			} else {
10586
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10587
				$query_values = array_merge($query_values,array(':year' => $year));
10588
			}
10589
		}
10590
		if ($month != '') {
10591
			if ($globalDBdriver == 'mysql') {
10592
				$query .= " AND MONTH(spotter_output.date) = :month";
10593
				$query_values = array_merge($query_values,array(':month' => $month));
10594
			} else {
10595
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10596
				$query_values = array_merge($query_values,array(':month' => $month));
10597
			}
10598
		}
10599
		$sth = $this->db->prepare($query);
10600
		$sth->execute($query_values);
10601
		return $sth->fetchColumn();
10602
	}
10603
10604
	/**
10605
	* Counts all owners that have flown over
10606
	*
10607
	* @return Integer the number of owners
10608
	*
10609
	*/
10610
	public function countOverallOwners($filters = array(),$year = '',$month = '')
10611
	{
10612
		global $globalDBdriver;
10613
		$filter_query = $this->getFilter($filters,true,true);
10614
		$query  = "SELECT COUNT(DISTINCT spotter_output.owner_name) AS owner_count  
10615
                    FROM spotter_output".$filter_query." spotter_output.owner_name <> ''";
10616
		$query_values = array();
10617
		if ($year != '') {
10618
			if ($globalDBdriver == 'mysql') {
10619
				$query .= " AND YEAR(spotter_output.date) = :year";
10620
				$query_values = array_merge($query_values,array(':year' => $year));
10621
			} else {
10622
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10623
				$query_values = array_merge($query_values,array(':year' => $year));
10624
			}
10625
		}
10626
		if ($month != '') {
10627
			if ($globalDBdriver == 'mysql') {
10628
				$query .= " AND MONTH(spotter_output.date) = :month";
10629
				$query_values = array_merge($query_values,array(':month' => $month));
10630
			} else {
10631
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10632
				$query_values = array_merge($query_values,array(':month' => $month));
10633
			}
10634
		}
10635
		$sth = $this->db->prepare($query);
10636
		$sth->execute($query_values);
10637
		return $sth->fetchColumn();
10638
	}
10639
	
10640
	
10641
	/**
10642
	* Counts all flights that have flown over
10643
	*
10644
	* @return Integer the number of flights
10645
	*
10646
	*/
10647
	public function countOverallFlights($filters = array(),$year = '',$month = '')
10648
	{
10649
		global $globalDBdriver;
10650
		$queryi  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count FROM spotter_output";
10651
		$query_values = array();
10652
		$query = '';
10653
		if ($year != '') {
10654
			if ($globalDBdriver == 'mysql') {
10655
				$query .= " AND YEAR(spotter_output.date) = :year";
10656
				$query_values = array_merge($query_values,array(':year' => $year));
10657
			} else {
10658
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10659
				$query_values = array_merge($query_values,array(':year' => $year));
10660
			}
10661
		}
10662
		if ($month != '') {
10663
			if ($globalDBdriver == 'mysql') {
10664
				$query .= " AND MONTH(spotter_output.date) = :month";
10665
				$query_values = array_merge($query_values,array(':month' => $month));
10666
			} else {
10667
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10668
				$query_values = array_merge($query_values,array(':month' => $month));
10669
			}
10670
		}
10671
		if (empty($query_values)) $queryi .= $this->getFilter($filters);
10672
		else $queryi .= $this->getFilter($filters,true,true).substr($query,4);
10673
		
10674
		//echo $query;
10675
		$sth = $this->db->prepare($queryi);
10676
		$sth->execute($query_values);
10677
		return $sth->fetchColumn();
10678
	}
10679
	
10680
	/**
10681
	* Counts all military flights that have flown over
10682
	*
10683
	* @return Integer the number of flights
10684
	*
10685
	*/
10686
	public function countOverallMilitaryFlights($filters = array(),$year = '',$month = '')
10687
	{
10688
		global $globalDBdriver;
10689
		$filter_query = $this->getFilter($filters,true,true);
10690
		$query  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count  
10691
                    FROM airlines,spotter_output".$filter_query." spotter_output.airline_icao = airlines.icao AND airlines.type = 'military'";
10692
		$query_values = array();
10693
		if ($year != '') {
10694
			if ($globalDBdriver == 'mysql') {
10695
				$query .= " AND YEAR(spotter_output.date) = :year";
10696
				$query_values = array_merge($query_values,array(':year' => $year));
10697
			} else {
10698
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10699
				$query_values = array_merge($query_values,array(':year' => $year));
10700
			}
10701
		}
10702
		if ($month != '') {
10703
			if ($globalDBdriver == 'mysql') {
10704
				$query .= " AND MONTH(spotter_output.date) = :month";
10705
				$query_values = array_merge($query_values,array(':month' => $month));
10706
			} else {
10707
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10708
				$query_values = array_merge($query_values,array(':month' => $month));
10709
			}
10710
		}
10711
      
10712
		$sth = $this->db->prepare($query);
10713
		$sth->execute($query_values);
10714
		return $sth->fetchColumn();
10715
	}
10716
	
10717
	
10718
	
10719
	/**
10720
	* Counts all airlines that have flown over
10721
	*
10722
	* @return Integer the number of airlines
10723
	*
10724
	*/
10725
	public function countOverallAirlines($filters = array(),$year = '',$month = '')
10726
	{
10727
		global $globalDBdriver;
10728
		$queryi  = "SELECT COUNT(DISTINCT spotter_output.airline_name) AS airline_count 
10729
							FROM spotter_output";
10730
      
10731
		$query_values = array();
10732
		$query = '';
10733
		if ($year != '') {
10734
			if ($globalDBdriver == 'mysql') {
10735
				$query .= " AND YEAR(spotter_output.date) = :year";
10736
				$query_values = array_merge($query_values,array(':year' => $year));
10737
			} else {
10738
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10739
				$query_values = array_merge($query_values,array(':year' => $year));
10740
			}
10741
		}
10742
		if ($month != '') {
10743
			if ($globalDBdriver == 'mysql') {
10744
				$query .= " AND MONTH(spotter_output.date) = :month";
10745
				$query_values = array_merge($query_values,array(':month' => $month));
10746
			} else {
10747
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10748
				$query_values = array_merge($query_values,array(':month' => $month));
10749
			}
10750
		}
10751
                if ($query == '') $queryi .= $this->getFilter($filters);
10752
                else $queryi .= $this->getFilter($filters,true,true).substr($query,4);
10753
10754
10755
		$sth = $this->db->prepare($queryi);
10756
		$sth->execute($query_values);
10757
		return $sth->fetchColumn();
10758
	}
10759
10760
  
10761
	/**
10762
	* Counts all hours of today
10763
	*
10764
	* @return Array the hour list
10765
	*
10766
	*/
10767
	public function countAllHoursFromToday($filters = array())
10768
	{
10769
		global $globalTimezone, $globalDBdriver;
10770
		$filter_query = $this->getFilter($filters,true,true);
10771
		if ($globalTimezone != '') {
10772
			date_default_timezone_set($globalTimezone);
10773
			$datetime = new DateTime();
10774
			$offset = $datetime->format('P');
10775
		} else $offset = '+00:00';
10776
10777
		if ($globalDBdriver == 'mysql') {
10778
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10779
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = CURDATE()
10780
								GROUP BY hour_name 
10781
								ORDER BY hour_name ASC";
10782
		} else {
10783
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10784
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = CAST(NOW() AS date)
10785
								GROUP BY hour_name 
10786
								ORDER BY hour_name ASC";
10787
		}
10788
		
10789
		$sth = $this->db->prepare($query);
10790
		$sth->execute(array(':offset' => $offset));
10791
      
10792
		$hour_array = array();
10793
		$temp_array = array();
10794
        
10795
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10796
		{
10797
			$temp_array['hour_name'] = $row['hour_name'];
10798
			$temp_array['hour_count'] = $row['hour_count'];
10799
			$hour_array[] = $temp_array;
10800
		}
10801
10802
		return $hour_array;
10803
	}
10804
    
10805
	/**
10806
	* Gets all the spotter information based on calculated upcoming flights
10807
	*
10808
	* @return Array the spotter information
10809
	*
10810
	*/
10811
	public function getUpcomingFlights($limit = '', $sort = '', $filters = array())
10812
	{
10813
		global $global_query, $globalDBdriver, $globalTimezone;
10814
		$filter_query = $this->getFilter($filters,true,true);
10815
		date_default_timezone_set('UTC');
10816
		$limit_query = '';
10817
		if ($limit != "")
10818
		{
10819
			$limit_array = explode(",", $limit);
10820
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
10821
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
10822
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
10823
			{
10824
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
10825
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
10826
			}
10827
		}
10828
		$currentHour = date("G");
10829
		$next3Hours = date("G", strtotime("+3 hour"));
10830
		//if the next 3 hours is already equal to/past midnight, we limit it to stay there, otherwise the query will fail
10831
		if ($currentHour >= 21 && $next3Hours >= 00)
10832
		{
10833
			$next3Hours = 24;
10834
		}
10835
		$currentDayofWeek = date("l");
10836
		if ($globalDBdriver == 'mysql') {
10837
			if ($sort != "")
10838
			{
10839
				$search_orderby_array = $this->getOrderBy();
10840
				$orderby_query = $search_orderby_array[$sort]['sql'];
10841
			} else {
10842
				$orderby_query = " ORDER BY HOUR(spotter_output.date) ASC";
10843
			}
10844
/*
10845
			$query = "SELECT spotter_output.*, count(spotter_output.ident) as ident_count
10846
			    FROM spotter_output
10847
			    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'
10848
			    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";
10849
*/
10850
/*			$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
10851
			    FROM spotter_output
10852
			    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'
10853
			    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";
10854
*/
10855
			$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 
10856
			    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'
10857
			    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
10858
			    HAVING count(spotter_output.ident) > 5$orderby_query";
10859
10860
			$spotter_array = $this->getDataFromDB($query.$limit_query);
10861
		} else {
10862
			if ($sort != "")
10863
			{
10864
				$search_orderby_array = $this->getOrderBy();
10865
				$orderby_query = $search_orderby_array[$sort]['sql'];
10866
			} else {
10867
				$orderby_query = " ORDER BY to_char(spotter_output.date,'HH') ASC";
10868
			}
10869
			$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') 
10870
			    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 <> '' 
10871
			    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')
10872
			    HAVING count(spotter_output.ident) > 5$orderby_query";
10873
			//echo $query;
10874
			$spotter_array = $this->getDataFromDB($query.$limit_query,array(':timezone' => $globalTimezone));
10875
			/*
10876
			$sth = $this->db->prepare($query);
10877
			$sth->execute(array(':timezone' => $globalTimezone));
10878
			return $sth->fetchAll(PDO::FETCH_ASSOC);
10879
			*/
10880
		}
10881
		return $spotter_array;
10882
	}
10883
    
10884
    
10885
     /**
10886
	* Gets the Barrie Spotter ID based on the FlightAware ID
10887
	*
10888
	* @return Integer the Barrie Spotter ID
10889
q	*
10890
	*/
10891
	public function getSpotterIDBasedOnFlightAwareID($flightaware_id)
10892
	{
10893
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
10894
10895
		$query  = "SELECT spotter_output.spotter_id
10896
								FROM spotter_output 
10897
								WHERE spotter_output.flightaware_id = '".$flightaware_id."'";
10898
        
10899
		
10900
		$sth = $this->db->prepare($query);
10901
		$sth->execute();
10902
10903
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10904
		{
10905
			return $row['spotter_id'];
10906
		}
10907
	}
10908
  
10909
 
10910
	/**
10911
	* Parses a date string
10912
	*
10913
	* @param String $dateString the date string
10914
	* @param String $timezone the timezone of a user
10915
	* @return Array the time information
10916
	*
10917
	*/
10918
	public function parseDateString($dateString, $timezone = '')
10919
	{
10920
		$time_array = array();
10921
	
10922
		if ($timezone != "")
10923
		{
10924
			date_default_timezone_set($timezone);
10925
		}
10926
		
10927
		$current_date = date("Y-m-d H:i:s");
10928
		$date = date("Y-m-d H:i:s",strtotime($dateString." UTC"));
10929
		
10930
		$diff = abs(strtotime($current_date) - strtotime($date));
10931
10932
		$time_array['years'] = floor($diff / (365*60*60*24)); 
10933
		$years = $time_array['years'];
10934
		
10935
		$time_array['months'] = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
10936
		$months = $time_array['months'];
10937
		
10938
		$time_array['days'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
10939
		$days = $time_array['days'];
10940
		$time_array['hours'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24)/ (60*60));
10941
		$hours = $time_array['hours'];
10942
		$time_array['minutes'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60)/ 60);
10943
		$minutes = $time_array['minutes'];
10944
		$time_array['seconds'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60 - $minutes*60));  
10945
		
10946
		return $time_array;	
10947
	}	
10948
	
10949
	
10950
	
10951
	
10952
	/**
10953
	* Parses the direction degrees to working
10954
	*
10955
	* @param Float $direction the direction in degrees
10956
	* @return Array the direction information
10957
	*
10958
	*/
10959
	public function parseDirection($direction = 0)
10960
	{
10961
		if ($direction == '') $direction = 0;
10962
		$direction_array = array();
10963
		$temp_array = array();
10964
10965
		if ($direction == 360 || ($direction >= 0 && $direction < 22.5))
10966
		{
10967
			$temp_array['direction_degree'] = $direction;
10968
			$temp_array['direction_shortname'] = "N";
10969
			$temp_array['direction_fullname'] = "North";
10970
		} elseif ($direction >= 22.5 && $direction < 45){
10971
			$temp_array['direction_degree'] = $direction;
10972
			$temp_array['direction_shortname'] = "NNE";
10973
			$temp_array['direction_fullname'] = "North-Northeast";
10974
		} elseif ($direction >= 45 && $direction < 67.5){
10975
			$temp_array['direction_degree'] = $direction;
10976
			$temp_array['direction_shortname'] = "NE";
10977
			$temp_array['direction_fullname'] = "Northeast";
10978
		} elseif ($direction >= 67.5 && $direction < 90){
10979
			$temp_array['direction_degree'] = $direction;
10980
			$temp_array['direction_shortname'] = "ENE";
10981
			$temp_array['direction_fullname'] = "East-Northeast";
10982
		} elseif ($direction >= 90 && $direction < 112.5){
10983
			$temp_array['direction_degree'] = $direction;
10984
			$temp_array['direction_shortname'] = "E";
10985
			$temp_array['direction_fullname'] = "East";
10986
		} elseif ($direction >= 112.5 && $direction < 135){
10987
			$temp_array['direction_degree'] = $direction;
10988
			$temp_array['direction_shortname'] = "ESE";
10989
			$temp_array['direction_fullname'] = "East-Southeast";
10990
		} elseif ($direction >= 135 && $direction < 157.5){
10991
			$temp_array['direction_degree'] = $direction;
10992
			$temp_array['direction_shortname'] = "SE";
10993
			$temp_array['direction_fullname'] = "Southeast";
10994
		} elseif ($direction >= 157.5 && $direction < 180){
10995
			$temp_array['direction_degree'] = $direction;
10996
			$temp_array['direction_shortname'] = "SSE";
10997
			$temp_array['direction_fullname'] = "South-Southeast";
10998
		} elseif ($direction >= 180 && $direction < 202.5){
10999
			$temp_array['direction_degree'] = $direction;
11000
			$temp_array['direction_shortname'] = "S";
11001
			$temp_array['direction_fullname'] = "South";
11002
		} elseif ($direction >= 202.5 && $direction < 225){
11003
			$temp_array['direction_degree'] = $direction;
11004
			$temp_array['direction_shortname'] = "SSW";
11005
			$temp_array['direction_fullname'] = "South-Southwest";
11006
		} elseif ($direction >= 225 && $direction < 247.5){
11007
			$temp_array['direction_degree'] = $direction;
11008
			$temp_array['direction_shortname'] = "SW";
11009
			$temp_array['direction_fullname'] = "Southwest";
11010
		} elseif ($direction >= 247.5 && $direction < 270){
11011
			$temp_array['direction_degree'] = $direction;
11012
			$temp_array['direction_shortname'] = "WSW";
11013
			$temp_array['direction_fullname'] = "West-Southwest";
11014
		} elseif ($direction >= 270 && $direction < 292.5){
11015
			$temp_array['direction_degree'] = $direction;
11016
			$temp_array['direction_shortname'] = "W";
11017
			$temp_array['direction_fullname'] = "West";
11018
		} elseif ($direction >= 292.5 && $direction < 315){
11019
			$temp_array['direction_degree'] = $direction;
11020
			$temp_array['direction_shortname'] = "WNW";
11021
			$temp_array['direction_fullname'] = "West-Northwest";
11022
		} elseif ($direction >= 315 && $direction < 337.5){
11023
			$temp_array['direction_degree'] = $direction;
11024
			$temp_array['direction_shortname'] = "NW";
11025
			$temp_array['direction_fullname'] = "Northwest";
11026
		} elseif ($direction >= 337.5 && $direction < 360){
11027
			$temp_array['direction_degree'] = $direction;
11028
			$temp_array['direction_shortname'] = "NNW";
11029
			$temp_array['direction_fullname'] = "North-Northwest";
11030
		}
11031
		$direction_array[] = $temp_array;
11032
		return $direction_array;
11033
	}
11034
	
11035
	
11036
	/**
11037
	* Gets the aircraft registration
11038
	*
11039
	* @param String $flightaware_id the flight aware id
11040
	* @return String the aircraft registration
11041
	*
11042
	*/
11043
	
11044
	public function getAircraftRegistration($flightaware_id)
11045
	{
11046
		global $globalFlightAwareUsername, $globalFlightAwarePassword;
11047
        
11048
		$options = array(
11049
			'trace' => true,
11050
			'exceptions' => 0,
11051
			'login' => $globalFlightAwareUsername,
11052
			'password' => $globalFlightAwarePassword,
11053
		);
11054
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
11055
		
11056
		$params = array('faFlightID' => $flightaware_id);
11057
		$result = $client->AirlineFlightInfo($params);
11058
		
11059
		if (isset($result->AirlineFlightInfoResult))
11060
		{
11061
			$registration = $result->AirlineFlightInfoResult->tailnumber;
11062
		} else return '';
11063
		
11064
		$registration = $this->convertAircraftRegistration($registration);
11065
		
11066
		return $registration;
11067
	}
11068
11069
11070
	/**
11071
	* Gets the aircraft registration from ModeS
11072
	*
11073
	* @param String $aircraft_modes the flight ModeS in hex
11074
	* @return String the aircraft registration
11075
	*
11076
	*/
11077
	public function getAircraftRegistrationBymodeS($aircraft_modes)
11078
	{
11079
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
11080
	
11081
		$query  = "SELECT aircraft_modes.Registration FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes ORDER BY FirstCreated DESC LIMIT 1";
11082
		
11083
		$sth = $this->db->prepare($query);
11084
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
11085
    
11086
		$row = $sth->fetch(PDO::FETCH_ASSOC);
11087
		$sth->closeCursor();
11088
		if (count($row) > 0) {
11089
		    //return $row['Registration'];
11090
		    return $row['registration'];
11091
		} else return '';
11092
	
11093
	}
11094
11095
	/**
11096
	* Gets the aircraft type from ModeS
11097
	*
11098
	* @param String $aircraft_modes the flight ModeS in hex
11099
	* @return String the aircraft type
11100
	*
11101
	*/
11102
	public function getAircraftTypeBymodeS($aircraft_modes)
11103
	{
11104
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
11105
	
11106
		$query  = "SELECT aircraft_modes.type_flight FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes ORDER BY FirstCreated DESC LIMIT 1";
11107
		
11108
		$sth = $this->db->prepare($query);
11109
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
11110
    
11111
		$row = $sth->fetch(PDO::FETCH_ASSOC);
11112
		$sth->closeCursor();
11113
		if (count($row) > 0) {
11114
		    if ($row['type_flight'] == null) return '';
11115
		    else return $row['type_flight'];
11116
		} else return '';
11117
	
11118
	}
11119
11120
	/**
11121
	* Gets Country from latitude/longitude
11122
	*
11123
	* @param Float $latitude latitute of the flight
11124
	* @param Float $longitude longitute of the flight
11125
	* @return String the countrie
11126
	*/
11127
	public function getCountryFromLatitudeLongitude($latitude,$longitude)
11128
	{
11129
		global $globalDBdriver, $globalDebug;
11130
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
11131
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
11132
	
11133
		$Connection = new Connection($this->db);
11134
		if (!$Connection->tableExists('countries')) return '';
11135
	
11136
		try {
11137
			/*
11138
			if ($globalDBdriver == 'mysql') {
11139
				//$query  = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(:latitude :longitude)'), ogc_geom) LIMIT 1";
11140
				$query = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(".$longitude.' '.$latitude.")'), ogc_geom) LIMIT 1";
11141
			}
11142
			*/
11143
			// This query seems to work both for MariaDB and PostgreSQL
11144
			$query = "SELECT name,iso2,iso3 FROM countries WHERE ST_Within(ST_GeomFromText('POINT(".$longitude." ".$latitude.")',4326), ogc_geom) LIMIT 1";
11145
		
11146
			$sth = $this->db->prepare($query);
11147
			//$sth->execute(array(':latitude' => $latitude,':longitude' => $longitude));
11148
			$sth->execute();
11149
    
11150
			$row = $sth->fetch(PDO::FETCH_ASSOC);
11151
			$sth->closeCursor();
11152
			if (count($row) > 0) {
11153
				return $row;
11154
			} else return '';
11155
		} catch (PDOException $e) {
11156
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
11157
			return '';
11158
		}
11159
	
11160
	}
11161
11162
	/**
11163
	* Gets Country from iso2
11164
	*
11165
	* @param String $iso2 ISO2 country code
11166
	* @return String the countrie
11167
	*/
11168
	public function getCountryFromISO2($iso2)
11169
	{
11170
		global $globalDBdriver, $globalDebug;
11171
		$iso2 = filter_var($iso2,FILTER_SANITIZE_STRING);
11172
	
11173
		$Connection = new Connection($this->db);
11174
		if (!$Connection->tableExists('countries')) return '';
11175
	
11176
		try {
11177
			$query = "SELECT name,iso2,iso3 FROM countries WHERE iso2 = :iso2 LIMIT 1";
11178
		
11179
			$sth = $this->db->prepare($query);
11180
			$sth->execute(array(':iso2' => $iso2));
11181
    
11182
			$row = $sth->fetch(PDO::FETCH_ASSOC);
11183
			$sth->closeCursor();
11184
			if (count($row) > 0) {
11185
				return $row;
11186
			} else return '';
11187
		} catch (PDOException $e) {
11188
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
11189
			return '';
11190
		}
11191
	
11192
	}
11193
11194
	/**
11195
	* converts the registration code using the country prefix
11196
	*
11197
	* @param String $registration the aircraft registration
11198
	* @return String the aircraft registration
11199
	*
11200
	*/
11201
	public function convertAircraftRegistration($registration)
11202
	{
11203
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11204
		$registration_prefix = '';
11205
		$registration_1 = substr($registration, 0, 1);
11206
		$registration_2 = substr($registration, 0, 2);
11207
11208
		//first get the prefix based on two characters
11209
		$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_2";
11210
      
11211
		
11212
		$sth = $this->db->prepare($query);
11213
		$sth->execute(array(':registration_2' => $registration_2));
11214
        
11215
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11216
		{
11217
			$registration_prefix = $row['registration_prefix'];
11218
		}
11219
11220
		//if we didn't find a two chracter prefix lets just search the one with one character
11221
		if ($registration_prefix == '')
11222
		{
11223
			$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_1";
11224
			$sth = $this->db->prepare($query);
11225
			$sth->execute(array(':registration_1' => $registration_1));
11226
	        
11227
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11228
			{
11229
				$registration_prefix = $row['registration_prefix'];
11230
			}
11231
		}
11232
11233
		//determine which characters are being used and convert the registration code appropiately
11234
		if (strlen($registration_prefix) == 1)
11235
		{
11236
			if (0 === strpos($registration, 'N')) {
11237
				$registration = preg_replace("/^(.{1})/", "$1", $registration);
11238
			} else {
11239
				$registration = preg_replace("/^(.{1})/", "$1-", $registration);
11240
			}
11241
		} else if(strlen($registration_prefix) == 2){
11242
			if (0 === strpos($registration, 'N')) {
11243
				$registration = preg_replace("/^(.{2})/", "$1", $registration);
11244
			} else {
11245
				$registration = preg_replace("/^(.{2})/", "$1-", $registration);
11246
			}
11247
		}
11248
		return $registration;
11249
	}
11250
11251
	/**
11252
	* Country from the registration code
11253
	*
11254
	* @param String $registration the aircraft registration
11255
	* @return String the country
11256
	*
11257
	*/
11258
	public function countryFromAircraftRegistration($registration)
11259
	{
11260
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11261
		
11262
		$registration_prefix = '';
11263
		$registration_test = explode('-',$registration);
11264
		$country = '';
11265
		if ($registration_test[0] != $registration) {
11266
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11267
	      
11268
			$sth = $this->db->prepare($query);
11269
			$sth->execute(array(':registration_1' => $registration_test[0]));
11270
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11271
			{
11272
				//$registration_prefix = $row['registration_prefix'];
11273
				$country = $row['country'];
11274
			}
11275
		} else {
11276
    			$registration_1 = substr($registration, 0, 1);
11277
		        $registration_2 = substr($registration, 0, 2);
11278
11279
			$country = '';
11280
			//first get the prefix based on two characters
11281
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
11282
      
11283
			
11284
			$sth = $this->db->prepare($query);
11285
			$sth->execute(array(':registration_2' => $registration_2));
11286
        
11287
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11288
			{
11289
				$registration_prefix = $row['registration_prefix'];
11290
				$country = $row['country'];
11291
			}
11292
11293
			//if we didn't find a two chracter prefix lets just search the one with one character
11294
			if ($registration_prefix == "")
11295
			{
11296
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11297
	      
11298
				$sth = $this->db->prepare($query);
11299
				$sth->execute(array(':registration_1' => $registration_1));
11300
	        
11301
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
11302
				{
11303
					//$registration_prefix = $row['registration_prefix'];
11304
					$country = $row['country'];
11305
				}
11306
			}
11307
		}
11308
    
11309
		return $country;
11310
	}
11311
11312
	/**
11313
	* Registration prefix from the registration code
11314
	*
11315
	* @param String $registration the aircraft registration
11316
	* @return String the registration prefix
11317
	*
11318
	*/
11319
	public function registrationPrefixFromAircraftRegistration($registration)
11320
	{
11321
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11322
		
11323
		$registration_prefix = '';
11324
		$registration_test = explode('-',$registration);
11325
		//$country = '';
11326
		if ($registration_test[0] != $registration) {
11327
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11328
	      
11329
			$sth = $this->db->prepare($query);
11330
			$sth->execute(array(':registration_1' => $registration_test[0]));
11331
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11332
			{
11333
				$registration_prefix = $row['registration_prefix'];
11334
				//$country = $row['country'];
11335
			}
11336
		} else {
11337
    			$registration_1 = substr($registration, 0, 1);
11338
		        $registration_2 = substr($registration, 0, 2);
11339
11340
			//first get the prefix based on two characters
11341
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
11342
      
11343
			
11344
			$sth = $this->db->prepare($query);
11345
			$sth->execute(array(':registration_2' => $registration_2));
11346
        
11347
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11348
			{
11349
				$registration_prefix = $row['registration_prefix'];
11350
				//$country = $row['country'];
11351
			}
11352
11353
			//if we didn't find a two chracter prefix lets just search the one with one character
11354
			if ($registration_prefix == "")
11355
			{
11356
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11357
	      
11358
				$sth = $this->db->prepare($query);
11359
				$sth->execute(array(':registration_1' => $registration_1));
11360
	        
11361
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
11362
				{
11363
					$registration_prefix = $row['registration_prefix'];
11364
					//$country = $row['country'];
11365
				}
11366
			}
11367
		}
11368
    
11369
		return $registration_prefix;
11370
	}
11371
11372
11373
	/**
11374
	* Country from the registration code
11375
	*
11376
	* @param String $registration the aircraft registration
11377
	* @return String the country
11378
	*
11379
	*/
11380
	public function countryFromAircraftRegistrationCode($registration)
11381
	{
11382
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11383
		
11384
		$country = '';
11385
		$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration LIMIT 1";
11386
		$sth = $this->db->prepare($query);
11387
		$sth->execute(array(':registration' => $registration));
11388
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11389
		{
11390
			$country = $row['country'];
11391
		}
11392
		return $country;
11393
	}
11394
	
11395
	/**
11396
	* Set a new highlight value for a flight
11397
	*
11398
	* @param String $flightaware_id flightaware_id from spotter_output table
11399
	* @param String $highlight New highlight value
11400
	*/
11401
	public function setHighlightFlight($flightaware_id,$highlight) {
11402
		
11403
		$query  = "UPDATE spotter_output SET highlight = :highlight WHERE flightaware_id = :flightaware_id";
11404
		$sth = $this->db->prepare($query);
11405
		$sth->execute(array(':flightaware_id' => $flightaware_id, ':highlight' => $highlight));
11406
	}
11407
11408
	/**
11409
	* Set a new highlight value for a flight by Registration
11410
	*
11411
	* @param String $registration Registration of the aircraft
11412
	* @param String $date Date of spotted aircraft
11413
	* @param String $highlight New highlight value
11414
	*/
11415
	public function setHighlightFlightByRegistration($registration,$highlight, $date = '') {
11416
		if ($date == '') {
11417
			$query  = "UPDATE spotter_output SET highlight = :highlight WHERE spotter_id IN (SELECT MAX(spotter_id) FROM spotter_output WHERE registration = :registration)";
11418
			$query_values = array(':registration' => $registration, ':highlight' => $highlight);
11419
		} else {
11420
			$query  = "UPDATE spotter_output SET highlight = :highlight WHERE registration = :registration AND date(date) = :date";
11421
			$query_values = array(':registration' => $registration, ':highlight' => $highlight,':date' => $date);
11422
		}
11423
		$sth = $this->db->prepare($query);
11424
		$sth->execute($query_values);
11425
	}
11426
	
11427
	/**
11428
	* Gets the short url from bit.ly
11429
	*
11430
	* @param String $url the full url
11431
	* @return String the bit.ly url
11432
	*
11433
	*/
11434
	public function getBitlyURL($url)
11435
	{
11436
		global $globalBitlyAccessToken;
11437
		
11438
		if ($globalBitlyAccessToken == '') return $url;
11439
        
11440
		$google_url = 'https://api-ssl.bitly.com/v3/shorten?access_token='.$globalBitlyAccessToken.'&longUrl='.$url;
11441
		
11442
		$ch = curl_init();
11443
		curl_setopt($ch, CURLOPT_HEADER, 0);
11444
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
11445
		curl_setopt($ch, CURLOPT_URL, $google_url);
11446
		$bitly_data = curl_exec($ch);
11447
		curl_close($ch);
11448
		
11449
		$bitly_data = json_decode($bitly_data);
11450
		$bitly_url = '';
11451
		if ($bitly_data->status_txt = "OK"){
11452
			$bitly_url = $bitly_data->data->url;
11453
		}
11454
11455
		return $bitly_url;
11456
	}
11457
11458
11459
	public function getOrderBy()
11460
	{
11461
		$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"));
11462
		
11463
		return $orderby;
11464
		
11465
	}
11466
    
11467
/*
11468
	public function importFromFlightAware()
11469
	{
11470
		global $globalFlightAwareUsername, $globalFlightAwarePassword, $globalLatitudeMax, $globalLatitudeMin, $globalLongitudeMax, $globalLongitudeMin, $globalAirportIgnore;
11471
		$Spotter = new Spotter($this->db);
11472
		$SpotterLive = new SpotterLive($this->db);
11473
		$options = array(
11474
		            'trace' => true,
11475
		            'exceptions' => 0,
11476
		            'login' => $globalFlightAwareUsername,
11477
		            'password' => $globalFlightAwarePassword,
11478
		);
11479
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
11480
		$params = array('query' => '{range lat '.$globalLatitudeMin.' '.$globalLatitudeMax.'} {range lon '.$globalLongitudeMax.' '.$globalLongitudeMin.'} {true inAir}', 'howMany' => '15', 'offset' => '0');
11481
		$result = $client->SearchBirdseyeInFlight($params);
11482
		$dataFound = false;
11483
		$ignoreImport = false;
11484
		if (isset($result->SearchBirdseyeInFlightResult))
11485
		{
11486
			if (is_array($result->SearchBirdseyeInFlightResult->aircraft))
11487
			{
11488
				foreach($result->SearchBirdseyeInFlightResult->aircraft as $aircraft)
11489
				{
11490
					if (!strstr($aircraft->origin, 'L ') && !strstr($aircraft->destination, 'L '))
11491
					{
11492
						foreach($globalAirportIgnore as $airportIgnore)
11493
						{
11494
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
11495
							{
11496
								$ignoreImport = true; 
11497
							}
11498
						}
11499
						if ($ignoreImport == false)
11500
						{
11501
							$flightaware_id = $aircraft->faFlightID;
11502
							$ident = $aircraft->ident;
11503
							$aircraft_type = $aircraft->type;
11504
							$departure_airport = $aircraft->origin;
11505
							$arrival_airport = $aircraft->destination;
11506
							$latitude = $aircraft->latitude;
11507
							$longitude = $aircraft->longitude;
11508
							$waypoints = $aircraft->waypoints;
11509
							$altitude = $aircraft->altitude;
11510
							$heading = $aircraft->heading;
11511
							$groundspeed = $aircraft->groundspeed;
11512
							$dataFound = true;
11513
							//gets the callsign from the last hour
11514
							$last_hour_ident = $this->getIdentFromLastHour($ident);
11515
							//change the departure/arrival airport to NA if its not available
11516
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
11517
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
11518
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
11519
							if($last_hour_ident == "")
11520
							{
11521
								//adds the spotter data for the archive
11522
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11523
							}
11524
11525
							//adds the spotter LIVE data
11526
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11527
						}
11528
					}
11529
					$ignoreImport = false;
11530
				}
11531
			} else {
11532
				if (!strstr($result->SearchBirdseyeInFlightResult->aircraft->origin, 'L ') && !strstr($result->SearchBirdseyeInFlightResult->aircraft->destination, 'L '))
11533
				{
11534
					foreach($globalAirportIgnore as $airportIgnore)
11535
					{
11536
						foreach($globalAirportIgnore as $airportIgnore)
11537
						{
11538
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
11539
							{
11540
								$ignoreImport = true; 
11541
							}
11542
						}
11543
						if ($ignoreImport == false)
11544
						{
11545
							$flightaware_id = $result->SearchBirdseyeInFlightResult->aircraft->faFlightID;
11546
							$ident = $result->SearchBirdseyeInFlightResult->aircraft->ident;
11547
							$aircraft_type = $result->SearchBirdseyeInFlightResult->aircraft->type;
11548
							$departure_airport = $result->SearchBirdseyeInFlightResult->aircraft->origin;
11549
							$arrival_airport = $result->SearchBirdseyeInFlightResult->aircraft->destination;
11550
							$latitude = $result->SearchBirdseyeInFlightResult->aircraft->latitude;
11551
							$longitude = $result->SearchBirdseyeInFlightResult->aircraft->longitude;
11552
							$waypoints = $result->SearchBirdseyeInFlightResult->aircraft->waypoints;
11553
							$altitude = $result->SearchBirdseyeInFlightResult->aircraft->altitude;
11554
							$heading = $result->SearchBirdseyeInFlightResult->aircraft->heading;
11555
							$groundspeed = $result->SearchBirdseyeInFlightResult->aircraft->groundspeed;
11556
							$dataFound = true;
11557
							//gets the callsign from the last hour
11558
							$last_hour_ident = $this->getIdentFromLastHour($ident);
11559
							//change the departure/arrival airport to NA if its not available
11560
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
11561
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
11562
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
11563
							if($last_hour_ident == "")
11564
							{
11565
								//adds the spotter data for the archive
11566
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11567
							}
11568
							//adds the spotter LIVE data
11569
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11570
						}
11571
						$ignoreImport = false;
11572
					}
11573
				}
11574
			}
11575
		} 
11576
	}
11577
*/
11578
11579
	// Update flights data when new data in DB
11580
	public function updateFieldsFromOtherTables()
11581
	{
11582
		global $globalDebug, $globalDBdriver;
11583
		$Image = new Image($this->db);
11584
		
11585
11586
		// routes
11587
		if ($globalDebug) print "Routes...\n";
11588
		if ($globalDBdriver == 'mysql') {
11589
			$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)";
11590
		} else {
11591
			$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'";
11592
		}
11593
		$sth = $this->db->prepare($query);
11594
		$sth->execute();
11595
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11596
		{
11597
			$departure_airport_array = $this->getAllAirportInfo($row['fromairport_icao']);
11598
			$arrival_airport_array = $this->getAllAirportInfo($row['toairport_icao']);
11599
			if (count($departure_airport_array) > 0 && count($arrival_airport_array) > 0) {
11600
				$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";
11601
				$sthu = $this->db->prepare($update_query);
11602
				$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']));
11603
			}
11604
		}
11605
		
11606
		if ($globalDebug) print "Airlines...\n";
11607
		//airlines
11608
		if ($globalDBdriver == 'mysql') {
11609
			$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)";
11610
		} elseif ($globalDBdriver == 'pgsql') {
11611
			$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'";
11612
		}
11613
		$sth = $this->db->prepare($query);
11614
		$sth->execute();
11615
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11616
		{
11617
			if (is_numeric(substr($row['ident'], -1, 1)))
11618
			{
11619
				$fromsource = NULL;
11620
				if (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
11621
				elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
11622
				elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
11623
				elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
11624
				$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
11625
				if (isset($airline_array[0]['name'])) {
11626
					$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";
11627
					$sthu = $this->db->prepare($update_query);
11628
					$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']));
11629
				}
11630
			}
11631
		}
11632
11633
		if ($globalDebug) print "Remove Duplicate in aircraft_modes...\n";
11634
		//duplicate modes
11635
		$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";
11636
		$sth = $this->db->prepare($query);
11637
		$sth->execute();
11638
		
11639
		if ($globalDebug) print "Aircraft...\n";
11640
		//aircraft
11641
		if ($globalDBdriver == 'mysql') {
11642
			$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)";
11643
		} elseif ($globalDBdriver == 'pgsql') {
11644
			$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'";
11645
		}
11646
		$sth = $this->db->prepare($query);
11647
		$sth->execute();
11648
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11649
		{
11650
			if ($row['aircraft_icao'] != '') {
11651
				$aircraft_name = $this->getAllAircraftInfo($row['aircraft_icao']);
11652
				if ($row['registration'] != ""){
11653
					$image_array = $Image->getSpotterImage($row['registration']);
11654
					if (!isset($image_array[0]['registration'])) {
11655
						$Image->addSpotterImage($row['registration']);
11656
					}
11657
				}
11658
				if (count($aircraft_name) > 0) {
11659
					$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";
11660
					$sthu = $this->db->prepare($update_query);
11661
					$sthu->execute(array(':aircraft_name' => $aircraft_name[0]['type'], ':aircraft_manufacturer' => $aircraft_name[0]['manufacturer'], ':spotter_id' => $row['spotter_id']));
11662
				}
11663
			}
11664
		}
11665
	}	
11666
11667
	// Update arrival airports for data already in DB
11668
	public function updateArrivalAirports()
11669
	{
11670
		global $globalDebug, $globalDBdriver, $globalClosestMinDist;
11671
		$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";
11672
		$sth = $this->db->prepare($query);
11673
		$sth->execute();
11674
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11675
		{
11676
			if ($row['last_latitude'] != '' && $row['last_longitude'] != '') {
11677
				$closestAirports = $this->closestAirports($row['last_latitude'],$row['last_longitude'],$globalClosestMinDist);
11678
				$airport_icao = '';
11679
				 if (isset($closestAirports[0])) {
11680
					if ($row['arrival_airport_icao'] == $closestAirports[0]['icao']) {
11681
						$airport_icao = $closestAirports[0]['icao'];
11682
						if ($globalDebug) echo "\o/ 1st ---++ Find arrival airport. airport_icao : ".$airport_icao."\n";
11683
					} elseif (count($closestAirports > 1) && $row['arrival_airport_icao'] != '' && $row['arrival_airport_icao'] != 'NA') {
11684
						foreach ($closestAirports as $airport) {
11685
							if ($row['arrival_airport_icao'] == $airport['icao']) {
11686
								$airport_icao = $airport['icao'];
11687
								if ($globalDebug) echo "\o/ try --++ Find arrival airport. airport_icao : ".$airport_icao."\n";
11688
								break;
11689
							}
11690
						}
11691
					} elseif ($row['last_altitude'] == 0 || ($row['last_altitude'] != '' && ($closestAirports[0]['altitude'] <= $row['last_altitude']*100+1000 && $row['last_altitude']*100 < $closestAirports[0]['altitude']+5000))) {
11692
						$airport_icao = $closestAirports[0]['icao'];
11693
						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";
11694
					} else {
11695
						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";
11696
					}
11697
				} else {
11698
					if ($globalDebug) echo "----- No Airport near last coord. Latitude : ".$row['last_latitude'].' - Longitude : '.$row['last_longitude'].' - MinDist : '.$globalClosestMinDist."\n";
11699
				}
11700
				if ($row['real_arrival_airport_icao'] != $airport_icao) {
11701
					if ($globalDebug) echo "Updating airport to ".$airport_icao."...\n";
11702
					$update_query="UPDATE spotter_output SET real_arrival_airport_icao = :airport_icao WHERE spotter_id = :spotter_id";
11703
					$sthu = $this->db->prepare($update_query);
11704
					$sthu->execute(array(':airport_icao' => $airport_icao,':spotter_id' => $row['spotter_id']));
11705
				}
11706
			}
11707
		}
11708
	}
11709
	
11710
	public function closestAirports($origLat,$origLon,$dist = 10) {
11711
		global $globalDBdriver;
11712
		$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
11713
/*
11714
		$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 
11715
                      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)) 
11716
                      having distance < $dist ORDER BY distance limit 100;";
11717
*/
11718
		if ($globalDBdriver == 'mysql') {
11719
			$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 
11720
	                      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)) 
11721
	                      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;";
11722
                } else {
11723
			$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 
11724
	                      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)) 
11725
	                      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;";
11726
    		}
11727
		$sth = $this->db->prepare($query);
11728
		$sth->execute();
11729
		return $sth->fetchAll(PDO::FETCH_ASSOC);
11730
	}
11731
}
11732
/*
11733
$Spotter = new Spotter();
11734
print_r($Spotter->closestAirports('-19.9813','-47.8286',10));
11735
*/
11736
/*
11737
$Spotter = new Spotter();
11738
$da = $Spotter->countAllDetectedArrivalAirports(true,0,'',true);
11739
$aa = $Spotter->countAllArrivalAirports(true,0,'',true);
11740
print_r($da);
11741
print_r($aa);
11742
print_r(array_merge($da,$aa));
11743
*/
11744
?>