Completed
Push — master ( aa3dba...029a3f )
by Yannick
07:55
created

Spotter::countAllAircraftRegistrationByOwner()   C

Complexity

Conditions 10
Paths 108

Size

Total Lines 67
Code Lines 48

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 10
eloc 48
nc 108
nop 5
dl 0
loc 67
rs 5.9839
c 0
b 0
f 0

How to fix   Long Method    Complexity   

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:

1
<?php
2
require_once(dirname(__FILE__).'/class.Scheduler.php');
3
require_once(dirname(__FILE__).'/class.ACARS.php');
4
require_once(dirname(__FILE__).'/class.Image.php');
5
$global_query = "SELECT spotter_output.* FROM spotter_output";
6
7
class Spotter{
8
	public $aircraft_correct_icaotype = array('CL64' => 'CL60',
9
					'F9LX' => 'F900',
10
					'K35T' => 'K35R',
11
					'F5EX' => 'FA50',
12
					'G102' => 'GLID',
13
					'LJ36' => 'LJ35',
14
					'G500' => 'EGRT',
15
					'A300' => 'A30B',
16
					'ROT' => 'B77W',
17
					'BPN' => 'B772',
18
					'0011' => 'B77W',
19
					'F9DX' => 'F900',
20
					'B757' => 'B752',
21
					'4/05' => 'A332',
22
					'F/A3' => 'A320',
23
					'F2EX' => 'F2TH',
24
					'EA55' => 'EA50',
25
					'B73B' => 'B737',
26
					'G450' => 'GLF4',
27
					'H25X' => 'H25B',
28
					'E175' => 'E75S',
29
					'B777' => 'B77W',
30
					'F2LX' => 'F2TH',
31
					'CL65' => 'CL60',
32
					'A380' => 'A388',
33
					'G550' => 'GLF5',
34
					'F9EX' => 'F900',
35
					'E195' => 'E190',
36
					'H750' => 'H25B',
37
					'B747' => 'B744',
38
					'B767' => 'B763',
39
					'PA39' => 'PA30',
40
					'H900' => 'H25B',
41
					'AN74' => 'AN72',
42
					'CL85' => 'CRJ2',
43
					'G400' => 'GLF4',
44
					'CL61' => 'CL60',
45
					'F2TS' => 'F2TH',
46
					'Z602' => 'CH60',
47
					'G100' => 'ASTR');
48
49
50
	public $db;
51
	
52
	public function __construct($dbc = null) {
53
		$Connection = new Connection($dbc);
54
		$this->db = $Connection->db();
55
	}
56
57
	/**
58
	* Get SQL query part for filter used
59
	* @param Array $filter the filter
60
	* @return Array the SQL part
61
	*/
62
	public function getFilter($filter = array(),$where = false,$and = false) {
63
		global $globalFilter, $globalStatsFilters, $globalFilterName, $globalDBdriver;
64
		$filters = array();
65
		if (is_array($globalStatsFilters) && isset($globalStatsFilters[$globalFilterName])) {
66
			if (isset($globalStatsFilters[$globalFilterName][0]['source'])) {
67
				$filters = $globalStatsFilters[$globalFilterName];
68
			} else {
69
				$filter = array_merge($filter,$globalStatsFilters[$globalFilterName]);
70
			}
71
		}
72
		if (is_array($globalFilter)) $filter = array_merge($filter,$globalFilter);
73
		$filter_query_join = '';
74
		$filter_query_where = '';
75
		foreach($filters as $flt) {
76
			if (isset($flt['airlines']) && !empty($flt['airlines'])) {
77
				if ($flt['airlines'][0] != '') {
78
					if (isset($flt['source'])) {
79
						$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_icao IN ('".implode("','",$flt['airlines'])."') AND spotter_output.format_source IN ('".implode("','",$flt['source'])."')) 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 .= " AND format_source IN ('".implode("','",$filter['source'])."')";
114
		}
115
		if (isset($filter['ident']) && !empty($filter['ident'])) {
116
			$filter_query_where .= " AND ident = '".$filter['ident']."'";
117
		}
118
		if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
119
			$filter_query_where .= " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
120
		}
121
		if (isset($filter['year']) && $filter['year'] != '') {
122
			if ($globalDBdriver == 'mysql') {
123
				$filter_query_where .= " AND YEAR(spotter_output.date) = '".$filter['year']."'";
124
			} else {
125
				$filter_query_where .= " AND EXTRACT(YEAR FROM spotter_output.date) = '".$filter['year']."'";
126
			}
127
		}
128
		if (isset($filter['month']) && $filter['month'] != '') {
129
			if ($globalDBdriver == 'mysql') {
130
				$filter_query_where .= " AND MONTH(spotter_output.date) = '".$filter['month']."'";
131
			} else {
132
				$filter_query_where .= " AND EXTRACT(MONTH FROM spotter_output.date) = '".$filter['month']."'";
133
			}
134
		}
135
		if (isset($filter['day']) && $filter['day'] != '') {
136
			if ($globalDBdriver == 'mysql') {
137
				$filter_query_where .= " AND DAY(spotter_output.date) = '".$filter['day']."'";
138
			} else {
139
				$filter_query_where .= " AND EXTRACT(DAY FROM spotter_output.date) = '".$filter['day']."'";
140
			}
141
		}
142
		if ($filter_query_where == '' && $where) $filter_query_where = ' WHERE';
143
		elseif ($filter_query_where != '' && $and) $filter_query_where .= ' AND';
144
		if ($filter_query_where != '') {
145
			$filter_query_where = preg_replace('/^ AND/',' WHERE',$filter_query_where);
146
		}
147
		$filter_query = $filter_query_join.$filter_query_where;
148
		return $filter_query;
149
	}
150
151
	/**
152
	* Executes the SQL statements to get the spotter information
153
	*
154
	* @param String $query the SQL query
155
	* @param Array $params parameter of the query
156
	* @param String $limitQuery the limit query
157
	* @return Array the spotter information
158
	*
159
	*/
160
	public function getDataFromDB($query, $params = array(), $limitQuery = '',$schedules = false)
161
	{
162
		global $globalSquawkCountry, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalAirlinesSource, $globalVAM;
163
		$Image = new Image($this->db);
164
		$Schedule = new Schedule($this->db);
165
		$ACARS = new ACARS($this->db);
166
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
167
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
168
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
169
		if (!isset($globalVAM)) $globalVAM = FALSE;
170
		date_default_timezone_set('UTC');
171
		
172
		if (!is_string($query))
173
		{
174
			return false;
175
		}
176
		
177
		if ($limitQuery != "")
178
		{
179
			if (!is_string($limitQuery))
180
			{
181
				return false;
182
			}
183
		}
184
185
		
186
		try {
187
			$sth = $this->db->prepare($query.$limitQuery);
188
			$sth->execute($params);
189
		} catch (PDOException $e) {
190
			printf("Invalid query : %s\nWhole query: %s\n",$e->getMessage(), $query.$limitQuery);
191
			exit();
192
		}
193
		
194
	//	$num_rows = count($sth->fetchAll());
195
		$num_rows = 0;
196
197
		$spotter_array = array();
198
		
199
200
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
201
		{
202
			$num_rows++;
203
			$temp_array = array();
204
			if (isset($row['spotter_live_id'])) {
205
				//$temp_array['spotter_id'] = $row['spotter_live_id'];
206
				$temp_array['spotter_id'] = $this->getSpotterIDBasedOnFlightAwareID($row['flightaware_id']);
207
			} elseif (isset($row['spotter_archive_id'])) {
208
				$temp_array['spotter_id'] = $row['spotter_archive_id'];
209
			} elseif (isset($row['spotter_archive_output_id'])) {
210
				$temp_array['spotter_id'] = $row['spotter_archive_output_id'];
211
			} elseif (isset($row['spotter_id'])) {
212
				$temp_array['spotter_id'] = $row['spotter_id'];
213
			} else {
214
				$temp_array['spotter_id'] = '';
215
			}
216
			if (isset($row['flightaware_id'])) $temp_array['flightaware_id'] = $row['flightaware_id'];
217
			if (isset($row['modes'])) $temp_array['modes'] = $row['modes'];
218
			$temp_array['ident'] = $row['ident'];
219
			if (isset($row['registration']) && $row['registration'] != '') {
220
				$temp_array['registration'] = $row['registration'];
221
			} elseif (isset($temp_array['modes'])) {
222
				$temp_array['registration'] = $this->getAircraftRegistrationBymodeS($temp_array['modes']);
223
			} else $temp_array['registration'] = '';
224
			if (isset($row['aircraft_icao'])) $temp_array['aircraft_type'] = $row['aircraft_icao'];
225
			
226
			$temp_array['departure_airport'] = $row['departure_airport_icao'];
227
			$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
228
			if (isset($row['real_arrival_airport_icao']) && $row['real_arrival_airport_icao'] != NULL) $temp_array['real_arrival_airport'] = $row['real_arrival_airport_icao'];
229
			if (isset($row['latitude'])) $temp_array['latitude'] = $row['latitude'];
230
			if (isset($row['longitude'])) $temp_array['longitude'] = $row['longitude'];
231
			/*
232
			if (Connection->tableExists('countries')) {
233
				$country_info = $this->getCountryFromLatitudeLongitude($temp_array['latitude'],$temp_array['longitude']);
234
				if (is_array($country_info) && isset($country_info['name']) && isset($country_info['iso2'])) {
235
				    $temp_array['country'] = $country_info['name'];
236
				    $temp_array['country_iso2'] = $country_info['iso2'];
237
				}
238
			}
239
			*/
240
			if (isset($row['waypoints'])) $temp_array['waypoints'] = $row['waypoints'];
241
			if (isset($row['format_source'])) $temp_array['format_source'] = $row['format_source'];
242
			if (isset($row['route_stop']) && $row['route_stop'] != '') {
243
				$temp_array['route_stop'] = $row['route_stop'];
244
				$allroute = explode(' ',$row['route_stop']);
245
				foreach ($allroute as $route) {
246
					$route_airport_array = $this->getAllAirportInfo($route);
247
					if (isset($route_airport_array[0]['name'])) {
248
						$route_stop_details = array();
249
						$route_stop_details['airport_name'] = $route_airport_array[0]['name'];
250
						$route_stop_details['airport_city'] = $route_airport_array[0]['city'];
251
						$route_stop_details['airport_country'] = $route_airport_array[0]['country'];
252
						$route_stop_details['airport_icao'] = $route_airport_array[0]['icao'];
253
						$temp_array['route_stop_details'][] = $route_stop_details;
254
					}
255
				}
256
			}
257
			if (isset($row['altitude'])) $temp_array['altitude'] = $row['altitude'];
258
			if (isset($row['heading'])) {
259
				$temp_array['heading'] = $row['heading'];
260
				$heading_direction = $this->parseDirection($row['heading']);
261
				if (isset($heading_direction[0]['direction_fullname'])) $temp_array['heading_name'] = $heading_direction[0]['direction_fullname'];
262
			}
263
			if (isset($row['ground_speed'])) $temp_array['ground_speed'] = $row['ground_speed'];
264
			$temp_array['image'] = "";
265
			$temp_array['image_thumbnail'] = "";
266
			$temp_array['image_source'] = "";
267
			$temp_array['image_copyright'] = "";
268
 
269
			if (isset($row['highlight'])) {
270
				$temp_array['highlight'] = $row['highlight'];
271
			} else $temp_array['highlight'] = '';
272
			
273
			if (isset($row['date'])) {
274
				$dateArray = $this->parseDateString($row['date']);
275
				if ($dateArray['seconds'] < 10)
276
				{
277
					$temp_array['date'] = "a few seconds ago";
278
				} elseif ($dateArray['seconds'] >= 5 && $dateArray['seconds'] < 30)
279
				{
280
					$temp_array['date'] = "half a minute ago";
281
				} elseif ($dateArray['seconds'] >= 30 && $dateArray['seconds'] < 60)
282
				{
283
					$temp_array['date'] = "about a minute ago";
284
				} elseif ($dateArray['minutes'] < 5)
285
				{
286
					$temp_array['date'] = "a few minutes ago";
287
				} elseif ($dateArray['minutes'] >= 5 && $dateArray['minutes'] < 60)
288
				{
289
					$temp_array['date'] = "about ".$dateArray['minutes']." minutes ago";
290
				} elseif ($dateArray['hours'] < 2)
291
				{
292
					$temp_array['date'] = "about an hour ago";
293
				} elseif ($dateArray['hours'] >= 2 && $dateArray['hours'] < 24)
294
				{
295
					$temp_array['date'] = "about ".$dateArray['hours']." hours ago";
296
				} else {
297
					$temp_array['date'] = date("M j Y, g:i a",strtotime($row['date']." UTC"));
298
				}
299
				$temp_array['date_minutes_past'] = $dateArray['minutes'];
300
				$temp_array['date_iso_8601'] = date("c",strtotime($row['date']." UTC"));
301
				$temp_array['date_rfc_2822'] = date("r",strtotime($row['date']." UTC"));
302
				$temp_array['date_unix'] = strtotime($row['date']." UTC");
303
				if (isset($row['last_seen']) && $row['last_seen'] != '') {
304
					$temp_array['duration'] = strtotime($row['last_seen']) - strtotime($row['date']);
305
					$temp_array['last_seen_date_iso_8601'] = date("c",strtotime($row['last_seen']." UTC"));
306
					$temp_array['last_seen_date_rfc_2822'] = date("r",strtotime($row['last_seen']." UTC"));
307
					$temp_array['last_seen_date_unix'] = strtotime($row['last_seen']." UTC");
308
				}
309
			}
310
			
311
			if (isset($row['aircraft_name']) && $row['aircraft_name'] != '' && isset($row['aircraft_shadow']) && $row['aircraft_shadow'] != '') {
312
				$temp_array['aircraft_name'] = $row['aircraft_name'];
313
				$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
314
				if (isset($row['aircraft_shadow'])) {
315
					$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
316
				}
317
			} elseif (isset($row['aircraft_icao'])) {
318
				$aircraft_array = $this->getAllAircraftInfo($row['aircraft_icao']);
319
				if (count($aircraft_array) > 0) {
320
					$temp_array['aircraft_name'] = $aircraft_array[0]['type'];
321
					$temp_array['aircraft_manufacturer'] = $aircraft_array[0]['manufacturer'];
322
				
323
					if ($aircraft_array[0]['aircraft_shadow'] != NULL) {
324
						$temp_array['aircraft_shadow'] = $aircraft_array[0]['aircraft_shadow'];
325
					} else $temp_array['aircraft_shadow'] = 'default.png';
326
                                } else {
327
                            		$temp_array['aircraft_shadow'] = 'default.png';
328
					$temp_array['aircraft_name'] = 'N/A';
329
					$temp_array['aircraft_manufacturer'] = 'N/A';
330
                            	}
331
			}
332
			$fromsource = NULL;
333
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
334
			elseif (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
335
			elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
336
			elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
337
			elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
338
			if (!isset($row['airline_name']) || $row['airline_name'] == '') {
339
				if (!is_numeric(substr($row['ident'], 0, 3))) {
340
					if (is_numeric(substr($row['ident'], 2, 1))) {
341
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 2),$fromsource);
342
					} elseif (is_numeric(substr($row['ident'], 3, 1))) {
343
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
344
					} else {
345
						$airline_array = $this->getAllAirlineInfo('NA');
346
					}
347
				} else {
348
					$airline_array = $this->getAllAirlineInfo('NA');
349
				}
350
				if (count($airline_array) > 0) {
351
					$temp_array['airline_icao'] = $airline_array[0]['icao'];
352
					$temp_array['airline_iata'] = $airline_array[0]['iata'];
353
					$temp_array['airline_name'] = $airline_array[0]['name'];
354
					$temp_array['airline_country'] = $airline_array[0]['country'];
355
					$temp_array['airline_callsign'] = $airline_array[0]['callsign'];
356
					$temp_array['airline_type'] = $airline_array[0]['type'];
357
				}
358
			} else {
359
				$temp_array['airline_icao'] = $row['airline_icao'];
360
				if (isset($row['airline_iata'])) $temp_array['airline_iata'] = $row['airline_iata'];
361
				else $temp_array['airline_iata'] = 'N/A';
362
				$temp_array['airline_name'] = $row['airline_name'];
363
				$temp_array['airline_country'] = $row['airline_country'];
364
				if (isset($row['airline_callsign'])) $temp_array['airline_callsign'] = $row['airline_callsign'];
365
				else $temp_array['airline_callsign'] = 'N/A';
366
				$temp_array['airline_type'] = $row['airline_type'];
367
				if ($temp_array['airline_icao'] != '' && $temp_array['airline_iata'] == 'N/A') {
368
					$airline_array = $this->getAllAirlineInfo($temp_array['airline_icao']);
369
					if (count($airline_array) > 0) {
370
						$temp_array['airline_icao'] = $airline_array[0]['icao'];
371
						$temp_array['airline_iata'] = $airline_array[0]['iata'];
372
						$temp_array['airline_name'] = $airline_array[0]['name'];
373
						$temp_array['airline_country'] = $airline_array[0]['country'];
374
						$temp_array['airline_callsign'] = $airline_array[0]['callsign'];
375
						$temp_array['airline_type'] = $airline_array[0]['type'];
376
					}
377
				}
378
			}
379
			if (isset($temp_array['airline_iata']) && $temp_array['airline_iata'] != '') {
380
				$acars_array = $ACARS->getLiveAcarsData($temp_array['airline_iata'].substr($temp_array['ident'],3));
381
				//$acars_array = ACARS->getLiveAcarsData('BA40YL');
382
				if (count($acars_array) > 0) {
383
					$temp_array['acars'] = $acars_array;
384
					//print_r($acars_array);
385
				}
386
			}
387
			if (isset($row['owner_name']) && $row['owner_name'] != '' && $row['owner_name'] != NULL) {
388
				$temp_array['aircraft_owner'] = $row['owner_name'];
389
			}
390
			if ($temp_array['registration'] != "" && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM && !isset($temp_array['aircraft_owner'])) {
391
				$owner_info = $this->getAircraftOwnerByRegistration($temp_array['registration']);
392
				if ($owner_info['owner'] != '') $temp_array['aircraft_owner'] = ucwords(strtolower($owner_info['owner']));
393
				$temp_array['aircraft_base'] = $owner_info['base'];
394
				$temp_array['aircraft_date_first_reg'] = $owner_info['date_first_reg'];
395
			}
396
397
			if($temp_array['registration'] != "" || ($globalIVAO && isset($temp_array['aircraft_type']) && $temp_array['aircraft_type'] != ''))
398
			{
399
				if ($globalIVAO) {
400
					if (isset($temp_array['airline_icao']))	$image_array = $Image->getSpotterImage('',$temp_array['aircraft_type'],$temp_array['airline_icao']);
401
					else $image_array = $Image->getSpotterImage('',$temp_array['aircraft_type']);
402
				} else $image_array = $Image->getSpotterImage($temp_array['registration']);
403
				if (count($image_array) > 0) {
404
					$temp_array['image'] = $image_array[0]['image'];
405
					$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
406
					$temp_array['image_source'] = $image_array[0]['image_source'];
407
					$temp_array['image_source_website'] = $image_array[0]['image_source_website'];
408
					if ($temp_array['image_source_website'] == '' && $temp_array['image_source'] == 'planespotters') {
409
						$planespotter_url_array = explode("_", $temp_array['image']);
410
						$planespotter_id = str_replace(".jpg", "", $planespotter_url_array[1]);
411
						$temp_array['image_source_website'] = 'http://www.planespotters.net/Aviation_Photos/photo.show?id='.$planespotter_id;
412
					 }
413
					$temp_array['image_copyright'] = $image_array[0]['image_copyright'];
414
				}
415
			}
416
417
418
			if (isset($row['departure_airport_time']) && $row['departure_airport_time'] != '') {
419
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
420
			}
421
			if (isset($row['arrival_airport_time']) && $row['arrival_airport_time'] != '') {
422
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
423
			}
424
			
425
			if ((!isset($globalIVAO) || ! $globalIVAO) && (!isset($globalVATSIM) || !$globalVATSIM) && (!isset($globalphpVMS) || !$globalphpVMS) && (!isset($globalVAM) || !$globalVAM)) {
426
				if ($schedules === true) {
427
					$schedule_array = $Schedule->getSchedule($temp_array['ident']);
428
					//print_r($schedule_array);
429
					if (count($schedule_array) > 0) {
430
						if ($schedule_array['departure_airport_icao'] != '') {
431
							$row['departure_airport_icao'] = $schedule_array['departure_airport_icao'];
432
							$temp_array['departure_airport'] = $row['departure_airport_icao'];
433
						}
434
						if ($schedule_array['arrival_airport_icao'] != '') {
435
							$row['arrival_airport_icao'] = $schedule_array['arrival_airport_icao'];
436
							$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
437
						}
438
						$temp_array['departure_airport_time'] = $schedule_array['departure_airport_time'];
439
						$temp_array['arrival_airport_time'] = $schedule_array['arrival_airport_time'];
440
					}
441
				}
442
			} else {
443
				if (isset($row['real_departure_airport_time']) && $row['real_departure_airport_time'] != '') {
444
					$temp_array['departure_airport_time'] = $row['real_departure_airport_time'];
445
				}
446
				if (isset($row['real_arrival_airport_time']) && $row['real_arrival_airport_time'] != '') {
447
					$temp_array['real_arrival_airport_time'] = $row['real_arrival_airport_time'];
448
				}
449
			}
450
			
451
			//if ($row['departure_airport_icao'] != '' && $row['departure_airport_name'] == '') {
452
			if ($row['departure_airport_icao'] != '') {
453
				$departure_airport_array = $this->getAllAirportInfo($row['departure_airport_icao']);
454
				if (!isset($departure_airport_array[0]['name'])) $departure_airport_array = $this->getAllAirportInfo('NA');
455
			/*
456
			} elseif ($row['departure_airport_name'] != '') {
457
				$temp_array['departure_airport_name'] = $row['departure_airport_name'];
458
				$temp_array['departure_airport_city'] = $row['departure_airport_city'];
459
				$temp_array['departure_airport_country'] = $row['departure_airport_country'];
460
				$temp_array['departure_airport_icao'] = $row['departure_airport_icao'];
461
			*/
462
			} else $departure_airport_array = $this->getAllAirportInfo('NA');
463
			if (isset($departure_airport_array[0]['name'])) {
464
				$temp_array['departure_airport_name'] = $departure_airport_array[0]['name'];
465
				$temp_array['departure_airport_city'] = $departure_airport_array[0]['city'];
466
				$temp_array['departure_airport_country'] = $departure_airport_array[0]['country'];
467
				$temp_array['departure_airport_iata'] = $departure_airport_array[0]['iata'];
468
				$temp_array['departure_airport_icao'] = $departure_airport_array[0]['icao'];
469
				$temp_array['departure_airport_latitude'] = $departure_airport_array[0]['latitude'];
470
				$temp_array['departure_airport_longitude'] = $departure_airport_array[0]['longitude'];
471
				$temp_array['departure_airport_altitude'] = $departure_airport_array[0]['altitude'];
472
			}
473
474
			/*
475
			if (isset($row['departure_airport_time'])) {
476
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
477
			}
478
			*/
479
			
480
			if ($row['arrival_airport_icao'] != '') {
481
				$arrival_airport_array = $this->getAllAirportInfo($row['arrival_airport_icao']);
482
				if (count($arrival_airport_array) == 0) $arrival_airport_array = $this->getAllAirportInfo('NA');
483
			} else $arrival_airport_array = $this->getAllAirportInfo('NA');
484
			if (isset($arrival_airport_array[0]['name'])) {
485
				$temp_array['arrival_airport_name'] = $arrival_airport_array[0]['name'];
486
				$temp_array['arrival_airport_city'] = $arrival_airport_array[0]['city'];
487
				$temp_array['arrival_airport_country'] = $arrival_airport_array[0]['country'];
488
				$temp_array['arrival_airport_iata'] = $arrival_airport_array[0]['iata'];
489
				$temp_array['arrival_airport_icao'] = $arrival_airport_array[0]['icao'];
490
				$temp_array['arrival_airport_latitude'] = $arrival_airport_array[0]['latitude'];
491
				$temp_array['arrival_airport_longitude'] = $arrival_airport_array[0]['longitude'];
492
				$temp_array['arrival_airport_altitude'] = $arrival_airport_array[0]['altitude'];
493
			}
494
			/*
495
			if (isset($row['arrival_airport_time'])) {
496
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
497
			}
498
			*/
499
			if (isset($row['pilot_id']) && $row['pilot_id'] != '') $temp_array['pilot_id'] = $row['pilot_id'];
500
			if (isset($row['pilot_name']) && $row['pilot_name'] != '') $temp_array['pilot_name'] = $row['pilot_name'];
501
			if (isset($row['source_name']) && $row['source_name'] != '') $temp_array['source_name'] = $row['source_name'];
502
			if (isset($row['over_country']) && $row['over_country'] != '') $temp_array['over_country'] = $row['over_country'];
503
			if (isset($row['distance']) && $row['distance'] != '') $temp_array['distance'] = $row['distance'];
504
			if (isset($row['squawk'])) {
505
				$temp_array['squawk'] = $row['squawk'];
506
				if ($row['squawk'] != '' && isset($temp_array['country_iso2'])) {
507
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['country_iso2']);
508
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
509
				} elseif ($row['squawk'] != '' && isset($temp_array['over_country'])) {
510
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['over_country']);
511
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
512
				} elseif ($row['squawk'] != '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
513
			}
514
    			
515
			$temp_array['query_number_rows'] = $num_rows;
516
			
517
			$spotter_array[] = $temp_array;
518
		}
519
		if ($num_rows == 0) return array();
520
		$spotter_array[0]['query_number_rows'] = $num_rows;
521
		return $spotter_array;
522
	}	
523
	
524
	
525
	/**
526
	* Gets all the spotter information
527
	*
528
	* @return Array the spotter information
529
	*
530
	*/
531
	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())
532
	{
533
		global $globalTimezone, $globalDBdriver;
534
		require_once(dirname(__FILE__).'/class.Translation.php');
535
		$Translation = new Translation();
536
537
		date_default_timezone_set('UTC');
538
539
		$query_values = array();
540
		$additional_query = '';
541
		$filter_query = $this->getFilter($filters,true,true);
542
		if ($q != "")
543
		{
544
			if (!is_string($q))
545
			{
546
				return false;
547
			} else {
548
				$q_array = explode(" ", $q);
549
				foreach ($q_array as $q_item){
550
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
551
					$additional_query .= " AND (";
552
					if (is_int($q_item)) $additional_query .= "(spotter_output.spotter_id like '%".$q_item."%') OR ";
553
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
554
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
555
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
556
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
557
					$additional_query .= "(spotter_output.airline_name like '%".$q_item."%') OR ";
558
					$additional_query .= "(spotter_output.airline_country like '%".$q_item."%') OR ";
559
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
560
					$additional_query .= "(spotter_output.departure_airport_name like '%".$q_item."%') OR ";
561
					$additional_query .= "(spotter_output.departure_airport_city like '%".$q_item."%') OR ";
562
					$additional_query .= "(spotter_output.departure_airport_country like '%".$q_item."%') OR ";
563
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
564
					$additional_query .= "(spotter_output.arrival_airport_name like '%".$q_item."%') OR ";
565
					$additional_query .= "(spotter_output.arrival_airport_city like '%".$q_item."%') OR ";
566
					$additional_query .= "(spotter_output.arrival_airport_country like '%".$q_item."%') OR ";
567
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
568
					$additional_query .= "(spotter_output.owner_name like '%".$q_item."%') OR ";
569
					$additional_query .= "(spotter_output.pilot_id like '%".$q_item."%') OR ";
570
					$additional_query .= "(spotter_output.pilot_name like '%".$q_item."%') OR ";
571
					$additional_query .= "(spotter_output.ident like '%".$q_item."%') OR ";
572
					$translate = $Translation->ident2icao($q_item);
573
					if ($translate != $q_item) $additional_query .= "(spotter_output.ident like '%".$translate."%') OR ";
574
					$additional_query .= "(spotter_output.highlight like '%".$q_item."%')";
575
					$additional_query .= ")";
576
				}
577
			}
578
		}
579
580
		if ($registration != "")
581
		{
582
			$registration = filter_var($registration,FILTER_SANITIZE_STRING);
583
			if (!is_string($registration))
584
			{
585
				return false;
586
			} else {
587
				$additional_query .= " AND spotter_output.registration = :registration";
588
				$query_values = array_merge($query_values,array(':registration' => $registration));
589
			}
590
		}
591
592
		if ($aircraft_icao != "")
593
		{
594
			$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
595
			if (!is_string($aircraft_icao))
596
			{
597
				return false;
598
			} else {
599
				$additional_query .= " AND spotter_output.aircraft_icao = :aircraft_icao";
600
				$query_values = array_merge($query_values,array(':aircraft_icao' => $aircraft_icao));
601
			}
602
		}
603
604
		if ($aircraft_manufacturer != "")
605
		{
606
			$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
607
			if (!is_string($aircraft_manufacturer))
608
			{
609
				return false;
610
			} else {
611
				$additional_query .= " AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer";
612
				$query_values = array_merge($query_values,array(':aircraft_manufacturer' => $aircraft_manufacturer));
613
			}
614
		}
615
616
		if ($highlights == "true")
617
		{
618
			if (!is_string($highlights))
619
			{
620
				return false;
621
			} else {
622
				$additional_query .= " AND (spotter_output.highlight <> '')";
623
			}
624
		}
625
626
		if ($airline_icao != "")
627
		{
628
			$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
629
			if (!is_string($airline_icao))
630
			{
631
				return false;
632
			} else {
633
				$additional_query .= " AND spotter_output.airline_icao = :airline_icao";
634
				$query_values = array_merge($query_values,array(':airline_icao' => $airline_icao));
635
			}
636
		}
637
638
		if ($airline_country != "")
639
		{
640
			$airline_country = filter_var($airline_country,FILTER_SANITIZE_STRING);
641
			if (!is_string($airline_country))
642
			{
643
				return false;
644
			} else {
645
				$additional_query .= " AND spotter_output.airline_country = :airline_country";
646
				$query_values = array_merge($query_values,array(':airline_country' => $airline_country));
647
			}
648
		}
649
650
		if ($airline_type != "")
651
		{
652
			if (!is_string($airline_type))
653
			{
654
				return false;
655
			} else {
656
				if ($airline_type == "passenger")
657
				{
658
					$additional_query .= " AND (spotter_output.airline_type = 'passenger')";
659
				}
660
				if ($airline_type == "cargo")
661
				{
662
					$additional_query .= " AND (spotter_output.airline_type = 'cargo')";
663
				}
664
				if ($airline_type == "military")
665
				{
666
					$additional_query .= " AND (spotter_output.airline_type = 'military')";
667
				}
668
			}
669
		}
670
671
		if ($airport != "")
672
		{
673
			$airport = filter_var($airport,FILTER_SANITIZE_STRING);
674
			if (!is_string($airport))
675
			{
676
				return false;
677
			} else {
678
				$additional_query .= " AND (spotter_output.departure_airport_icao = :airport OR spotter_output.arrival_airport_icao = :airport)";
679
				$query_values = array_merge($query_values,array(':airport' => $airport));
680
			}
681
		}
682
683
		if ($airport_country != "")
684
		{
685
			$airport_country = filter_var($airport_country,FILTER_SANITIZE_STRING);
686
			if (!is_string($airport_country))
687
			{
688
				return false;
689
			} else {
690
				$additional_query .= " AND (spotter_output.departure_airport_country = :airport_country OR spotter_output.arrival_airport_country = :airport_country)";
691
				$query_values = array_merge($query_values,array(':airport_country' => $airport_country));
692
			}
693
		}
694
    
695
		if ($callsign != "")
696
		{
697
			$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
698
			if (!is_string($callsign))
699
			{
700
				return false;
701
			} else {
702
				$translate = $Translation->ident2icao($callsign);
703
				if ($translate != $callsign) {
704
					$additional_query .= " AND (spotter_output.ident = :callsign OR spotter_output.ident = :translate)";
705
					$query_values = array_merge($query_values,array(':callsign' => $callsign,':translate' => $translate));
706
				} else {
707
					$additional_query .= " AND spotter_output.ident = :callsign";
708
					$query_values = array_merge($query_values,array(':callsign' => $callsign));
709
				}
710
			}
711
		}
712
713
		if ($owner != "")
714
		{
715
			$owner = filter_var($owner,FILTER_SANITIZE_STRING);
716
			if (!is_string($owner))
717
			{
718
				return false;
719
			} else {
720
				$additional_query .= " AND spotter_output.owner_name = :owner";
721
				$query_values = array_merge($query_values,array(':owner' => $owner));
722
			}
723
		}
724
725
		if ($pilot_name != "")
726
		{
727
			$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
728
			if (!is_string($pilot_name))
729
			{
730
				return false;
731
			} else {
732
				$additional_query .= " AND spotter_output.pilot_name = :pilot_name";
733
				$query_values = array_merge($query_values,array(':pilot_name' => $pilot_name));
734
			}
735
		}
736
737
		if ($pilot_id != "")
738
		{
739
			$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_NUMBER_INT);
740
			if (!is_string($pilot_id))
741
			{
742
				return false;
743
			} else {
744
				$additional_query .= " AND spotter_output.pilot_id = :pilot_id";
745
				$query_values = array_merge($query_values,array(':pilot_id' => $pilot_id));
746
			}
747
		}
748
749
		if ($departure_airport_route != "")
750
		{
751
			$departure_airport_route = filter_var($departure_airport_route,FILTER_SANITIZE_STRING);
752
			if (!is_string($departure_airport_route))
753
			{
754
				return false;
755
			} else {
756
				$additional_query .= " AND spotter_output.departure_airport_icao = :departure_airport_route";
757
				$query_values = array_merge($query_values,array(':departure_airport_route' => $departure_airport_route));
758
			}
759
		}
760
761
		if ($arrival_airport_route != "")
762
		{
763
			$arrival_airport_route = filter_var($arrival_airport_route,FILTER_SANITIZE_STRING);
764
			if (!is_string($arrival_airport_route))
765
			{
766
				return false;
767
			} else {
768
				$additional_query .= " AND spotter_output.arrival_airport_icao = :arrival_airport_route";
769
				$query_values = array_merge($query_values,array(':arrival_airport_route' => $arrival_airport_route));
770
			}
771
		}
772
773
		if ($altitude != "")
774
		{
775
			$altitude_array = explode(",", $altitude);
776
			$altitude_array[0] = filter_var($altitude_array[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
777
			$altitude_array[1] = filter_var($altitude_array[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
778
779
			if ($altitude_array[1] != "")
780
			{                
781
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
782
				$altitude_array[1] = substr($altitude_array[1], 0, -2);
783
				$additional_query .= " AND altitude BETWEEN '".$altitude_array[0]."' AND '".$altitude_array[1]."' ";
784
			} else {
785
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
786
				$additional_query .= " AND altitude <= '".$altitude_array[0]."' ";
787
			}
788
		}
789
790
		if ($date_posted != "")
791
		{
792
			$date_array = explode(",", $date_posted);
793
			$date_array[0] = filter_var($date_array[0],FILTER_SANITIZE_STRING);
794
			$date_array[1] = filter_var($date_array[1],FILTER_SANITIZE_STRING);
795
796
			if ($globalTimezone != '') {
797
				date_default_timezone_set($globalTimezone);
798
				$datetime = new DateTime();
799
				$offset = $datetime->format('P');
800
			} else $offset = '+00:00';
801
802
			if ($date_array[1] != "")
803
			{
804
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
805
				$date_array[1] = date("Y-m-d H:i:s", strtotime($date_array[1]));
806
				if ($globalDBdriver == 'mysql') {
807
					$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]."' ";
808
				} else {
809
					$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]."' ";
810
				}
811
			} else {
812
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
813
				if ($globalDBdriver == 'mysql') {
814
					$additional_query .= " AND TIMESTAMP(CONVERT_TZ(spotter_output.date,'+00:00', '".$offset."')) >= '".$date_array[0]."' ";
815
				} else {
816
					$additional_query .= " AND CAST(spotter_output.date AT TIME ZONE INTERVAL ".$offset." AS TIMESTAMP) >= '".$date_array[0]."' ";
817
				}
818
			}
819
		}
820
821
		if ($limit != "")
822
		{
823
			$limit_array = explode(",", $limit);
824
			
825
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
826
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
827
			
828
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
829
			{
830
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
831
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
832
			} else $limit_query = "";
833
		} else $limit_query = "";
834
835
836
		if ($sort != "")
837
		{
838
			$search_orderby_array = $this->getOrderBy();
839
			$orderby_query = $search_orderby_array[$sort]['sql'];
840
		} else {
841
			if ($origLat != "" && $origLon != "" && $dist != "") {
842
				$orderby_query = " ORDER BY distance ASC";
843
			} else {
844
				$orderby_query = " ORDER BY spotter_output.date DESC";
845
			}
846
		}
847
848
		if ($includegeodata == "true")
849
		{
850
			$additional_query .= " AND spotter_output.waypoints <> ''";
851
		}
852
853
854
		if ($origLat != "" && $origLon != "" && $dist != "") {
855
			$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
856
857
			if ($globalDBdriver == 'mysql') {
858
				$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 
859
						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)) 
860
						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;
861
			} else {
862
				$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 
863
						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)) 
864
						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;
865
			}
866
		} else {		
867
			$query  = "SELECT spotter_output.* FROM spotter_output".$filter_query." spotter_output.ident <> '' 
868
					".$additional_query."
869
					".$orderby_query;
870
		}
871
		$spotter_array = $this->getDataFromDB($query, $query_values,$limit_query);
872
		return $spotter_array;
873
	}
874
	
875
	
876
	/**
877
	* Gets all the spotter information based on the latest data entry
878
	*
879
	* @return Array the spotter information
880
	*
881
	*/
882
	public function getLatestSpotterData($limit = '', $sort = '', $filter = array())
883
	{
884
		global $global_query;
885
		
886
		date_default_timezone_set('UTC');
887
888
		$filter_query = $this->getFilter($filter);
889
		
890
		if ($limit != "")
891
		{
892
			$limit_array = explode(",", $limit);
893
			
894
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
895
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
896
			
897
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
898
			{
899
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
900
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
901
			} else $limit_query = "";
902
		} else $limit_query = "";
903
		
904
		if ($sort != "")
905
		{
906
			$search_orderby_array = $this->getOrderBy();
907
			$orderby_query = $search_orderby_array[$sort]['sql'];
908
		} else {
909
			$orderby_query = " ORDER BY spotter_output.date DESC";
910
		}
911
912
		$query  = $global_query.$filter_query." ".$orderby_query;
913
914
		$spotter_array = $this->getDataFromDB($query, array(),$limit_query,true);
915
916
		return $spotter_array;
917
	}
918
    
919
    
920
    /**
921
	* Gets all the spotter information based on a user's latitude and longitude
922
	*
923
	* @return Array the spotter information
924
	*
925
	*/
926
	public function getLatestSpotterForLayar($lat, $lng, $radius, $interval)
927
	{
928
		date_default_timezone_set('UTC');
929
		$limit_query = '';
930
		if ($lat != "")
931
		{
932
			if (!is_numeric($lat))
933
			{
934
				return false;
935
			}
936
		}
937
        
938
		if ($lng != "")
939
		{
940
			if (!is_numeric($lng))
941
			{
942
				return false;
943
			}
944
		}
945
		
946
		if ($radius != "")
947
		{
948
			if (!is_numeric($radius))
949
			{
950
				return false;
951
			}
952
		}
953
    		$additional_query = '';
954
		if ($interval != "")
955
		{
956
			if (!is_string($interval))
957
			{
958
				return false;
959
			} else {
960
				if ($interval == "30m"){
961
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 MINUTE) <= $this_output.date ';
962
				} else if ($interval == "1h"){
963
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) <= $this_output.date ';
964
				} else if ($interval == "3h"){
965
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 3 HOUR) <= $this_output.date ';
966
				} else if ($interval == "6h"){
967
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 6 HOUR) <= $this_output.date ';
968
				} else if ($interval == "12h"){
969
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 12 HOUR) <= $this_output.date ';
970
				} else if ($interval == "24h"){
971
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 24 HOUR) <= $this_output.date ';
972
				} else if ($interval == "7d"){
973
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY) <= $this_output.date ';
974
				} else if ($interval == "30d"){
975
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 DAY) <= $this_output.date ';
976
				} 
977
			}
978
		}
979
980
		$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 
981
                   WHERE spotter_output.latitude <> '' 
982
				   AND spotter_output.longitude <> '' 
983
                   ".$additional_query."
984
                   HAVING distance < :radius  
985
				   ORDER BY distance";
986
987
		$spotter_array = $this->getDataFromDB($query, array(':radius' => $radius),$limit_query);
988
989
		return $spotter_array;
990
	}
991
    
992
    
993
    /**
994
	* Gets all the spotter information sorted by the newest aircraft type
995
	*
996
	* @return Array the spotter information
997
	*
998
	*/
999
	public function getNewestSpotterDataSortedByAircraftType($limit = '', $sort = '',$filter = array())
1000
	{
1001
		global $global_query;
1002
		
1003
		date_default_timezone_set('UTC');
1004
1005
		$filter_query = $this->getFilter($filter,true,true);
1006
1007
		$limit_query = '';
1008
		if ($limit != "")
1009
		{
1010
			$limit_array = explode(",", $limit);
1011
			
1012
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1013
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1014
			
1015
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1016
			{
1017
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1018
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1019
			}
1020
		}
1021
		
1022
		if ($sort != "")
1023
		{
1024
			$search_orderby_array = $this->getOrderBy();
1025
			$orderby_query = $search_orderby_array[$sort]['sql'];
1026
		} else {
1027
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1028
		}
1029
1030
		$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;
1031
1032
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1033
1034
		return $spotter_array;
1035
	}
1036
    
1037
    
1038
	/**
1039
	* Gets all the spotter information sorted by the newest aircraft registration
1040
	*
1041
	* @return Array the spotter information
1042
	*
1043
	*/
1044
	public function getNewestSpotterDataSortedByAircraftRegistration($limit = '', $sort = '', $filter = array())
1045
	{
1046
		global $global_query;
1047
		
1048
		date_default_timezone_set('UTC');
1049
		$filter_query = $this->getFilter($filter,true,true);
1050
1051
		$limit_query = '';
1052
		if ($limit != "")
1053
		{
1054
			$limit_array = explode(",", $limit);
1055
			
1056
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1057
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1058
			
1059
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1060
			{
1061
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1062
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1063
			}
1064
		}
1065
		
1066
		if ($sort != "")
1067
		{
1068
			$search_orderby_array = $this->getOrderBy();
1069
			$orderby_query = $search_orderby_array[$sort]['sql'];
1070
		} else {
1071
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1072
		}
1073
1074
		$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;
1075
1076
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1077
1078
		return $spotter_array;
1079
	}
1080
1081
1082
	/**
1083
	* Gets all the spotter information sorted by the newest airline
1084
	*
1085
	* @return Array the spotter information
1086
	*
1087
	*/
1088
	public function getNewestSpotterDataSortedByAirline($limit = '', $sort = '',$filter = array())
1089
	{
1090
		global $global_query;
1091
		
1092
		date_default_timezone_set('UTC');
1093
		$filter_query = $this->getFilter($filter,true,true);
1094
		
1095
		$limit_query = '';
1096
		if ($limit != "")
1097
		{
1098
			$limit_array = explode(",", $limit);
1099
			
1100
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1101
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1102
			
1103
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1104
			{
1105
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1106
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1107
			}
1108
		}
1109
		
1110
		if ($sort != "")
1111
		{
1112
			$search_orderby_array = $this->getOrderBy();
1113
			$orderby_query = $search_orderby_array[$sort]['sql'];
1114
		} else {
1115
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1116
		}
1117
1118
		$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;
1119
1120
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1121
1122
		return $spotter_array;
1123
	}
1124
    
1125
    
1126
    /**
1127
	* Gets all the spotter information sorted by the newest departure airport
1128
	*
1129
	* @return Array the spotter information
1130
	*
1131
	*/
1132
	public function getNewestSpotterDataSortedByDepartureAirport($limit = '', $sort = '', $filter = array())
1133
	{
1134
		global $global_query;
1135
		
1136
		date_default_timezone_set('UTC');
1137
		
1138
		$filter_query = $this->getFilter($filter,true,true);
1139
		
1140
		$limit_query = '';
1141
		
1142
		if ($limit != "")
1143
		{
1144
			$limit_array = explode(",", $limit);
1145
			
1146
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1147
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1148
			
1149
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1150
			{
1151
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1152
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1153
			}
1154
		}
1155
		
1156
		if ($sort != "")
1157
		{
1158
			$search_orderby_array = $this->getOrderBy();
1159
			$orderby_query = $search_orderby_array[$sort]['sql'];
1160
		} else {
1161
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1162
		}
1163
1164
		$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;
1165
1166
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1167
1168
		return $spotter_array;
1169
	}
1170
1171
1172
	/**
1173
	* Gets all the spotter information sorted by the newest arrival airport
1174
	*
1175
	* @return Array the spotter information
1176
	*
1177
	*/
1178
	public function getNewestSpotterDataSortedByArrivalAirport($limit = '', $sort = '', $filter = array())
1179
	{
1180
		global $global_query;
1181
		
1182
		date_default_timezone_set('UTC');
1183
		$filter_query = $this->getFilter($filter,true,true);
1184
		$limit_query = '';
1185
		if ($limit != "")
1186
		{
1187
			$limit_array = explode(",", $limit);
1188
			
1189
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1190
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1191
			
1192
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1193
			{
1194
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1195
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1196
			}
1197
		}
1198
		
1199
		if ($sort != "")
1200
		{
1201
			$search_orderby_array = $this->getOrderBy();
1202
			$orderby_query = $search_orderby_array[$sort]['sql'];
1203
		} else {
1204
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1205
		}
1206
1207
		$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;
1208
1209
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1210
1211
		return $spotter_array;
1212
	}
1213
	
1214
1215
	/**
1216
	* Gets all the spotter information based on the spotter id
1217
	*
1218
	* @return Array the spotter information
1219
	*
1220
	*/
1221
	public function getSpotterDataByID($id = '')
1222
	{
1223
		global $global_query;
1224
		
1225
		date_default_timezone_set('UTC');
1226
		if ($id == '') return array();
1227
		$additional_query = "spotter_output.spotter_id = :id";
1228
		$query_values = array(':id' => $id);
1229
1230
		//$query  = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ";
1231
		$query  = $global_query." WHERE ".$additional_query." ";
1232
1233
		$spotter_array = $this->getDataFromDB($query,$query_values);
1234
1235
		return $spotter_array;
1236
	}
1237
1238
	
1239
	
1240
	
1241
	/**
1242
	* Gets all the spotter information based on the callsign
1243
	*
1244
	* @return Array the spotter information
1245
	*
1246
	*/
1247
	public function getSpotterDataByIdent($ident = '', $limit = '', $sort = '', $filter = array())
1248
	{
1249
		global $global_query;
1250
		
1251
		date_default_timezone_set('UTC');
1252
		
1253
		$query_values = array();
1254
		$limit_query = '';
1255
		$additional_query = '';
1256
		$filter_query = $this->getFilter($filter,true,true);
1257
		if ($ident != "")
1258
		{
1259
			if (!is_string($ident))
1260
			{
1261
				return false;
1262
			} else {
1263
				$additional_query = " AND (spotter_output.ident = :ident)";
1264
				$query_values = array(':ident' => $ident);
1265
			}
1266
		}
1267
		
1268
		if ($limit != "")
1269
		{
1270
			$limit_array = explode(",", $limit);
1271
			
1272
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1273
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1274
			
1275
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1276
			{
1277
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1278
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1279
			}
1280
		}
1281
1282
		if ($sort != "")
1283
		{
1284
			$search_orderby_array = $this->getOrderBy();
1285
			$orderby_query = $search_orderby_array[$sort]['sql'];
1286
		} else {
1287
			$orderby_query = " ORDER BY spotter_output.date DESC";
1288
		}
1289
1290
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1291
1292
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1293
1294
		return $spotter_array;
1295
	}
1296
	
1297
	/**
1298
	* Gets all the spotter information based on the owner
1299
	*
1300
	* @return Array the spotter information
1301
	*
1302
	*/
1303
	public function getSpotterDataByOwner($owner = '', $limit = '', $sort = '', $filter = array())
1304
	{
1305
		global $global_query;
1306
		
1307
		date_default_timezone_set('UTC');
1308
		
1309
		$query_values = array();
1310
		$limit_query = '';
1311
		$additional_query = '';
1312
		$filter_query = $this->getFilter($filter,true,true);
1313
		if ($owner != "")
1314
		{
1315
			if (!is_string($owner))
1316
			{
1317
				return false;
1318
			} else {
1319
				$additional_query = " AND (spotter_output.owner_name = :owner)";
1320
				$query_values = array(':owner' => $owner);
1321
			}
1322
		}
1323
		
1324
		if ($limit != "")
1325
		{
1326
			$limit_array = explode(",", $limit);
1327
			
1328
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1329
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1330
			
1331
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1332
			{
1333
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1334
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1335
			}
1336
		}
1337
1338
		if ($sort != "")
1339
		{
1340
			$search_orderby_array = $this->getOrderBy();
1341
			if (isset($search_orderby_array[$sort]['sql'])) $orderby_query = $search_orderby_array[$sort]['sql'];
1342
			else $orderby_query = " ORDER BY spotter_output.date DESC";
1343
		} else {
1344
			$orderby_query = " ORDER BY spotter_output.date DESC";
1345
		}
1346
1347
		$query = $global_query.$filter_query." spotter_output.owner_name <> '' ".$additional_query." ".$orderby_query;
1348
1349
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1350
1351
		return $spotter_array;
1352
	}
1353
	
1354
	/**
1355
	* Gets all the spotter information based on the pilot
1356
	*
1357
	* @return Array the spotter information
1358
	*
1359
	*/
1360
	public function getSpotterDataByPilot($pilot = '', $limit = '', $sort = '', $filter = array())
1361
	{
1362
		global $global_query;
1363
		
1364
		date_default_timezone_set('UTC');
1365
		
1366
		$query_values = array();
1367
		$limit_query = '';
1368
		$additional_query = '';
1369
		$filter_query = $this->getFilter($filter,true,true);
1370
		if ($pilot != "")
1371
		{
1372
			$additional_query = " AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot)";
1373
			$query_values = array(':pilot' => $pilot);
1374
		}
1375
		
1376
		if ($limit != "")
1377
		{
1378
			$limit_array = explode(",", $limit);
1379
			
1380
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1381
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1382
			
1383
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1384
			{
1385
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1386
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1387
			}
1388
		}
1389
1390
		if ($sort != "")
1391
		{
1392
			$search_orderby_array = $this->getOrderBy();
1393
			$orderby_query = $search_orderby_array[$sort]['sql'];
1394
		} else {
1395
			$orderby_query = " ORDER BY spotter_output.date DESC";
1396
		}
1397
1398
		$query = $global_query.$filter_query." spotter_output.pilot_name <> '' ".$additional_query." ".$orderby_query;
1399
1400
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1401
1402
		return $spotter_array;
1403
	}
1404
	
1405
	
1406
	
1407
	/**
1408
	* Gets all the spotter information based on the aircraft type
1409
	*
1410
	* @return Array the spotter information
1411
	*
1412
	*/
1413
	public function getSpotterDataByAircraft($aircraft_type = '', $limit = '', $sort = '', $filter = array())
1414
	{
1415
		global $global_query;
1416
		
1417
		date_default_timezone_set('UTC');
1418
		
1419
		$query_values = array();
1420
		$limit_query = '';
1421
		$additional_query = '';
1422
		$filter_query = $this->getFilter($filter,true,true);
1423
		
1424
		if ($aircraft_type != "")
1425
		{
1426
			if (!is_string($aircraft_type))
1427
			{
1428
				return false;
1429
			} else {
1430
				$additional_query = " AND (spotter_output.aircraft_icao = :aircraft_type)";
1431
				$query_values = array(':aircraft_type' => $aircraft_type);
1432
			}
1433
		}
1434
		
1435
		if ($limit != "")
1436
		{
1437
			$limit_array = explode(",", $limit);
1438
			
1439
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1440
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1441
			
1442
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1443
			{
1444
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1445
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1446
			}
1447
		}
1448
1449
		if ($sort != "")
1450
		{
1451
			$search_orderby_array = $this->getOrderBy();
1452
			$orderby_query = $search_orderby_array[$sort]['sql'];
1453
		} else {
1454
			$orderby_query = " ORDER BY spotter_output.date DESC";
1455
		}
1456
1457
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1458
1459
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1460
1461
		return $spotter_array;
1462
	}
1463
	
1464
	
1465
	/**
1466
	* Gets all the spotter information based on the aircraft registration
1467
	*
1468
	* @return Array the spotter information
1469
	*
1470
	*/
1471
	public function getSpotterDataByRegistration($registration = '', $limit = '', $sort = '', $filter = array())
1472
	{
1473
		global $global_query;
1474
		
1475
		date_default_timezone_set('UTC');
1476
		
1477
		$query_values = array();
1478
		$limit_query = '';
1479
		$additional_query = '';
1480
		
1481
		if ($registration != "")
1482
		{
1483
			if (!is_string($registration))
1484
			{
1485
				return false;
1486
			} else {
1487
				$additional_query = " (spotter_output.registration = :registration)";
1488
				$query_values = array(':registration' => $registration);
1489
			}
1490
		}
1491
		
1492
		if ($limit != "")
1493
		{
1494
			$limit_array = explode(",", $limit);
1495
			
1496
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1497
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1498
			
1499
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1500
			{
1501
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1502
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1503
			}
1504
		}
1505
1506
		if ($sort != "")
1507
		{
1508
			$search_orderby_array = $this->getOrderBy();
1509
			$orderby_query = $search_orderby_array[$sort]['sql'];
1510
		} else {
1511
			$orderby_query = " ORDER BY spotter_output.date DESC";
1512
		}
1513
		$filter_query = $this->getFilter($filter,true,true);
1514
1515
		//$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1516
		$query = $global_query.$filter_query." ".$additional_query." ".$orderby_query;
1517
1518
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1519
1520
		return $spotter_array;
1521
	}
1522
1523
	
1524
	
1525
	
1526
	/**
1527
	* Gets all the spotter information based on the airline
1528
	*
1529
	* @return Array the spotter information
1530
	*
1531
	*/
1532
	public function getSpotterDataByAirline($airline = '', $limit = '', $sort = '',$filters = array())
1533
	{
1534
		global $global_query;
1535
		
1536
		date_default_timezone_set('UTC');
1537
1538
		$query_values = array();
1539
		$limit_query = '';
1540
		$additional_query = '';
1541
		$filter_query = $this->getFilter($filters,true,true);
1542
		
1543
		if ($airline != "")
1544
		{
1545
			if (!is_string($airline))
1546
			{
1547
				return false;
1548
			} else {
1549
				$additional_query = " AND (spotter_output.airline_icao = :airline)";
1550
				$query_values = array(':airline' => $airline);
1551
			}
1552
		}
1553
		
1554
		if ($limit != "")
1555
		{
1556
			$limit_array = explode(",", $limit);
1557
			
1558
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1559
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1560
			
1561
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1562
			{
1563
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1564
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1565
			}
1566
		}
1567
		
1568
		if ($sort != "")
1569
		{
1570
			$search_orderby_array = $this->getOrderBy();
1571
			$orderby_query = $search_orderby_array[$sort]['sql'];
1572
		} else {
1573
			$orderby_query = " ORDER BY spotter_output.date DESC";
1574
		}
1575
1576
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1577
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1578
1579
		return $spotter_array;
1580
	}
1581
	
1582
	
1583
	/**
1584
	* Gets all the spotter information based on the airport
1585
	*
1586
	* @return Array the spotter information
1587
	*
1588
	*/
1589
	public function getSpotterDataByAirport($airport = '', $limit = '', $sort = '',$filters = array())
1590
	{
1591
		global $global_query;
1592
		
1593
		date_default_timezone_set('UTC');
1594
		$query_values = array();
1595
		$limit_query = '';
1596
		$additional_query = '';
1597
		$filter_query = $this->getFilter($filters,true,true);
1598
		
1599
		if ($airport != "")
1600
		{
1601
			if (!is_string($airport))
1602
			{
1603
				return false;
1604
			} else {
1605
				$additional_query .= " AND ((spotter_output.departure_airport_icao = :airport) OR (spotter_output.arrival_airport_icao = :airport))";
1606
				$query_values = array(':airport' => $airport);
1607
			}
1608
		}
1609
		
1610
		if ($limit != "")
1611
		{
1612
			$limit_array = explode(",", $limit);
1613
			
1614
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1615
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1616
			
1617
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1618
			{
1619
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1620
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1621
			}
1622
		}
1623
		
1624
		if ($sort != "")
1625
		{
1626
			$search_orderby_array = $this->getOrderBy();
1627
			$orderby_query = $search_orderby_array[$sort]['sql'];
1628
		} else {
1629
			$orderby_query = " ORDER BY spotter_output.date DESC";
1630
		}
1631
1632
		$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;
1633
1634
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1635
1636
		return $spotter_array;
1637
	}
1638
1639
1640
1641
	/**
1642
	* Gets all the spotter information based on the date
1643
	*
1644
	* @return Array the spotter information
1645
	*
1646
	*/
1647
	public function getSpotterDataByDate($date = '', $limit = '', $sort = '',$filter = array())
1648
	{
1649
		global $global_query, $globalTimezone, $globalDBdriver;
1650
		
1651
		$query_values = array();
1652
		$limit_query = '';
1653
		$additional_query = '';
1654
1655
		$filter_query = $this->getFilter($filter,true,true);
1656
		
1657
		if ($date != "")
1658
		{
1659
			if ($globalTimezone != '') {
1660
				date_default_timezone_set($globalTimezone);
1661
				$datetime = new DateTime($date);
1662
				$offset = $datetime->format('P');
1663
			} else {
1664
				date_default_timezone_set('UTC');
1665
				$datetime = new DateTime($date);
1666
				$offset = '+00:00';
1667
			}
1668
			if ($globalDBdriver == 'mysql') {
1669
				$additional_query = " AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date ";
1670
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':offset' => $offset);
1671
			} elseif ($globalDBdriver == 'pgsql') {
1672
				//$globalTimezone = 'UTC';
1673
				$additional_query = " AND to_char(spotter_output.date AT TIME ZONE :timezone,'YYYY-mm-dd') = :date ";
1674
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':timezone' => $globalTimezone);
1675
				//$additional_query = " AND to_char(spotter_output.date,'YYYY-mm-dd') = :date ";
1676
				//$query_values = array(':date' => $datetime->format('Y-m-d'));
1677
			}
1678
		}
1679
		
1680
		if ($limit != "")
1681
		{
1682
			$limit_array = explode(",", $limit);
1683
			
1684
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1685
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1686
			
1687
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1688
			{
1689
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1690
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1691
			}
1692
		}
1693
1694
		if ($sort != "")
1695
		{
1696
			$search_orderby_array = $this->getOrderBy();
1697
			$orderby_query = $search_orderby_array[$sort]['sql'];
1698
		} else {
1699
			$orderby_query = " ORDER BY spotter_output.date DESC";
1700
		}
1701
1702
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query.$orderby_query;
1703
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1704
		return $spotter_array;
1705
	}
1706
1707
1708
1709
	/**
1710
	* Gets all the spotter information based on the country name
1711
	*
1712
	* @return Array the spotter information
1713
	*
1714
	*/
1715
	public function getSpotterDataByCountry($country = '', $limit = '', $sort = '',$filters = array())
1716
	{
1717
		global $global_query;
1718
		
1719
		date_default_timezone_set('UTC');
1720
		
1721
		$query_values = array();
1722
		$limit_query = '';
1723
		$additional_query = '';
1724
		$filter_query = $this->getFilter($filters,true,true);
1725
		if ($country != "")
1726
		{
1727
			if (!is_string($country))
1728
			{
1729
				return false;
1730
			} else {
1731
				$additional_query .= " AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country))";
1732
				$additional_query .= " OR spotter_output.airline_country = :country";
1733
				$query_values = array(':country' => $country);
1734
			}
1735
		}
1736
		
1737
		if ($limit != "")
1738
		{
1739
			$limit_array = explode(",", $limit);
1740
			
1741
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1742
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1743
			
1744
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1745
			{
1746
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1747
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1748
			}
1749
		}
1750
					
1751
		if ($sort != "")
1752
		{
1753
			$search_orderby_array = $this->getOrderBy();
1754
			$orderby_query = $search_orderby_array[$sort]['sql'];
1755
		} else {
1756
			$orderby_query = " ORDER BY spotter_output.date DESC";
1757
		}
1758
1759
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1760
1761
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1762
1763
		return $spotter_array;
1764
	}	
1765
	
1766
	
1767
	/**
1768
	* Gets all the spotter information based on the manufacturer name
1769
	*
1770
	* @return Array the spotter information
1771
	*
1772
	*/
1773
	public function getSpotterDataByManufacturer($aircraft_manufacturer = '', $limit = '', $sort = '', $filters = array())
1774
	{
1775
		global $global_query;
1776
		
1777
		date_default_timezone_set('UTC');
1778
		
1779
		$query_values = array();
1780
		$additional_query = '';
1781
		$limit_query = '';
1782
		$filter_query = $this->getFilter($filters,true,true);
1783
		
1784
		if ($aircraft_manufacturer != "")
1785
		{
1786
			if (!is_string($aircraft_manufacturer))
1787
			{
1788
				return false;
1789
			} else {
1790
				$additional_query .= " AND (spotter_output.aircraft_manufacturer = :aircraft_manufacturer)";
1791
				$query_values = array(':aircraft_manufacturer' => $aircraft_manufacturer);
1792
			}
1793
		}
1794
		
1795
		if ($limit != "")
1796
		{
1797
			$limit_array = explode(",", $limit);
1798
			
1799
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1800
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1801
			
1802
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1803
			{
1804
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1805
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1806
			}
1807
		}
1808
1809
		if ($sort != "")
1810
		{
1811
			$search_orderby_array = $this->getOrderBy();
1812
			$orderby_query = $search_orderby_array[$sort]['sql'];
1813
		} else {
1814
			$orderby_query = " ORDER BY spotter_output.date DESC";
1815
		}
1816
1817
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1818
1819
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1820
1821
		return $spotter_array;
1822
	}
1823
1824
1825
  
1826
  
1827
	/**
1828
	* Gets a list of all aircraft that take a route
1829
	*
1830
	* @param String $departure_airport_icao ICAO code of departure airport
1831
	* @param String $arrival_airport_icao ICAO code of arrival airport
1832
	* @return Array the spotter information
1833
	*
1834
	*/
1835
	public function getSpotterDataByRoute($departure_airport_icao = '', $arrival_airport_icao = '', $limit = '', $sort = '', $filters = array())
1836
	{
1837
		global $global_query;
1838
		
1839
		$query_values = array();
1840
		$additional_query = '';
1841
		$limit_query = '';
1842
		$filter_query = $this->getFilter($filters,true,true);
1843
		if ($departure_airport_icao != "")
1844
		{
1845
			if (!is_string($departure_airport_icao))
1846
			{
1847
				return false;
1848
			} else {
1849
				$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
1850
				$additional_query .= " AND (spotter_output.departure_airport_icao = :departure_airport_icao)";
1851
				//$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";
1852
				$query_values = array(':departure_airport_icao' => $departure_airport_icao);
1853
			}
1854
		}
1855
		
1856
		if ($arrival_airport_icao != "")
1857
		{
1858
			if (!is_string($arrival_airport_icao))
1859
			{
1860
				return false;
1861
			} else {
1862
				$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
1863
				$additional_query .= " AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)";
1864
				//$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)";
1865
				$query_values = array_merge($query_values,array(':arrival_airport_icao' => $arrival_airport_icao));
1866
			}
1867
		}
1868
		
1869
		if ($limit != "")
1870
		{
1871
			$limit_array = explode(",", $limit);
1872
			
1873
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1874
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1875
			
1876
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1877
			{
1878
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1879
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1880
			}
1881
		}
1882
	
1883
		if ($sort != "")
1884
		{
1885
			$search_orderby_array = $this->getOrderBy();
1886
			$orderby_query = $search_orderby_array[$sort]['sql'];
1887
		} else {
1888
			$orderby_query = " ORDER BY spotter_output.date DESC";
1889
		}
1890
1891
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1892
          
1893
		//$result = mysqli_query($GLOBALS["___mysqli_ston"], $query);
1894
1895
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1896
1897
		return $spotter_array;
1898
	}
1899
	
1900
	
1901
	
1902
	/**
1903
	* Gets all the spotter information based on the special column in the table
1904
	*
1905
	* @return Array the spotter information
1906
	*
1907
	*/
1908
	public function getSpotterDataByHighlight($limit = '', $sort = '', $filter = array())
1909
	{
1910
		global $global_query;
1911
		
1912
		date_default_timezone_set('UTC');
1913
		$filter_query = $this->getFilter($filter,true,true);
1914
		$limit_query = '';
1915
		
1916
		if ($limit != "")
1917
		{
1918
			$limit_array = explode(",", $limit);
1919
			
1920
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1921
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1922
			
1923
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1924
			{
1925
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1926
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1927
			}
1928
		}
1929
		
1930
		if ($sort != "")
1931
		{
1932
			$search_orderby_array = $this->getOrderBy();
1933
			$orderby_query = $search_orderby_array[$sort]['sql'];
1934
		} else {
1935
			$orderby_query = " ORDER BY spotter_output.date DESC";
1936
		}
1937
1938
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' ".$orderby_query;
1939
1940
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1941
1942
		return $spotter_array;
1943
	}
1944
1945
	/**
1946
	* Gets all the highlight based on a aircraft registration
1947
	*
1948
	* @return String the highlight text
1949
	*
1950
	*/
1951
	public function getHighlightByRegistration($registration,$filter = array())
1952
	{
1953
		global $global_query;
1954
		
1955
		date_default_timezone_set('UTC');
1956
		$filter_query = $this->getFilter($filter,true,true);
1957
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
1958
		
1959
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' AND spotter_output.registration = :registration";
1960
		$sth = $this->db->prepare($query);
1961
		$sth->execute(array(':registration' => $registration));
1962
1963
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1964
		{
1965
			$highlight = $row['highlight'];
1966
		}
1967
		if (isset($highlight)) return $highlight;
1968
	}
1969
1970
	
1971
	/**
1972
	* Gets the squawk usage from squawk code
1973
	*
1974
	* @param String $squawk squawk code
1975
	* @param String $country country
1976
	* @return String usage
1977
	*
1978
	*/
1979
	public function getSquawkUsage($squawk = '',$country = 'FR')
1980
	{
1981
		
1982
		$squawk = filter_var($squawk,FILTER_SANITIZE_STRING);
1983
		$country = filter_var($country,FILTER_SANITIZE_STRING);
1984
1985
		$query  = "SELECT squawk.* FROM squawk WHERE squawk.code = :squawk AND squawk.country = :country LIMIT 1";
1986
		$query_values = array(':squawk' => ltrim($squawk,'0'), ':country' => $country);
1987
		
1988
		$sth = $this->db->prepare($query);
1989
		$sth->execute($query_values);
1990
    
1991
		$row = $sth->fetch(PDO::FETCH_ASSOC);
1992
		$sth->closeCursor();
1993
		if (count($row) > 0) {
1994
			return $row['usage'];
1995
		} else return '';
1996
	}
1997
1998
	/**
1999
	* Gets the airport icao from the iata
2000
	*
2001
	* @param String $airport_iata the iata code of the airport
2002
	* @return String airport iata
2003
	*
2004
	*/
2005
	public function getAirportIcao($airport_iata = '')
2006
	{
2007
		
2008
		$airport_iata = filter_var($airport_iata,FILTER_SANITIZE_STRING);
2009
2010
		$query  = "SELECT airport.* FROM airport WHERE airport.iata = :airport LIMIT 1";
2011
		$query_values = array(':airport' => $airport_iata);
2012
		
2013
		$sth = $this->db->prepare($query);
2014
		$sth->execute($query_values);
2015
		
2016
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2017
		$sth->closeCursor();
2018
		if (count($row) > 0) {
2019
			return $row['icao'];
2020
		} else return '';
2021
	}
2022
2023
	/**
2024
	* Gets the airport distance
2025
	*
2026
	* @param String $airport_icao the icao code of the airport
2027
	* @param Float $latitude the latitude
2028
	* @param Float $longitude the longitude
2029
	* @return Float distance to the airport
2030
	*
2031
	*/
2032
	public function getAirportDistance($airport_icao,$latitude,$longitude)
2033
	{
2034
		
2035
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
2036
2037
		$query  = "SELECT airport.latitude, airport.longitude FROM airport WHERE airport.icao = :airport LIMIT 1";
2038
		$query_values = array(':airport' => $airport_icao);
2039
		$sth = $this->db->prepare($query);
2040
		$sth->execute($query_values);
2041
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2042
		$sth->closeCursor();
2043
		if (count($row) > 0) {
2044
			$airport_latitude = $row['latitude'];
2045
			$airport_longitude = $row['longitude'];
2046
			$Common = new Common();
2047
			return $Common->distance($latitude,$longitude,$airport_latitude,$airport_longitude);
2048
		} else return '';
2049
	}
2050
	
2051
	/**
2052
	* Gets the airport info based on the icao
2053
	*
2054
	* @param String $airport the icao code of the airport
2055
	* @return Array airport information
2056
	*
2057
	*/
2058
	public function getAllAirportInfo($airport = '')
2059
	{
2060
		
2061
		$airport = filter_var($airport,FILTER_SANITIZE_STRING);
2062
2063
		$query_values = array();
2064
		if ($airport == 'NA') {
2065
			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' => ''));
2066
		} elseif ($airport == '') {
2067
			$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";
2068
		} else {
2069
			$query  = "SELECT airport.name, airport.city, airport.country, airport.iata, airport.icao, airport.latitude, airport.longitude, airport.altitude, airport.type, airport.home_link, airport.wikipedia_link, airport.image_thumb, airport.image FROM airport WHERE airport.icao = :airport LIMIT 1";
2070
			$query_values = array(':airport' => $airport);
2071
		}
2072
		
2073
		$sth = $this->db->prepare($query);
2074
		$sth->execute($query_values);
2075
		/*
2076
		$airport_array = array();
2077
		$temp_array = array();
2078
		
2079
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2080
		{
2081
			$temp_array['name'] = $row['name'];
2082
			$temp_array['city'] = $row['city'];
2083
			$temp_array['country'] = $row['country'];
2084
			$temp_array['iata'] = $row['iata'];
2085
			$temp_array['icao'] = $row['icao'];
2086
			$temp_array['latitude'] = $row['latitude'];
2087
			$temp_array['longitude'] = $row['longitude'];
2088
			$temp_array['altitude'] = $row['altitude'];
2089
			$temp_array['home_link'] = $row['home_link'];
2090
			$temp_array['wikipedia_link'] = $row['wikipedia_link'];
2091
			$temp_array['image'] = $row['image'];
2092
			$temp_array['image_thumb'] = $row['image_thumb'];
2093
2094
			$airport_array[] = $temp_array;
2095
		}
2096
2097
		return $airport_array;
2098
		*/
2099
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2100
	}
2101
	
2102
	/**
2103
	* Gets the airport info based on the country
2104
	*
2105
	* @param Array $countries Airports countries
2106
	* @return Array airport information
2107
	*
2108
	*/
2109
	public function getAllAirportInfobyCountry($countries)
2110
	{
2111
		$lst_countries = '';
2112
		foreach ($countries as $country) {
2113
			$country = filter_var($country,FILTER_SANITIZE_STRING);
2114
			if ($lst_countries == '') {
2115
				$lst_countries = "'".$country."'";
2116
			} else {
2117
				$lst_countries .= ",'".$country."'";
2118
			}
2119
		}
2120
		$query  = "SELECT airport.* FROM airport WHERE airport.country IN (".$lst_countries.")";
2121
		
2122
		$sth = $this->db->prepare($query);
2123
		$sth->execute();
2124
    
2125
		$airport_array = array();
2126
		$temp_array = array();
2127
		
2128
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2129
		{
2130
			$temp_array['name'] = $row['name'];
2131
			$temp_array['city'] = $row['city'];
2132
			$temp_array['country'] = $row['country'];
2133
			$temp_array['iata'] = $row['iata'];
2134
			$temp_array['icao'] = $row['icao'];
2135
			$temp_array['latitude'] = $row['latitude'];
2136
			$temp_array['longitude'] = $row['longitude'];
2137
			$temp_array['altitude'] = $row['altitude'];
2138
2139
			$airport_array[] = $temp_array;
2140
		}
2141
2142
		return $airport_array;
2143
	}
2144
	
2145
	/**
2146
	* Gets airports info based on the coord
2147
	*
2148
	* @param Array $coord Airports longitude min,latitude min, longitude max, latitude max
2149
	* @return Array airport information
2150
	*
2151
	*/
2152
	public function getAllAirportInfobyCoord($coord)
2153
	{
2154
		global $globalDBdriver;
2155
		if (is_array($coord)) {
2156
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2157
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2158
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2159
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2160
		} else return array();
2161
		if ($globalDBdriver == 'mysql') {
2162
			$query  = "SELECT airport.* FROM airport WHERE airport.latitude BETWEEN ".$minlat." AND ".$maxlat." AND airport.longitude BETWEEN ".$minlong." AND ".$maxlong." AND airport.type != 'closed'";
2163
		} else {
2164
			$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'";
2165
		}
2166
		$sth = $this->db->prepare($query);
2167
		$sth->execute();
2168
    
2169
		$airport_array = array();
2170
		
2171
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2172
		{
2173
			$temp_array = $row;
2174
2175
			$airport_array[] = $temp_array;
2176
		}
2177
2178
		return $airport_array;
2179
	}
2180
2181
	/**
2182
	* Gets waypoints info based on the coord
2183
	*
2184
	* @param Array $coord waypoints coord
2185
	* @return Array airport information
2186
	*
2187
	*/
2188
	public function getAllWaypointsInfobyCoord($coord)
2189
	{
2190
		if (is_array($coord)) {
2191
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2192
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2193
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2194
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2195
		} else return array();
2196
		//$query  = "SELECT waypoints.* FROM waypoints WHERE waypoints.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_begin BETWEEN ".$minlong." AND ".$maxlong;
2197
		$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.")";
2198
		//$query  = "SELECT waypoints.* FROM waypoints";
2199
		//$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";
2200
		//$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;
2201
		//$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;
2202
		//echo $query;
2203
		
2204
		$sth = $this->db->prepare($query);
2205
		$sth->execute();
2206
    
2207
		$waypoints_array = array();
2208
		
2209
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2210
		{
2211
			$temp_array = $row;
2212
2213
			$waypoints_array[] = $temp_array;
2214
		}
2215
2216
		return $waypoints_array;
2217
	}
2218
	
2219
	
2220
	/**
2221
	* Gets the airline info based on the icao code or iata code
2222
	*
2223
	* @param String $airline_icao the iata code of the airport
2224
	* @return Array airport information
2225
	*
2226
	*/
2227
	public function getAllAirlineInfo($airline_icao, $fromsource = NULL)
2228
	{
2229
		global $globalUseRealAirlines;
2230
		if (isset($globalUseRealAirlines) && $globalUseRealAirlines) $fromsource = NULL;
2231
		$airline_icao = strtoupper(filter_var($airline_icao,FILTER_SANITIZE_STRING));
2232
		if ($airline_icao == 'NA') {
2233
			$airline_array = array();
2234
			$airline_array[] = array('name' => 'Not Available','iata' => 'NA', 'icao' => 'NA', 'callsign' => '', 'country' => 'NA', 'type' =>'');
2235
			return $airline_array;
2236
		} else {
2237
			if (strlen($airline_icao) == 2) {
2238
				if ($fromsource === NULL) {
2239
					$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";
2240
				} else {
2241
					$query  = "SELECT airlines.name, airlines.iata, airlines.icao, airlines.callsign, airlines.country, airlines.type FROM airlines WHERE airlines.iata = :airline_icao AND airlines.active = 'Y' AND airlines.forsource = :fromsource LIMIT 1";
2242
				}
2243
			} else {
2244
				if ($fromsource === NULL) {
2245
					$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";
2246
				} else {
2247
					$query  = "SELECT airlines.name, airlines.iata, airlines.icao, airlines.callsign, airlines.country, airlines.type FROM airlines WHERE airlines.icao = :airline_icao AND airlines.active = 'Y' AND airlines.forsource = :fromsource LIMIT 1";
2248
				}
2249
			}
2250
			
2251
			$sth = $this->db->prepare($query);
2252
			if ($fromsource === NULL) {
2253
				$sth->execute(array(':airline_icao' => $airline_icao));
2254
			} else {
2255
				$sth->execute(array(':airline_icao' => $airline_icao,':fromsource' => $fromsource));
2256
			}
2257
                        /*
2258
			$airline_array = array();
2259
			$temp_array = array();
2260
		
2261
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2262
			{
2263
				$temp_array['name'] = $row['name'];
2264
				$temp_array['iata'] = $row['iata'];
2265
				$temp_array['icao'] = $row['icao'];
2266
				$temp_array['callsign'] = $row['callsign'];
2267
				$temp_array['country'] = $row['country'];
2268
				$temp_array['type'] = $row['type'];
2269
				$airline_array[] = $temp_array;
2270
			}
2271
			return $airline_array;
2272
			*/
2273
			$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2274
			if (empty($result) && $fromsource !== NULL) {
2275
				/*
2276
				$query = 'SELECT COUNT(*) AS nb FROM airlines WHERE forsource = :fromsource';
2277
				$sth = $this->db->prepare($query);
2278
				$sth->execute(array(':fromsource' => $fromsource));
2279
				$row = $sth->fetch(PDO::FETCH_ASSOC);
2280
				$sth->closeCursor();
2281
				if ($row['nb'] == 0) $result = $this->getAllAirlineInfo($airline_icao);
2282
				*/
2283
				$result = $this->getAllAirlineInfo($airline_icao);
2284
			}
2285
			return $result;
2286
		}
2287
	}
2288
	
2289
	/**
2290
	* Gets the airline info based on the airline name
2291
	*
2292
	* @param String $airline_name the name of the airline
2293
	* @return Array airline information
2294
	*
2295
	*/
2296
	public function getAllAirlineInfoByName($airline_name, $fromsource = NULL)
2297
	{
2298
		global $globalUseRealAirlines;
2299
		if (isset($globalUseRealAirlines) && $globalUseRealAirlines) $fromsource = NULL;
2300
		$airline_name = strtolower(filter_var($airline_name,FILTER_SANITIZE_STRING));
2301
		$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";
2302
		$sth = $this->db->prepare($query);
2303
		if ($fromsource === NULL) {
2304
			$sth->execute(array(':airline_name' => $airline_name));
2305
		} else {
2306
			$sth->execute(array(':airline_name' => $airline_name,':fromsource' => $fromsource));
2307
		}
2308
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2309
		if (empty($result) && $fromsource !== NULL) {
2310
			$query = 'SELECT COUNT(*) AS nb FROM airlines WHERE forsource = :fromsource';
2311
			$sth = $this->db->prepare($query);
2312
			$sth->execute(array(':fromsource' => $fromsource));
2313
			$row = $sth->fetch(PDO::FETCH_ASSOC);
2314
			$sth->closeCursor();
2315
			if ($row['nb'] == 0) $result = $this->getAllAirlineInfoByName($airline_name);
2316
		}
2317
		return $result;
2318
	}
2319
	
2320
	
2321
	
2322
	/**
2323
	* Gets the aircraft info based on the aircraft type
2324
	*
2325
	* @param String $aircraft_type the aircraft type
2326
	* @return Array aircraft information
2327
	*
2328
	*/
2329
	public function getAllAircraftInfo($aircraft_type)
2330
	{
2331
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2332
2333
		if ($aircraft_type == 'NA') {
2334
			return array(array('icao' => 'NA','type' => 'Not Available', 'manufacturer' => 'Not Available', 'aircraft_shadow' => NULL));
2335
		}
2336
		$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";
2337
		
2338
		$sth = $this->db->prepare($query);
2339
		$sth->execute(array(':aircraft_type' => $aircraft_type));
2340
		/*
2341
		$aircraft_array = array();
2342
		$temp_array = array();
2343
		
2344
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2345
		{
2346
			$temp_array = array();
2347
			$temp_array['icao'] = $row['icao'];
2348
			$temp_array['type'] = $row['type'];
2349
			$temp_array['manufacturer'] = $row['manufacturer'];
2350
			$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
2351
2352
			$aircraft_array[] = $temp_array;
2353
		}
2354
		return $aircraft_array;
2355
		*/
2356
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2357
	}
2358
2359
	/**
2360
	* Gets the aircraft icao based on the aircraft name/type
2361
	*
2362
	* @param String $aircraft_type the aircraft type
2363
	* @return String aircraft information
2364
	*
2365
	*/
2366
	public function getAircraftIcao($aircraft_type)
2367
	{
2368
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2369
		$all_aircraft = array('737-300' => 'B733',
2370
				'777-200' => 'B772',
2371
				'777-200ER' => 'B772',
2372
				'777-300ER' => 'B77W',
2373
				'c172p' => 'C172',
2374
				'aerostar' => 'AEST',
2375
				'A320-211' => 'A320',
2376
				'747-8i' => 'B748',
2377
				'A380' => 'A388');
2378
		if (isset($all_aircraft[$aircraft_type])) return $all_aircraft[$aircraft_type];
2379
2380
		$query  = "SELECT aircraft.icao FROM aircraft WHERE aircraft.type LIKE :saircraft_type OR aircraft.type = :aircraft_type OR aircraft.icao = :aircraft_type LIMIT 1";
2381
		$aircraft_type = strtoupper($aircraft_type);
2382
		$sth = $this->db->prepare($query);
2383
		$sth->execute(array(':saircraft_type' => '%'.$aircraft_type.'%',':aircraft_type' => $aircraft_type,));
2384
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2385
		if (isset($result[0]['icao'])) return $result[0]['icao'];
2386
		else return '';
2387
	}
2388
	
2389
	/**
2390
	* Gets the aircraft info based on the aircraft modes
2391
	*
2392
	* @param String $aircraft_modes the aircraft ident (hex)
2393
	* @return String aircraft type
2394
	*
2395
	*/
2396
	public function getAllAircraftType($aircraft_modes)
2397
	{
2398
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
2399
2400
		$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes ORDER BY FirstCreated DESC LIMIT 1";
2401
		
2402
		$sth = $this->db->prepare($query);
2403
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
2404
2405
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2406
		$sth->closeCursor();
2407
		if (isset($row['icaotypecode'])) {
2408
			$icao = $row['icaotypecode'];
2409
			if (isset($this->aircraft_correct_icaotype[$icao])) $icao = $this->aircraft_correct_icaotype[$icao];
2410
			return $icao;
2411
		} else return '';
2412
	}
2413
2414
	/**
2415
	* Gets the aircraft info based on the aircraft registration
2416
	*
2417
	* @param String $registration the aircraft registration
2418
	* @return String aircraft type
2419
	*
2420
	*/
2421
	public function getAllAircraftTypeByRegistration($registration)
2422
	{
2423
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2424
2425
		$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.registration = :registration ORDER BY FirstCreated DESC LIMIT 1";
2426
		
2427
		$sth = $this->db->prepare($query);
2428
		$sth->execute(array(':registration' => $registration));
2429
2430
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2431
		$sth->closeCursor();
2432
		if (isset($row['icaotypecode'])) {
2433
			return $row['icaotypecode'];
2434
		} else return '';
2435
	}
2436
2437
	/**
2438
	* Gets the spotter_id and flightaware_id based on the aircraft registration
2439
	*
2440
	* @param String $registration the aircraft registration
2441
	* @return Array spotter_id and flightaware_id
2442
	*
2443
	*/
2444
	public function getAllIDByRegistration($registration)
2445
	{
2446
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2447
2448
		$query  = "SELECT spotter_id,flightaware_id, date FROM spotter_output WHERE spotter_output.registration = :registration";
2449
		
2450
		$sth = $this->db->prepare($query);
2451
		$sth->execute(array(':registration' => $registration));
2452
2453
		$idarray = array();
2454
		while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
2455
			$date = $row['date'];
2456
			$idarray[$date] = array('flightaware_id' => $row['flightaware_id'],'spotter_id' => $row['spotter_id']);
2457
		}
2458
		return $idarray;
2459
	}
2460
2461
	/**
2462
	* Gets correct aircraft operator code
2463
	*
2464
	* @param String $operator the aircraft operator code (callsign)
2465
	* @return String aircraft operator code
2466
	*
2467
	*/
2468
	public function getOperator($operator)
2469
	{
2470
		$operator = filter_var($operator,FILTER_SANITIZE_STRING);
2471
		$query  = "SELECT translation.operator_correct FROM translation WHERE translation.operator = :operator LIMIT 1";
2472
		
2473
		$sth = $this->db->prepare($query);
2474
		$sth->execute(array(':operator' => $operator));
2475
2476
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2477
		$sth->closeCursor();
2478
		if (isset($row['operator_correct'])) {
2479
			return $row['operator_correct'];
2480
		} else return $operator;
2481
	}
2482
2483
	/**
2484
	* Gets the aircraft route based on the aircraft callsign
2485
	*
2486
	* @param String $callsign the aircraft callsign
2487
	* @return Array aircraft type
2488
	*
2489
	*/
2490
	public function getRouteInfo($callsign)
2491
	{
2492
		$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
2493
                if ($callsign == '') return array();
2494
		$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";
2495
		
2496
		$sth = $this->db->prepare($query);
2497
		$sth->execute(array(':callsign' => $callsign));
2498
2499
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2500
		$sth->closeCursor();
2501
		if (count($row) > 0) {
2502
			return $row;
2503
		} else return array();
2504
	}
2505
	
2506
	/**
2507
	* Gets the aircraft info based on the aircraft registration
2508
	*
2509
	* @param String $registration the aircraft registration
2510
	* @return Array aircraft information
2511
	*
2512
	*/
2513
	public function getAircraftInfoByRegistration($registration)
2514
	{
2515
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2516
2517
		$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";
2518
		
2519
		$sth = $this->db->prepare($query);
2520
		$sth->execute(array(':registration' => $registration));
2521
2522
		$aircraft_array = array();
2523
		$temp_array = array();
2524
		
2525
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2526
		{
2527
			$temp_array['airline_icao'] = $row['airline_icao'];
2528
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2529
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2530
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2531
2532
			$aircraft_array[] = $temp_array;
2533
		}
2534
2535
		return $aircraft_array;
2536
	}
2537
	
2538
	/**
2539
	* Gets the aircraft owner & base based on the aircraft registration
2540
	*
2541
	* @param String $registration the aircraft registration
2542
	* @return Array aircraft information
2543
	*
2544
	*/
2545
	public function getAircraftOwnerByRegistration($registration)
2546
	{
2547
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2548
		$Connection = new Connection($this->db);
2549
		if ($Connection->tableExists('aircraft_owner')) {
2550
			$query  = "SELECT aircraft_owner.base, aircraft_owner.owner, aircraft_owner.date_first_reg FROM aircraft_owner WHERE registration = :registration LIMIT 1";
2551
			$sth = $this->db->prepare($query);
2552
			$sth->execute(array(':registration' => $registration));
2553
			$result = $sth->fetch(PDO::FETCH_ASSOC);
2554
			$sth->closeCursor();
2555
			return $result;
2556
		} else return array();
2557
	}
2558
	
2559
  
2560
  /**
2561
	* Gets all flights (but with only little info)
2562
	*
2563
	* @return Array basic flight information
2564
	*
2565
	*/
2566
	public function getAllFlightsforSitemap()
2567
	{
2568
		//$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 ";
2569
		$query  = "SELECT spotter_output.spotter_id FROM spotter_output ORDER BY spotter_id DESC LIMIT 200 OFFSET 0";
2570
		
2571
		$sth = $this->db->prepare($query);
2572
		$sth->execute();
2573
                  /*
2574
		$flight_array = array();
2575
		$temp_array = array();
2576
		
2577
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2578
		{
2579
			$temp_array['spotter_id'] = $row['spotter_id'];
2580
//			$temp_array['ident'] = $row['ident'];
2581
//			$temp_array['airline_name'] = $row['airline_name'];
2582
//			$temp_array['aircraft_type'] = $row['aircraft_icao'];
2583
//			$temp_array['aircraft_name'] = $row['aircraft_name'];
2584
			//$temp_array['image'] = $row['image'];
2585
2586
			$flight_array[] = $temp_array;
2587
		}
2588
2589
		return $flight_array;
2590
		*/
2591
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2592
	}
2593
  
2594
	/**
2595
	* Gets a list of all aircraft manufacturers
2596
	*
2597
	* @return Array list of aircraft types
2598
	*
2599
	*/
2600
	public function getAllManufacturers()
2601
	{
2602
		/*
2603
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer AS aircraft_manufacturer
2604
								FROM spotter_output
2605
								WHERE spotter_output.aircraft_manufacturer <> '' 
2606
								ORDER BY spotter_output.aircraft_manufacturer ASC";
2607
		  */
2608
		
2609
		$query = "SELECT DISTINCT manufacturer AS aircraft_manufacturer FROM aircraft WHERE manufacturer <> '' ORDER BY manufacturer ASC";
2610
		$sth = $this->db->prepare($query);
2611
		$sth->execute();
2612
2613
		$manufacturer_array = array();
2614
		$temp_array = array();
2615
		
2616
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2617
		{
2618
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2619
2620
			$manufacturer_array[] = $temp_array;
2621
		}
2622
2623
		return $manufacturer_array;
2624
	}
2625
  
2626
  
2627
  /**
2628
	* Gets a list of all aircraft types
2629
	*
2630
	* @return Array list of aircraft types
2631
	*
2632
	*/
2633
	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...
2634
	{
2635
		/*
2636
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao AS aircraft_icao, spotter_output.aircraft_name AS aircraft_name
2637
								FROM spotter_output  
2638
								WHERE spotter_output.aircraft_icao <> '' 
2639
								ORDER BY spotter_output.aircraft_name ASC";
2640
								
2641
		*/
2642
		//$filter_query = $this->getFilter($filters,true,true);
2643
		//$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";
2644
2645
		$query = "SELECT DISTINCT icao AS aircraft_icao, type AS aircraft_name, manufacturer AS aircraft_manufacturer FROM aircraft WHERE icao <> '' ORDER BY aircraft_manufacturer ASC";
2646
		
2647
		$sth = $this->db->prepare($query);
2648
		$sth->execute();
2649
2650
		$aircraft_array = array();
2651
		$temp_array = array();
2652
		
2653
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2654
		{
2655
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2656
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2657
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2658
2659
			$aircraft_array[] = $temp_array;
2660
		}
2661
2662
		return $aircraft_array;
2663
	}
2664
	
2665
	
2666
	/**
2667
	* Gets a list of all aircraft registrations
2668
	*
2669
	* @return Array list of aircraft registrations
2670
	*
2671
	*/
2672
	public function getAllAircraftRegistrations($filters = array())
2673
	{
2674
		$filter_query = $this->getFilter($filters,true,true);
2675
		$query  = "SELECT DISTINCT spotter_output.registration 
2676
				FROM spotter_output".$filter_query." spotter_output.registration <> '' 
2677
				ORDER BY spotter_output.registration ASC";
2678
2679
		$sth = $this->db->prepare($query);
2680
		$sth->execute();
2681
2682
		$aircraft_array = array();
2683
		$temp_array = array();
2684
		
2685
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2686
		{
2687
			$temp_array['registration'] = $row['registration'];
2688
2689
			$aircraft_array[] = $temp_array;
2690
		}
2691
2692
		return $aircraft_array;
2693
	}
2694
2695
	/**
2696
	* Gets all source name
2697
	*
2698
	* @param String type format of source
2699
	* @return Array list of source name
2700
	*
2701
	*/
2702
	public function getAllSourceName($type = '',$filters = array())
2703
	{
2704
		$filter_query = $this->getFilter($filters,true,true);
2705
		$query_values = array();
2706
		$query  = "SELECT DISTINCT spotter_output.source_name 
2707
				FROM spotter_output".$filter_query." spotter_output.source_name <> ''";
2708
		if ($type != '') {
2709
			$query_values = array(':type' => $type);
2710
			$query .= " AND format_source = :type";
2711
		}
2712
		$query .= " ORDER BY spotter_output.source_name ASC";
2713
2714
		$sth = $this->db->prepare($query);
2715
		if (!empty($query_values)) $sth->execute($query_values);
2716
		else $sth->execute();
2717
2718
		$source_array = array();
2719
		$temp_array = array();
2720
		
2721
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2722
		{
2723
			$temp_array['source_name'] = $row['source_name'];
2724
			$source_array[] = $temp_array;
2725
		}
2726
		return $source_array;
2727
	}
2728
2729
2730
2731
	/**
2732
	* Gets a list of all airline names
2733
	*
2734
	* @return Array list of airline names
2735
	*
2736
	*/
2737
	public function getAllAirlineNames($airline_type = '',$forsource = NULL,$filters = array())
2738
	{
2739
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2740
		$filter_query = $this->getFilter($filters,true,true);
2741
		$airline_type = filter_var($airline_type,FILTER_SANITIZE_STRING);
2742
		if ($airline_type == '' || $airline_type == 'all') {
2743
			/*
2744
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2745
								FROM spotter_output
2746
								WHERE spotter_output.airline_icao <> '' 
2747
								ORDER BY spotter_output.airline_name ASC";
2748
			*/
2749
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2750
			elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2751
			elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2752
			if ($forsource === NULL) {
2753
				$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";
2754
				$query_data = array();
2755
			} else {
2756
				$query = "SELECT DISTINCT icao AS airline_icao, name AS airline_name, type AS airline_type FROM airlines WHERE forsource = :forsource ORDER BY name ASC";
2757
				$query_data = array(':forsource' => $forsource);
2758
			}
2759
		} else {
2760
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2761
					FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
2762
					AND spotter_output.airline_type = :airline_type 
2763
					ORDER BY spotter_output.airline_icao ASC";
2764
			$query_data = array(':airline_type' => $airline_type);
2765
		}
2766
		
2767
		$sth = $this->db->prepare($query);
2768
		$sth->execute($query_data);
2769
    
2770
		$airline_array = array();
2771
		$temp_array = array();
2772
		
2773
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2774
		{
2775
			$temp_array['airline_icao'] = $row['airline_icao'];
2776
			$temp_array['airline_name'] = $row['airline_name'];
2777
			$temp_array['airline_type'] = $row['airline_type'];
2778
2779
			$airline_array[] = $temp_array;
2780
		}
2781
		return $airline_array;
2782
	}
2783
	
2784
	/**
2785
	* Gets a list of all alliance names
2786
	*
2787
	* @return Array list of alliance names
2788
	*
2789
	*/
2790
	public function getAllAllianceNames($forsource = NULL,$filters = array())
2791
	{
2792
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2793
		$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...
2794
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2795
		elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2796
		elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2797
		if ($forsource === NULL) {
2798
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND forsource IS NULL ORDER BY alliance ASC";
2799
			$query_data = array();
2800
		} else {
2801
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND  forsource = :forsource ORDER BY alliance ASC";
2802
			$query_data = array(':forsource' => $forsource);
2803
		}
2804
		
2805
		$sth = $this->db->prepare($query);
2806
		$sth->execute($query_data);
2807
    
2808
		$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...
2809
		$alliance_array = $sth->fetchAll(PDO::FETCH_ASSOC);
2810
		return $alliance_array;
2811
	}
2812
	
2813
	/**
2814
	* Gets a list of all airline countries
2815
	*
2816
	* @return Array list of airline countries
2817
	*
2818
	*/
2819
	public function getAllAirlineCountries($filters = array())
2820
	{
2821
		$filter_query = $this->getFilter($filters,true,true);
2822
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
2823
				FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
2824
				ORDER BY spotter_output.airline_country ASC";
2825
		
2826
		//$query = "SELECT DISTINCT country AS airline_country FROM airlines WHERE country <> '' AND active = 'Y' ORDER BY country ASC";
2827
		$sth = $this->db->prepare($query);
2828
		$sth->execute();
2829
2830
		$airline_array = array();
2831
		$temp_array = array();
2832
		
2833
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2834
		{
2835
			$temp_array['airline_country'] = $row['airline_country'];
2836
2837
			$airline_array[] = $temp_array;
2838
		}
2839
2840
		return $airline_array;
2841
	}
2842
2843
	
2844
	
2845
	/**
2846
	* Gets a list of all departure & arrival names
2847
	*
2848
	* @return Array list of airport names
2849
	*
2850
	*/
2851
	public function getAllAirportNames($filters = array())
2852
	{
2853
		$filter_query = $this->getFilter($filters,true,true);
2854
		$airport_array = array();
2855
		$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
2856
				FROM spotter_output".$filter_query." spotter_output.departure_airport_icao <> '' AND spotter_output.departure_airport_icao <> 'NA' 
2857
				ORDER BY spotter_output.departure_airport_city ASC";
2858
		
2859
		//$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";
2860
		$sth = $this->db->prepare($query);
2861
		$sth->execute();
2862
2863
		$temp_array = array();
2864
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2865
		{
2866
			$temp_array['airport_icao'] = $row['airport_icao'];
2867
			$temp_array['airport_name'] = $row['airport_name'];
2868
			$temp_array['airport_city'] = $row['airport_city'];
2869
			$temp_array['airport_country'] = $row['airport_country'];
2870
2871
			$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2872
		}
2873
2874
		$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
2875
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> '' AND spotter_output.arrival_airport_icao <> 'NA' 
2876
								ORDER BY spotter_output.arrival_airport_city ASC";
2877
					
2878
		$sth = $this->db->prepare($query);
2879
		$sth->execute();
2880
2881
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2882
			{
2883
		//	if ($airport_array[$row['airport_city'].",".$row['airport_name']]['airport_icao'] != $row['airport_icao'])
2884
		//	{
2885
				$temp_array['airport_icao'] = $row['airport_icao'];
2886
				$temp_array['airport_name'] = $row['airport_name'];
2887
				$temp_array['airport_city'] = $row['airport_city'];
2888
				$temp_array['airport_country'] = $row['airport_country'];
2889
				
2890
				$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2891
		//	}
2892
		}
2893
2894
		return $airport_array;
2895
	} 
2896
2897
	/**
2898
	* Gets a list of all owner names
2899
	*
2900
	* @return Array list of owner names
2901
	*
2902
	*/
2903
	public function getAllOwnerNames($filters = array())
2904
	{
2905
		$filter_query = $this->getFilter($filters,true,true);
2906
		$query  = "SELECT DISTINCT spotter_output.owner_name
2907
				FROM spotter_output".$filter_query." spotter_output.owner_name <> '' 
2908
				ORDER BY spotter_output.owner_name ASC";
2909
		
2910
		$sth = $this->db->prepare($query);
2911
		$sth->execute();
2912
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2913
	} 
2914
2915
	/**
2916
	* Gets a list of all pilot names and pilot ids
2917
	*
2918
	* @return Array list of pilot names and pilot ids
2919
	*
2920
	*/
2921
	public function getAllPilotNames($filters = array())
2922
	{
2923
		$filter_query = $this->getFilter($filters,true,true);
2924
		$query  = "SELECT DISTINCT spotter_output.pilot_name, spotter_output.pilot_id
2925
				FROM spotter_output".$filter_query." spotter_output.pilot_name <> '' 
2926
				ORDER BY spotter_output.pilot_name ASC";
2927
		
2928
		$sth = $this->db->prepare($query);
2929
		$sth->execute();
2930
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2931
	} 
2932
	
2933
	
2934
	/**
2935
	* Gets a list of all departure & arrival airport countries
2936
	*
2937
	* @return Array list of airport countries
2938
	*
2939
	*/
2940
	public function getAllAirportCountries($filters = array())
2941
	{
2942
		$airport_array = array();
2943
					
2944
		  /*
2945
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
2946
								FROM spotter_output
2947
								WHERE spotter_output.departure_airport_country <> '' 
2948
								ORDER BY spotter_output.departure_airport_country ASC";
2949
		*/
2950
		$query = "SELECT DISTINCT country AS airport_country FROM airport ORDER BY country ASC";
2951
		
2952
		$sth = $this->db->prepare($query);
2953
		$sth->execute();
2954
   
2955
		$temp_array = array();
2956
		
2957
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2958
		{
2959
			$temp_array['airport_country'] = $row['airport_country'];
2960
2961
			$airport_array[$row['airport_country']] = $temp_array;
2962
		}
2963
		$filter_query = $this->getFilter($filters,true,true);
2964
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
2965
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
2966
								ORDER BY spotter_output.arrival_airport_country ASC";
2967
					
2968
		$sth = $this->db->prepare($query);
2969
		$sth->execute();
2970
		
2971
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2972
		{
2973
			if (isset($airport_array[$row['airport_country']]['airport_country']) && $airport_array[$row['airport_country']]['airport_country'] != $row['airport_country'])
2974
			{
2975
				$temp_array['airport_country'] = $row['airport_country'];
2976
				$airport_array[$row['airport_country']] = $temp_array;
2977
			}
2978
		}
2979
2980
		return $airport_array;
2981
	} 
2982
	
2983
	
2984
	
2985
	
2986
	/**
2987
	* Gets a list of all countries (airline, departure airport & arrival airport)
2988
	*
2989
	* @return Array list of countries
2990
	*
2991
	*/
2992
	public function getAllCountries($filters = array())
2993
	{
2994
		$Connection= new Connection($this->db);
2995
		if ($Connection->tableExists('countries')) {
2996
			$query  = "SELECT countries.name AS airport_country
2997
				FROM countries
2998
				ORDER BY countries.name ASC";
2999
			$sth = $this->db->prepare($query);
3000
			$sth->execute();
3001
   
3002
			$temp_array = array();
3003
			$country_array = array();
3004
		
3005
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
3006
			{
3007
				$temp_array['country'] = $row['airport_country'];
3008
				$country_array[$row['airport_country']] = $temp_array;
3009
			}
3010
		} else {
3011
			$filter_query = $this->getFilter($filters,true,true);
3012
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
3013
								FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' 
3014
								ORDER BY spotter_output.departure_airport_country ASC";
3015
3016
			$sth = $this->db->prepare($query);
3017
			$sth->execute();
3018
   
3019
			$temp_array = array();
3020
			$country_array = array();
3021
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
3022
			{
3023
				$temp_array['country'] = $row['airport_country'];
3024
				$country_array[$row['airport_country']] = $temp_array;
3025
			}
3026
3027
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
3028
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
3029
								ORDER BY spotter_output.arrival_airport_country ASC";
3030
					
3031
		$sth = $this->db->prepare($query);
3032
		$sth->execute();
3033
		
3034
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3035
		{
3036
			if ($country_array[$row['airport_country']]['country'] != $row['airport_country'])
3037
			{
3038
				$temp_array['country'] = $row['airport_country'];
3039
				
3040
				$country_array[$row['country']] = $temp_array;
3041
			}
3042
		}
3043
		
3044
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
3045
								FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
3046
								ORDER BY spotter_output.airline_country ASC";
3047
					
3048
		$sth = $this->db->prepare($query);
3049
		$sth->execute();
3050
		
3051
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3052
		{
3053
			if (isset($country_array[$row['airline_country']]['country']) && $country_array[$row['airline_country']]['country'] != $row['airline_country'])
3054
			{
3055
				$temp_array['country'] = $row['airline_country'];
3056
				
3057
				$country_array[$row['country']] = $temp_array;
3058
			}
3059
		}
3060
		}  
3061
		return $country_array;
3062
	} 
3063
	
3064
	
3065
	
3066
	
3067
	/**
3068
	* Gets a list of all idents/callsigns
3069
	*
3070
	* @return Array list of ident/callsign names
3071
	*
3072
	*/
3073
	public function getAllIdents($filters = array())
3074
	{
3075
		$filter_query = $this->getFilter($filters,true,true);
3076
		$query  = "SELECT DISTINCT spotter_output.ident
3077
								FROM spotter_output".$filter_query." spotter_output.ident <> '' 
3078
								ORDER BY spotter_output.date ASC LIMIT 700 OFFSET 0";
3079
3080
		$sth = $this->db->prepare($query);
3081
		$sth->execute();
3082
    
3083
		$ident_array = array();
3084
		$temp_array = array();
3085
		
3086
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3087
		{
3088
			$temp_array['ident'] = $row['ident'];
3089
			$ident_array[] = $temp_array;
3090
		}
3091
3092
		return $ident_array;
3093
	}
3094
3095
	/**
3096
	* Get a list of flights from airport since 7 days
3097
	* @return Array number, icao, name and city of airports
3098
	*/
3099
3100
	public function getLast7DaysAirportsDeparture($airport_icao = '',$filters = array()) {
3101
		global $globalTimezone, $globalDBdriver;
3102
		$filter_query = $this->getFilter($filters,true,true);
3103
		if ($globalTimezone != '') {
3104
			date_default_timezone_set($globalTimezone);
3105
			$datetime = new DateTime();
3106
			$offset = $datetime->format('P');
3107
		} else $offset = '+00:00';
3108
		if ($airport_icao == '') {
3109
			if ($globalDBdriver == 'mysql') {
3110
				$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";
3111
			} else {
3112
				$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";
3113
			}
3114
			$sth = $this->db->prepare($query);
3115
			$sth->execute(array(':offset' => $offset));
3116
		} else {
3117
			if ($globalDBdriver == 'mysql') {
3118
				$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";
3119
			} else {
3120
				$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";
3121
			}
3122
			$sth = $this->db->prepare($query);
3123
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3124
		}
3125
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3126
	}
3127
3128
	/**
3129
	* Get a list of flights from airport since 7 days
3130
	* @return Array number, icao, name and city of airports
3131
	*/
3132
3133
	public function getLast7DaysAirportsDepartureByAirlines($airport_icao = '') {
3134
		global $globalTimezone, $globalDBdriver;
3135
		if ($globalTimezone != '') {
3136
			date_default_timezone_set($globalTimezone);
3137
			$datetime = new DateTime();
3138
			$offset = $datetime->format('P');
3139
		} else $offset = '+00:00';
3140
		if ($airport_icao == '') {
3141
			if ($globalDBdriver == 'mysql') {
3142
				$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";
3143
			} else {
3144
				$query = "SELECT spotter_output.airline_icao, COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, 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";
3145
			}
3146
			$sth = $this->db->prepare($query);
3147
			$sth->execute(array(':offset' => $offset));
3148
		} else {
3149
			if ($globalDBdriver == 'mysql') {
3150
				$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";
3151
			} else {
3152
				$query = "SELECT spotter_output.airline_icao, COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, 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";
3153
			}
3154
			$sth = $this->db->prepare($query);
3155
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3156
		}
3157
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3158
	}
3159
3160
	/**
3161
	* Get a list of flights from detected airport since 7 days
3162
	* @return Array number, icao, name and city of airports
3163
	*/
3164
3165
	public function getLast7DaysDetectedAirportsDeparture($airport_icao = '', $filters = array()) {
3166
		global $globalTimezone, $globalDBdriver;
3167
		$filter_query = $this->getFilter($filters,true,true);
3168
		if ($globalTimezone != '') {
3169
			date_default_timezone_set($globalTimezone);
3170
			$datetime = new DateTime();
3171
			$offset = $datetime->format('P');
3172
		} else $offset = '+00:00';
3173
		if ($airport_icao == '') {
3174
			if ($globalDBdriver == 'mysql') {
3175
				$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 
3176
				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 <> '' 
3177
				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";
3178
			} else {
3179
				$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 
3180
				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 <> '' 
3181
				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";
3182
			}
3183
			$sth = $this->db->prepare($query);
3184
			$sth->execute(array(':offset' => $offset));
3185
		} else {
3186
			if ($globalDBdriver == 'mysql') {
3187
				$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 
3188
				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 
3189
				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";
3190
			} else {
3191
				$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 
3192
				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";
3193
			}
3194
			$sth = $this->db->prepare($query);
3195
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3196
		}
3197
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3198
	}
3199
3200
	/**
3201
	* Get a list of flights from detected airport since 7 days
3202
	* @return Array number, icao, name and city of airports
3203
	*/
3204
3205
	public function getLast7DaysDetectedAirportsDepartureByAirlines($airport_icao = '') {
3206
		global $globalTimezone, $globalDBdriver;
3207
		if ($globalTimezone != '') {
3208
			date_default_timezone_set($globalTimezone);
3209
			$datetime = new DateTime();
3210
			$offset = $datetime->format('P');
3211
		} else $offset = '+00:00';
3212
		if ($airport_icao == '') {
3213
			if ($globalDBdriver == 'mysql') {
3214
				$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 
3215
				FROM `spotter_output`, airport 
3216
				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 <> '' 
3217
				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";
3218
			} else {
3219
				$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 
3220
				FROM spotter_output, airport 
3221
				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 <> '' 
3222
				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";
3223
			}
3224
			$sth = $this->db->prepare($query);
3225
			$sth->execute(array(':offset' => $offset));
3226
		} else {
3227
			if ($globalDBdriver == 'mysql') {
3228
				$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 
3229
				FROM `spotter_output`, airport 
3230
				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 
3231
				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";
3232
			} else {
3233
				$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 
3234
				FROM spotter_output, airport 
3235
				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";
3236
			}
3237
			$sth = $this->db->prepare($query);
3238
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3239
		}
3240
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3241
	}
3242
3243
3244
	/**
3245
	* Get a list of flights to airport since 7 days
3246
	* @return Array number, icao, name and city of airports
3247
	*/
3248
3249
	public function getLast7DaysAirportsArrival($airport_icao = '', $filters = array()) {
3250
		global $globalTimezone, $globalDBdriver;
3251
		$filter_query = $this->getFilter($filters,true,true);
3252
		if ($globalTimezone != '') {
3253
			date_default_timezone_set($globalTimezone);
3254
			$datetime = new DateTime();
3255
			$offset = $datetime->format('P');
3256
		} else $offset = '+00:00';
3257
		if ($airport_icao == '') {
3258
			if ($globalDBdriver == 'mysql') {
3259
				$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";
3260
			} else {
3261
				$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";
3262
			}
3263
			$sth = $this->db->prepare($query);
3264
			$sth->execute(array(':offset' => $offset));
3265
		} else {
3266
			if ($globalDBdriver == 'mysql') {
3267
				$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";
3268
			} else {
3269
				$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";
3270
			}
3271
			$sth = $this->db->prepare($query);
3272
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3273
		}
3274
		
3275
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3276
	}
3277
3278
3279
	/**
3280
	* Get a list of flights detected to airport since 7 days
3281
	* @return Array number, icao, name and city of airports
3282
	*/
3283
3284
	public function getLast7DaysDetectedAirportsArrival($airport_icao = '',$filters = array()) {
3285
		global $globalTimezone, $globalDBdriver;
3286
		$filter_query = $this->getFilter($filters,true,true);
3287
		if ($globalTimezone != '') {
3288
			date_default_timezone_set($globalTimezone);
3289
			$datetime = new DateTime();
3290
			$offset = $datetime->format('P');
3291
		} else $offset = '+00:00';
3292
		if ($airport_icao == '') {
3293
			if ($globalDBdriver == 'mysql') {
3294
				$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 
3295
				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 <> '' 
3296
				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";
3297
			} else {
3298
				$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 
3299
				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 <> '' 
3300
				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";
3301
			}
3302
			$sth = $this->db->prepare($query);
3303
			$sth->execute(array(':offset' => $offset));
3304
		} else {
3305
			if ($globalDBdriver == 'mysql') {
3306
				$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 
3307
				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 
3308
				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";
3309
			} else {
3310
				$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 
3311
				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 
3312
				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";
3313
			}
3314
			$sth = $this->db->prepare($query);
3315
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3316
		}
3317
		
3318
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3319
	}
3320
3321
3322
	/**
3323
	* Get a list of flights to airport since 7 days
3324
	* @return Array number, icao, name and city of airports
3325
	*/
3326
3327
	public function getLast7DaysAirportsArrivalByAirlines($airport_icao = '') {
3328
		global $globalTimezone, $globalDBdriver;
3329
		if ($globalTimezone != '') {
3330
			date_default_timezone_set($globalTimezone);
3331
			$datetime = new DateTime();
3332
			$offset = $datetime->format('P');
3333
		} else $offset = '+00:00';
3334
		if ($airport_icao == '') {
3335
			if ($globalDBdriver == 'mysql') {
3336
				$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";
3337
			} else {
3338
				$query = "SELECT spotter_output.airline_icao, COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, 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";
3339
			}
3340
			$sth = $this->db->prepare($query);
3341
			$sth->execute(array(':offset' => $offset));
3342
		} else {
3343
			if ($globalDBdriver == 'mysql') {
3344
				$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";
3345
			} else {
3346
				$query = "SELECT spotter_output.airline_icao, COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, 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";
3347
			}
3348
			$sth = $this->db->prepare($query);
3349
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3350
		}
3351
		
3352
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3353
	}
3354
3355
3356
	/**
3357
	* Get a list of flights detected to airport since 7 days
3358
	* @return Array number, icao, name and city of airports
3359
	*/
3360
3361
	public function getLast7DaysDetectedAirportsArrivalByAirlines($airport_icao = '') {
3362
		global $globalTimezone, $globalDBdriver;
3363
		if ($globalTimezone != '') {
3364
			date_default_timezone_set($globalTimezone);
3365
			$datetime = new DateTime();
3366
			$offset = $datetime->format('P');
3367
		} else $offset = '+00:00';
3368
		if ($airport_icao == '') {
3369
			if ($globalDBdriver == 'mysql') {
3370
				$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 
3371
				FROM `spotter_output`, airport 
3372
				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 <> '' 
3373
				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";
3374
			} else {
3375
				$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 
3376
				FROM spotter_output, airport 
3377
				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 <> '' 
3378
				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";
3379
			}
3380
			$sth = $this->db->prepare($query);
3381
			$sth->execute(array(':offset' => $offset));
3382
		} else {
3383
			if ($globalDBdriver == 'mysql') {
3384
				$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 
3385
				FROM `spotter_output`, airport 
3386
				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 
3387
				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";
3388
			} else {
3389
				$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 
3390
				FROM spotter_output, airport 
3391
				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 
3392
				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";
3393
			}
3394
			$sth = $this->db->prepare($query);
3395
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3396
		}
3397
		
3398
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3399
	}
3400
3401
3402
	/**
3403
	* Gets a list of all dates
3404
	*
3405
	* @return Array list of date names
3406
	*
3407
	*/
3408
	public function getAllDates()
3409
	{
3410
		global $globalTimezone, $globalDBdriver;
3411
		if ($globalTimezone != '') {
3412
			date_default_timezone_set($globalTimezone);
3413
			$datetime = new DateTime();
3414
			$offset = $datetime->format('P');
3415
		} else $offset = '+00:00';
3416
3417
		if ($globalDBdriver == 'mysql') {
3418
			$query  = "SELECT DISTINCT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) as date
3419
								FROM spotter_output
3420
								WHERE spotter_output.date <> '' 
3421
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3422
		} else {
3423
			$query  = "SELECT DISTINCT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date
3424
								FROM spotter_output
3425
								WHERE spotter_output.date <> '' 
3426
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3427
		}
3428
		
3429
		$sth = $this->db->prepare($query);
3430
		$sth->execute(array(':offset' => $offset));
3431
    
3432
		$date_array = array();
3433
		$temp_array = array();
3434
		
3435
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3436
		{
3437
			$temp_array['date'] = $row['date'];
3438
3439
			$date_array[] = $temp_array;
3440
		}
3441
3442
		return $date_array;
3443
	}
3444
	
3445
	
3446
	
3447
	/**
3448
	* Gets all route combinations
3449
	*
3450
	* @return Array the route list
3451
	*
3452
	*/
3453
	public function getAllRoutes()
3454
	{
3455
		$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 
3456
				FROM spotter_output
3457
				WHERE spotter_output.ident <> '' 
3458
				GROUP BY route
3459
				ORDER BY route ASC";
3460
3461
		$sth = $this->db->prepare($query);
3462
		$sth->execute();
3463
3464
		$routes_array = array();
3465
		$temp_array = array();
3466
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3467
		{
3468
			$temp_array['route'] = $row['route'];
3469
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
3470
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
3471
3472
			$routes_array[] = $temp_array;
3473
		}
3474
		return $routes_array;
3475
	}
3476
3477
	/**
3478
	* Update ident spotter data
3479
	*
3480
	* @param String $flightaware_id the ID from flightaware
3481
	* @param String $ident the flight ident
3482
	* @return String success or false
3483
	*
3484
	*/	
3485
	public function updateIdentSpotterData($flightaware_id = '', $ident = '',$fromsource = NULL)
3486
	{
3487
		if (!is_numeric(substr($ident, 0, 3)))
3488
		{
3489
			if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3490
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3491
			} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3492
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3493
			} else {
3494
				$airline_array = $this->getAllAirlineInfo("NA");
3495
			}
3496
			if (count($airline_array) == 0) {
3497
				$airline_array = $this->getAllAirlineInfo("NA");
3498
			}
3499
			if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3500
				$airline_array = $this->getAllAirlineInfo("NA");
3501
			}
3502
		} else {
3503
			$airline_array = $this->getAllAirlineInfo("NA");
3504
		}
3505
                $airline_name = $airline_array[0]['name'];
3506
                $airline_icao = $airline_array[0]['icao'];
3507
                $airline_country = $airline_array[0]['country'];
3508
                $airline_type = $airline_array[0]['type'];
3509
3510
3511
		$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';
3512
                $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);
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
	* Update latest spotter data
3526
	*
3527
	* @param String $flightaware_id the ID from flightaware
3528
	* @param String $ident the flight ident
3529
	* @param String $arrival_airport_icao the arrival airport
3530
	* @return String success or false
3531
	*
3532
	*/	
3533
	public function updateLatestSpotterData($flightaware_id = '', $ident = '', $latitude = '', $longitude = '', $altitude = '', $ground = false, $groundspeed = NULL, $date = '', $arrival_airport_icao = '',$arrival_airport_time = '')
3534
	{
3535
		if ($groundspeed == '') $groundspeed = NULL;
3536
		$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';
3537
                $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);
3538
3539
		try {
3540
			$sth = $this->db->prepare($query);
3541
			$sth->execute($query_values);
3542
		} catch (PDOException $e) {
3543
			return "error : ".$e->getMessage();
3544
		}
3545
		
3546
		return "success";
3547
3548
	}
3549
3550
	/**
3551
	* Adds a new spotter data
3552
	*
3553
	* @param String $flightaware_id the ID from flightaware
3554
	* @param String $ident the flight ident
3555
	* @param String $aircraft_icao the aircraft type
3556
	* @param String $departure_airport_icao the departure airport
3557
	* @param String $arrival_airport_icao the arrival airport
3558
	* @param String $latitude latitude of flight
3559
	* @param String $longitude latitude of flight
3560
	* @param String $waypoints waypoints of flight
3561
	* @param String $altitude altitude of flight
3562
	* @param String $heading heading of flight
3563
	* @param String $groundspeed speed of flight
3564
	* @param String $date date of flight
3565
	* @param String $departure_airport_time departure time of flight
3566
	* @param String $arrival_airport_time arrival time of flight
3567
	* @param String $squawk squawk code of flight
3568
	* @param String $route_stop route stop of flight
3569
	* @param String $highlight highlight or not
3570
	* @param String $ModeS ModesS code of flight
3571
	* @param String $registration registration code of flight
3572
	* @param String $pilot_id pilot id of flight (for virtual airlines)
3573
	* @param String $pilot_name pilot name of flight (for virtual airlines)
3574
	* @param String $verticalrate vertival rate of flight
3575
	* @return String success or false
3576
	*/
3577
	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 = '')
3578
	{
3579
		global $globalURL, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalDebugTimeElapsed, $globalAirlinesSource, $globalVAM;
3580
		
3581
		//if (isset($globalDebugTimeElapsed) || $globalDebugTimeElapsed == '') $globalDebugTimeElapsed = FALSE;
3582
		$Image = new Image($this->db);
3583
		$Common = new Common();
3584
		
3585
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
3586
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
3587
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
3588
		if (!isset($globalVAM)) $globalVAM = FALSE;
3589
		date_default_timezone_set('UTC');
3590
		
3591
		//getting the registration
3592
		if ($flightaware_id != "" && $registration == '')
3593
		{
3594
			if (!is_string($flightaware_id))
3595
			{
3596
				return false;
3597
			} else {
3598
				if ($ModeS != '') {
3599
					$timeelapsed = microtime(true);
3600
					$registration = $this->getAircraftRegistrationBymodeS($ModeS);
3601
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3602
				} else {
3603
					$myhex = explode('-',$flightaware_id);
3604
					if (count($myhex) > 0) {
3605
						$timeelapsed = microtime(true);
3606
						$registration = $this->getAircraftRegistrationBymodeS($myhex[0]);
3607
						if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3608
					}
3609
				}
3610
			}
3611
		}
3612
		$fromsource = NULL;
3613
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
3614
		elseif ($format_source == 'vatsimtxt') $fromsource = 'vatsim';
3615
		elseif ($format_source == 'whazzup') $fromsource = 'ivao';
3616
		elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
3617
		elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
3618
		//getting the airline information
3619
		if ($ident != "")
3620
		{
3621
			if (!is_string($ident))
3622
			{
3623
				return false;
3624
			} else {
3625
				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'))
3626
				{
3627
					$timeelapsed = microtime(true);
3628
					if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3629
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3630
					} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3631
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3632
					} else {
3633
						$airline_array = $this->getAllAirlineInfo("NA");
3634
					}
3635
					if (count($airline_array) == 0) {
3636
						$airline_array = $this->getAllAirlineInfo("NA");
3637
					}
3638
					if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3639
						$airline_array = $this->getAllAirlineInfo("NA");
3640
					}
3641
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3642
3643
				} else {
3644
					$timeelapsed = microtime(true);
3645
					$airline_array = $this->getAllAirlineInfo("NA");
3646
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3647
				}
3648
			}
3649
		} else $airline_array = array();
3650
		
3651
		//getting the aircraft information
3652
		$aircraft_array = array();
3653
		if ($aircraft_icao != '')
3654
		{
3655
			if (!is_string($aircraft_icao))
3656
			{
3657
				return false;
3658
			} else {
3659
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3660
				{
3661
					$timeelapsed = microtime(true);
3662
					$aircraft_array = $this->getAllAircraftInfo("NA");
3663
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3664
				} else {
3665
					$timeelapsed = microtime(true);
3666
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3667
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3668
				}
3669
			}
3670
		} else {
3671
			if ($ModeS != '') {
3672
				$timeelapsed = microtime(true);
3673
				$aircraft_icao = $this->getAllAircraftType($ModeS);
3674
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAircraftType : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3675
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3676
				{
3677
					$timeelapsed = microtime(true);
3678
					$aircraft_array = $this->getAllAircraftInfo("NA");
3679
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3680
				} else {
3681
					$timeelapsed = microtime(true);
3682
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3683
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3684
				}
3685
			}
3686
		}
3687
		
3688
		//getting the departure airport information
3689
		$departure_airport_array = array();
3690
		$departure_airport_icao = trim($departure_airport_icao);
3691
		if ($departure_airport_icao != '')
3692
		{
3693
			if (!is_string($departure_airport_icao))
3694
			{
3695
				return false;
3696
			} else {
3697
				$timeelapsed = microtime(true);
3698
				$departure_airport_array = $this->getAllAirportInfo($departure_airport_icao);
3699
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3700
			}
3701
		}
3702
		
3703
		//getting the arrival airport information
3704
		$arrival_airport_array = array();
3705
		$arrival_airport_icao = trim($arrival_airport_icao);
3706
		if ($arrival_airport_icao != '')
3707
		{
3708
			if (!is_string($arrival_airport_icao))
3709
			{
3710
				return false;
3711
			} else {
3712
				$timeelapsed = microtime(true);
3713
				$arrival_airport_array = $this->getAllAirportInfo($arrival_airport_icao);
3714
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3715
			}
3716
		}
3717
3718
		if ($latitude != "")
3719
		{
3720
			if (!is_numeric($latitude))
3721
			{
3722
				return false;
3723
			}
3724
		}
3725
		
3726
		if ($longitude != "")
3727
		{
3728
			if (!is_numeric($longitude))
3729
			{
3730
				return false;
3731
			}
3732
		}
3733
		
3734
		if ($waypoints != "")
3735
		{
3736
			if (!is_string($waypoints))
3737
			{
3738
				return false;
3739
			}
3740
		}
3741
		
3742
		if ($altitude != "")
3743
		{
3744
			if (!is_numeric($altitude))
3745
			{
3746
				return false;
3747
			}
3748
		} else $altitude = 0;
3749
		
3750
		if ($heading != "")
3751
		{
3752
			if (!is_numeric($heading))
3753
			{
3754
				return false;
3755
			}
3756
		}
3757
		
3758
		if ($groundspeed != "")
3759
		{
3760
			if (!is_numeric($groundspeed))
3761
			{
3762
				return false;
3763
			}
3764
		}
3765
3766
    
3767
		if ($date == "" || strtotime($date) < time()-20*60)
3768
		{
3769
			$date = date("Y-m-d H:i:s", time());
3770
		}
3771
3772
		//getting the aircraft image
3773
		if (($registration != "" || $registration != 'NA') && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM)
3774
		{
3775
			$timeelapsed = microtime(true);
3776
			$image_array = $Image->getSpotterImage($registration);
3777
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getSpotterImage : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3778
			if (!isset($image_array[0]['registration']))
3779
			{
3780
				//echo "Add image !!!! \n";
3781
				$Image->addSpotterImage($registration);
3782
			}
3783
			$timeelapsed = microtime(true);
3784
			$owner_info = $this->getAircraftOwnerByRegistration($registration);
3785
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftOwnerByRegistration : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3786
			if ($owner_info['owner'] != '') $aircraft_owner = ucwords(strtolower($owner_info['owner']));
3787
		}
3788
    
3789
		if ($globalIVAO && $aircraft_icao != '')
3790
		{
3791
            		if (isset($airline_array[0]['icao'])) $airline_icao = $airline_array[0]['icao'];
3792
            		else $airline_icao = '';
3793
			$image_array = $Image->getSpotterImage('',$aircraft_icao,$airline_icao);
3794
			if (!isset($image_array[0]['registration']))
3795
			{
3796
				//echo "Add image !!!! \n";
3797
				$Image->addSpotterImage('',$aircraft_icao,$airline_icao);
3798
			}
3799
		}
3800
    
3801
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
3802
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
3803
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
3804
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
3805
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
3806
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
3807
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3808
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3809
		$waypoints = filter_var($waypoints,FILTER_SANITIZE_STRING);
3810
		$altitude = filter_var($altitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3811
		$heading = filter_var($heading,FILTER_SANITIZE_NUMBER_INT);
3812
		$groundspeed = filter_var($groundspeed,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3813
		$squawk = filter_var($squawk,FILTER_SANITIZE_NUMBER_INT);
3814
		$route_stop = filter_var($route_stop,FILTER_SANITIZE_STRING);
3815
		$ModeS = filter_var($ModeS,FILTER_SANITIZE_STRING);
3816
		$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_STRING);
3817
		$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
3818
		$format_source = filter_var($format_source,FILTER_SANITIZE_STRING);
3819
		$verticalrate = filter_var($verticalrate,FILTER_SANITIZE_NUMBER_INT);
3820
	
3821
		if (count($airline_array) == 0) 
3822
		{
3823
                        $airline_array = $this->getAllAirlineInfo('NA');
3824
                }
3825
                if (count($aircraft_array) == 0) 
3826
                {
3827
                        $aircraft_array = $this->getAllAircraftInfo('NA');
3828
                }
3829
                if (count($departure_airport_array) == 0 || $departure_airport_array[0]['icao'] == '' || $departure_airport_icao == '') 
3830
                {
3831
                        $departure_airport_array = $this->getAllAirportInfo('NA');
3832
                }
3833
                if (count($arrival_airport_array) == 0 || $arrival_airport_array[0]['icao'] == '' || $arrival_airport_icao == '') 
3834
                {
3835
                        $arrival_airport_array = $this->getAllAirportInfo('NA');
3836
                }
3837
                if ($registration == '') $registration = 'NA';
3838
                if ($latitude == '' && $longitude == '') {
3839
            		$latitude = 0;
3840
            		$longitude = 0;
3841
            	}
3842
                if ($squawk == '' || $Common->isInteger($squawk) === false) $squawk = NULL;
3843
                if ($verticalrate == '' || $Common->isInteger($verticalrate) === false) $verticalrate = NULL;
3844
                if ($heading == '' || $Common->isInteger($heading) === false) $heading = 0;
3845
                if ($groundspeed == '' || $Common->isInteger($groundspeed) === false) $groundspeed = 0;
3846
                if (!isset($aircraft_owner)) $aircraft_owner = NULL;
3847
                $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) 
3848
                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)";
3849
3850
                $airline_name = $airline_array[0]['name'];
3851
                $airline_icao = $airline_array[0]['icao'];
3852
                $airline_country = $airline_array[0]['country'];
3853
                $airline_type = $airline_array[0]['type'];
3854
		if ($airline_type == '') {
3855
			$timeelapsed = microtime(true);
3856
			$airline_type = $this->getAircraftTypeBymodeS($ModeS);
3857
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftTypeBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3858
		}
3859
		if ($airline_type == null) $airline_type = '';
3860
                $aircraft_type = $aircraft_array[0]['type'];
3861
                $aircraft_manufacturer = $aircraft_array[0]['manufacturer'];
3862
                $departure_airport_name = $departure_airport_array[0]['name'];
3863
	        $departure_airport_city = $departure_airport_array[0]['city'];
3864
            	$departure_airport_country = $departure_airport_array[0]['country'];
3865
                
3866
                $arrival_airport_name = $arrival_airport_array[0]['name'];
3867
                $arrival_airport_city = $arrival_airport_array[0]['city'];
3868
                $arrival_airport_country = $arrival_airport_array[0]['country'];
3869
                $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);
3870
3871
		try {
3872
		        
3873
			$sth = $this->db->prepare($query);
3874
			$sth->execute($query_values);
3875
			$this->db = null;
3876
		} catch (PDOException $e) {
3877
		    return "error : ".$e->getMessage();
3878
		}
3879
		
3880
		return "success";
3881
3882
	}
3883
	
3884
  
3885
	/**
3886
	* Gets the aircraft ident within the last hour
3887
	*
3888
	* @return String the ident
3889
	*
3890
	*/
3891
	public function getIdentFromLastHour($ident)
3892
	{
3893
		global $globalDBdriver, $globalTimezone;
3894
		if ($globalDBdriver == 'mysql') {
3895
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3896
								WHERE spotter_output.ident = :ident 
3897
								AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) 
3898
								AND spotter_output.date < UTC_TIMESTAMP()";
3899
			$query_data = array(':ident' => $ident);
3900
		} else {
3901
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3902
								WHERE spotter_output.ident = :ident 
3903
								AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INTERVAL '1 HOURS'
3904
								AND spotter_output.date < now() AT TIME ZONE 'UTC'";
3905
			$query_data = array(':ident' => $ident);
3906
    		}
3907
		
3908
		$sth = $this->db->prepare($query);
3909
		$sth->execute($query_data);
3910
    		$ident_result='';
3911
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3912
		{
3913
			$ident_result = $row['ident'];
3914
		}
3915
3916
		return $ident_result;
3917
	}
3918
	
3919
	
3920
	/**
3921
	* Gets the aircraft data from the last 20 seconds
3922
	*
3923
	* @return Array the spotter data
3924
	*
3925
	*/
3926
	public function getRealTimeData($q = '')
3927
	{
3928
		global $globalDBdriver;
3929
		$additional_query = '';
3930
		if ($q != "")
3931
		{
3932
			if (!is_string($q))
3933
			{
3934
				return false;
3935
			} else {
3936
				$q_array = explode(" ", $q);
3937
				foreach ($q_array as $q_item){
3938
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
3939
					$additional_query .= " AND (";
3940
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
3941
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
3942
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
3943
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
3944
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
3945
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
3946
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
3947
					$additional_query .= "(spotter_output.ident like '%".$q_item."%')";
3948
					$additional_query .= ")";
3949
				}
3950
			}
3951
		}
3952
		if ($globalDBdriver == 'mysql') {
3953
			$query  = "SELECT spotter_output.* FROM spotter_output 
3954
				WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 20 SECOND) ".$additional_query." 
3955
				AND spotter_output.date < UTC_TIMESTAMP()";
3956
		} else {
3957
			$query  = "SELECT spotter_output.* FROM spotter_output 
3958
				WHERE spotter_output.date::timestamp >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '20 SECONDS' ".$additional_query." 
3959
				AND spotter_output.date::timestamp < CURRENT_TIMESTAMP AT TIME ZONE 'UTC'";
3960
		}
3961
		$spotter_array = $this->getDataFromDB($query, array());
3962
3963
		return $spotter_array;
3964
	}
3965
	
3966
	
3967
	
3968
	 /**
3969
	* Gets all airlines that have flown over
3970
	*
3971
	* @return Array the airline list
3972
	*
3973
	*/
3974
	public function countAllAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(), $year = '', $month = '', $day = '')
3975
	{
3976
		global $globalDBdriver;
3977
		$filter_query = $this->getFilter($filters,true,true);
3978
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3979
		 			FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.airline_icao <> 'NA'";
3980
		if ($olderthanmonths > 0) {
3981
			if ($globalDBdriver == 'mysql') {
3982
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
3983
			} else {
3984
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
3985
			}
3986
		}
3987
                if ($sincedate != '') {
3988
			if ($globalDBdriver == 'mysql') {
3989
				$query .= " AND spotter_output.date > '".$sincedate."'";
3990
			} else {
3991
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3992
			}
3993
		}
3994
		$query_values = array();
3995
		if ($year != '') {
3996
			if ($globalDBdriver == 'mysql') {
3997
				$query .= " AND YEAR(spotter_output.date) = :year";
3998
				$query_values = array_merge($query_values,array(':year' => $year));
3999
			} else {
4000
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4001
				$query_values = array_merge($query_values,array(':year' => $year));
4002
			}
4003
		}
4004
		if ($month != '') {
4005
			if ($globalDBdriver == 'mysql') {
4006
				$query .= " AND MONTH(spotter_output.date) = :month";
4007
				$query_values = array_merge($query_values,array(':month' => $month));
4008
			} else {
4009
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4010
				$query_values = array_merge($query_values,array(':month' => $month));
4011
			}
4012
		}
4013
		if ($day != '') {
4014
			if ($globalDBdriver == 'mysql') {
4015
				$query .= " AND DAY(spotter_output.date) = :day";
4016
				$query_values = array_merge($query_values,array(':day' => $day));
4017
			} else {
4018
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4019
				$query_values = array_merge($query_values,array(':day' => $day));
4020
			}
4021
		}
4022
		$query .= " GROUP BY spotter_output.airline_name,spotter_output.airline_icao, spotter_output.airline_country ORDER BY airline_count DESC";
4023
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4024
4025
		$sth = $this->db->prepare($query);
4026
		$sth->execute($query_values);
4027
		$airline_array = array();
4028
		$temp_array = array();
4029
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4030
		{
4031
			$temp_array['airline_name'] = $row['airline_name'];
4032
			$temp_array['airline_icao'] = $row['airline_icao'];
4033
			$temp_array['airline_count'] = $row['airline_count'];
4034
			$temp_array['airline_country'] = $row['airline_country'];
4035
			$airline_array[] = $temp_array;
4036
		}
4037
		return $airline_array;
4038
	}
4039
4040
	 /**
4041
	* Gets all pilots that have flown over
4042
	*
4043
	* @return Array the pilots list
4044
	*
4045
	*/
4046
	public function countAllPilots($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '', $month = '',$day = '')
4047
	{
4048
		global $globalDBdriver;
4049
		$filter_query = $this->getFilter($filters,true,true);
4050
		$query  = "SELECT DISTINCT spotter_output.pilot_id, s.pilot_name, COUNT(spotter_output.pilot_id) AS pilot_count, spotter_output.format_source
4051
			FROM spotter_output LEFT JOIN (SELECT DISTINCT pilot_id, pilot_name, max(date) as date FROM spotter_output GROUP BY pilot_id, pilot_name) s ON s.pilot_id = spotter_output.pilot_id".$filter_query." spotter_output.pilot_id <> ''";
4052
                if ($olderthanmonths > 0) {
4053
            		if ($globalDBdriver == 'mysql') {
4054
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4055
			} else {
4056
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4057
			}
4058
		}
4059
                if ($sincedate != '') {
4060
            		if ($globalDBdriver == 'mysql') {
4061
				$query .= " AND spotter_output.date > '".$sincedate."'";
4062
			} else {
4063
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4064
			}
4065
		}
4066
		$query_values = array();
4067
		if ($year != '') {
4068
			if ($globalDBdriver == 'mysql') {
4069
				$query .= " AND YEAR(spotter_output.date) = :year";
4070
				$query_values = array_merge($query_values,array(':year' => $year));
4071
			} else {
4072
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4073
				$query_values = array_merge($query_values,array(':year' => $year));
4074
			}
4075
		}
4076
		if ($month != '') {
4077
			if ($globalDBdriver == 'mysql') {
4078
				$query .= " AND MONTH(spotter_output.date) = :month";
4079
				$query_values = array_merge($query_values,array(':month' => $month));
4080
			} else {
4081
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4082
				$query_values = array_merge($query_values,array(':month' => $month));
4083
			}
4084
		}
4085
		if ($day != '') {
4086
			if ($globalDBdriver == 'mysql') {
4087
				$query .= " AND DAY(spotter_output.date) = :day";
4088
				$query_values = array_merge($query_values,array(':day' => $day));
4089
			} else {
4090
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4091
				$query_values = array_merge($query_values,array(':day' => $day));
4092
			}
4093
		}
4094
		
4095
		$query .= " GROUP BY spotter_output.pilot_id,s.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
4096
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4097
      
4098
		
4099
		$sth = $this->db->prepare($query);
4100
		$sth->execute($query_values);
4101
		$airline_array = array();
4102
		$temp_array = array();
4103
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4104
		{
4105
			$temp_array['pilot_name'] = $row['pilot_name'];
4106
			$temp_array['pilot_id'] = $row['pilot_id'];
4107
			$temp_array['pilot_count'] = $row['pilot_count'];
4108
			$temp_array['format_source'] = $row['format_source'];
4109
			$airline_array[] = $temp_array;
4110
		}
4111
		return $airline_array;
4112
	}
4113
	
4114
	/**
4115
	* Gets all pilots that have flown over
4116
	*
4117
	* @return Array the pilots list
4118
	*
4119
	*/
4120
	public function countAllPilotsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '')
4121
	{
4122
		global $globalDBdriver;
4123
		$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
4124
		 			FROM spotter_output WHERE spotter_output.pilot_id <> '' ";
4125
                if ($olderthanmonths > 0) {
4126
            		if ($globalDBdriver == 'mysql') {
4127
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4128
			} else {
4129
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4130
			}
4131
		}
4132
                if ($sincedate != '') {
4133
            		if ($globalDBdriver == 'mysql') {
4134
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4135
			} else {
4136
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4137
			}
4138
		}
4139
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
4140
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4141
      
4142
		
4143
		$sth = $this->db->prepare($query);
4144
		$sth->execute();
4145
      
4146
		$airline_array = array();
4147
		$temp_array = array();
4148
        
4149
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4150
		{
4151
			$temp_array['pilot_name'] = $row['pilot_name'];
4152
			$temp_array['pilot_id'] = $row['pilot_id'];
4153
			$temp_array['pilot_count'] = $row['pilot_count'];
4154
			$temp_array['airline_icao'] = $row['airline_icao'];
4155
			$temp_array['format_source'] = $row['format_source'];
4156
			$airline_array[] = $temp_array;
4157
		}
4158
		return $airline_array;
4159
	}
4160
	
4161
	 /**
4162
	* Gets all owner that have flown over
4163
	*
4164
	* @return Array the pilots list
4165
	*
4166
	*/
4167
	public function countAllOwners($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
4168
	{
4169
		global $globalDBdriver;
4170
		$filter_query = $this->getFilter($filters,true,true);
4171
		$query  = "SELECT DISTINCT spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
4172
					FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL";
4173
                if ($olderthanmonths > 0) {
4174
            		if ($globalDBdriver == 'mysql') {
4175
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4176
			} else {
4177
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4178
			}
4179
		}
4180
                if ($sincedate != '') {
4181
            		if ($globalDBdriver == 'mysql') {
4182
				$query .= " AND spotter_output.date > '".$sincedate."' ";
4183
			} else {
4184
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4185
			}
4186
		}
4187
		$query_values = array();
4188
		if ($year != '') {
4189
			if ($globalDBdriver == 'mysql') {
4190
				$query .= " AND YEAR(spotter_output.date) = :year";
4191
				$query_values = array_merge($query_values,array(':year' => $year));
4192
			} else {
4193
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4194
				$query_values = array_merge($query_values,array(':year' => $year));
4195
			}
4196
		}
4197
		if ($month != '') {
4198
			if ($globalDBdriver == 'mysql') {
4199
				$query .= " AND MONTH(spotter_output.date) = :month";
4200
				$query_values = array_merge($query_values,array(':month' => $month));
4201
			} else {
4202
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4203
				$query_values = array_merge($query_values,array(':month' => $month));
4204
			}
4205
		}
4206
		if ($day != '') {
4207
			if ($globalDBdriver == 'mysql') {
4208
				$query .= " AND DAY(spotter_output.date) = :day";
4209
				$query_values = array_merge($query_values,array(':day' => $day));
4210
			} else {
4211
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4212
				$query_values = array_merge($query_values,array(':day' => $day));
4213
			}
4214
		}
4215
		$query .= " GROUP BY spotter_output.owner_name ORDER BY owner_count DESC";
4216
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4217
		
4218
		$sth = $this->db->prepare($query);
4219
		$sth->execute($query_values);
4220
		$airline_array = array();
4221
		$temp_array = array();
4222
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4223
		{
4224
			$temp_array['owner_name'] = $row['owner_name'];
4225
			$temp_array['owner_count'] = $row['owner_count'];
4226
			$airline_array[] = $temp_array;
4227
		}
4228
		return $airline_array;
4229
	}
4230
	
4231
	 /**
4232
	* Gets all owner that have flown over
4233
	*
4234
	* @return Array the pilots list
4235
	*
4236
	*/
4237
	public function countAllOwnersByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
4238
	{
4239
		global $globalDBdriver;
4240
		$filter_query = $this->getFilter($filters,true,true);
4241
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
4242
		 			FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL ";
4243
                if ($olderthanmonths > 0) {
4244
            		if ($globalDBdriver == 'mysql') {
4245
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4246
			} else {
4247
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4248
			}
4249
		}
4250
                if ($sincedate != '') {
4251
            		if ($globalDBdriver == 'mysql') {
4252
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4253
			} else {
4254
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4255
			}
4256
		}
4257
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.owner_name ORDER BY owner_count DESC";
4258
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4259
      
4260
		
4261
		$sth = $this->db->prepare($query);
4262
		$sth->execute();
4263
      
4264
		$airline_array = array();
4265
		$temp_array = array();
4266
        
4267
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4268
		{
4269
			$temp_array['owner_name'] = $row['owner_name'];
4270
			$temp_array['owner_count'] = $row['owner_count'];
4271
			$temp_array['airline_icao'] = $row['airline_icao'];
4272
			$airline_array[] = $temp_array;
4273
		}
4274
		return $airline_array;
4275
	}
4276
4277
	/**
4278
	* Gets all airlines that have flown over by aircraft
4279
	*
4280
	* @return Array the airline list
4281
	*
4282
	*/
4283
	public function countAllAirlinesByAircraft($aircraft_icao,$filters = array())
4284
	{
4285
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4286
		$filter_query = $this->getFilter($filters,true,true);
4287
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4288
		 	    FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
4289
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
4290
			    ORDER BY airline_count DESC";
4291
      
4292
		
4293
		$sth = $this->db->prepare($query);
4294
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4295
      
4296
		$airline_array = array();
4297
		$temp_array = array();
4298
        
4299
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4300
		{
4301
			$temp_array['airline_name'] = $row['airline_name'];
4302
			$temp_array['airline_icao'] = $row['airline_icao'];
4303
			$temp_array['airline_count'] = $row['airline_count'];
4304
			$temp_array['airline_country'] = $row['airline_country'];
4305
4306
			$airline_array[] = $temp_array;
4307
		}
4308
4309
		return $airline_array;
4310
	}
4311
4312
4313
	/**
4314
	* Gets all airline countries that have flown over by aircraft
4315
	*
4316
	* @return Array the airline country list
4317
	*
4318
	*/
4319
	public function countAllAirlineCountriesByAircraft($aircraft_icao,$filters = array())
4320
	{
4321
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4322
		$filter_query = $this->getFilter($filters,true,true);
4323
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4324
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
4325
                    GROUP BY spotter_output.airline_country
4326
					ORDER BY airline_country_count DESC
4327
					LIMIT 10 OFFSET 0";
4328
      
4329
		
4330
		$sth = $this->db->prepare($query);
4331
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4332
      
4333
		$airline_country_array = array();
4334
		$temp_array = array();
4335
        
4336
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4337
		{
4338
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4339
			$temp_array['airline_country'] = $row['airline_country'];
4340
 
4341
			$airline_country_array[] = $temp_array;
4342
		}
4343
		return $airline_country_array;
4344
	}
4345
4346
4347
	
4348
	
4349
	/**
4350
	* Gets all airlines that have flown over by airport
4351
	*
4352
	* @return Array the airline list
4353
	*
4354
	*/
4355
	public function countAllAirlinesByAirport($airport_icao,$filters = array())
4356
	{
4357
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4358
		$filter_query = $this->getFilter($filters,true,true);
4359
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4360
		    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 ) 
4361
                    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country
4362
		    ORDER BY airline_count DESC";
4363
      
4364
		
4365
		$sth = $this->db->prepare($query);
4366
		$sth->execute(array(':airport_icao' => $airport_icao));
4367
      
4368
		$airline_array = array();
4369
		$temp_array = array();
4370
        
4371
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4372
		{
4373
			$temp_array['airline_name'] = $row['airline_name'];
4374
			$temp_array['airline_icao'] = $row['airline_icao'];
4375
			$temp_array['airline_count'] = $row['airline_count'];
4376
			$temp_array['airline_country'] = $row['airline_country'];
4377
4378
			$airline_array[] = $temp_array;
4379
		}
4380
		return $airline_array;
4381
	}
4382
4383
4384
	/**
4385
	* Gets all airline countries that have flown over by airport icao
4386
	*
4387
	* @return Array the airline country list
4388
	*
4389
	*/
4390
	public function countAllAirlineCountriesByAirport($airport_icao,$filters = array())
4391
	{
4392
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4393
		$filter_query = $this->getFilter($filters,true,true);
4394
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4395
		 			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 )
4396
					GROUP BY spotter_output.airline_country
4397
					ORDER BY airline_country_count DESC
4398
					LIMIT 10 OFFSET 0";
4399
4400
		
4401
		$sth = $this->db->prepare($query);
4402
		$sth->execute(array(':airport_icao' => $airport_icao));
4403
4404
		$airline_country_array = array();
4405
		$temp_array = array();
4406
        
4407
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4408
		{
4409
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4410
			$temp_array['airline_country'] = $row['airline_country'];
4411
 
4412
			$airline_country_array[] = $temp_array;
4413
		}
4414
		return $airline_country_array;
4415
	}
4416
4417
4418
	/**
4419
	* Gets all airlines that have flown over by aircraft manufacturer
4420
	*
4421
	* @return Array the airline list
4422
	*
4423
	*/
4424
	public function countAllAirlinesByManufacturer($aircraft_manufacturer,$filters = array())
4425
	{
4426
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4427
		$filter_query = $this->getFilter($filters,true,true);
4428
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4429
		 			FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4430
					GROUP BY spotter_output.airline_name
4431
					ORDER BY airline_count DESC";
4432
 
4433
		$sth = $this->db->prepare($query);
4434
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4435
 
4436
		$airline_array = array();
4437
		$temp_array = array();
4438
        
4439
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4440
		{
4441
			$temp_array['airline_name'] = $row['airline_name'];
4442
			$temp_array['airline_icao'] = $row['airline_icao'];
4443
			$temp_array['airline_count'] = $row['airline_count'];
4444
			$temp_array['airline_country'] = $row['airline_country'];
4445
4446
			$airline_array[] = $temp_array;
4447
		}
4448
		return $airline_array;
4449
	}
4450
4451
4452
4453
	/**
4454
	* Gets all airline countries that have flown over by aircraft manufacturer
4455
	*
4456
	* @return Array the airline country list
4457
	*
4458
	*/
4459
	public function countAllAirlineCountriesByManufacturer($aircraft_manufacturer,$filters = array())
4460
	{
4461
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4462
		$filter_query = $this->getFilter($filters,true,true);
4463
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4464
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4465
					GROUP BY spotter_output.airline_country
4466
					ORDER BY airline_country_count DESC
4467
					LIMIT 10 OFFSET 0";
4468
      
4469
		
4470
		$sth = $this->db->prepare($query);
4471
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4472
4473
		$airline_country_array = array();
4474
		$temp_array = array();
4475
        
4476
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4477
		{
4478
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4479
			$temp_array['airline_country'] = $row['airline_country'];
4480
			$airline_country_array[] = $temp_array;
4481
		}
4482
		return $airline_country_array;
4483
	}
4484
4485
4486
	/**
4487
	* Gets all airlines that have flown over by date
4488
	*
4489
	* @return Array the airline list
4490
	*
4491
	*/
4492
	public function countAllAirlinesByDate($date,$filters = array())
4493
	{
4494
		global $globalTimezone, $globalDBdriver;
4495
		$filter_query = $this->getFilter($filters,true,true);
4496
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4497
		if ($globalTimezone != '') {
4498
			date_default_timezone_set($globalTimezone);
4499
			$datetime = new DateTime($date);
4500
			$offset = $datetime->format('P');
4501
		} else $offset = '+00:00';
4502
4503
		if ($globalDBdriver == 'mysql') {
4504
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4505
		 			FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4506
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country 
4507
					ORDER BY airline_count DESC";
4508
		} else {
4509
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4510
		 			FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4511
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country
4512
					ORDER BY airline_count DESC";
4513
		}
4514
		
4515
		$sth = $this->db->prepare($query);
4516
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4517
4518
		$airline_array = array();
4519
		$temp_array = array();
4520
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4521
		{
4522
			$temp_array['airline_name'] = $row['airline_name'];
4523
			$temp_array['airline_icao'] = $row['airline_icao'];
4524
			$temp_array['airline_count'] = $row['airline_count'];
4525
			$temp_array['airline_country'] = $row['airline_country'];
4526
 
4527
			$airline_array[] = $temp_array;
4528
		}
4529
4530
		return $airline_array;
4531
	}	
4532
	
4533
	
4534
	/**
4535
	* Gets all airline countries that have flown over by date
4536
	*
4537
	* @return Array the airline country list
4538
	*
4539
	*/
4540
	public function countAllAirlineCountriesByDate($date,$filters = array())
4541
	{
4542
		global $globalTimezone, $globalDBdriver;
4543
		$filter_query = $this->getFilter($filters,true,true);
4544
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4545
		if ($globalTimezone != '') {
4546
			date_default_timezone_set($globalTimezone);
4547
			$datetime = new DateTime($date);
4548
			$offset = $datetime->format('P');
4549
		} else $offset = '+00:00';
4550
		
4551
		if ($globalDBdriver == 'mysql') {
4552
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4553
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4554
					GROUP BY spotter_output.airline_country
4555
					ORDER BY airline_country_count DESC
4556
					LIMIT 10 OFFSET 0";
4557
		} else {
4558
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4559
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4560
					GROUP BY spotter_output.airline_country
4561
					ORDER BY airline_country_count DESC
4562
					LIMIT 10 OFFSET 0";
4563
		}
4564
4565
		$sth = $this->db->prepare($query);
4566
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4567
 
4568
		$airline_country_array = array();
4569
		$temp_array = array();
4570
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4571
		{
4572
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4573
			$temp_array['airline_country'] = $row['airline_country'];
4574
4575
			$airline_country_array[] = $temp_array;
4576
		}
4577
		return $airline_country_array;
4578
	}
4579
4580
4581
	/**
4582
	* Gets all airlines that have flown over by ident/callsign
4583
	*
4584
	* @return Array the airline list
4585
	*
4586
	*/
4587
	public function countAllAirlinesByIdent($ident,$filters = array())
4588
	{
4589
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
4590
		$filter_query = $this->getFilter($filters,true,true);
4591
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4592
		 		FROM spotter_output".$filter_query." spotter_output.ident = :ident  
4593
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4594
				ORDER BY airline_count DESC";
4595
      
4596
		
4597
		$sth = $this->db->prepare($query);
4598
		$sth->execute(array(':ident' => $ident));
4599
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4600
	}
4601
4602
	/**
4603
	* Gets all airlines by owner
4604
	*
4605
	* @return Array the airline list
4606
	*
4607
	*/
4608
	public function countAllAirlinesByOwner($owner,$filters = array())
4609
	{
4610
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
4611
		$filter_query = $this->getFilter($filters,true,true);
4612
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4613
		 		FROM spotter_output".$filter_query." spotter_output.owner_name = :owner  
4614
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4615
				ORDER BY airline_count DESC";
4616
      
4617
		
4618
		$sth = $this->db->prepare($query);
4619
		$sth->execute(array(':owner' => $owner));
4620
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4621
	}
4622
4623
	/**
4624
	* Gets flight duration by owner
4625
	*
4626
	* @return String Duration of all flights
4627
	*
4628
	*/
4629
	public function getFlightDurationByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
4630
	{
4631
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
4632
		$filter_query = $this->getFilter($filters,true,true);
4633
		$query  = "SELECT SUM(last_seen - date) AS duration 
4634
				FROM spotter_output".$filter_query." spotter_output.owner_name = :owner";
4635
		$query_values = array();
4636
		if ($year != '') {
4637
			if ($globalDBdriver == 'mysql') {
0 ignored issues
show
Bug introduced by
The variable $globalDBdriver does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
4638
				$query .= " AND YEAR(spotter_output.date) = :year";
4639
				$query_values = array_merge($query_values,array(':year' => $year));
4640
			} else {
4641
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4642
				$query_values = array_merge($query_values,array(':year' => $year));
4643
			}
4644
		}
4645
		if ($month != '') {
4646
			if ($globalDBdriver == 'mysql') {
4647
				$query .= " AND MONTH(spotter_output.date) = :month";
4648
				$query_values = array_merge($query_values,array(':month' => $month));
4649
			} else {
4650
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4651
				$query_values = array_merge($query_values,array(':month' => $month));
4652
			}
4653
		}
4654
		if ($day != '') {
4655
			if ($globalDBdriver == 'mysql') {
4656
				$query .= " AND DAY(spotter_output.date) = :day";
4657
				$query_values = array_merge($query_values,array(':day' => $day));
4658
			} else {
4659
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4660
				$query_values = array_merge($query_values,array(':day' => $day));
4661
			}
4662
		}
4663
		$query_values = array_merge($query_values,array(':owner' => $owner));
4664
		$sth = $this->db->prepare($query);
4665
		$sth->execute($query_values);
4666
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4667
		if (is_numeric($result[0]['duration'])) return gmdate('H:i:s',$result[0]['duration']);
4668
		else return $result[0]['duration'];
4669
	}
4670
4671
	/**
4672
	* Count flights by owner
4673
	*
4674
	* @return String Duration of all flights
4675
	*
4676
	*/
4677
	public function countFlightsByOwner($owner,$filters = array())
4678
	{
4679
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
4680
		$filter_query = $this->getFilter($filters,true,true);
4681
		$query  = "SELECT COUNT(*) AS nb 
4682
				FROM spotter_output".$filter_query." spotter_output.owner_name = :owner";
4683
		$query_values = array();
4684
		$query_values = array_merge($query_values,array(':owner' => $owner));
4685
		$sth = $this->db->prepare($query);
4686
		$sth->execute($query_values);
4687
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4688
		return $result[0]['nb'];
4689
	}
4690
4691
	/**
4692
	* Count flights by pilot
4693
	*
4694
	* @return String Duration of all flights
4695
	*
4696
	*/
4697
	public function countFlightsByPilot($pilot,$filters = array())
4698
	{
4699
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
4700
		$filter_query = $this->getFilter($filters,true,true);
4701
		$query  = "SELECT COUNT(*) AS nb 
4702
				FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilod_id = :pilot)";
4703
		$query_values = array();
4704
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
4705
		$sth = $this->db->prepare($query);
4706
		$sth->execute($query_values);
4707
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4708
		return $result[0]['nb'];
4709
	}
4710
4711
	/**
4712
	* Gets flight duration by pilot
4713
	*
4714
	* @return String Duration of all flights
4715
	*
4716
	*/
4717
	public function getFlightDurationByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
4718
	{
4719
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
4720
		$filter_query = $this->getFilter($filters,true,true);
4721
		$query  = "SELECT SUM(last_seen - date) AS duration 
4722
		 		FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot)";
4723
		$query_values = array();
4724
		if ($year != '') {
4725
			if ($globalDBdriver == 'mysql') {
0 ignored issues
show
Bug introduced by
The variable $globalDBdriver does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
4726
				$query .= " AND YEAR(spotter_output.date) = :year";
4727
				$query_values = array_merge($query_values,array(':year' => $year));
4728
			} else {
4729
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4730
				$query_values = array_merge($query_values,array(':year' => $year));
4731
			}
4732
		}
4733
		if ($month != '') {
4734
			if ($globalDBdriver == 'mysql') {
4735
				$query .= " AND MONTH(spotter_output.date) = :month";
4736
				$query_values = array_merge($query_values,array(':month' => $month));
4737
			} else {
4738
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4739
				$query_values = array_merge($query_values,array(':month' => $month));
4740
			}
4741
		}
4742
		if ($day != '') {
4743
			if ($globalDBdriver == 'mysql') {
4744
				$query .= " AND DAY(spotter_output.date) = :day";
4745
				$query_values = array_merge($query_values,array(':day' => $day));
4746
			} else {
4747
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4748
				$query_values = array_merge($query_values,array(':day' => $day));
4749
			}
4750
		}
4751
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
4752
		$sth = $this->db->prepare($query);
4753
		$sth->execute($query_values);
4754
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4755
		if (is_int($result[0]['duration'])) return gmdate('H:i:s',$result[0]['duration']);
4756
		else return $result[0]['duration'];
4757
	}
4758
4759
	/**
4760
	* Gets all airlines used by pilot
4761
	*
4762
	* @return Array the airline list
4763
	*
4764
	*/
4765
	public function countAllAirlinesByPilot($pilot,$filters = array())
4766
	{
4767
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
4768
		$filter_query = $this->getFilter($filters,true,true);
4769
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4770
		 		FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
4771
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4772
				ORDER BY airline_count DESC";
4773
      
4774
		
4775
		$sth = $this->db->prepare($query);
4776
		$sth->execute(array(':pilot' => $pilot));
4777
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4778
	}
4779
4780
	/**
4781
	* Gets all airlines that have flown over by route
4782
	*
4783
	* @return Array the airline list
4784
	*
4785
	*/
4786
	public function countAllAirlinesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
4787
	{
4788
		$filter_query = $this->getFilter($filters,true,true);
4789
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4790
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4791
4792
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4793
		 			FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
4794
					GROUP BY spotter_output.airline_name
4795
					ORDER BY airline_count DESC";
4796
      
4797
		
4798
		$sth = $this->db->prepare($query);
4799
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4800
      
4801
		$airline_array = array();
4802
		$temp_array = array();
4803
        
4804
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4805
		{
4806
			$temp_array['airline_name'] = $row['airline_name'];
4807
			$temp_array['airline_icao'] = $row['airline_icao'];
4808
			$temp_array['airline_count'] = $row['airline_count'];
4809
			$temp_array['airline_country'] = $row['airline_country'];
4810
4811
			$airline_array[] = $temp_array;
4812
		}
4813
		return $airline_array;
4814
	}
4815
4816
	/**
4817
	* Gets all airline countries that have flown over by route
4818
	*
4819
	* @return Array the airline country list
4820
	*
4821
	*/
4822
	public function countAllAirlineCountriesByRoute($departure_airport_icao, $arrival_airport_icao,$filters= array())
4823
	{
4824
		$filter_query = $this->getFilter($filters,true,true);
4825
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4826
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4827
      
4828
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4829
		 		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) 
4830
				GROUP BY spotter_output.airline_country
4831
				ORDER BY airline_country_count DESC
4832
				LIMIT 10 OFFSET 0";
4833
      
4834
		
4835
		$sth = $this->db->prepare($query);
4836
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4837
      
4838
		$airline_country_array = array();
4839
		$temp_array = array();
4840
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4841
		{
4842
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4843
			$temp_array['airline_country'] = $row['airline_country'];
4844
4845
			$airline_country_array[] = $temp_array;
4846
		}
4847
4848
		return $airline_country_array;
4849
	}
4850
4851
4852
	/**
4853
	* Gets all airlines that have flown over by country
4854
	*
4855
	* @return Array the airline list
4856
	*
4857
	*/
4858
	public function countAllAirlinesByCountry($country,$filters = array())
4859
	{
4860
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4861
		$filter_query = $this->getFilter($filters,true,true);
4862
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4863
		 	    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
4864
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
4865
			    ORDER BY airline_count DESC";
4866
      
4867
		
4868
		$sth = $this->db->prepare($query);
4869
		$sth->execute(array(':country' => $country));
4870
4871
		$airline_array = array();
4872
		$temp_array = array();
4873
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4874
		{
4875
			$temp_array['airline_name'] = $row['airline_name'];
4876
			$temp_array['airline_icao'] = $row['airline_icao'];
4877
			$temp_array['airline_count'] = $row['airline_count'];
4878
			$temp_array['airline_country'] = $row['airline_country'];
4879
 
4880
			$airline_array[] = $temp_array;
4881
		}
4882
		return $airline_array;
4883
	}
4884
4885
4886
	/**
4887
	* Gets all airline countries that have flown over by country
4888
	*
4889
	* @return Array the airline country list
4890
	*
4891
	*/
4892
	public function countAllAirlineCountriesByCountry($country,$filters = array())
4893
	{
4894
		$filter_query = $this->getFilter($filters,true,true);
4895
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4896
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4897
		 		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 
4898
				GROUP BY spotter_output.airline_country
4899
				ORDER BY airline_country_count DESC
4900
				LIMIT 10 OFFSET 0";
4901
      
4902
		
4903
		$sth = $this->db->prepare($query);
4904
		$sth->execute(array(':country' => $country));
4905
4906
		$airline_country_array = array();
4907
		$temp_array = array();
4908
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4909
		{
4910
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4911
			$temp_array['airline_country'] = $row['airline_country'];
4912
4913
			$airline_country_array[] = $temp_array;
4914
		}
4915
		return $airline_country_array;
4916
	}
4917
4918
4919
	/**
4920
	* Gets all airlines countries
4921
	*
4922
	* @return Array the airline country list
4923
	*
4924
	*/
4925
	public function countAllAirlineCountries($limit = true, $filters = array(), $year = '', $month = '', $day = '')
4926
	{
4927
		global $globalDBdriver;
4928
		$filter_query = $this->getFilter($filters,true,true);
4929
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4930
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.airline_country <> 'NA'";
4931
		$query_values = array();
4932
		if ($year != '') {
4933
			if ($globalDBdriver == 'mysql') {
4934
				$query .= " AND YEAR(spotter_output.date) = :year";
4935
				$query_values = array_merge($query_values,array(':year' => $year));
4936
			} else {
4937
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4938
				$query_values = array_merge($query_values,array(':year' => $year));
4939
			}
4940
		}
4941
		if ($month != '') {
4942
			if ($globalDBdriver == 'mysql') {
4943
				$query .= " AND MONTH(spotter_output.date) = :month";
4944
				$query_values = array_merge($query_values,array(':month' => $month));
4945
			} else {
4946
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4947
				$query_values = array_merge($query_values,array(':month' => $month));
4948
			}
4949
		}
4950
		if ($day != '') {
4951
			if ($globalDBdriver == 'mysql') {
4952
				$query .= " AND DAY(spotter_output.date) = :day";
4953
				$query_values = array_merge($query_values,array(':day' => $day));
4954
			} else {
4955
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4956
				$query_values = array_merge($query_values,array(':day' => $day));
4957
			}
4958
		}
4959
		$query .= " GROUP BY spotter_output.airline_country
4960
					ORDER BY airline_country_count DESC";
4961
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4962
      
4963
		$sth = $this->db->prepare($query);
4964
		$sth->execute($query_values);
4965
4966
		$airline_array = array();
4967
		$temp_array = array();
4968
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4969
		{
4970
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4971
			$temp_array['airline_country'] = $row['airline_country'];
4972
4973
			$airline_array[] = $temp_array;
4974
		}
4975
		return $airline_array;
4976
	}
4977
4978
	/**
4979
	* Gets all number of flight over countries
4980
	*
4981
	* @return Array the airline country list
4982
	*
4983
	*/
4984
	public function countAllFlightOverCountries($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
4985
	{
4986
		global $globalDBdriver;
4987
		//$filter_query = $this->getFilter($filters,true,true);
4988
		$Connection= new Connection($this->db);
4989
		if (!$Connection->tableExists('countries')) return array();
4990
		/*
4991
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
4992
					FROM countries c, spotter_output s
4993
					WHERE Within(GeomFromText(CONCAT('POINT(',s.longitude,' ',s.latitude,')')), ogc_geom) ";
4994
		*/
4995
/*
4996
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
4997
					FROM countries c, spotter_live s
4998
					WHERE c.iso2 = s.over_country ";
4999
		$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 ";
5000
*/
5001
		require_once('class.SpotterLive.php');
5002
		$SpotterLive = new SpotterLive();
5003
		$filter_query = $SpotterLive->getFilter($filters,true,true);
5004
		$filter_query .= ' over_country IS NOT NULL';
5005
                if ($olderthanmonths > 0) {
5006
			if ($globalDBdriver == 'mysql') {
5007
				$filter_query .= ' AND spotter_live.date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5008
			} else {
5009
				$filter_query .= " AND spotter_live.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5010
			}
5011
		}
5012
                if ($sincedate != '') {
5013
            		if ($globalDBdriver == 'mysql') {
5014
				$filter_query .= " AND spotter_live.date > '".$sincedate."' ";
5015
			} else {
5016
				$filter_query .= " AND spotter_live.date > CAST('".$sincedate."' AS TIMESTAMP)";
5017
			}
5018
		}
5019
		$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 ";
5020
		$query .= "GROUP BY c.name,c.iso3,c.iso2 ORDER BY nb DESC";
5021
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5022
      
5023
		
5024
		$sth = $this->db->prepare($query);
5025
		$sth->execute();
5026
 
5027
		$flight_array = array();
5028
		$temp_array = array();
5029
        
5030
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5031
		{
5032
			$temp_array['flight_count'] = $row['nb'];
5033
			$temp_array['flight_country'] = $row['name'];
5034
			$temp_array['flight_country_iso3'] = $row['iso3'];
5035
			$temp_array['flight_country_iso2'] = $row['iso2'];
5036
			$flight_array[] = $temp_array;
5037
		}
5038
		return $flight_array;
5039
	}
5040
	
5041
	
5042
	/**
5043
	* Gets all aircraft types that have flown over
5044
	*
5045
	* @return Array the aircraft list
5046
	*
5047
	*/
5048
	public function countAllAircraftTypes($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
5049
	{
5050
		global $globalDBdriver;
5051
		$filter_query = $this->getFilter($filters,true,true);
5052
		$query  = "SELECT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
5053
		    FROM spotter_output ".$filter_query." spotter_output.aircraft_name  <> '' AND spotter_output.aircraft_icao  <> ''";
5054
		if ($olderthanmonths > 0) {
5055
			if ($globalDBdriver == 'mysql') {
5056
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5057
			} else {
5058
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5059
			}
5060
		}
5061
		if ($sincedate != '') {
5062
			if ($globalDBdriver == 'mysql') {
5063
				$query .= " AND spotter_output.date > '".$sincedate."'";
5064
			} else {
5065
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5066
			}
5067
		}
5068
		$query_values = array();
5069
		if ($year != '') {
5070
			if ($globalDBdriver == 'mysql') {
5071
				$query .= " AND YEAR(spotter_output.date) = :year";
5072
				$query_values = array_merge($query_values,array(':year' => $year));
5073
			} else {
5074
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5075
				$query_values = array_merge($query_values,array(':year' => $year));
5076
			}
5077
		}
5078
		if ($month != '') {
5079
			if ($globalDBdriver == 'mysql') {
5080
				$query .= " AND MONTH(spotter_output.date) = :month";
5081
				$query_values = array_merge($query_values,array(':month' => $month));
5082
			} else {
5083
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5084
				$query_values = array_merge($query_values,array(':month' => $month));
5085
			}
5086
		}
5087
		if ($day != '') {
5088
			if ($globalDBdriver == 'mysql') {
5089
				$query .= " AND DAY(spotter_output.date) = :day";
5090
				$query_values = array_merge($query_values,array(':day' => $day));
5091
			} else {
5092
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5093
				$query_values = array_merge($query_values,array(':day' => $day));
5094
			}
5095
		}
5096
5097
		$query .= " GROUP BY spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer ORDER BY aircraft_icao_count DESC";
5098
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5099
 
5100
		$sth = $this->db->prepare($query);
5101
		$sth->execute($query_values);
5102
5103
		$aircraft_array = array();
5104
		$temp_array = array();
5105
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5106
		{
5107
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5108
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5109
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5110
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5111
			$aircraft_array[] = $temp_array;
5112
		}
5113
		return $aircraft_array;
5114
	}
5115
5116
	/**
5117
	* Gets all aircraft types that have flown over by airline
5118
	*
5119
	* @return Array the aircraft list
5120
	*
5121
	*/
5122
	public function countAllAircraftTypesByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '',$month = '', $day = '')
5123
	{
5124
		global $globalDBdriver;
5125
		$filter_query = $this->getFilter($filters,true,true);
5126
		$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 
5127
		    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'";
5128
		if ($olderthanmonths > 0) {
5129
			if ($globalDBdriver == 'mysql') {
5130
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5131
			} else {
5132
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5133
			}
5134
		}
5135
		if ($sincedate != '') {
5136
			if ($globalDBdriver == 'mysql') {
5137
				$query .= " AND spotter_output.date > '".$sincedate."'";
5138
			} else {
5139
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5140
			}
5141
		}
5142
		$query_values = array();
5143
		if ($year != '') {
5144
			if ($globalDBdriver == 'mysql') {
5145
				$query .= " AND YEAR(spotter_output.date) = :year";
5146
				$query_values = array_merge($query_values,array(':year' => $year));
5147
			} else {
5148
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5149
				$query_values = array_merge($query_values,array(':year' => $year));
5150
			}
5151
		}
5152
		if ($month != '') {
5153
			if ($globalDBdriver == 'mysql') {
5154
				$query .= " AND MONTH(spotter_output.date) = :month";
5155
				$query_values = array_merge($query_values,array(':month' => $month));
5156
			} else {
5157
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5158
				$query_values = array_merge($query_values,array(':month' => $month));
5159
			}
5160
		}
5161
		if ($day != '') {
5162
			if ($globalDBdriver == 'mysql') {
5163
				$query .= " AND DAY(spotter_output.date) = :day";
5164
				$query_values = array_merge($query_values,array(':day' => $day));
5165
			} else {
5166
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5167
				$query_values = array_merge($query_values,array(':day' => $day));
5168
			}
5169
		}
5170
5171
		$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";
5172
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5173
 
5174
		$sth = $this->db->prepare($query);
5175
		$sth->execute($query_values);
5176
5177
		$aircraft_array = array();
5178
		$temp_array = array();
5179
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5180
		{
5181
			$temp_array['airline_icao'] = $row['airline_icao'];
5182
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5183
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5184
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5185
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5186
			$aircraft_array[] = $temp_array;
5187
		}
5188
		return $aircraft_array;
5189
	}
5190
5191
	/**
5192
	* Gets all aircraft types that have flown over by months
5193
	*
5194
	* @return Array the aircraft list
5195
	*
5196
	*/
5197
	public function countAllAircraftTypesByMonths($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
5198
	{
5199
		global $globalDBdriver;
5200
		$filter_query = $this->getFilter($filters,true,true);
5201
		$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 
5202
		    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' ";
5203
		if ($olderthanmonths > 0) {
5204
			if ($globalDBdriver == 'mysql') {
5205
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5206
			} else {
5207
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5208
			}
5209
		}
5210
		if ($sincedate != '') {
5211
			if ($globalDBdriver == 'mysql') {
5212
				$query .= "AND spotter_output.date > '".$sincedate."' ";
5213
			} else {
5214
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5215
			}
5216
		}
5217
5218
		$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";
5219
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5220
 
5221
		$sth = $this->db->prepare($query);
5222
		$sth->execute();
5223
5224
		$aircraft_array = array();
5225
		$temp_array = array();
5226
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5227
		{
5228
			//$temp_array['airline_icao'] = $row['airline_icao'];
5229
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5230
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5231
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5232
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5233
			$aircraft_array[] = $temp_array;
5234
		}
5235
		return $aircraft_array;
5236
	}
5237
5238
5239
	/**
5240
	* Gets all aircraft registration that have flown over by aircaft icao
5241
	*
5242
	* @return Array the aircraft list
5243
	*
5244
	*/
5245
	public function countAllAircraftRegistrationByAircraft($aircraft_icao,$filters = array())
5246
	{
5247
		$Image = new Image($this->db);
5248
		$filter_query = $this->getFilter($filters,true,true);
5249
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
5250
5251
		$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  
5252
				FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_icao = :aircraft_icao  
5253
				GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name  
5254
				ORDER BY registration_count DESC";
5255
5256
		$sth = $this->db->prepare($query);
5257
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
5258
5259
		$aircraft_array = array();
5260
		$temp_array = array();
5261
        
5262
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5263
		{
5264
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5265
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5266
			$temp_array['registration'] = $row['registration'];
5267
			$temp_array['airline_name'] = $row['airline_name'];
5268
			$temp_array['image_thumbnail'] = "";
5269
			if($row['registration'] != "")
5270
			{
5271
				$image_array = $Image->getSpotterImage($row['registration']);
5272
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5273
			}
5274
			$temp_array['registration_count'] = $row['registration_count'];
5275
5276
			$aircraft_array[] = $temp_array;
5277
		}
5278
		return $aircraft_array;
5279
	}
5280
5281
5282
	/**
5283
	* Gets all aircraft types that have flown over by airline icao
5284
	*
5285
	* @return Array the aircraft list
5286
	*
5287
	*/
5288
	public function countAllAircraftTypesByAirline($airline_icao,$filters = array())
5289
	{
5290
		$filter_query = $this->getFilter($filters,true,true);
5291
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5292
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5293
			    FROM spotter_output".$filter_query." spotter_output.aircraft_icao <> '' AND spotter_output.airline_icao = :airline_icao 
5294
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5295
			    ORDER BY aircraft_icao_count DESC";
5296
5297
		$sth = $this->db->prepare($query);
5298
		$sth->execute(array(':airline_icao' => $airline_icao));
5299
5300
		$aircraft_array = array();
5301
		$temp_array = array();
5302
5303
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5304
		{
5305
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5306
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5307
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5308
5309
			$aircraft_array[] = $temp_array;
5310
		}
5311
		return $aircraft_array;
5312
	}
5313
5314
5315
	/**
5316
	* Gets all aircraft registration that have flown over by airline icao
5317
	*
5318
	* @return Array the aircraft list
5319
	*
5320
	*/
5321
	public function countAllAircraftRegistrationByAirline($airline_icao,$filters = array())
5322
	{
5323
		$filter_query = $this->getFilter($filters,true,true);
5324
		$Image = new Image($this->db);
5325
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5326
5327
		$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 
5328
			    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.airline_icao = :airline_icao 
5329
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
5330
			    ORDER BY registration_count DESC";
5331
5332
		$sth = $this->db->prepare($query);
5333
		$sth->execute(array(':airline_icao' => $airline_icao));
5334
5335
		$aircraft_array = array();
5336
		$temp_array = array();
5337
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5338
		{
5339
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5340
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5341
			$temp_array['registration'] = $row['registration'];
5342
			$temp_array['airline_name'] = $row['airline_name'];
5343
			$temp_array['image_thumbnail'] = "";
5344
			if($row['registration'] != "")
5345
			{
5346
				$image_array = $Image->getSpotterImage($row['registration']);
5347
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5348
			}
5349
			$temp_array['registration_count'] = $row['registration_count'];
5350
5351
			$aircraft_array[] = $temp_array;
5352
		}
5353
		return $aircraft_array;
5354
	}
5355
5356
5357
	/**
5358
	* Gets all aircraft manufacturer that have flown over by airline icao
5359
	*
5360
	* @return Array the aircraft list
5361
	*
5362
	*/
5363
	public function countAllAircraftManufacturerByAirline($airline_icao,$filters = array())
5364
	{
5365
		$filter_query = $this->getFilter($filters,true,true);
5366
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5367
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5368
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.airline_icao = :airline_icao 
5369
				GROUP BY spotter_output.aircraft_manufacturer 
5370
				ORDER BY aircraft_manufacturer_count DESC";
5371
5372
		$sth = $this->db->prepare($query);
5373
		$sth->execute(array(':airline_icao' => $airline_icao));
5374
5375
		$aircraft_array = array();
5376
		$temp_array = array();
5377
5378
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5379
		{
5380
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5381
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5382
5383
			$aircraft_array[] = $temp_array;
5384
		}
5385
		return $aircraft_array;
5386
	}
5387
5388
5389
	/**
5390
	* Gets all aircraft types that have flown over by airline icao
5391
	*
5392
	* @return Array the aircraft list
5393
	*
5394
	*/
5395
	public function countAllAircraftTypesByAirport($airport_icao,$filters = array())
5396
	{
5397
		$filter_query = $this->getFilter($filters,true,true);
5398
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5399
5400
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5401
				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) 
5402
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5403
				ORDER BY aircraft_icao_count DESC";
5404
 
5405
		$sth = $this->db->prepare($query);
5406
		$sth->execute(array(':airport_icao' => $airport_icao));
5407
5408
		$aircraft_array = array();
5409
		$temp_array = array();
5410
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5411
		{
5412
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5413
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5414
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5415
5416
			$aircraft_array[] = $temp_array;
5417
		}
5418
		return $aircraft_array;
5419
	}
5420
5421
5422
	/**
5423
	* Gets all aircraft registration that have flown over by airport icao
5424
	*
5425
	* @return Array the aircraft list
5426
	*
5427
	*/
5428
	public function countAllAircraftRegistrationByAirport($airport_icao,$filters = array())
5429
	{
5430
		$filter_query = $this->getFilter($filters,true,true);
5431
		$Image = new Image($this->db);
5432
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5433
5434
		$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  
5435
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)   
5436
                    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5437
		    ORDER BY registration_count DESC";
5438
5439
		$sth = $this->db->prepare($query);
5440
		$sth->execute(array(':airport_icao' => $airport_icao));
5441
5442
		$aircraft_array = array();
5443
		$temp_array = array();
5444
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5445
		{
5446
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5447
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5448
			$temp_array['registration'] = $row['registration'];
5449
			$temp_array['airline_name'] = $row['airline_name'];
5450
			$temp_array['image_thumbnail'] = "";
5451
			if($row['registration'] != "")
5452
			{
5453
				$image_array = $Image->getSpotterImage($row['registration']);
5454
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5455
			}
5456
			$temp_array['registration_count'] = $row['registration_count'];
5457
			$aircraft_array[] = $temp_array;
5458
		}
5459
		return $aircraft_array;
5460
	}
5461
	
5462
	
5463
	/**
5464
	* Gets all aircraft manufacturer that have flown over by airport icao
5465
	*
5466
	* @return Array the aircraft list
5467
	*
5468
	*/
5469
	public function countAllAircraftManufacturerByAirport($airport_icao,$filters = array())
5470
	{
5471
		$filter_query = $this->getFilter($filters,true,true);
5472
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5473
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5474
                    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)  
5475
                    GROUP BY spotter_output.aircraft_manufacturer 
5476
					ORDER BY aircraft_manufacturer_count DESC";
5477
5478
		
5479
		$sth = $this->db->prepare($query);
5480
		$sth->execute(array(':airport_icao' => $airport_icao));
5481
5482
		$aircraft_array = array();
5483
		$temp_array = array();
5484
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5485
		{
5486
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5487
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5488
			$aircraft_array[] = $temp_array;
5489
		}
5490
		return $aircraft_array;
5491
	}
5492
5493
	/**
5494
	* Gets all aircraft types that have flown over by aircraft manufacturer
5495
	*
5496
	* @return Array the aircraft list
5497
	*
5498
	*/
5499
	public function countAllAircraftTypesByManufacturer($aircraft_manufacturer,$filters = array())
5500
	{
5501
		$filter_query = $this->getFilter($filters,true,true);
5502
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5503
5504
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5505
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
5506
                    GROUP BY spotter_output.aircraft_name 
5507
					ORDER BY aircraft_icao_count DESC";
5508
5509
		$sth = $this->db->prepare($query);
5510
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5511
		$aircraft_array = array();
5512
		$temp_array = array();
5513
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5514
		{
5515
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5516
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5517
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5518
			$aircraft_array[] = $temp_array;
5519
		}
5520
		return $aircraft_array;
5521
	}
5522
5523
5524
	/**
5525
	* Gets all aircraft registration that have flown over by aircaft manufacturer
5526
	*
5527
	* @return Array the aircraft list
5528
	*
5529
	*/
5530
	public function countAllAircraftRegistrationByManufacturer($aircraft_manufacturer, $filters = array())
5531
	{
5532
		$filter_query = $this->getFilter($filters,true,true);
5533
		$Image = new Image($this->db);
5534
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5535
5536
		$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   
5537
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
5538
                    GROUP BY spotter_output.registration 
5539
					ORDER BY registration_count DESC";
5540
5541
		
5542
		$sth = $this->db->prepare($query);
5543
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5544
		$aircraft_array = array();
5545
		$temp_array = array();
5546
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5547
		{
5548
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5549
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5550
			$temp_array['registration'] = $row['registration'];
5551
			$temp_array['airline_name'] = $row['airline_name'];
5552
			$temp_array['image_thumbnail'] = "";
5553
			if($row['registration'] != "")
5554
			{
5555
				$image_array = $Image->getSpotterImage($row['registration']);
5556
				$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5557
			}
5558
			$temp_array['registration_count'] = $row['registration_count'];
5559
			$aircraft_array[] = $temp_array;
5560
		}
5561
		return $aircraft_array;
5562
	}
5563
5564
	/**
5565
	* Gets all aircraft types that have flown over by date
5566
	*
5567
	* @return Array the aircraft list
5568
	*
5569
	*/
5570
	public function countAllAircraftTypesByDate($date,$filters = array())
5571
	{
5572
		global $globalTimezone, $globalDBdriver;
5573
		$filter_query = $this->getFilter($filters,true,true);
5574
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5575
		if ($globalTimezone != '') {
5576
			date_default_timezone_set($globalTimezone);
5577
			$datetime = new DateTime($date);
5578
			$offset = $datetime->format('P');
5579
		} else $offset = '+00:00';
5580
5581
		if ($globalDBdriver == 'mysql') {
5582
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5583
					FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
5584
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5585
					ORDER BY aircraft_icao_count DESC";
5586
		} else {
5587
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5588
					FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date
5589
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5590
					ORDER BY aircraft_icao_count DESC";
5591
		}
5592
		
5593
		$sth = $this->db->prepare($query);
5594
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5595
5596
		$aircraft_array = array();
5597
		$temp_array = array();
5598
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5599
		{
5600
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5601
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5602
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5603
5604
			$aircraft_array[] = $temp_array;
5605
		}
5606
		return $aircraft_array;
5607
	}
5608
5609
5610
	/**
5611
	* Gets all aircraft registration that have flown over by date
5612
	*
5613
	* @return Array the aircraft list
5614
	*
5615
	*/
5616
	public function countAllAircraftRegistrationByDate($date,$filters = array())
5617
	{
5618
		global $globalTimezone, $globalDBdriver;
5619
		$filter_query = $this->getFilter($filters,true,true);
5620
		$Image = new Image($this->db);
5621
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5622
		if ($globalTimezone != '') {
5623
			date_default_timezone_set($globalTimezone);
5624
			$datetime = new DateTime($date);
5625
			$offset = $datetime->format('P');
5626
		} else $offset = '+00:00';
5627
5628
		if ($globalDBdriver == 'mysql') {
5629
			$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 
5630
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5631
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5632
					ORDER BY registration_count DESC";
5633
		} else {
5634
			$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    
5635
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5636
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5637
					ORDER BY registration_count DESC";
5638
		}
5639
		
5640
		$sth = $this->db->prepare($query);
5641
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5642
5643
		$aircraft_array = array();
5644
		$temp_array = array();
5645
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5646
		{
5647
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5648
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5649
			$temp_array['registration'] = $row['registration'];
5650
			$temp_array['airline_name'] = $row['airline_name'];
5651
			$temp_array['image_thumbnail'] = "";
5652
			if($row['registration'] != "")
5653
			{
5654
				$image_array = $Image->getSpotterImage($row['registration']);
5655
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5656
			}
5657
			$temp_array['registration_count'] = $row['registration_count'];
5658
 
5659
			$aircraft_array[] = $temp_array;
5660
		}
5661
		return $aircraft_array;
5662
	}
5663
5664
5665
	/**
5666
	* Gets all aircraft manufacturer that have flown over by date
5667
	*
5668
	* @return Array the aircraft manufacturer list
5669
	*
5670
	*/
5671
	public function countAllAircraftManufacturerByDate($date,$filters = array())
5672
	{
5673
		global $globalTimezone, $globalDBdriver;
5674
		$filter_query = $this->getFilter($filters,true,true);
5675
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5676
		if ($globalTimezone != '') {
5677
			date_default_timezone_set($globalTimezone);
5678
			$datetime = new DateTime($date);
5679
			$offset = $datetime->format('P');
5680
		} else $offset = '+00:00';
5681
5682
		if ($globalDBdriver == 'mysql') {
5683
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5684
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5685
				GROUP BY spotter_output.aircraft_manufacturer 
5686
				ORDER BY aircraft_manufacturer_count DESC";
5687
		} else {
5688
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5689
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5690
				GROUP BY spotter_output.aircraft_manufacturer 
5691
				ORDER BY aircraft_manufacturer_count DESC";
5692
		}
5693
		
5694
		$sth = $this->db->prepare($query);
5695
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5696
5697
		$aircraft_array = array();
5698
		$temp_array = array();
5699
5700
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5701
		{
5702
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5703
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5704
5705
			$aircraft_array[] = $temp_array;
5706
		}
5707
		return $aircraft_array;
5708
	}
5709
5710
5711
	/**
5712
	* Gets all aircraft types that have flown over by ident/callsign
5713
	*
5714
	* @return Array the aircraft list
5715
	*
5716
	*/
5717
	public function countAllAircraftTypesByIdent($ident,$filters = array())
5718
	{
5719
		$filter_query = $this->getFilter($filters,true,true);
5720
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5721
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5722
				FROM spotter_output".$filter_query." spotter_output.ident = :ident 
5723
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao
5724
				ORDER BY aircraft_icao_count DESC";
5725
5726
		$sth = $this->db->prepare($query);
5727
		$sth->execute(array(':ident' => $ident));
5728
      
5729
		$aircraft_array = array();
5730
		$temp_array = array();
5731
5732
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5733
		{
5734
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5735
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5736
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5737
5738
			$aircraft_array[] = $temp_array;
5739
		}
5740
		return $aircraft_array;
5741
	}
5742
5743
	/**
5744
	* Gets all aircraft types that have flown over by pilot
5745
	*
5746
	* @return Array the aircraft list
5747
	*
5748
	*/
5749
	public function countAllAircraftTypesByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
5750
	{
5751
		$filter_query = $this->getFilter($filters,true,true);
5752
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
5753
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5754
				FROM spotter_output".$filter_query." (spotter_output.pilot_id = :pilot OR spotter_output.pilot_name = :pilot)";
5755
		$query_values = array();
5756
		if ($year != '') {
5757
			if ($globalDBdriver == 'mysql') {
0 ignored issues
show
Bug introduced by
The variable $globalDBdriver does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
5758
				$query .= " AND YEAR(spotter_output.date) = :year";
5759
				$query_values = array_merge($query_values,array(':year' => $year));
5760
			} else {
5761
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5762
				$query_values = array_merge($query_values,array(':year' => $year));
5763
			}
5764
		}
5765
		if ($month != '') {
5766
			if ($globalDBdriver == 'mysql') {
5767
				$query .= " AND MONTH(spotter_output.date) = :month";
5768
				$query_values = array_merge($query_values,array(':month' => $month));
5769
			} else {
5770
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5771
				$query_values = array_merge($query_values,array(':month' => $month));
5772
			}
5773
		}
5774
		if ($day != '') {
5775
			if ($globalDBdriver == 'mysql') {
5776
				$query .= " AND DAY(spotter_output.date) = :day";
5777
				$query_values = array_merge($query_values,array(':day' => $day));
5778
			} else {
5779
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5780
				$query_values = array_merge($query_values,array(':day' => $day));
5781
			}
5782
		}
5783
5784
		$query .= " GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao
5785
				ORDER BY aircraft_icao_count DESC";
5786
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
5787
		$sth = $this->db->prepare($query);
5788
		$sth->execute($query_values);
5789
		return $sth->fetchAll(PDO::FETCH_ASSOC);
5790
	}
5791
5792
	/**
5793
	* Gets all aircraft types that have flown over by owner
5794
	*
5795
	* @return Array the aircraft list
5796
	*
5797
	*/
5798
	public function countAllAircraftTypesByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
5799
	{
5800
		$filter_query = $this->getFilter($filters,true,true);
5801
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
5802
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
5803
				FROM spotter_output".$filter_query." spotter_output.owner_name = :owner";
5804
		$query_values = array();
5805
		if ($year != '') {
5806
			if ($globalDBdriver == 'mysql') {
0 ignored issues
show
Bug introduced by
The variable $globalDBdriver does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
5807
				$query .= " AND YEAR(spotter_output.date) = :year";
5808
				$query_values = array_merge($query_values,array(':year' => $year));
5809
			} else {
5810
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5811
				$query_values = array_merge($query_values,array(':year' => $year));
5812
			}
5813
		}
5814
		if ($month != '') {
5815
			if ($globalDBdriver == 'mysql') {
5816
				$query .= " AND MONTH(spotter_output.date) = :month";
5817
				$query_values = array_merge($query_values,array(':month' => $month));
5818
			} else {
5819
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5820
				$query_values = array_merge($query_values,array(':month' => $month));
5821
			}
5822
		}
5823
		if ($day != '') {
5824
			if ($globalDBdriver == 'mysql') {
5825
				$query .= " AND DAY(spotter_output.date) = :day";
5826
				$query_values = array_merge($query_values,array(':day' => $day));
5827
			} else {
5828
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5829
				$query_values = array_merge($query_values,array(':day' => $day));
5830
			}
5831
		}
5832
		$query .= " GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.aircraft_icao
5833
				ORDER BY aircraft_icao_count DESC";
5834
		$query_values = array_merge($query_values,array(':owner' => $owner));
5835
		$sth = $this->db->prepare($query);
5836
		$sth->execute($query_values);
5837
		return $sth->fetchAll(PDO::FETCH_ASSOC);
5838
	}
5839
5840
	/**
5841
	* Gets all aircraft registration that have flown over by ident/callsign
5842
	*
5843
	* @return Array the aircraft list
5844
	*
5845
	*/
5846
	public function countAllAircraftRegistrationByIdent($ident,$filters = array())
5847
	{
5848
		$filter_query = $this->getFilter($filters,true,true);
5849
		$Image = new Image($this->db);
5850
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5851
5852
		$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  
5853
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.ident = :ident   
5854
                    GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
5855
		    ORDER BY registration_count DESC";
5856
5857
		
5858
		$sth = $this->db->prepare($query);
5859
		$sth->execute(array(':ident' => $ident));
5860
      
5861
		$aircraft_array = array();
5862
		$temp_array = array();
5863
        
5864
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5865
		{
5866
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5867
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5868
			$temp_array['registration'] = $row['registration'];
5869
			$temp_array['airline_name'] = $row['airline_name'];
5870
			$temp_array['image_thumbnail'] = "";
5871
			if($row['registration'] != "")
5872
			{
5873
				$image_array = $Image->getSpotterImage($row['registration']);
5874
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5875
				else $temp_array['image_thumbnail'] = '';
5876
			}
5877
			$temp_array['registration_count'] = $row['registration_count'];
5878
			$aircraft_array[] = $temp_array;
5879
		}
5880
		return $aircraft_array;
5881
	}
5882
5883
	/**
5884
	* Gets all aircraft registration that have flown over by owner
5885
	*
5886
	* @return Array the aircraft list
5887
	*
5888
	*/
5889
	public function countAllAircraftRegistrationByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
5890
	{
5891
		$filter_query = $this->getFilter($filters,true,true);
5892
		$Image = new Image($this->db);
5893
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
5894
5895
		$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  
5896
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.owner_name = :owner";
5897
		$query_values = array();
5898
		if ($year != '') {
5899
			if ($globalDBdriver == 'mysql') {
0 ignored issues
show
Bug introduced by
The variable $globalDBdriver does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
5900
				$query .= " AND YEAR(spotter_output.date) = :year";
5901
				$query_values = array_merge($query_values,array(':year' => $year));
5902
			} else {
5903
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5904
				$query_values = array_merge($query_values,array(':year' => $year));
5905
			}
5906
		}
5907
		if ($month != '') {
5908
			if ($globalDBdriver == 'mysql') {
5909
				$query .= " AND MONTH(spotter_output.date) = :month";
5910
				$query_values = array_merge($query_values,array(':month' => $month));
5911
			} else {
5912
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5913
				$query_values = array_merge($query_values,array(':month' => $month));
5914
			}
5915
		}
5916
		if ($day != '') {
5917
			if ($globalDBdriver == 'mysql') {
5918
				$query .= " AND DAY(spotter_output.date) = :day";
5919
				$query_values = array_merge($query_values,array(':day' => $day));
5920
			} else {
5921
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5922
				$query_values = array_merge($query_values,array(':day' => $day));
5923
			}
5924
		}
5925
		$query_values = array_merge($query_values,array(':owner' => $owner));
5926
5927
		$query .= " GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.airline_name
5928
		    ORDER BY registration_count DESC";
5929
5930
		
5931
		$sth = $this->db->prepare($query);
5932
		$sth->execute($query_values);
5933
      
5934
		$aircraft_array = array();
5935
		$temp_array = array();
5936
        
5937
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5938
		{
5939
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5940
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5941
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5942
			$temp_array['registration'] = $row['registration'];
5943
			$temp_array['airline_name'] = $row['airline_name'];
5944
			$temp_array['image_thumbnail'] = "";
5945
			if($row['registration'] != "")
5946
			{
5947
				$image_array = $Image->getSpotterImage($row['registration']);
5948
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5949
				else $temp_array['image_thumbnail'] = '';
5950
			}
5951
			$temp_array['registration_count'] = $row['registration_count'];
5952
			$aircraft_array[] = $temp_array;
5953
		}
5954
		return $aircraft_array;
5955
	}
5956
5957
	/**
5958
	* Gets all aircraft registration that have flown over by pilot
5959
	*
5960
	* @return Array the aircraft list
5961
	*
5962
	*/
5963
	public function countAllAircraftRegistrationByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
5964
	{
5965
		$filter_query = $this->getFilter($filters,true,true);
5966
		$Image = new Image($this->db);
5967
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
5968
5969
		$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  
5970
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot)";
5971
		$query_values = array();
5972
		if ($year != '') {
5973
			if ($globalDBdriver == 'mysql') {
0 ignored issues
show
Bug introduced by
The variable $globalDBdriver does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
5974
				$query .= " AND YEAR(spotter_output.date) = :year";
5975
				$query_values = array_merge($query_values,array(':year' => $year));
5976
			} else {
5977
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5978
				$query_values = array_merge($query_values,array(':year' => $year));
5979
			}
5980
		}
5981
		if ($month != '') {
5982
			if ($globalDBdriver == 'mysql') {
5983
				$query .= " AND MONTH(spotter_output.date) = :month";
5984
				$query_values = array_merge($query_values,array(':month' => $month));
5985
			} else {
5986
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5987
				$query_values = array_merge($query_values,array(':month' => $month));
5988
			}
5989
		}
5990
		if ($day != '') {
5991
			if ($globalDBdriver == 'mysql') {
5992
				$query .= " AND DAY(spotter_output.date) = :day";
5993
				$query_values = array_merge($query_values,array(':day' => $day));
5994
			} else {
5995
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5996
				$query_values = array_merge($query_values,array(':day' => $day));
5997
			}
5998
		}
5999
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
6000
6001
		$query .= " GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.airline_name
6002
		    ORDER BY registration_count DESC";
6003
6004
		
6005
		$sth = $this->db->prepare($query);
6006
		$sth->execute($query_values);
6007
      
6008
		$aircraft_array = array();
6009
		$temp_array = array();
6010
        
6011
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6012
		{
6013
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6014
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6015
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6016
			$temp_array['registration'] = $row['registration'];
6017
			$temp_array['airline_name'] = $row['airline_name'];
6018
			$temp_array['image_thumbnail'] = "";
6019
			if($row['registration'] != "")
6020
			{
6021
				$image_array = $Image->getSpotterImage($row['registration']);
6022
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6023
				else $temp_array['image_thumbnail'] = '';
6024
			}
6025
			$temp_array['registration_count'] = $row['registration_count'];
6026
			$aircraft_array[] = $temp_array;
6027
		}
6028
		return $aircraft_array;
6029
	}
6030
6031
6032
	/**
6033
	* Gets all aircraft manufacturer that have flown over by ident/callsign
6034
	*
6035
	* @return Array the aircraft manufacturer list
6036
	*
6037
	*/
6038
	public function countAllAircraftManufacturerByIdent($ident,$filters = array())
6039
	{
6040
		$filter_query = $this->getFilter($filters,true,true);
6041
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
6042
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6043
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.ident = :ident  
6044
                    GROUP BY spotter_output.aircraft_manufacturer 
6045
					ORDER BY aircraft_manufacturer_count DESC";
6046
6047
		
6048
		$sth = $this->db->prepare($query);
6049
		$sth->execute(array(':ident' => $ident));
6050
		$aircraft_array = array();
6051
		$temp_array = array();
6052
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6053
		{
6054
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6055
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6056
			$aircraft_array[] = $temp_array;
6057
		}
6058
		return $aircraft_array;
6059
	}
6060
6061
	/**
6062
	* Gets all aircraft manufacturer that have flown over by owner
6063
	*
6064
	* @return Array the aircraft manufacturer list
6065
	*
6066
	*/
6067
	public function countAllAircraftManufacturerByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
6068
	{
6069
		$filter_query = $this->getFilter($filters,true,true);
6070
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
6071
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6072
		    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.owner_name = :owner";
6073
		$query_values = array();
6074
		if ($year != '') {
6075
			if ($globalDBdriver == 'mysql') {
0 ignored issues
show
Bug introduced by
The variable $globalDBdriver does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
6076
				$query .= " AND YEAR(spotter_output.date) = :year";
6077
				$query_values = array_merge($query_values,array(':year' => $year));
6078
			} else {
6079
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6080
				$query_values = array_merge($query_values,array(':year' => $year));
6081
			}
6082
		}
6083
		if ($month != '') {
6084
			if ($globalDBdriver == 'mysql') {
6085
				$query .= " AND MONTH(spotter_output.date) = :month";
6086
				$query_values = array_merge($query_values,array(':month' => $month));
6087
			} else {
6088
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6089
				$query_values = array_merge($query_values,array(':month' => $month));
6090
			}
6091
		}
6092
		if ($day != '') {
6093
			if ($globalDBdriver == 'mysql') {
6094
				$query .= " AND DAY(spotter_output.date) = :day";
6095
				$query_values = array_merge($query_values,array(':day' => $day));
6096
			} else {
6097
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6098
				$query_values = array_merge($query_values,array(':day' => $day));
6099
			}
6100
		}
6101
		$query_values = array_merge($query_values,array(':owner' => $owner));
6102
6103
		$query .= " GROUP BY spotter_output.aircraft_manufacturer 
6104
		    ORDER BY aircraft_manufacturer_count DESC";
6105
6106
		
6107
		$sth = $this->db->prepare($query);
6108
		$sth->execute($query_values);
6109
		return $sth->fetchAll(PDO::FETCH_ASSOC);
6110
	}
6111
6112
	/**
6113
	* Gets all aircraft manufacturer that have flown over by pilot
6114
	*
6115
	* @return Array the aircraft manufacturer list
6116
	*
6117
	*/
6118
	public function countAllAircraftManufacturerByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
6119
	{
6120
		$filter_query = $this->getFilter($filters,true,true);
6121
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
6122
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6123
		    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot)";
6124
		$query_values = array();
6125
		if ($year != '') {
6126
			if ($globalDBdriver == 'mysql') {
0 ignored issues
show
Bug introduced by
The variable $globalDBdriver does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
6127
				$query .= " AND YEAR(spotter_output.date) = :year";
6128
				$query_values = array_merge($query_values,array(':year' => $year));
6129
			} else {
6130
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6131
				$query_values = array_merge($query_values,array(':year' => $year));
6132
			}
6133
		}
6134
		if ($month != '') {
6135
			if ($globalDBdriver == 'mysql') {
6136
				$query .= " AND MONTH(spotter_output.date) = :month";
6137
				$query_values = array_merge($query_values,array(':month' => $month));
6138
			} else {
6139
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6140
				$query_values = array_merge($query_values,array(':month' => $month));
6141
			}
6142
		}
6143
		if ($day != '') {
6144
			if ($globalDBdriver == 'mysql') {
6145
				$query .= " AND DAY(spotter_output.date) = :day";
6146
				$query_values = array_merge($query_values,array(':day' => $day));
6147
			} else {
6148
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6149
				$query_values = array_merge($query_values,array(':day' => $day));
6150
			}
6151
		}
6152
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
6153
6154
		$query .= " GROUP BY spotter_output.aircraft_manufacturer 
6155
		    ORDER BY aircraft_manufacturer_count DESC";
6156
6157
		
6158
		$sth = $this->db->prepare($query);
6159
		$sth->execute($query_values);
6160
		return $sth->fetchAll(PDO::FETCH_ASSOC);
6161
	}
6162
6163
6164
	/**
6165
	* Gets all aircraft types that have flown over by route
6166
	*
6167
	* @return Array the aircraft list
6168
	*
6169
	*/
6170
	public function countAllAircraftTypesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
6171
	{
6172
		$filter_query = $this->getFilter($filters,true,true);
6173
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
6174
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
6175
		
6176
6177
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
6178
                    FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
6179
                    GROUP BY spotter_output.aircraft_name 
6180
					ORDER BY aircraft_icao_count DESC";
6181
 
6182
		
6183
		$sth = $this->db->prepare($query);
6184
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
6185
		$aircraft_array = array();
6186
		$temp_array = array();
6187
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6188
		{
6189
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6190
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6191
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
6192
			$aircraft_array[] = $temp_array;
6193
		}
6194
		return $aircraft_array;
6195
	}
6196
6197
	/**
6198
	* Gets all aircraft registration that have flown over by route
6199
	*
6200
	* @return Array the aircraft list
6201
	*
6202
	*/
6203
	public function countAllAircraftRegistrationByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
6204
	{
6205
		$filter_query = $this->getFilter($filters,true,true);
6206
		$Image = new Image($this->db);
6207
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
6208
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
6209
6210
		$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   
6211
                    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)   
6212
                    GROUP BY spotter_output.registration 
6213
					ORDER BY registration_count DESC";
6214
6215
		
6216
		$sth = $this->db->prepare($query);
6217
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
6218
      
6219
		$aircraft_array = array();
6220
		$temp_array = array();
6221
        
6222
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6223
		{
6224
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6225
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6226
			$temp_array['registration'] = $row['registration'];
6227
			$temp_array['airline_name'] = $row['airline_name'];
6228
			$temp_array['image_thumbnail'] = "";
6229
			if($row['registration'] != "")
6230
			{
6231
				$image_array = $Image->getSpotterImage($row['registration']);
6232
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6233
			}
6234
			$temp_array['registration_count'] = $row['registration_count'];
6235
          
6236
			$aircraft_array[] = $temp_array;
6237
		}
6238
6239
		return $aircraft_array;
6240
	}
6241
	
6242
	
6243
	/**
6244
	* Gets all aircraft manufacturer that have flown over by route
6245
	*
6246
	* @return Array the aircraft manufacturer list
6247
	*
6248
	*/
6249
	public function countAllAircraftManufacturerByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
6250
	{
6251
		$filter_query = $this->getFilter($filters,true,true);
6252
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
6253
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
6254
6255
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6256
                    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) 
6257
                    GROUP BY spotter_output.aircraft_manufacturer 
6258
					ORDER BY aircraft_manufacturer_count DESC";
6259
6260
		
6261
		$sth = $this->db->prepare($query);
6262
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
6263
      
6264
		$aircraft_array = array();
6265
		$temp_array = array();
6266
        
6267
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6268
		{
6269
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6270
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6271
          
6272
			$aircraft_array[] = $temp_array;
6273
		}
6274
6275
		return $aircraft_array;
6276
	}	
6277
6278
	
6279
	
6280
	
6281
	/**
6282
	* Gets all aircraft types that have flown over by country
6283
	*
6284
	* @return Array the aircraft list
6285
	*
6286
	*/
6287
	public function countAllAircraftTypesByCountry($country,$filters = array())
6288
	{
6289
		$filter_query = $this->getFilter($filters,true,true);
6290
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6291
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
6292
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
6293
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
6294
			    ORDER BY aircraft_icao_count DESC";
6295
 
6296
		
6297
		$sth = $this->db->prepare($query);
6298
		$sth->execute(array(':country' => $country));
6299
      
6300
		$aircraft_array = array();
6301
		$temp_array = array();
6302
        
6303
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6304
		{
6305
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6306
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6307
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
6308
          
6309
			$aircraft_array[] = $temp_array;
6310
		}
6311
6312
		return $aircraft_array;
6313
	}
6314
6315
6316
	/**
6317
	* Gets all aircraft registration that have flown over by country
6318
	*
6319
	* @return Array the aircraft list
6320
	*
6321
	*/
6322
	public function countAllAircraftRegistrationByCountry($country,$filters = array())
6323
	{
6324
		$filter_query = $this->getFilter($filters,true,true);
6325
		$Image = new Image($this->db);
6326
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6327
		$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 
6328
			    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)    
6329
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
6330
			    ORDER BY registration_count DESC";
6331
6332
		
6333
		$sth = $this->db->prepare($query);
6334
		$sth->execute(array(':country' => $country));
6335
      
6336
		$aircraft_array = array();
6337
		$temp_array = array();
6338
        
6339
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6340
		{
6341
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6342
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6343
			$temp_array['registration'] = $row['registration'];
6344
			$temp_array['airline_name'] = $row['airline_name'];
6345
			$temp_array['image_thumbnail'] = "";
6346
			if($row['registration'] != "")
6347
			{
6348
				$image_array = $Image->getSpotterImage($row['registration']);
6349
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6350
			}
6351
			$temp_array['registration_count'] = $row['registration_count'];
6352
          
6353
			$aircraft_array[] = $temp_array;
6354
		}
6355
6356
		return $aircraft_array;
6357
	}
6358
	
6359
	
6360
	/**
6361
	* Gets all aircraft manufacturer that have flown over by country
6362
	*
6363
	* @return Array the aircraft manufacturer list
6364
	*
6365
	*/
6366
	public function countAllAircraftManufacturerByCountry($country,$filters = array())
6367
	{
6368
		$filter_query = $this->getFilter($filters,true,true);
6369
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6370
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6371
                    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) 
6372
                    GROUP BY spotter_output.aircraft_manufacturer 
6373
					ORDER BY aircraft_manufacturer_count DESC";
6374
6375
		
6376
		$sth = $this->db->prepare($query);
6377
		$sth->execute(array(':country' => $country));
6378
      
6379
		$aircraft_array = array();
6380
		$temp_array = array();
6381
        
6382
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6383
		{
6384
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6385
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6386
          
6387
			$aircraft_array[] = $temp_array;
6388
		}
6389
6390
		return $aircraft_array;
6391
	}	
6392
	
6393
	
6394
	
6395
	/**
6396
	* Gets all aircraft manufacturers that have flown over
6397
	*
6398
	* @return Array the aircraft list
6399
	*
6400
	*/
6401
	public function countAllAircraftManufacturers($filters = array(),$year = '',$month = '',$day = '')
6402
	{
6403
		global $globalDBdriver;
6404
		$filter_query = $this->getFilter($filters,true,true);
6405
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6406
                    FROM spotter_output ".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.aircraft_manufacturer <> 'Not Available'";
6407
                $query_values = array();
6408
		if ($year != '') {
6409
			if ($globalDBdriver == 'mysql') {
6410
				$query .= " AND YEAR(spotter_output.date) = :year";
6411
				$query_values = array_merge($query_values,array(':year' => $year));
6412
			} else {
6413
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6414
				$query_values = array_merge($query_values,array(':year' => $year));
6415
			}
6416
		}
6417
		if ($month != '') {
6418
			if ($globalDBdriver == 'mysql') {
6419
				$query .= " AND MONTH(spotter_output.date) = :month";
6420
				$query_values = array_merge($query_values,array(':month' => $month));
6421
			} else {
6422
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6423
				$query_values = array_merge($query_values,array(':month' => $month));
6424
			}
6425
		}
6426
		if ($day != '') {
6427
			if ($globalDBdriver == 'mysql') {
6428
				$query .= " AND DAY(spotter_output.date) = :day";
6429
				$query_values = array_merge($query_values,array(':day' => $day));
6430
			} else {
6431
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6432
				$query_values = array_merge($query_values,array(':day' => $day));
6433
			}
6434
		}
6435
		$query .= " GROUP BY spotter_output.aircraft_manufacturer
6436
					ORDER BY aircraft_manufacturer_count DESC
6437
					LIMIT 10";
6438
      
6439
		
6440
		$sth = $this->db->prepare($query);
6441
		$sth->execute($query_values);
6442
      
6443
		$manufacturer_array = array();
6444
		$temp_array = array();
6445
        
6446
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6447
		{
6448
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6449
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6450
          
6451
			$manufacturer_array[] = $temp_array;
6452
		}
6453
6454
		return $manufacturer_array;
6455
	}
6456
	
6457
	
6458
	
6459
	/**
6460
	* Gets all aircraft registrations that have flown over
6461
	*
6462
	* @return Array the aircraft list
6463
	*
6464
	*/
6465
	public function countAllAircraftRegistrations($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '', $month = '', $day = '')
6466
	{
6467
		global $globalDBdriver;
6468
		$Image = new Image($this->db);
6469
		$filter_query = $this->getFilter($filters,true,true);
6470
		$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    
6471
                    FROM spotter_output ".$filter_query." spotter_output.registration <> '' AND spotter_output.registration <> 'NA'";
6472
                if ($olderthanmonths > 0) {
6473
            		if ($globalDBdriver == 'mysql') {
6474
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6475
			} else {
6476
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6477
			}
6478
		}
6479
                if ($sincedate != '') {
6480
            		if ($globalDBdriver == 'mysql') {
6481
				$query .= " AND spotter_output.date > '".$sincedate."'";
6482
			} else {
6483
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6484
			}
6485
		}
6486
		$query_values = array();
6487
		if ($year != '') {
6488
			if ($globalDBdriver == 'mysql') {
6489
				$query .= " AND YEAR(spotter_output.date) = :year";
6490
				$query_values = array_merge($query_values,array(':year' => $year));
6491
			} else {
6492
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6493
				$query_values = array_merge($query_values,array(':year' => $year));
6494
			}
6495
		}
6496
		if ($month != '') {
6497
			if ($globalDBdriver == 'mysql') {
6498
				$query .= " AND MONTH(spotter_output.date) = :month";
6499
				$query_values = array_merge($query_values,array(':month' => $month));
6500
			} else {
6501
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6502
				$query_values = array_merge($query_values,array(':month' => $month));
6503
			}
6504
		}
6505
		if ($day != '') {
6506
			if ($globalDBdriver == 'mysql') {
6507
				$query .= " AND DAY(spotter_output.date) = :day";
6508
				$query_values = array_merge($query_values,array(':day' => $day));
6509
			} else {
6510
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6511
				$query_values = array_merge($query_values,array(':day' => $day));
6512
			}
6513
		}
6514
		$query .= " GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name ORDER BY aircraft_registration_count DESC";
6515
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6516
		
6517
		$sth = $this->db->prepare($query);
6518
		$sth->execute($query_values);
6519
      
6520
		$aircraft_array = array();
6521
		$temp_array = array();
6522
        
6523
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6524
		{
6525
			$temp_array['registration'] = $row['registration'];
6526
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
6527
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6528
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6529
			$temp_array['airline_name'] = $row['airline_name'];
6530
			$temp_array['image_thumbnail'] = "";
6531
			if($row['registration'] != "")
6532
			{
6533
				$image_array = $Image->getSpotterImage($row['registration']);
6534
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6535
			}
6536
          
6537
			$aircraft_array[] = $temp_array;
6538
		}
6539
6540
		return $aircraft_array;
6541
	}
6542
6543
6544
	/**
6545
	* Gets all aircraft registrations that have flown over
6546
	*
6547
	* @return Array the aircraft list
6548
	*
6549
	*/
6550
	public function countAllAircraftRegistrationsByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
6551
	{
6552
		global $globalDBdriver;
6553
		$filter_query = $this->getFilter($filters,true,true);
6554
		$Image = new Image($this->db);
6555
		$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    
6556
                    FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.registration <> '' AND spotter_output.registration <> 'NA' ";
6557
                if ($olderthanmonths > 0) {
6558
            		if ($globalDBdriver == 'mysql') {
6559
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6560
			} else {
6561
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6562
			}
6563
		}
6564
                if ($sincedate != '') {
6565
            		if ($globalDBdriver == 'mysql') {
6566
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6567
			} else {
6568
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6569
			}
6570
		}
6571
6572
		// if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6573
		//if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6574
                $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";
6575
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6576
		
6577
		$sth = $this->db->prepare($query);
6578
		$sth->execute();
6579
      
6580
		$aircraft_array = array();
6581
		$temp_array = array();
6582
        
6583
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6584
		{
6585
			$temp_array['registration'] = $row['registration'];
6586
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
6587
			$temp_array['airline_icao'] = $row['airline_icao'];
6588
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6589
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6590
			$temp_array['airline_name'] = $row['airline_name'];
6591
			$temp_array['image_thumbnail'] = "";
6592
			if($row['registration'] != "")
6593
			{
6594
				$image_array = $Image->getSpotterImage($row['registration']);
6595
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6596
			}
6597
          
6598
			$aircraft_array[] = $temp_array;
6599
		}
6600
6601
		return $aircraft_array;
6602
	}
6603
	
6604
	
6605
	/**
6606
	* Gets all departure airports of the airplanes that have flown over
6607
	*
6608
	* @return Array the airport list
6609
	*
6610
	*/
6611
	public function countAllDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
6612
	{
6613
		global $globalDBdriver;
6614
		$filter_query = $this->getFilter($filters,true,true);
6615
		$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 
6616
				FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> ''";
6617
                if ($olderthanmonths > 0) {
6618
            		if ($globalDBdriver == 'mysql') {
6619
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6620
			} else {
6621
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6622
			}
6623
                }
6624
                if ($sincedate != '') {
6625
            		if ($globalDBdriver == 'mysql') {
6626
				$query .= " AND spotter_output.date > '".$sincedate."'";
6627
			} else {
6628
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6629
			}
6630
		}
6631
		$query_values = array();
6632
		if ($year != '') {
6633
			if ($globalDBdriver == 'mysql') {
6634
				$query .= " AND YEAR(spotter_output.date) = :year";
6635
				$query_values = array_merge($query_values,array(':year' => $year));
6636
			} else {
6637
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6638
				$query_values = array_merge($query_values,array(':year' => $year));
6639
			}
6640
		}
6641
		if ($month != '') {
6642
			if ($globalDBdriver == 'mysql') {
6643
				$query .= " AND MONTH(spotter_output.date) = :month";
6644
				$query_values = array_merge($query_values,array(':month' => $month));
6645
			} else {
6646
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6647
				$query_values = array_merge($query_values,array(':month' => $month));
6648
			}
6649
		}
6650
		if ($day != '') {
6651
			if ($globalDBdriver == 'mysql') {
6652
				$query .= " AND DAY(spotter_output.date) = :day";
6653
				$query_values = array_merge($query_values,array(':day' => $day));
6654
			} else {
6655
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6656
				$query_values = array_merge($query_values,array(':day' => $day));
6657
			}
6658
		}
6659
                $query .= " GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6660
				ORDER BY airport_departure_icao_count DESC";
6661
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6662
6663
		$sth = $this->db->prepare($query);
6664
		$sth->execute($query_values);
6665
6666
		$airport_array = array();
6667
		$temp_array = array();
6668
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6669
		{
6670
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6671
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6672
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6673
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6674
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6675
          
6676
			$airport_array[] = $temp_array;
6677
		}
6678
		return $airport_array;
6679
	}
6680
6681
	/**
6682
	* Gets all departure airports of the airplanes that have flown over
6683
	*
6684
	* @return Array the airport list
6685
	*
6686
	*/
6687
	public function countAllDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
6688
	{
6689
		global $globalDBdriver;
6690
		$filter_query = $this->getFilter($filters,true,true);
6691
		$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 
6692
			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 <> '' ";
6693
                if ($olderthanmonths > 0) {
6694
            		if ($globalDBdriver == 'mysql') {
6695
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6696
			} else {
6697
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6698
			}
6699
                }
6700
                if ($sincedate != '') {
6701
            		if ($globalDBdriver == 'mysql') {
6702
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6703
			} else {
6704
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6705
			}
6706
		}
6707
6708
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6709
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6710
                $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
6711
				ORDER BY airport_departure_icao_count DESC";
6712
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6713
      
6714
		$sth = $this->db->prepare($query);
6715
		$sth->execute();
6716
      
6717
		$airport_array = array();
6718
		$temp_array = array();
6719
        
6720
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6721
		{
6722
			$temp_array['airline_icao'] = $row['airline_icao'];
6723
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6724
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6725
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6726
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6727
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6728
          
6729
			$airport_array[] = $temp_array;
6730
		}
6731
		return $airport_array;
6732
	}
6733
6734
	/**
6735
	* Gets all detected departure airports of the airplanes that have flown over
6736
	*
6737
	* @return Array the airport list
6738
	*
6739
	*/
6740
	public function countAllDetectedDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
6741
	{
6742
		global $globalDBdriver;
6743
		$filter_query = $this->getFilter($filters,true,true);
6744
		$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
6745
				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";
6746
                if ($olderthanmonths > 0) {
6747
            		if ($globalDBdriver == 'mysql') {
6748
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6749
			} else {
6750
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6751
			}
6752
                }
6753
                if ($sincedate != '') {
6754
            		if ($globalDBdriver == 'mysql') {
6755
				$query .= " AND spotter_output.date > '".$sincedate."'";
6756
			} else {
6757
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6758
			}
6759
		}
6760
		$query_values = array();
6761
		if ($year != '') {
6762
			if ($globalDBdriver == 'mysql') {
6763
				$query .= " AND YEAR(spotter_output.date) = :year";
6764
				$query_values = array_merge($query_values,array(':year' => $year));
6765
			} else {
6766
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6767
				$query_values = array_merge($query_values,array(':year' => $year));
6768
			}
6769
		}
6770
		if ($month != '') {
6771
			if ($globalDBdriver == 'mysql') {
6772
				$query .= " AND MONTH(spotter_output.date) = :month";
6773
				$query_values = array_merge($query_values,array(':month' => $month));
6774
			} else {
6775
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6776
				$query_values = array_merge($query_values,array(':month' => $month));
6777
			}
6778
		}
6779
		if ($day != '') {
6780
			if ($globalDBdriver == 'mysql') {
6781
				$query .= " AND DAY(spotter_output.date) = :day";
6782
				$query_values = array_merge($query_values,array(':day' => $day));
6783
			} else {
6784
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6785
				$query_values = array_merge($query_values,array(':day' => $day));
6786
			}
6787
		}
6788
                $query .= " GROUP BY spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
6789
				ORDER BY airport_departure_icao_count DESC";
6790
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6791
    		//echo $query;
6792
		$sth = $this->db->prepare($query);
6793
		$sth->execute($query_values);
6794
      
6795
		$airport_array = array();
6796
		$temp_array = array();
6797
        
6798
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6799
		{
6800
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6801
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6802
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6803
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6804
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6805
          
6806
			$airport_array[] = $temp_array;
6807
		}
6808
		return $airport_array;
6809
	}
6810
	
6811
	/**
6812
	* Gets all detected departure airports of the airplanes that have flown over
6813
	*
6814
	* @return Array the airport list
6815
	*
6816
	*/
6817
	public function countAllDetectedDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
6818
	{
6819
		global $globalDBdriver;
6820
		$filter_query = $this->getFilter($filters,true,true);
6821
		$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
6822
				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 ";
6823
                if ($olderthanmonths > 0) {
6824
            		if ($globalDBdriver == 'mysql') {
6825
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6826
			} else {
6827
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6828
			}
6829
                }
6830
                if ($sincedate != '') {
6831
            		if ($globalDBdriver == 'mysql') {
6832
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6833
			} else {
6834
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
6835
			}
6836
		}
6837
6838
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6839
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6840
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
6841
				ORDER BY airport_departure_icao_count DESC";
6842
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6843
      
6844
		$sth = $this->db->prepare($query);
6845
		$sth->execute();
6846
      
6847
		$airport_array = array();
6848
		$temp_array = array();
6849
        
6850
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6851
		{
6852
			$temp_array['airline_icao'] = $row['airline_icao'];
6853
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6854
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6855
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6856
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6857
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6858
          
6859
			$airport_array[] = $temp_array;
6860
		}
6861
		return $airport_array;
6862
	}	
6863
	
6864
	/**
6865
	* Gets all departure airports of the airplanes that have flown over based on an airline icao
6866
	*
6867
	* @return Array the airport list
6868
	*
6869
	*/
6870
	public function countAllDepartureAirportsByAirline($airline_icao,$filters = array())
6871
	{
6872
		$filter_query = $this->getFilter($filters,true,true);
6873
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6874
		$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 
6875
			    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 <> '' 
6876
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6877
			    ORDER BY airport_departure_icao_count DESC";
6878
      
6879
		
6880
		$sth = $this->db->prepare($query);
6881
		$sth->execute(array(':airline_icao' => $airline_icao));
6882
      
6883
		$airport_array = array();
6884
		$temp_array = array();
6885
        
6886
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6887
		{
6888
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6889
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6890
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6891
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6892
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6893
          
6894
			$airport_array[] = $temp_array;
6895
		}
6896
6897
		return $airport_array;
6898
	}
6899
	
6900
	
6901
	
6902
	/**
6903
	* Gets all departure airports by country of the airplanes that have flown over based on an airline icao
6904
	*
6905
	* @return Array the airport list
6906
	*
6907
	*/
6908
	public function countAllDepartureAirportCountriesByAirline($airline_icao,$filters = array())
6909
	{
6910
		$filter_query = $this->getFilter($filters,true,true);
6911
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6912
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6913
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
6914
                    GROUP BY spotter_output.departure_airport_country
6915
					ORDER BY airport_departure_country_count DESC";
6916
      
6917
		
6918
		$sth = $this->db->prepare($query);
6919
		$sth->execute(array(':airline_icao' => $airline_icao));
6920
      
6921
		$airport_array = array();
6922
		$temp_array = array();
6923
        
6924
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6925
		{
6926
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6927
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6928
          
6929
			$airport_array[] = $temp_array;
6930
		}
6931
6932
		return $airport_array;
6933
	}
6934
	
6935
	
6936
	
6937
	/**
6938
	* Gets all departure airports of the airplanes that have flown over based on an aircraft icao
6939
	*
6940
	* @return Array the airport list
6941
	*
6942
	*/
6943
	public function countAllDepartureAirportsByAircraft($aircraft_icao,$filters = array())
6944
	{
6945
		$filter_query = $this->getFilter($filters,true,true);
6946
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
6947
		$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 
6948
			    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 <> '' 
6949
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6950
			    ORDER BY airport_departure_icao_count DESC";
6951
      
6952
		
6953
		$sth = $this->db->prepare($query);
6954
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
6955
      
6956
		$airport_array = array();
6957
		$temp_array = array();
6958
        
6959
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6960
		{
6961
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6962
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6963
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6964
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6965
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6966
          
6967
			$airport_array[] = $temp_array;
6968
		}
6969
6970
		return $airport_array;
6971
	}
6972
	
6973
	
6974
	/**
6975
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
6976
	*
6977
	* @return Array the airport list
6978
	*
6979
	*/
6980
	public function countAllDepartureAirportCountriesByAircraft($aircraft_icao,$filters = array())
6981
	{
6982
		$filter_query = $this->getFilter($filters,true,true);
6983
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
6984
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6985
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
6986
                    GROUP BY spotter_output.departure_airport_country
6987
					ORDER BY airport_departure_country_count DESC";
6988
      
6989
		
6990
		$sth = $this->db->prepare($query);
6991
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
6992
      
6993
		$airport_array = array();
6994
		$temp_array = array();
6995
        
6996
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6997
		{
6998
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6999
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7000
          
7001
			$airport_array[] = $temp_array;
7002
		}
7003
7004
		return $airport_array;
7005
	}
7006
	
7007
	
7008
	/**
7009
	* Gets all departure airports of the airplanes that have flown over based on an aircraft registration
7010
	*
7011
	* @return Array the airport list
7012
	*
7013
	*/
7014
	public function countAllDepartureAirportsByRegistration($registration,$filters = array())
7015
	{
7016
		$filter_query = $this->getFilter($filters,true,true);
7017
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
7018
		$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 
7019
			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 <> '' 
7020
                    GROUP BY spotter_output.departure_airport_icao
7021
					ORDER BY airport_departure_icao_count DESC";
7022
      
7023
		
7024
		$sth = $this->db->prepare($query);
7025
		$sth->execute(array(':registration' => $registration));
7026
      
7027
		$airport_array = array();
7028
		$temp_array = array();
7029
        
7030
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7031
		{
7032
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7033
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7034
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7035
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7036
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7037
          
7038
			$airport_array[] = $temp_array;
7039
		}
7040
7041
		return $airport_array;
7042
	}
7043
	
7044
	
7045
	/**
7046
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft registration
7047
	*
7048
	* @return Array the airport list
7049
	*
7050
	*/
7051
	public function countAllDepartureAirportCountriesByRegistration($registration,$filters = array())
7052
	{
7053
		$filter_query = $this->getFilter($filters,true,true);
7054
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
7055
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7056
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.registration = :registration 
7057
                    GROUP BY spotter_output.departure_airport_country
7058
					ORDER BY airport_departure_country_count DESC";
7059
      
7060
		
7061
		$sth = $this->db->prepare($query);
7062
		$sth->execute(array(':registration' => $registration));
7063
      
7064
		$airport_array = array();
7065
		$temp_array = array();
7066
        
7067
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7068
		{
7069
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7070
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7071
          
7072
			$airport_array[] = $temp_array;
7073
		}
7074
7075
		return $airport_array;
7076
	}
7077
	
7078
	
7079
	/**
7080
	* Gets all departure airports of the airplanes that have flown over based on an arrivl airport icao
7081
	*
7082
	* @return Array the airport list
7083
	*
7084
	*/
7085
	public function countAllDepartureAirportsByAirport($airport_icao,$filters = array())
7086
	{
7087
		$filter_query = $this->getFilter($filters,true,true);
7088
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7089
		$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 
7090
			    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 <> '' 
7091
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7092
			    ORDER BY airport_departure_icao_count DESC";
7093
      
7094
		
7095
		$sth = $this->db->prepare($query);
7096
		$sth->execute(array(':airport_icao' => $airport_icao));
7097
      
7098
		$airport_array = array();
7099
		$temp_array = array();
7100
        
7101
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7102
		{
7103
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7104
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7105
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7106
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7107
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7108
          
7109
			$airport_array[] = $temp_array;
7110
		}
7111
7112
		return $airport_array;
7113
	}
7114
	
7115
	
7116
	/**
7117
	* Gets all departure airports by country of the airplanes that have flown over based on an airport icao
7118
	*
7119
	* @return Array the airport list
7120
	*
7121
	*/
7122
	public function countAllDepartureAirportCountriesByAirport($airport_icao,$filters = array())
7123
	{
7124
		$filter_query = $this->getFilter($filters,true,true);
7125
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7126
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7127
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.arrival_airport_icao = :airport_icao 
7128
                    GROUP BY spotter_output.departure_airport_country
7129
					ORDER BY airport_departure_country_count DESC";
7130
      
7131
		
7132
		$sth = $this->db->prepare($query);
7133
		$sth->execute(array(':airport_icao' => $airport_icao));
7134
      
7135
		$airport_array = array();
7136
		$temp_array = array();
7137
        
7138
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7139
		{
7140
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7141
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7142
          
7143
			$airport_array[] = $temp_array;
7144
		}
7145
7146
		return $airport_array;
7147
	}
7148
	
7149
	
7150
	
7151
	/**
7152
	* Gets all departure airports of the airplanes that have flown over based on an aircraft manufacturer
7153
	*
7154
	* @return Array the airport list
7155
	*
7156
	*/
7157
	public function countAllDepartureAirportsByManufacturer($aircraft_manufacturer,$filters = array())
7158
	{
7159
		$filter_query = $this->getFilter($filters,true,true);
7160
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7161
		$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 
7162
			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 <> '' 
7163
                    GROUP BY spotter_output.departure_airport_icao
7164
					ORDER BY airport_departure_icao_count DESC";
7165
      
7166
		
7167
		$sth = $this->db->prepare($query);
7168
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7169
      
7170
		$airport_array = array();
7171
		$temp_array = array();
7172
        
7173
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7174
		{
7175
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7176
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7177
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7178
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7179
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7180
          
7181
			$airport_array[] = $temp_array;
7182
		}
7183
7184
		return $airport_array;
7185
	}
7186
	
7187
	
7188
	/**
7189
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft manufacturer
7190
	*
7191
	* @return Array the airport list
7192
	*
7193
	*/
7194
	public function countAllDepartureAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
7195
	{
7196
		$filter_query = $this->getFilter($filters,true,true);
7197
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7198
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7199
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
7200
                    GROUP BY spotter_output.departure_airport_country
7201
					ORDER BY airport_departure_country_count DESC";
7202
      
7203
		
7204
		$sth = $this->db->prepare($query);
7205
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7206
      
7207
		$airport_array = array();
7208
		$temp_array = array();
7209
        
7210
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7211
		{
7212
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7213
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7214
          
7215
			$airport_array[] = $temp_array;
7216
		}
7217
7218
		return $airport_array;
7219
	}
7220
	
7221
	
7222
	/**
7223
	* Gets all departure airports of the airplanes that have flown over based on a date
7224
	*
7225
	* @return Array the airport list
7226
	*
7227
	*/
7228
	public function countAllDepartureAirportsByDate($date,$filters = array())
7229
	{
7230
		global $globalTimezone, $globalDBdriver;
7231
		$filter_query = $this->getFilter($filters,true,true);
7232
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7233
		if ($globalTimezone != '') {
7234
			date_default_timezone_set($globalTimezone);
7235
			$datetime = new DateTime($date);
7236
			$offset = $datetime->format('P');
7237
		} else $offset = '+00:00';
7238
7239
		if ($globalDBdriver == 'mysql') {
7240
			$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 
7241
					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
7242
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7243
					ORDER BY airport_departure_icao_count DESC";
7244
		} else {
7245
			$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 
7246
					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
7247
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7248
					ORDER BY airport_departure_icao_count DESC";
7249
		}
7250
7251
		$sth = $this->db->prepare($query);
7252
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7253
      
7254
		$airport_array = array();
7255
		$temp_array = array();
7256
        
7257
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7258
		{
7259
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7260
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7261
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7262
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7263
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7264
          
7265
			$airport_array[] = $temp_array;
7266
		}
7267
		return $airport_array;
7268
	}
7269
	
7270
	
7271
	
7272
	/**
7273
	* Gets all departure airports by country of the airplanes that have flown over based on a date
7274
	*
7275
	* @return Array the airport list
7276
	*
7277
	*/
7278
	public function countAllDepartureAirportCountriesByDate($date,$filters = array())
7279
	{
7280
		global $globalTimezone, $globalDBdriver;
7281
		$filter_query = $this->getFilter($filters,true,true);
7282
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7283
		if ($globalTimezone != '') {
7284
			date_default_timezone_set($globalTimezone);
7285
			$datetime = new DateTime($date);
7286
			$offset = $datetime->format('P');
7287
		} else $offset = '+00:00';
7288
7289
		if ($globalDBdriver == 'mysql') {
7290
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7291
					FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
7292
					GROUP BY spotter_output.departure_airport_country
7293
					ORDER BY airport_departure_country_count DESC";
7294
		} else {
7295
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7296
					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 
7297
					GROUP BY spotter_output.departure_airport_country
7298
					ORDER BY airport_departure_country_count DESC";
7299
		}
7300
		
7301
		$sth = $this->db->prepare($query);
7302
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7303
      
7304
		$airport_array = array();
7305
		$temp_array = array();
7306
        
7307
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7308
		{
7309
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7310
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7311
          
7312
			$airport_array[] = $temp_array;
7313
		}
7314
		return $airport_array;
7315
	}
7316
	
7317
	
7318
	
7319
	/**
7320
	* Gets all departure airports of the airplanes that have flown over based on a ident/callsign
7321
	*
7322
	* @return Array the airport list
7323
	*
7324
	*/
7325
	public function countAllDepartureAirportsByIdent($ident,$filters = array())
7326
	{
7327
		$filter_query = $this->getFilter($filters,true,true);
7328
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7329
		$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 
7330
		    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 
7331
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7332
		    ORDER BY airport_departure_icao_count DESC";
7333
      
7334
		
7335
		$sth = $this->db->prepare($query);
7336
		$sth->execute(array(':ident' => $ident));
7337
      
7338
		$airport_array = array();
7339
		$temp_array = array();
7340
        
7341
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7342
		{
7343
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7344
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7345
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7346
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7347
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7348
          
7349
			$airport_array[] = $temp_array;
7350
		}
7351
7352
		return $airport_array;
7353
	}
7354
	
7355
	/**
7356
	* Gets all departure airports of the airplanes that have flown over based on a owner
7357
	*
7358
	* @return Array the airport list
7359
	*
7360
	*/
7361
	public function countAllDepartureAirportsByOwner($owner,$filters = array())
7362
	{
7363
		$filter_query = $this->getFilter($filters,true,true);
7364
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
7365
		$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 
7366
		    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 
7367
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7368
		    ORDER BY airport_departure_icao_count DESC";
7369
      
7370
		
7371
		$sth = $this->db->prepare($query);
7372
		$sth->execute(array(':owner' => $owner));
7373
      
7374
		$airport_array = array();
7375
		$temp_array = array();
7376
        
7377
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7378
		{
7379
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7380
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7381
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7382
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7383
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7384
          
7385
			$airport_array[] = $temp_array;
7386
		}
7387
7388
		return $airport_array;
7389
	}
7390
	
7391
	/**
7392
	* Gets all departure airports of the airplanes that have flown over based on a pilot
7393
	*
7394
	* @return Array the airport list
7395
	*
7396
	*/
7397
	public function countAllDepartureAirportsByPilot($pilot,$filters = array())
7398
	{
7399
		$filter_query = $this->getFilter($filters,true,true);
7400
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
7401
		$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 
7402
		    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) 
7403
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7404
		    ORDER BY airport_departure_icao_count DESC";
7405
		
7406
		$sth = $this->db->prepare($query);
7407
		$sth->execute(array(':pilot' => $pilot));
7408
      
7409
		$airport_array = array();
7410
		$temp_array = array();
7411
        
7412
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7413
		{
7414
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7415
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7416
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7417
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7418
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7419
          
7420
			$airport_array[] = $temp_array;
7421
		}
7422
7423
		return $airport_array;
7424
	}
7425
	
7426
	
7427
	
7428
	/**
7429
	* Gets all departure airports by country of the airplanes that have flown over based on a callsign/ident
7430
	*
7431
	* @return Array the airport list
7432
	*
7433
	*/
7434
	public function countAllDepartureAirportCountriesByIdent($ident,$filters = array())
7435
	{
7436
		$filter_query = $this->getFilter($filters,true,true);
7437
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7438
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7439
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.ident = :ident 
7440
                    GROUP BY spotter_output.departure_airport_country
7441
					ORDER BY airport_departure_country_count DESC";
7442
      
7443
		
7444
		$sth = $this->db->prepare($query);
7445
		$sth->execute(array(':ident' => $ident));
7446
      
7447
		$airport_array = array();
7448
		$temp_array = array();
7449
        
7450
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7451
		{
7452
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7453
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7454
          
7455
			$airport_array[] = $temp_array;
7456
		}
7457
7458
		return $airport_array;
7459
	}
7460
	
7461
	/**
7462
	* Gets all departure airports by country of the airplanes that have flown over based on owner
7463
	*
7464
	* @return Array the airport list
7465
	*
7466
	*/
7467
	public function countAllDepartureAirportCountriesByOwner($owner,$filters = array())
7468
	{
7469
		$filter_query = $this->getFilter($filters,true,true);
7470
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
7471
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7472
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.owner_name = :owner 
7473
			GROUP BY spotter_output.departure_airport_country
7474
			ORDER BY airport_departure_country_count DESC";
7475
		
7476
		$sth = $this->db->prepare($query);
7477
		$sth->execute(array(':owner' => $owner));
7478
		return $sth->fetchAll(PDO::FETCH_ASSOC);
7479
	}
7480
	
7481
	/**
7482
	* Gets all departure airports by country of the airplanes that have flown over based on pilot
7483
	*
7484
	* @return Array the airport list
7485
	*
7486
	*/
7487
	public function countAllDepartureAirportCountriesByPilot($pilot,$filters = array())
7488
	{
7489
		$filter_query = $this->getFilter($filters,true,true);
7490
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
7491
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7492
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
7493
			GROUP BY spotter_output.departure_airport_country
7494
			ORDER BY airport_departure_country_count DESC";
7495
		
7496
		$sth = $this->db->prepare($query);
7497
		$sth->execute(array(':pilot' => $pilot));
7498
		return $sth->fetchAll(PDO::FETCH_ASSOC);
7499
	}
7500
	
7501
	
7502
	
7503
	/**
7504
	* Gets all departure airports of the airplanes that have flown over based on a country
7505
	*
7506
	* @return Array the airport list
7507
	*
7508
	*/
7509
	public function countAllDepartureAirportsByCountry($country,$filters = array())
7510
	{
7511
		$filter_query = $this->getFilter($filters,true,true);
7512
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7513
7514
		$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 
7515
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
7516
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7517
			    ORDER BY airport_departure_icao_count DESC";
7518
      
7519
		
7520
		$sth = $this->db->prepare($query);
7521
		$sth->execute(array(':country' => $country));
7522
      
7523
		$airport_array = array();
7524
		$temp_array = array();
7525
        
7526
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7527
		{
7528
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7529
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7530
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7531
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7532
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7533
          
7534
			$airport_array[] = $temp_array;
7535
		}
7536
7537
		return $airport_array;
7538
	}
7539
7540
7541
	/**
7542
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
7543
	*
7544
	* @return Array the airport list
7545
	*
7546
	*/
7547
	public function countAllDepartureAirportCountriesByCountry($country,$filters = array())
7548
	{
7549
		$filter_query = $this->getFilter($filters,true,true);
7550
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7551
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7552
			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 
7553
                    GROUP BY spotter_output.departure_airport_country
7554
					ORDER BY airport_departure_country_count DESC";
7555
      
7556
		
7557
		$sth = $this->db->prepare($query);
7558
		$sth->execute(array(':country' => $country));
7559
      
7560
		$airport_array = array();
7561
		$temp_array = array();
7562
        
7563
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7564
		{
7565
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7566
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7567
          
7568
			$airport_array[] = $temp_array;
7569
		}
7570
7571
		return $airport_array;
7572
	}
7573
	
7574
7575
	/**
7576
	* Gets all arrival airports of the airplanes that have flown over
7577
	*
7578
	* @param Boolean $limit Limit result to 10 or not
7579
	* @param Integer $olderthanmonths Only show result older than x months
7580
	* @param String $sincedate Only show result since x date
7581
	* @param Boolean $icaoaskey Show result by ICAO
7582
	* @param Array $filters Filter used here
7583
	* @return Array the airport list
7584
	*
7585
	*/
7586
	public function countAllArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array(),$year = '',$month = '',$day = '')
7587
	{
7588
		global $globalDBdriver;
7589
		$filter_query = $this->getFilter($filters,true,true);
7590
		$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 
7591
				FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''";
7592
                if ($olderthanmonths > 0) {
7593
            		if ($globalDBdriver == 'mysql') {
7594
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
7595
			} else {
7596
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
7597
			}
7598
		}
7599
                if ($sincedate != '') {
7600
            		if ($globalDBdriver == 'mysql') {
7601
				$query .= " AND spotter_output.date > '".$sincedate."'";
7602
			} else {
7603
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7604
			}
7605
		}
7606
		$query_values = array();
7607
		if ($year != '') {
7608
			if ($globalDBdriver == 'mysql') {
7609
				$query .= " AND YEAR(spotter_output.date) = :year";
7610
				$query_values = array_merge($query_values,array(':year' => $year));
7611
			} else {
7612
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
7613
				$query_values = array_merge($query_values,array(':year' => $year));
7614
			}
7615
		}
7616
		if ($month != '') {
7617
			if ($globalDBdriver == 'mysql') {
7618
				$query .= " AND MONTH(spotter_output.date) = :month";
7619
				$query_values = array_merge($query_values,array(':month' => $month));
7620
			} else {
7621
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
7622
				$query_values = array_merge($query_values,array(':month' => $month));
7623
			}
7624
		}
7625
		if ($day != '') {
7626
			if ($globalDBdriver == 'mysql') {
7627
				$query .= " AND DAY(spotter_output.date) = :day";
7628
				$query_values = array_merge($query_values,array(':day' => $day));
7629
			} else {
7630
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
7631
				$query_values = array_merge($query_values,array(':day' => $day));
7632
			}
7633
		}
7634
                $query .= " GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7635
					ORDER BY airport_arrival_icao_count DESC";
7636
		if ($limit) $query .= " LIMIT 10";
7637
      
7638
		
7639
		$sth = $this->db->prepare($query);
7640
		$sth->execute($query_values);
7641
      
7642
		$airport_array = array();
7643
		$temp_array = array();
7644
        
7645
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7646
		{
7647
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7648
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7649
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7650
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7651
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7652
          
7653
			if ($icaoaskey) {
7654
				$icao = $row['arrival_airport_icao'];
7655
				$airport_array[$icao] = $temp_array;
7656
			} else $airport_array[] = $temp_array;
7657
		}
7658
7659
		return $airport_array;
7660
	}
7661
7662
	/**
7663
	* Gets all arrival airports of the airplanes that have flown over
7664
	*
7665
	* @return Array the airport list
7666
	*
7667
	*/
7668
	public function countAllArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array())
7669
	{
7670
		global $globalDBdriver;
7671
		$filter_query = $this->getFilter($filters,true,true);
7672
		$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 
7673
			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 <> '' ";
7674
                if ($olderthanmonths > 0) {
7675
            		if ($globalDBdriver == 'mysql') {
7676
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
7677
			} else {
7678
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
7679
			}
7680
		}
7681
                if ($sincedate != '') {
7682
            		if ($globalDBdriver == 'mysql') {
7683
				$query .= "AND spotter_output.date > '".$sincedate."' ";
7684
			} else {
7685
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7686
			}
7687
		}
7688
7689
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
7690
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
7691
                $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
7692
					ORDER BY airport_arrival_icao_count DESC";
7693
		if ($limit) $query .= " LIMIT 10";
7694
      
7695
		
7696
		$sth = $this->db->prepare($query);
7697
		$sth->execute();
7698
      
7699
		$airport_array = array();
7700
		$temp_array = array();
7701
        
7702
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7703
		{
7704
			$temp_array['airline_icao'] = $row['airline_icao'];
7705
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7706
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7707
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7708
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7709
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7710
          
7711
			if ($icaoaskey) {
7712
				$icao = $row['arrival_airport_icao'];
7713
				$airport_array[$icao] = $temp_array;
7714
			} else $airport_array[] = $temp_array;
7715
		}
7716
7717
		return $airport_array;
7718
	}
7719
7720
7721
	/**
7722
	* Gets all detected arrival airports of the airplanes that have flown over
7723
	*
7724
	* @return Array the airport list
7725
	*
7726
	*/
7727
	public function countAllDetectedArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array(),$year = '',$month = '',$day = '')
7728
	{
7729
		global $globalDBdriver;
7730
		$filter_query = $this->getFilter($filters,true,true);
7731
		$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 
7732
			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";
7733
                if ($olderthanmonths > 0) {
7734
            		if ($globalDBdriver == 'mysql') {
7735
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
7736
			} else {
7737
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
7738
			}
7739
		}
7740
                if ($sincedate != '') {
7741
            		if ($globalDBdriver == 'mysql') {
7742
				$query .= " AND spotter_output.date > '".$sincedate."'";
7743
			} else {
7744
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7745
			}
7746
		}
7747
		$query_values = array();
7748
		if ($year != '') {
7749
			if ($globalDBdriver == 'mysql') {
7750
				$query .= " AND YEAR(spotter_output.date) = :year";
7751
				$query_values = array_merge($query_values,array(':year' => $year));
7752
			} else {
7753
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
7754
				$query_values = array_merge($query_values,array(':year' => $year));
7755
			}
7756
		}
7757
		if ($month != '') {
7758
			if ($globalDBdriver == 'mysql') {
7759
				$query .= " AND MONTH(spotter_output.date) = :month";
7760
				$query_values = array_merge($query_values,array(':month' => $month));
7761
			} else {
7762
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
7763
				$query_values = array_merge($query_values,array(':month' => $month));
7764
			}
7765
		}
7766
		if ($day != '') {
7767
			if ($globalDBdriver == 'mysql') {
7768
				$query .= " AND DAY(spotter_output.date) = :day";
7769
				$query_values = array_merge($query_values,array(':day' => $day));
7770
			} else {
7771
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
7772
				$query_values = array_merge($query_values,array(':day' => $day));
7773
			}
7774
		}
7775
                $query .= " GROUP BY spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
7776
					ORDER BY airport_arrival_icao_count DESC";
7777
		if ($limit) $query .= " LIMIT 10";
7778
      
7779
		
7780
		$sth = $this->db->prepare($query);
7781
		$sth->execute($query_values);
7782
      
7783
		$airport_array = array();
7784
		$temp_array = array();
7785
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7786
		{
7787
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7788
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7789
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7790
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7791
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7792
          
7793
			if ($icaoaskey) {
7794
				$icao = $row['arrival_airport_icao'];
7795
				$airport_array[$icao] = $temp_array;
7796
			} else $airport_array[] = $temp_array;
7797
		}
7798
7799
		return $airport_array;
7800
	}
7801
	
7802
	/**
7803
	* Gets all detected arrival airports of the airplanes that have flown over
7804
	*
7805
	* @return Array the airport list
7806
	*
7807
	*/
7808
	public function countAllDetectedArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array())
7809
	{
7810
		global $globalDBdriver;
7811
		$filter_query = $this->getFilter($filters,true,true);
7812
		$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 
7813
			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 ";
7814
                if ($olderthanmonths > 0) {
7815
            		if ($globalDBdriver == 'mysql') {
7816
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
7817
			} else {
7818
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
7819
			}
7820
		}
7821
                if ($sincedate != '') {
7822
            		if ($globalDBdriver == 'mysql') {
7823
				$query .= "AND spotter_output.date > '".$sincedate."' ";
7824
			} else {
7825
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7826
			}
7827
		}
7828
7829
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
7830
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
7831
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
7832
					ORDER BY airport_arrival_icao_count DESC";
7833
		if ($limit) $query .= " LIMIT 10";
7834
      
7835
		
7836
		$sth = $this->db->prepare($query);
7837
		$sth->execute();
7838
      
7839
		$airport_array = array();
7840
		$temp_array = array();
7841
        
7842
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7843
		{
7844
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7845
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7846
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7847
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7848
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7849
			$temp_array['airline_icao'] = $row['airline_icao'];
7850
          
7851
			if ($icaoaskey) {
7852
				$icao = $row['arrival_airport_icao'];
7853
				$airport_array[$icao] = $temp_array;
7854
			} else $airport_array[] = $temp_array;
7855
		}
7856
7857
		return $airport_array;
7858
	}	
7859
	
7860
	/**
7861
	* Gets all arrival airports of the airplanes that have flown over based on an airline icao
7862
	*
7863
	* @return Array the airport list
7864
	*
7865
	*/
7866
	public function countAllArrivalAirportsByAirline($airline_icao, $filters = array())
7867
	{
7868
		$filter_query = $this->getFilter($filters,true,true);
7869
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7870
		$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 
7871
			    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 
7872
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7873
			    ORDER BY airport_arrival_icao_count DESC";
7874
		
7875
		$sth = $this->db->prepare($query);
7876
		$sth->execute(array(':airline_icao' => $airline_icao));
7877
      
7878
		$airport_array = array();
7879
		$temp_array = array();
7880
        
7881
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7882
		{
7883
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7884
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7885
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7886
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7887
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7888
          
7889
			$airport_array[] = $temp_array;
7890
		}
7891
7892
		return $airport_array;
7893
	}
7894
	
7895
	
7896
	/**
7897
	* Gets all arrival airports by country of the airplanes that have flown over based on an airline icao
7898
	*
7899
	* @return Array the airport list
7900
	*
7901
	*/
7902
	public function countAllArrivalAirportCountriesByAirline($airline_icao,$filters = array())
7903
	{
7904
		$filter_query = $this->getFilter($filters,true,true);
7905
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7906
					
7907
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7908
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
7909
                    GROUP BY spotter_output.arrival_airport_country
7910
					ORDER BY airport_arrival_country_count DESC";
7911
      
7912
		
7913
		$sth = $this->db->prepare($query);
7914
		$sth->execute(array(':airline_icao' => $airline_icao));
7915
      
7916
		$airport_array = array();
7917
		$temp_array = array();
7918
        
7919
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7920
		{
7921
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7922
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7923
          
7924
			$airport_array[] = $temp_array;
7925
		}
7926
7927
		return $airport_array;
7928
	}
7929
	
7930
	
7931
	/**
7932
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft icao
7933
	*
7934
	* @return Array the airport list
7935
	*
7936
	*/
7937
	public function countAllArrivalAirportsByAircraft($aircraft_icao,$filters = array())
7938
	{
7939
		$filter_query = $this->getFilter($filters,true,true);
7940
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7941
		$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 
7942
			    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 
7943
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7944
			    ORDER BY airport_arrival_icao_count DESC";
7945
      
7946
		
7947
		$sth = $this->db->prepare($query);
7948
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7949
      
7950
		$airport_array = array();
7951
		$temp_array = array();
7952
        
7953
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7954
		{
7955
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7956
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7957
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7958
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7959
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7960
          
7961
			$airport_array[] = $temp_array;
7962
		}
7963
7964
		return $airport_array;
7965
	}
7966
	
7967
	
7968
	
7969
	/**
7970
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft icao
7971
	*
7972
	* @return Array the airport list
7973
	*
7974
	*/
7975
	public function countAllArrivalAirportCountriesByAircraft($aircraft_icao,$filters = array())
7976
	{
7977
		$filter_query = $this->getFilter($filters,true,true);
7978
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7979
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7980
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
7981
                    GROUP BY spotter_output.arrival_airport_country
7982
					ORDER BY airport_arrival_country_count DESC";
7983
      
7984
		
7985
		$sth = $this->db->prepare($query);
7986
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7987
      
7988
		$airport_array = array();
7989
		$temp_array = array();
7990
        
7991
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7992
		{
7993
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7994
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7995
          
7996
			$airport_array[] = $temp_array;
7997
		}
7998
7999
		return $airport_array;
8000
	}
8001
	
8002
	
8003
	/**
8004
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft registration
8005
	*
8006
	* @return Array the airport list
8007
	*
8008
	*/
8009
	public function countAllArrivalAirportsByRegistration($registration,$filters = array())
8010
	{
8011
		$filter_query = $this->getFilter($filters,true,true);
8012
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
8013
8014
		$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 
8015
			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 
8016
                    GROUP BY spotter_output.arrival_airport_icao
8017
					ORDER BY airport_arrival_icao_count DESC";
8018
      
8019
		
8020
		$sth = $this->db->prepare($query);
8021
		$sth->execute(array(':registration' => $registration));
8022
      
8023
		$airport_array = array();
8024
		$temp_array = array();
8025
        
8026
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8027
		{
8028
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8029
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8030
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8031
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8032
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8033
          
8034
			$airport_array[] = $temp_array;
8035
		}
8036
8037
		return $airport_array;
8038
	}
8039
	
8040
	
8041
	/**
8042
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft registration
8043
	*
8044
	* @return Array the airport list
8045
	*
8046
	*/
8047
	public function countAllArrivalAirportCountriesByRegistration($registration,$filters = array())
8048
	{
8049
		$filter_query = $this->getFilter($filters,true,true);
8050
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
8051
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8052
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.registration = :registration 
8053
                    GROUP BY spotter_output.arrival_airport_country
8054
					ORDER BY airport_arrival_country_count DESC";
8055
      
8056
		
8057
		$sth = $this->db->prepare($query);
8058
		$sth->execute(array(':registration' => $registration));
8059
      
8060
		$airport_array = array();
8061
		$temp_array = array();
8062
        
8063
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8064
		{
8065
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8066
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8067
          
8068
			$airport_array[] = $temp_array;
8069
		}
8070
8071
		return $airport_array;
8072
	}
8073
	
8074
	
8075
	
8076
	/**
8077
	* Gets all arrival airports of the airplanes that have flown over based on an departure airport
8078
	*
8079
	* @return Array the airport list
8080
	*
8081
	*/
8082
	public function countAllArrivalAirportsByAirport($airport_icao,$filters = array())
8083
	{
8084
		$filter_query = $this->getFilter($filters,true,true);
8085
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8086
		$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 
8087
			    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 
8088
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8089
			    ORDER BY airport_arrival_icao_count DESC";
8090
      
8091
		
8092
		$sth = $this->db->prepare($query);
8093
		$sth->execute(array(':airport_icao' => $airport_icao));
8094
      
8095
		$airport_array = array();
8096
		$temp_array = array();
8097
        
8098
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8099
		{
8100
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8101
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8102
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8103
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8104
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8105
          
8106
			$airport_array[] = $temp_array;
8107
		}
8108
8109
		return $airport_array;
8110
	}
8111
	
8112
	
8113
	/**
8114
	* Gets all arrival airports by country of the airplanes that have flown over based on an airport icao
8115
	*
8116
	* @return Array the airport list
8117
	*
8118
	*/
8119
	public function countAllArrivalAirportCountriesByAirport($airport_icao,$filters = array())
8120
	{
8121
		$filter_query = $this->getFilter($filters,true,true);
8122
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8123
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8124
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.departure_airport_icao = :airport_icao 
8125
                    GROUP BY spotter_output.arrival_airport_country
8126
					ORDER BY airport_arrival_country_count DESC";
8127
      
8128
		
8129
		$sth = $this->db->prepare($query);
8130
		$sth->execute(array(':airport_icao' => $airport_icao));
8131
      
8132
		$airport_array = array();
8133
		$temp_array = array();
8134
        
8135
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8136
		{
8137
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8138
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8139
          
8140
			$airport_array[] = $temp_array;
8141
		}
8142
8143
		return $airport_array;
8144
	}
8145
	
8146
	
8147
	/**
8148
	* Gets all arrival airports of the airplanes that have flown over based on a aircraft manufacturer
8149
	*
8150
	* @return Array the airport list
8151
	*
8152
	*/
8153
	public function countAllArrivalAirportsByManufacturer($aircraft_manufacturer,$filters = array())
8154
	{
8155
		$filter_query = $this->getFilter($filters,true,true);
8156
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
8157
		$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 
8158
			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 
8159
                    GROUP BY spotter_output.arrival_airport_icao
8160
					ORDER BY airport_arrival_icao_count DESC";
8161
      
8162
		
8163
		$sth = $this->db->prepare($query);
8164
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
8165
      
8166
		$airport_array = array();
8167
		$temp_array = array();
8168
        
8169
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8170
		{
8171
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8172
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8173
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8174
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8175
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8176
          
8177
			$airport_array[] = $temp_array;
8178
		}
8179
8180
		return $airport_array;
8181
	}
8182
	
8183
	
8184
	
8185
	/**
8186
	* Gets all arrival airports by country of the airplanes that have flown over based on a aircraft manufacturer
8187
	*
8188
	* @return Array the airport list
8189
	*
8190
	*/
8191
	public function countAllArrivalAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
8192
	{
8193
		$filter_query = $this->getFilter($filters,true,true);
8194
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
8195
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8196
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
8197
                    GROUP BY spotter_output.arrival_airport_country
8198
					ORDER BY airport_arrival_country_count DESC";
8199
      
8200
		
8201
		$sth = $this->db->prepare($query);
8202
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
8203
      
8204
		$airport_array = array();
8205
		$temp_array = array();
8206
        
8207
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8208
		{
8209
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8210
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8211
          
8212
			$airport_array[] = $temp_array;
8213
		}
8214
8215
		return $airport_array;
8216
	}
8217
	
8218
	
8219
	
8220
	/**
8221
	* Gets all arrival airports of the airplanes that have flown over based on a date
8222
	*
8223
	* @return Array the airport list
8224
	*
8225
	*/
8226
	public function countAllArrivalAirportsByDate($date,$filters = array())
8227
	{
8228
		global $globalTimezone, $globalDBdriver;
8229
		$filter_query = $this->getFilter($filters,true,true);
8230
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8231
		if ($globalTimezone != '') {
8232
			date_default_timezone_set($globalTimezone);
8233
			$datetime = new DateTime($date);
8234
			$offset = $datetime->format('P');
8235
		} else $offset = '+00:00';
8236
8237
		if ($globalDBdriver == 'mysql') {
8238
			$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 
8239
					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  
8240
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8241
					ORDER BY airport_arrival_icao_count DESC";
8242
		} else {
8243
			$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 
8244
					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  
8245
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8246
					ORDER BY airport_arrival_icao_count DESC";
8247
		}
8248
		
8249
		$sth = $this->db->prepare($query);
8250
		$sth->execute(array(':date' => $date, ':offset' => $offset));
8251
      
8252
		$airport_array = array();
8253
		$temp_array = array();
8254
        
8255
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8256
		{
8257
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8258
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8259
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8260
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8261
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8262
          
8263
			$airport_array[] = $temp_array;
8264
		}
8265
		return $airport_array;
8266
	}
8267
	
8268
	
8269
	
8270
	/**
8271
	* Gets all arrival airports by country of the airplanes that have flown over based on a date
8272
	*
8273
	* @return Array the airport list
8274
	*
8275
	*/
8276
	public function countAllArrivalAirportCountriesByDate($date, $filters = array())
8277
	{
8278
		global $globalTimezone, $globalDBdriver;
8279
		$filter_query = $this->getFilter($filters,true,true);
8280
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8281
		if ($globalTimezone != '') {
8282
			date_default_timezone_set($globalTimezone);
8283
			$datetime = new DateTime($date);
8284
			$offset = $datetime->format('P');
8285
		} else $offset = '+00:00';
8286
8287
		if ($globalDBdriver == 'mysql') {
8288
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8289
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
8290
					GROUP BY spotter_output.arrival_airport_country
8291
					ORDER BY airport_arrival_country_count DESC";
8292
		} else {
8293
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8294
					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 
8295
					GROUP BY spotter_output.arrival_airport_country
8296
					ORDER BY airport_arrival_country_count DESC";
8297
		}
8298
		
8299
		$sth = $this->db->prepare($query);
8300
		$sth->execute(array(':date' => $date, ':offset' => $offset));
8301
      
8302
		$airport_array = array();
8303
		$temp_array = array();
8304
        
8305
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8306
		{
8307
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8308
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8309
          
8310
			$airport_array[] = $temp_array;
8311
		}
8312
		return $airport_array;
8313
	}
8314
	
8315
	
8316
	
8317
	/**
8318
	* Gets all arrival airports of the airplanes that have flown over based on a ident/callsign
8319
	*
8320
	* @return Array the airport list
8321
	*
8322
	*/
8323
	public function countAllArrivalAirportsByIdent($ident,$filters = array())
8324
	{
8325
		$filter_query = $this->getFilter($filters,true,true);
8326
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
8327
		$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 
8328
		    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  
8329
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8330
		    ORDER BY airport_arrival_icao_count DESC";
8331
      
8332
		
8333
		$sth = $this->db->prepare($query);
8334
		$sth->execute(array(':ident' => $ident));
8335
      
8336
		$airport_array = array();
8337
		$temp_array = array();
8338
        
8339
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8340
		{
8341
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8342
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8343
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8344
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8345
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8346
          
8347
			$airport_array[] = $temp_array;
8348
		}
8349
8350
		return $airport_array;
8351
	}
8352
	
8353
	/**
8354
	* Gets all arrival airports of the airplanes that have flown over based on a owner
8355
	*
8356
	* @return Array the airport list
8357
	*
8358
	*/
8359
	public function countAllArrivalAirportsByOwner($owner,$filters = array())
8360
	{
8361
		$filter_query = $this->getFilter($filters,true,true);
8362
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
8363
		$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 
8364
		    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 
8365
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8366
		    ORDER BY airport_arrival_icao_count DESC";
8367
      
8368
		
8369
		$sth = $this->db->prepare($query);
8370
		$sth->execute(array(':owner' => $owner));
8371
		$airport_array = array();
8372
		$temp_array = array();
8373
        
8374
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8375
		{
8376
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8377
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8378
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8379
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8380
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8381
          
8382
			$airport_array[] = $temp_array;
8383
		}
8384
8385
		return $airport_array;
8386
	}
8387
8388
	/**
8389
	* Gets all arrival airports of the airplanes that have flown over based on a pilot
8390
	*
8391
	* @return Array the airport list
8392
	*
8393
	*/
8394
	public function countAllArrivalAirportsByPilot($pilot,$filters = array())
8395
	{
8396
		$filter_query = $this->getFilter($filters,true,true);
8397
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
8398
		$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 
8399
		    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) 
8400
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8401
		    ORDER BY airport_arrival_icao_count DESC";
8402
      
8403
		
8404
		$sth = $this->db->prepare($query);
8405
		$sth->execute(array(':pilot' => $pilot));
8406
		$airport_array = array();
8407
		$temp_array = array();
8408
        
8409
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8410
		{
8411
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8412
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8413
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8414
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8415
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8416
          
8417
			$airport_array[] = $temp_array;
8418
		}
8419
8420
		return $airport_array;
8421
	}
8422
	
8423
	/**
8424
	* Gets all arrival airports by country of the airplanes that have flown over based on a callsign/ident
8425
	*
8426
	* @return Array the airport list
8427
	*
8428
	*/
8429
	public function countAllArrivalAirportCountriesByIdent($ident, $filters = array())
8430
	{
8431
		$filter_query = $this->getFilter($filters,true,true);
8432
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
8433
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8434
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.ident = :ident 
8435
                    GROUP BY spotter_output.arrival_airport_country
8436
					ORDER BY airport_arrival_country_count DESC";
8437
      
8438
		
8439
		$sth = $this->db->prepare($query);
8440
		$sth->execute(array(':ident' => $ident));
8441
      
8442
		$airport_array = array();
8443
		$temp_array = array();
8444
        
8445
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8446
		{
8447
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8448
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8449
          
8450
			$airport_array[] = $temp_array;
8451
		}
8452
8453
		return $airport_array;
8454
	}
8455
	
8456
	/**
8457
	* Gets all arrival airports by country of the airplanes that have flown over based on a owner
8458
	*
8459
	* @return Array the airport list
8460
	*
8461
	*/
8462
	public function countAllArrivalAirportCountriesByOwner($owner, $filters = array())
8463
	{
8464
		$filter_query = $this->getFilter($filters,true,true);
8465
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
8466
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8467
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.owner_name = :owner 
8468
                    GROUP BY spotter_output.arrival_airport_country
8469
		    ORDER BY airport_arrival_country_count DESC";
8470
8471
		$sth = $this->db->prepare($query);
8472
		$sth->execute(array(':owner' => $owner));
8473
		return $sth->fetchAll(PDO::FETCH_ASSOC);
8474
	}
8475
	
8476
	/**
8477
	* Gets all arrival airports by country of the airplanes that have flown over based on a pilot
8478
	*
8479
	* @return Array the airport list
8480
	*
8481
	*/
8482
	public function countAllArrivalAirportCountriesByPilot($pilot, $filters = array())
8483
	{
8484
		$filter_query = $this->getFilter($filters,true,true);
8485
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
8486
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8487
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
8488
                    GROUP BY spotter_output.arrival_airport_country
8489
		    ORDER BY airport_arrival_country_count DESC";
8490
8491
		$sth = $this->db->prepare($query);
8492
		$sth->execute(array(':pilot' => $pilot));
8493
		return $sth->fetchAll(PDO::FETCH_ASSOC);
8494
	}
8495
	
8496
	
8497
	
8498
	/**
8499
	* Gets all arrival airports of the airplanes that have flown over based on a country
8500
	*
8501
	* @return Array the airport list
8502
	*
8503
	*/
8504
	public function countAllArrivalAirportsByCountry($country,$filters = array())
8505
	{
8506
		$filter_query = $this->getFilter($filters,true,true);
8507
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8508
		$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 
8509
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
8510
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8511
			    ORDER BY airport_arrival_icao_count DESC";
8512
      
8513
		
8514
		$sth = $this->db->prepare($query);
8515
		$sth->execute(array(':country' => $country));
8516
      
8517
		$airport_array = array();
8518
		$temp_array = array();
8519
        
8520
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8521
		{
8522
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8523
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8524
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8525
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8526
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8527
          
8528
			$airport_array[] = $temp_array;
8529
		}
8530
8531
		return $airport_array;
8532
	}
8533
	
8534
	
8535
	/**
8536
	* Gets all arrival airports by country of the airplanes that have flown over based on a country
8537
	*
8538
	* @return Array the airport list
8539
	*
8540
	*/
8541
	public function countAllArrivalAirportCountriesByCountry($country,$filters = array())
8542
	{
8543
		global $globalDBdriver;
8544
		$filter_query = $this->getFilter($filters,true,true);
8545
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8546
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8547
			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 
8548
                    GROUP BY spotter_output.arrival_airport_country
8549
					ORDER BY airport_arrival_country_count DESC";
8550
      
8551
		
8552
		$sth = $this->db->prepare($query);
8553
		$sth->execute(array(':country' => $country));
8554
      
8555
		$airport_array = array();
8556
		$temp_array = array();
8557
        
8558
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8559
		{
8560
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8561
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8562
          
8563
			$airport_array[] = $temp_array;
8564
		}
8565
8566
		return $airport_array;
8567
	}
8568
8569
8570
8571
	/**
8572
	* Counts all airport departure countries
8573
	*
8574
	* @return Array the airport departure list
8575
	*
8576
	*/
8577
	public function countAllDepartureCountries($filters = array(),$year = '',$month = '', $day = '')
8578
	{
8579
		global $globalDBdriver;
8580
		$filter_query = $this->getFilter($filters,true,true);
8581
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
8582
				FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> ''";
8583
		$query_values = array();
8584
		if ($year != '') {
8585
			if ($globalDBdriver == 'mysql') {
8586
				$query .= " AND YEAR(spotter_output.date) = :year";
8587
				$query_values = array_merge($query_values,array(':year' => $year));
8588
			} else {
8589
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
8590
				$query_values = array_merge($query_values,array(':year' => $year));
8591
			}
8592
		}
8593
		if ($month != '') {
8594
			if ($globalDBdriver == 'mysql') {
8595
				$query .= " AND MONTH(spotter_output.date) = :month";
8596
				$query_values = array_merge($query_values,array(':month' => $month));
8597
			} else {
8598
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
8599
				$query_values = array_merge($query_values,array(':month' => $month));
8600
			}
8601
		}
8602
		if ($day != '') {
8603
			if ($globalDBdriver == 'mysql') {
8604
				$query .= " AND DAY(spotter_output.date) = :day";
8605
				$query_values = array_merge($query_values,array(':day' => $day));
8606
			} else {
8607
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
8608
				$query_values = array_merge($query_values,array(':day' => $day));
8609
			}
8610
		}
8611
		$query .= " GROUP BY spotter_output.departure_airport_country
8612
					ORDER BY airport_departure_country_count DESC
8613
					LIMIT 10 OFFSET 0";
8614
      
8615
		
8616
		$sth = $this->db->prepare($query);
8617
		$sth->execute($query_values);
8618
      
8619
		$airport_array = array();
8620
		$temp_array = array();
8621
        
8622
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8623
		{
8624
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
8625
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
8626
          
8627
			$airport_array[] = $temp_array;
8628
		}
8629
8630
		return $airport_array;
8631
	}
8632
	
8633
	
8634
	/**
8635
	* Counts all airport arrival countries
8636
	*
8637
	* @return Array the airport arrival list
8638
	*
8639
	*/
8640
	public function countAllArrivalCountries($limit = true,$filters = array(),$year = '',$month = '',$day = '')
8641
	{
8642
		global $globalDBdriver;
8643
		$filter_query = $this->getFilter($filters,true,true);
8644
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8645
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''";
8646
		$query_values = array();
8647
		if ($year != '') {
8648
			if ($globalDBdriver == 'mysql') {
8649
				$query .= " AND YEAR(spotter_output.date) = :year";
8650
				$query_values = array_merge($query_values,array(':year' => $year));
8651
			} else {
8652
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
8653
				$query_values = array_merge($query_values,array(':year' => $year));
8654
			}
8655
		}
8656
		if ($month != '') {
8657
			if ($globalDBdriver == 'mysql') {
8658
				$query .= " AND MONTH(spotter_output.date) = :month";
8659
				$query_values = array_merge($query_values,array(':month' => $month));
8660
			} else {
8661
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
8662
				$query_values = array_merge($query_values,array(':month' => $month));
8663
			}
8664
		}
8665
		if ($day != '') {
8666
			if ($globalDBdriver == 'mysql') {
8667
				$query .= " AND DAY(spotter_output.date) = :day";
8668
				$query_values = array_merge($query_values,array(':day' => $day));
8669
			} else {
8670
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
8671
				$query_values = array_merge($query_values,array(':day' => $day));
8672
			}
8673
		}
8674
		$query .= " GROUP BY spotter_output.arrival_airport_country
8675
					ORDER BY airport_arrival_country_count DESC";
8676
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
8677
      
8678
		
8679
		$sth = $this->db->prepare($query);
8680
		$sth->execute($query_values);
8681
      
8682
		$airport_array = array();
8683
		$temp_array = array();
8684
        
8685
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8686
		{
8687
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8688
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8689
          
8690
			$airport_array[] = $temp_array;
8691
		}
8692
8693
		return $airport_array;
8694
	}
8695
8696
8697
8698
8699
8700
	/**
8701
	* Gets all route combinations
8702
	*
8703
	* @return Array the route list
8704
	*
8705
	*/
8706
	public function countAllRoutes($filters = array())
8707
	{
8708
		$filter_query = $this->getFilter($filters,true,true);
8709
		$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
8710
		    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 <> ''
8711
                    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
8712
                    ORDER BY route_count DESC
8713
		    LIMIT 10 OFFSET 0";
8714
      
8715
		
8716
		$sth = $this->db->prepare($query);
8717
		$sth->execute();
8718
      
8719
		$routes_array = array();
8720
		$temp_array = array();
8721
        
8722
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8723
		{
8724
			$temp_array['route_count'] = $row['route_count'];
8725
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8726
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8727
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8728
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8729
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8730
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8731
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8732
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8733
          
8734
			$routes_array[] = $temp_array;
8735
		}
8736
8737
		return $routes_array;
8738
	}
8739
	
8740
	
8741
	
8742
	
8743
	/**
8744
	* Gets all route combinations based on an aircraft
8745
	*
8746
	* @return Array the route list
8747
	*
8748
	*/
8749
	public function countAllRoutesByAircraft($aircraft_icao,$filters = array())
8750
	{
8751
		$filter_query = $this->getFilter($filters,true,true);
8752
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
8753
		$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
8754
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
8755
			    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 
8756
			    ORDER BY route_count DESC";
8757
		
8758
		$sth = $this->db->prepare($query);
8759
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
8760
      
8761
		$routes_array = array();
8762
		$temp_array = array();
8763
        
8764
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8765
		{
8766
			$temp_array['route_count'] = $row['route_count'];
8767
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8768
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8769
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8770
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8771
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8772
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8773
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8774
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8775
          
8776
			$routes_array[] = $temp_array;
8777
		}
8778
8779
		return $routes_array;
8780
	}
8781
	
8782
	
8783
	/**
8784
	* Gets all route combinations based on an aircraft registration
8785
	*
8786
	* @return Array the route list
8787
	*
8788
	*/
8789
	public function countAllRoutesByRegistration($registration, $filters = array())
8790
	{
8791
		$filter_query = $this->getFilter($filters,true,true);
8792
		$registration = filter_var($registration, FILTER_SANITIZE_STRING);
8793
		$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
8794
			FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.registration = :registration 
8795
                    GROUP BY route
8796
                    ORDER BY route_count DESC";
8797
      
8798
		
8799
		$sth = $this->db->prepare($query);
8800
		$sth->execute(array(':registration' => $registration));
8801
      
8802
		$routes_array = array();
8803
		$temp_array = array();
8804
        
8805
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8806
		{
8807
			$temp_array['route_count'] = $row['route_count'];
8808
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8809
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8810
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8811
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8812
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8813
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8814
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8815
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8816
          
8817
			$routes_array[] = $temp_array;
8818
		}
8819
8820
		return $routes_array;
8821
	}
8822
	
8823
	
8824
	
8825
	/**
8826
	* Gets all route combinations based on an airline
8827
	*
8828
	* @return Array the route list
8829
	*
8830
	*/
8831
	public function countAllRoutesByAirline($airline_icao, $filters = array())
8832
	{
8833
		$filter_query = $this->getFilter($filters,true,true);
8834
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
8835
		$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
8836
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.airline_icao = :airline_icao 
8837
			    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 
8838
			    ORDER BY route_count DESC";
8839
      
8840
		
8841
		$sth = $this->db->prepare($query);
8842
		$sth->execute(array(':airline_icao' => $airline_icao));
8843
      
8844
		$routes_array = array();
8845
		$temp_array = array();
8846
        
8847
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8848
		{
8849
			$temp_array['route_count'] = $row['route_count'];
8850
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8851
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8852
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8853
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8854
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8855
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8856
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8857
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8858
          
8859
			$routes_array[] = $temp_array;
8860
		}
8861
8862
		return $routes_array;
8863
	}
8864
	
8865
	
8866
	
8867
	/**
8868
	* Gets all route combinations based on an airport
8869
	*
8870
	* @return Array the route list
8871
	*
8872
	*/
8873
	public function countAllRoutesByAirport($airport_icao, $filters = array())
8874
	{
8875
		$filter_query = $this->getFilter($filters,true,true);
8876
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8877
		$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
8878
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
8879
			    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 
8880
			    ORDER BY route_count DESC";
8881
		
8882
		$sth = $this->db->prepare($query);
8883
		$sth->execute(array(':airport_icao' => $airport_icao));
8884
      
8885
		$routes_array = array();
8886
		$temp_array = array();
8887
        
8888
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8889
		{
8890
			$temp_array['route_count'] = $row['route_count'];
8891
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8892
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8893
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8894
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8895
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8896
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8897
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8898
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8899
          
8900
			$routes_array[] = $temp_array;
8901
		}
8902
8903
		return $routes_array;
8904
	}
8905
	
8906
	
8907
	
8908
	/**
8909
	* Gets all route combinations based on an country
8910
	*
8911
	* @return Array the route list
8912
	*
8913
	*/
8914
	public function countAllRoutesByCountry($country, $filters = array())
8915
	{
8916
		$filter_query = $this->getFilter($filters,true,true);
8917
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8918
		$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
8919
			    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 
8920
			    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 
8921
			    ORDER BY route_count DESC";
8922
		
8923
		$sth = $this->db->prepare($query);
8924
		$sth->execute(array(':country' => $country));
8925
      
8926
		$routes_array = array();
8927
		$temp_array = array();
8928
        
8929
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8930
		{
8931
			$temp_array['route_count'] = $row['route_count'];
8932
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8933
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8934
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8935
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8936
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8937
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8938
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8939
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8940
          
8941
			$routes_array[] = $temp_array;
8942
		}
8943
8944
		return $routes_array;
8945
	}
8946
8947
8948
	/**
8949
	* Gets all route combinations based on an date
8950
	*
8951
	* @return Array the route list
8952
	*
8953
	*/
8954
	public function countAllRoutesByDate($date, $filters = array())
8955
	{
8956
		global $globalTimezone, $globalDBdriver;
8957
		$filter_query = $this->getFilter($filters,true,true);
8958
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8959
		if ($globalTimezone != '') {
8960
			date_default_timezone_set($globalTimezone);
8961
			$datetime = new DateTime($date);
8962
			$offset = $datetime->format('P');
8963
		} else $offset = '+00:00';
8964
		
8965
		if ($globalDBdriver == 'mysql') {
8966
			$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
8967
				    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date  
8968
				    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
8969
				    ORDER BY route_count DESC";
8970
		} else {
8971
			$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
8972
				    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date  
8973
				    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
8974
				    ORDER BY route_count DESC";
8975
		}
8976
		
8977
		$sth = $this->db->prepare($query);
8978
		$sth->execute(array(':date' => $date, ':offset' => $offset));
8979
      
8980
		$routes_array = array();
8981
		$temp_array = array();
8982
        
8983
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8984
		{
8985
			$temp_array['route_count'] = $row['route_count'];
8986
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8987
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8988
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8989
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8990
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8991
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8992
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8993
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8994
          
8995
			$routes_array[] = $temp_array;
8996
		}
8997
8998
		return $routes_array;
8999
	}
9000
	
9001
	
9002
	/**
9003
	* Gets all route combinations based on an ident/callsign
9004
	*
9005
	* @return Array the route list
9006
	*
9007
	*/
9008
	public function countAllRoutesByIdent($ident, $filters = array())
9009
	{
9010
		$filter_query = $this->getFilter($filters,true,true);
9011
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
9012
		$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
9013
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.ident = :ident   
9014
                    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
9015
                    ORDER BY route_count DESC";
9016
      
9017
		
9018
		$sth = $this->db->prepare($query);
9019
		$sth->execute(array(':ident' => $ident));
9020
      
9021
		$routes_array = array();
9022
		$temp_array = array();
9023
        
9024
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9025
		{
9026
			$temp_array['route_count'] = $row['route_count'];
9027
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9028
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9029
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9030
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9031
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9032
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9033
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9034
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9035
          
9036
			$routes_array[] = $temp_array;
9037
		}
9038
9039
		return $routes_array;
9040
	}
9041
	
9042
	/**
9043
	* Gets all route combinations based on an owner
9044
	*
9045
	* @return Array the route list
9046
	*
9047
	*/
9048
	public function countAllRoutesByOwner($owner,$filters = array())
9049
	{
9050
		$filter_query = $this->getFilter($filters,true,true);
9051
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
9052
		$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
9053
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.owner_name = :owner 
9054
                    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
9055
                    ORDER BY route_count DESC";
9056
      
9057
		
9058
		$sth = $this->db->prepare($query);
9059
		$sth->execute(array(':owner' => $owner));
9060
      
9061
		$routes_array = array();
9062
		$temp_array = array();
9063
        
9064
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9065
		{
9066
			$temp_array['route_count'] = $row['route_count'];
9067
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9068
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9069
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9070
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9071
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9072
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9073
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9074
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9075
          
9076
			$routes_array[] = $temp_array;
9077
		}
9078
9079
		return $routes_array;
9080
	}
9081
	
9082
	/**
9083
	* Gets all route combinations based on a pilot
9084
	*
9085
	* @return Array the route list
9086
	*
9087
	*/
9088
	public function countAllRoutesByPilot($pilot,$filters = array())
9089
	{
9090
		$filter_query = $this->getFilter($filters,true,true);
9091
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
9092
		$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
9093
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
9094
                    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
9095
                    ORDER BY route_count DESC";
9096
      
9097
		
9098
		$sth = $this->db->prepare($query);
9099
		$sth->execute(array(':pilot' => $pilot));
9100
      
9101
		$routes_array = array();
9102
		$temp_array = array();
9103
        
9104
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9105
		{
9106
			$temp_array['route_count'] = $row['route_count'];
9107
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9108
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9109
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9110
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9111
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9112
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9113
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9114
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9115
          
9116
			$routes_array[] = $temp_array;
9117
		}
9118
9119
		return $routes_array;
9120
	}
9121
	
9122
	
9123
	/**
9124
	* Gets all route combinations based on an manufacturer
9125
	*
9126
	* @return Array the route list
9127
	*
9128
	*/
9129
	public function countAllRoutesByManufacturer($aircraft_manufacturer, $filters = array())
9130
	{
9131
		$filter_query = $this->getFilter($filters,true,true);
9132
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
9133
		$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
9134
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
9135
                    GROUP BY route
9136
                    ORDER BY route_count DESC";
9137
      
9138
		
9139
		$sth = $this->db->prepare($query);
9140
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
9141
      
9142
		$routes_array = array();
9143
		$temp_array = array();
9144
        
9145
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9146
		{
9147
			$temp_array['route_count'] = $row['route_count'];
9148
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9149
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9150
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9151
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9152
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9153
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9154
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9155
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9156
          
9157
			$routes_array[] = $temp_array;
9158
		}
9159
9160
		return $routes_array;
9161
	}
9162
9163
	
9164
	
9165
	/**
9166
	* Gets all route combinations with waypoints
9167
	*
9168
	* @return Array the route list
9169
	*
9170
	*/
9171
	public function countAllRoutesWithWaypoints($filters = array())
9172
	{
9173
		$filter_query = $this->getFilter($filters,true,true);
9174
		$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
9175
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.waypoints <> '' 
9176
                    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
9177
                    ORDER BY route_count DESC
9178
		    LIMIT 10 OFFSET 0";
9179
      
9180
		
9181
		$sth = $this->db->prepare($query);
9182
		$sth->execute();
9183
      
9184
		$routes_array = array();
9185
		$temp_array = array();
9186
        
9187
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9188
		{
9189
			$temp_array['spotter_id'] = $row['spotter_id'];
9190
			$temp_array['route_count'] = $row['route_count'];
9191
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9192
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9193
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9194
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9195
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9196
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9197
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9198
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9199
          
9200
			$routes_array[] = $temp_array;
9201
		}
9202
9203
		return $routes_array;
9204
	}
9205
	
9206
	/**
9207
	* Gets all callsigns that have flown over
9208
	*
9209
	* @return Array the callsign list
9210
	*
9211
	*/
9212
	public function countAllCallsigns($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '', $month = '', $day = '')
9213
	{
9214
		global $globalDBdriver;
9215
		$filter_query = $this->getFilter($filters,true,true);
9216
		$query  = "SELECT DISTINCT spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name, spotter_output.airline_icao  
9217
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''";
9218
		 if ($olderthanmonths > 0) {
9219
			if ($globalDBdriver == 'mysql') $query .= ' AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH)';
9220
			else $query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
9221
		}
9222
		if ($sincedate != '') {
9223
			if ($globalDBdriver == 'mysql') $query .= " AND spotter_output.date > '".$sincedate."'";
9224
			else $query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
9225
		}
9226
		$query_values = array();
9227
		if ($year != '') {
9228
			if ($globalDBdriver == 'mysql') {
9229
				$query .= " AND YEAR(spotter_output.date) = :year";
9230
				$query_values = array_merge($query_values,array(':year' => $year));
9231
			} else {
9232
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
9233
				$query_values = array_merge($query_values,array(':year' => $year));
9234
			}
9235
		}
9236
		if ($month != '') {
9237
			if ($globalDBdriver == 'mysql') {
9238
				$query .= " AND MONTH(spotter_output.date) = :month";
9239
				$query_values = array_merge($query_values,array(':month' => $month));
9240
			} else {
9241
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
9242
				$query_values = array_merge($query_values,array(':month' => $month));
9243
			}
9244
		}
9245
		if ($day != '') {
9246
			if ($globalDBdriver == 'mysql') {
9247
				$query .= " AND DAY(spotter_output.date) = :day";
9248
				$query_values = array_merge($query_values,array(':day' => $day));
9249
			} else {
9250
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
9251
				$query_values = array_merge($query_values,array(':day' => $day));
9252
			}
9253
		}
9254
		$query .= " GROUP BY spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
9255
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
9256
      		
9257
		$sth = $this->db->prepare($query);
9258
		$sth->execute($query_values);
9259
      
9260
		$callsign_array = array();
9261
		$temp_array = array();
9262
        
9263
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9264
		{
9265
			$temp_array['callsign_icao'] = $row['ident'];
9266
			$temp_array['airline_name'] = $row['airline_name'];
9267
			$temp_array['airline_icao'] = $row['airline_icao'];
9268
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
9269
          
9270
			$callsign_array[] = $temp_array;
9271
		}
9272
9273
		return $callsign_array;
9274
	}
9275
9276
	/**
9277
	* Gets all callsigns that have flown over
9278
	*
9279
	* @return Array the callsign list
9280
	*
9281
	*/
9282
	public function countAllCallsignsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $filters = array())
9283
	{
9284
		global $globalDBdriver;
9285
		$filter_query = $this->getFilter($filters,true,true);
9286
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name  
9287
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''  AND spotter_output.airline_icao <> '' ";
9288
		 if ($olderthanmonths > 0) {
9289
			if ($globalDBdriver == 'mysql') $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
9290
			else $query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
9291
		}
9292
		if ($sincedate != '') {
9293
			if ($globalDBdriver == 'mysql') $query .= "AND spotter_output.date > '".$sincedate."' ";
9294
			else $query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
9295
		}
9296
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
9297
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
9298
      		
9299
		$sth = $this->db->prepare($query);
9300
		$sth->execute();
9301
      
9302
		$callsign_array = array();
9303
		$temp_array = array();
9304
        
9305
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9306
		{
9307
			$temp_array['callsign_icao'] = $row['ident'];
9308
			$temp_array['airline_name'] = $row['airline_name'];
9309
			$temp_array['airline_icao'] = $row['airline_icao'];
9310
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
9311
          
9312
			$callsign_array[] = $temp_array;
9313
		}
9314
9315
		return $callsign_array;
9316
	}
9317
9318
9319
9320
9321
	/**
9322
	* Counts all dates
9323
	*
9324
	* @return Array the date list
9325
	*
9326
	*/
9327
	public function countAllDates($filters = array())
9328
	{
9329
		global $globalTimezone, $globalDBdriver;
9330
		if ($globalTimezone != '') {
9331
			date_default_timezone_set($globalTimezone);
9332
			$datetime = new DateTime();
9333
			$offset = $datetime->format('P');
9334
		} else $offset = '+00:00';
9335
9336
		if ($globalDBdriver == 'mysql') {
9337
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9338
								FROM spotter_output";
9339
			$query .= $this->getFilter($filters);
9340
			$query .= " GROUP BY date_name 
9341
								ORDER BY date_count DESC
9342
								LIMIT 10 OFFSET 0";
9343
		} else {
9344
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9345
								FROM spotter_output";
9346
			$query .= $this->getFilter($filters);
9347
			$query .= " GROUP BY date_name 
9348
								ORDER BY date_count DESC
9349
								LIMIT 10 OFFSET 0";
9350
		}
9351
      
9352
		
9353
		$sth = $this->db->prepare($query);
9354
		$sth->execute(array(':offset' => $offset));
9355
      
9356
		$date_array = array();
9357
		$temp_array = array();
9358
        
9359
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9360
		{
9361
			$temp_array['date_name'] = $row['date_name'];
9362
			$temp_array['date_count'] = $row['date_count'];
9363
9364
			$date_array[] = $temp_array;
9365
		}
9366
9367
		return $date_array;
9368
	}
9369
	
9370
	/**
9371
	* Counts all dates
9372
	*
9373
	* @return Array the date list
9374
	*
9375
	*/
9376
	public function countAllDatesByAirlines($filters = array())
9377
	{
9378
		global $globalTimezone, $globalDBdriver;
9379
		if ($globalTimezone != '') {
9380
			date_default_timezone_set($globalTimezone);
9381
			$datetime = new DateTime();
9382
			$offset = $datetime->format('P');
9383
		} else $offset = '+00:00';
9384
		$filter_query = $this->getFilter($filters,true,true);
9385
		if ($globalDBdriver == 'mysql') {
9386
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9387
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9388
								GROUP BY spotter_output.airline_icao, date_name 
9389
								ORDER BY date_count DESC
9390
								LIMIT 10 OFFSET 0";
9391
		} else {
9392
			$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
9393
								FROM spotter_output 
9394
								WHERE spotter_output.airline_icao <> '' 
9395
								GROUP BY spotter_output.airline_icao, date_name 
9396
								ORDER BY date_count DESC
9397
								LIMIT 10 OFFSET 0";
9398
		}
9399
      
9400
		
9401
		$sth = $this->db->prepare($query);
9402
		$sth->execute(array(':offset' => $offset));
9403
      
9404
		$date_array = array();
9405
		$temp_array = array();
9406
        
9407
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9408
		{
9409
			$temp_array['date_name'] = $row['date_name'];
9410
			$temp_array['date_count'] = $row['date_count'];
9411
			$temp_array['airline_icao'] = $row['airline_icao'];
9412
9413
			$date_array[] = $temp_array;
9414
		}
9415
9416
		return $date_array;
9417
	}	
9418
	
9419
	/**
9420
	* Counts all dates during the last 7 days
9421
	*
9422
	* @return Array the date list
9423
	*
9424
	*/
9425
	public function countAllDatesLast7Days($filters = array())
9426
	{
9427
		global $globalTimezone, $globalDBdriver;
9428
		if ($globalTimezone != '') {
9429
			date_default_timezone_set($globalTimezone);
9430
			$datetime = new DateTime();
9431
			$offset = $datetime->format('P');
9432
		} else $offset = '+00:00';
9433
		$filter_query = $this->getFilter($filters,true,true);
9434
		if ($globalDBdriver == 'mysql') {
9435
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9436
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY)";
9437
			$query .= " GROUP BY date_name 
9438
								ORDER BY spotter_output.date ASC";
9439
			$query_data = array(':offset' => $offset);
9440
		} else {
9441
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9442
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '7 DAYS'";
9443
			$query .= " GROUP BY date_name 
9444
								ORDER BY date_name ASC";
9445
			$query_data = array(':offset' => $offset);
9446
    		}
9447
		
9448
		$sth = $this->db->prepare($query);
9449
		$sth->execute($query_data);
9450
      
9451
		$date_array = array();
9452
		$temp_array = array();
9453
        
9454
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9455
		{
9456
			$temp_array['date_name'] = $row['date_name'];
9457
			$temp_array['date_count'] = $row['date_count'];
9458
          
9459
			$date_array[] = $temp_array;
9460
		}
9461
9462
		return $date_array;
9463
	}
9464
9465
	/**
9466
	* Counts all dates during the last month
9467
	*
9468
	* @return Array the date list
9469
	*
9470
	*/
9471
	public function countAllDatesLastMonth($filters = array())
9472
	{
9473
		global $globalTimezone, $globalDBdriver;
9474
		if ($globalTimezone != '') {
9475
			date_default_timezone_set($globalTimezone);
9476
			$datetime = new DateTime();
9477
			$offset = $datetime->format('P');
9478
		} else $offset = '+00:00';
9479
		$filter_query = $this->getFilter($filters,true,true);
9480
		if ($globalDBdriver == 'mysql') {
9481
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9482
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)";
9483
			$query .= " GROUP BY date_name 
9484
								ORDER BY spotter_output.date ASC";
9485
			$query_data = array(':offset' => $offset);
9486
		} else {
9487
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9488
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'";
9489
			$query .= " GROUP BY date_name 
9490
								ORDER BY date_name ASC";
9491
			$query_data = array(':offset' => $offset);
9492
    		}
9493
		
9494
		$sth = $this->db->prepare($query);
9495
		$sth->execute($query_data);
9496
      
9497
		$date_array = array();
9498
		$temp_array = array();
9499
        
9500
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9501
		{
9502
			$temp_array['date_name'] = $row['date_name'];
9503
			$temp_array['date_count'] = $row['date_count'];
9504
          
9505
			$date_array[] = $temp_array;
9506
		}
9507
9508
		return $date_array;
9509
	}
9510
9511
9512
	/**
9513
	* Counts all dates during the last month
9514
	*
9515
	* @return Array the date list
9516
	*
9517
	*/
9518
	public function countAllDatesLastMonthByAirlines($filters = array())
9519
	{
9520
		global $globalTimezone, $globalDBdriver;
9521
		$filter_query = $this->getFilter($filters,true,true);
9522
		if ($globalTimezone != '') {
9523
			date_default_timezone_set($globalTimezone);
9524
			$datetime = new DateTime();
9525
			$offset = $datetime->format('P');
9526
		} else $offset = '+00:00';
9527
		
9528
		if ($globalDBdriver == 'mysql') {
9529
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9530
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)
9531
								GROUP BY spotter_output.airline_icao, date_name 
9532
								ORDER BY spotter_output.date ASC";
9533
			$query_data = array(':offset' => $offset);
9534
		} else {
9535
			$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
9536
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'
9537
								GROUP BY spotter_output.airline_icao, date_name 
9538
								ORDER BY date_name ASC";
9539
			$query_data = array(':offset' => $offset);
9540
    		}
9541
		
9542
		$sth = $this->db->prepare($query);
9543
		$sth->execute($query_data);
9544
      
9545
		$date_array = array();
9546
		$temp_array = array();
9547
        
9548
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9549
		{
9550
			$temp_array['date_name'] = $row['date_name'];
9551
			$temp_array['date_count'] = $row['date_count'];
9552
			$temp_array['airline_icao'] = $row['airline_icao'];
9553
          
9554
			$date_array[] = $temp_array;
9555
		}
9556
9557
		return $date_array;
9558
	}
9559
	
9560
9561
	/**
9562
	* Counts all month
9563
	*
9564
	* @return Array the month list
9565
	*
9566
	*/
9567
	public function countAllMonths($filters = array())
9568
	{
9569
		global $globalTimezone, $globalDBdriver;
9570
		if ($globalTimezone != '') {
9571
			date_default_timezone_set($globalTimezone);
9572
			$datetime = new DateTime();
9573
			$offset = $datetime->format('P');
9574
		} else $offset = '+00:00';
9575
9576
		if ($globalDBdriver == 'mysql') {
9577
			$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
9578
								FROM spotter_output";
9579
			$query .= $this->getFilter($filters);
9580
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
9581
		} else {
9582
			$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
9583
								FROM spotter_output";
9584
			$query .= $this->getFilter($filters);
9585
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
9586
		}
9587
      
9588
		
9589
		$sth = $this->db->prepare($query);
9590
		$sth->execute(array(':offset' => $offset));
9591
      
9592
		$date_array = array();
9593
		$temp_array = array();
9594
        
9595
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9596
		{
9597
			$temp_array['month_name'] = $row['month_name'];
9598
			$temp_array['year_name'] = $row['year_name'];
9599
			$temp_array['date_count'] = $row['date_count'];
9600
9601
			$date_array[] = $temp_array;
9602
		}
9603
9604
		return $date_array;
9605
	}
9606
9607
	/**
9608
	* Counts all month
9609
	*
9610
	* @return Array the month list
9611
	*
9612
	*/
9613
	public function countAllMonthsByAirlines($filters = array())
9614
	{
9615
		global $globalTimezone, $globalDBdriver;
9616
		$filter_query = $this->getFilter($filters,true,true);
9617
		if ($globalTimezone != '') {
9618
			date_default_timezone_set($globalTimezone);
9619
			$datetime = new DateTime();
9620
			$offset = $datetime->format('P');
9621
		} else $offset = '+00:00';
9622
9623
		if ($globalDBdriver == 'mysql') {
9624
			$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
9625
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9626
								GROUP BY spotter_output.airline_icao, year_name, month_name 
9627
								ORDER BY date_count DESC";
9628
		} else {
9629
			$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
9630
								FROM spotter_output 
9631
								WHERE spotter_output.airline_icao <> '' 
9632
								GROUP BY spotter_output.airline_icao, year_name, month_name 
9633
								ORDER BY date_count DESC";
9634
		}
9635
      
9636
		
9637
		$sth = $this->db->prepare($query);
9638
		$sth->execute(array(':offset' => $offset));
9639
      
9640
		$date_array = array();
9641
		$temp_array = array();
9642
        
9643
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9644
		{
9645
			$temp_array['month_name'] = $row['month_name'];
9646
			$temp_array['year_name'] = $row['year_name'];
9647
			$temp_array['date_count'] = $row['date_count'];
9648
			$temp_array['airline_icao'] = $row['airline_icao'];
9649
9650
			$date_array[] = $temp_array;
9651
		}
9652
9653
		return $date_array;
9654
	}
9655
9656
	/**
9657
	* Counts all military month
9658
	*
9659
	* @return Array the month list
9660
	*
9661
	*/
9662
	public function countAllMilitaryMonths($filters = array())
9663
	{
9664
		global $globalTimezone, $globalDBdriver;
9665
		if ($globalTimezone != '') {
9666
			date_default_timezone_set($globalTimezone);
9667
			$datetime = new DateTime();
9668
			$offset = $datetime->format('P');
9669
		} else $offset = '+00:00';
9670
		$filter_query = $this->getFilter($filters,true,true);
9671
		if ($globalDBdriver == 'mysql') {
9672
			$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
9673
								FROM spotter_output".$filter_query." spotter_output.airline_type = 'military'
9674
								GROUP BY year_name, month_name 
9675
								ORDER BY date_count DESC";
9676
		} else {
9677
			$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
9678
								FROM spotter_output".$filter_query." spotter_output.airline_type = 'military'
9679
								GROUP BY year_name, month_name 
9680
								ORDER BY date_count DESC";
9681
		}
9682
		
9683
		$sth = $this->db->prepare($query);
9684
		$sth->execute(array(':offset' => $offset));
9685
      
9686
		$date_array = array();
9687
		$temp_array = array();
9688
        
9689
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9690
		{
9691
			$temp_array['month_name'] = $row['month_name'];
9692
			$temp_array['year_name'] = $row['year_name'];
9693
			$temp_array['date_count'] = $row['date_count'];
9694
9695
			$date_array[] = $temp_array;
9696
		}
9697
9698
		return $date_array;
9699
	}
9700
	
9701
	/**
9702
	* Counts all month owners
9703
	*
9704
	* @return Array the month list
9705
	*
9706
	*/
9707
	public function countAllMonthsOwners($filters = array())
9708
	{
9709
		global $globalTimezone, $globalDBdriver;
9710
		if ($globalTimezone != '') {
9711
			date_default_timezone_set($globalTimezone);
9712
			$datetime = new DateTime();
9713
			$offset = $datetime->format('P');
9714
		} else $offset = '+00:00';
9715
		$filter_query = $this->getFilter($filters,true,true);
9716
9717
		if ($globalDBdriver == 'mysql') {
9718
			$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
9719
								FROM spotter_output".$filter_query." owner_name <> ''
9720
								GROUP BY year_name, month_name
9721
								ORDER BY date_count DESC";
9722
		} else {
9723
			$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
9724
								FROM spotter_output".$filter_query." owner_name <> ''
9725
								GROUP BY year_name, month_name
9726
								ORDER BY date_count DESC";
9727
		}
9728
		
9729
		$sth = $this->db->prepare($query);
9730
		$sth->execute(array(':offset' => $offset));
9731
      
9732
		$date_array = array();
9733
		$temp_array = array();
9734
        
9735
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9736
		{
9737
			$temp_array['month_name'] = $row['month_name'];
9738
			$temp_array['year_name'] = $row['year_name'];
9739
			$temp_array['date_count'] = $row['date_count'];
9740
9741
			$date_array[] = $temp_array;
9742
		}
9743
9744
		return $date_array;
9745
	}
9746
	
9747
	/**
9748
	* Counts all month owners
9749
	*
9750
	* @return Array the month list
9751
	*
9752
	*/
9753
	public function countAllMonthsOwnersByAirlines($filters = array())
9754
	{
9755
		global $globalTimezone, $globalDBdriver;
9756
		$filter_query = $this->getFilter($filters,true,true);
9757
		if ($globalTimezone != '') {
9758
			date_default_timezone_set($globalTimezone);
9759
			$datetime = new DateTime();
9760
			$offset = $datetime->format('P');
9761
		} else $offset = '+00:00';
9762
9763
		if ($globalDBdriver == 'mysql') {
9764
			$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
9765
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
9766
								GROUP BY spotter_output.airline_icao, year_name, month_name
9767
								ORDER BY date_count DESC";
9768
		} else {
9769
			$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
9770
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
9771
								GROUP BY spotter_output.airline_icao, year_name, month_name
9772
								ORDER BY date_count DESC";
9773
		}
9774
		
9775
		$sth = $this->db->prepare($query);
9776
		$sth->execute(array(':offset' => $offset));
9777
      
9778
		$date_array = array();
9779
		$temp_array = array();
9780
        
9781
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9782
		{
9783
			$temp_array['month_name'] = $row['month_name'];
9784
			$temp_array['year_name'] = $row['year_name'];
9785
			$temp_array['date_count'] = $row['date_count'];
9786
			$temp_array['airline_icao'] = $row['airline_icao'];
9787
9788
			$date_array[] = $temp_array;
9789
		}
9790
9791
		return $date_array;
9792
	}
9793
9794
	/**
9795
	* Counts all month pilot
9796
	*
9797
	* @return Array the month list
9798
	*
9799
	*/
9800
	public function countAllMonthsPilots($filters = array())
9801
	{
9802
		global $globalTimezone, $globalDBdriver;
9803
		if ($globalTimezone != '') {
9804
			date_default_timezone_set($globalTimezone);
9805
			$datetime = new DateTime();
9806
			$offset = $datetime->format('P');
9807
		} else $offset = '+00:00';
9808
		$filter_query = $this->getFilter($filters,true,true);
9809
9810
		if ($globalDBdriver == 'mysql') {
9811
			$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
9812
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
9813
								GROUP BY year_name, month_name
9814
								ORDER BY date_count DESC";
9815
		} else {
9816
			$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
9817
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
9818
								GROUP BY year_name, month_name
9819
								ORDER BY date_count DESC";
9820
		}
9821
		
9822
		$sth = $this->db->prepare($query);
9823
		$sth->execute(array(':offset' => $offset));
9824
      
9825
		$date_array = array();
9826
		$temp_array = array();
9827
        
9828
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9829
		{
9830
			$temp_array['month_name'] = $row['month_name'];
9831
			$temp_array['year_name'] = $row['year_name'];
9832
			$temp_array['date_count'] = $row['date_count'];
9833
9834
			$date_array[] = $temp_array;
9835
		}
9836
9837
		return $date_array;
9838
	}
9839
	
9840
	/**
9841
	* Counts all month pilot
9842
	*
9843
	* @return Array the month list
9844
	*
9845
	*/
9846
	public function countAllMonthsPilotsByAirlines($filters = array())
9847
	{
9848
		global $globalTimezone, $globalDBdriver;
9849
		$filter_query = $this->getFilter($filters,true,true);
9850
		if ($globalTimezone != '') {
9851
			date_default_timezone_set($globalTimezone);
9852
			$datetime = new DateTime();
9853
			$offset = $datetime->format('P');
9854
		} else $offset = '+00:00';
9855
9856
		if ($globalDBdriver == 'mysql') {
9857
			$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
9858
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
9859
								GROUP BY spotter_output.airline_icao,year_name, month_name
9860
								ORDER BY date_count DESC";
9861
		} else {
9862
			$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
9863
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
9864
								GROUP BY spotter_output.airline_icao, year_name, month_name
9865
								ORDER BY date_count DESC";
9866
		}
9867
		
9868
		$sth = $this->db->prepare($query);
9869
		$sth->execute(array(':offset' => $offset));
9870
      
9871
		$date_array = array();
9872
		$temp_array = array();
9873
        
9874
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9875
		{
9876
			$temp_array['month_name'] = $row['month_name'];
9877
			$temp_array['year_name'] = $row['year_name'];
9878
			$temp_array['date_count'] = $row['date_count'];
9879
			$temp_array['airline_icao'] = $row['airline_icao'];
9880
9881
			$date_array[] = $temp_array;
9882
		}
9883
9884
		return $date_array;
9885
	}
9886
9887
	/**
9888
	* Counts all month airline
9889
	*
9890
	* @return Array the month list
9891
	*
9892
	*/
9893
	public function countAllMonthsAirlines($filters = array())
9894
	{
9895
		global $globalTimezone, $globalDBdriver;
9896
		$filter_query = $this->getFilter($filters,true,true);
9897
		if ($globalTimezone != '') {
9898
			date_default_timezone_set($globalTimezone);
9899
			$datetime = new DateTime();
9900
			$offset = $datetime->format('P');
9901
		} else $offset = '+00:00';
9902
9903
		if ($globalDBdriver == 'mysql') {
9904
			$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
9905
								FROM spotter_output".$filter_query." airline_icao <> '' 
9906
								GROUP BY year_name, month_name
9907
								ORDER BY date_count DESC";
9908
		} else {
9909
			$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
9910
								FROM spotter_output".$filter_query." airline_icao <> '' 
9911
								GROUP BY year_name, month_name
9912
								ORDER BY date_count DESC";
9913
		}
9914
		
9915
		$sth = $this->db->prepare($query);
9916
		$sth->execute(array(':offset' => $offset));
9917
      
9918
		$date_array = array();
9919
		$temp_array = array();
9920
        
9921
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9922
		{
9923
			$temp_array['month_name'] = $row['month_name'];
9924
			$temp_array['year_name'] = $row['year_name'];
9925
			$temp_array['date_count'] = $row['date_count'];
9926
9927
			$date_array[] = $temp_array;
9928
		}
9929
9930
		return $date_array;
9931
	}
9932
	
9933
	/**
9934
	* Counts all month aircraft
9935
	*
9936
	* @return Array the month list
9937
	*
9938
	*/
9939
	public function countAllMonthsAircrafts($filters = array())
9940
	{
9941
		global $globalTimezone, $globalDBdriver;
9942
		if ($globalTimezone != '') {
9943
			date_default_timezone_set($globalTimezone);
9944
			$datetime = new DateTime();
9945
			$offset = $datetime->format('P');
9946
		} else $offset = '+00:00';
9947
		$filter_query = $this->getFilter($filters,true,true);
9948
9949
		if ($globalDBdriver == 'mysql') {
9950
			$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
9951
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
9952
								GROUP BY year_name, month_name
9953
								ORDER BY date_count DESC";
9954
		} else {
9955
			$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
9956
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
9957
								GROUP BY year_name, month_name
9958
								ORDER BY date_count DESC";
9959
		}
9960
		
9961
		$sth = $this->db->prepare($query);
9962
		$sth->execute(array(':offset' => $offset));
9963
      
9964
		$date_array = array();
9965
		$temp_array = array();
9966
        
9967
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9968
		{
9969
			$temp_array['month_name'] = $row['month_name'];
9970
			$temp_array['year_name'] = $row['year_name'];
9971
			$temp_array['date_count'] = $row['date_count'];
9972
9973
			$date_array[] = $temp_array;
9974
		}
9975
9976
		return $date_array;
9977
	}
9978
	
9979
9980
	/**
9981
	* Counts all month aircraft
9982
	*
9983
	* @return Array the month list
9984
	*
9985
	*/
9986
	public function countAllMonthsAircraftsByAirlines($filters = array())
9987
	{
9988
		global $globalTimezone, $globalDBdriver;
9989
		$filter_query = $this->getFilter($filters,true,true);
9990
		if ($globalTimezone != '') {
9991
			date_default_timezone_set($globalTimezone);
9992
			$datetime = new DateTime();
9993
			$offset = $datetime->format('P');
9994
		} else $offset = '+00:00';
9995
9996
		if ($globalDBdriver == 'mysql') {
9997
			$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
9998
								FROM spotter_output".$filter_query." aircraft_icao <> ''  AND spotter_output.airline_icao <> '' 
9999
								GROUP BY spotter_output.airline_icao, year_name, month_name
10000
								ORDER BY date_count DESC";
10001
		} else {
10002
			$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
10003
								FROM spotter_output".$filter_query." aircraft_icao <> '' AND spotter_output.airline_icao <> '' 
10004
								GROUP BY spotter_output.airline_icao, year_name, month_name
10005
								ORDER BY date_count DESC";
10006
		}
10007
		
10008
		$sth = $this->db->prepare($query);
10009
		$sth->execute(array(':offset' => $offset));
10010
      
10011
		$date_array = array();
10012
		$temp_array = array();
10013
        
10014
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10015
		{
10016
			$temp_array['month_name'] = $row['month_name'];
10017
			$temp_array['year_name'] = $row['year_name'];
10018
			$temp_array['date_count'] = $row['date_count'];
10019
			$temp_array['airline_icao'] = $row['airline_icao'];
10020
10021
			$date_array[] = $temp_array;
10022
		}
10023
10024
		return $date_array;
10025
	}
10026
10027
	/**
10028
	* Counts all month real arrival
10029
	*
10030
	* @return Array the month list
10031
	*
10032
	*/
10033
	public function countAllMonthsRealArrivals($filters = array())
10034
	{
10035
		global $globalTimezone, $globalDBdriver;
10036
		if ($globalTimezone != '') {
10037
			date_default_timezone_set($globalTimezone);
10038
			$datetime = new DateTime();
10039
			$offset = $datetime->format('P');
10040
		} else $offset = '+00:00';
10041
		$filter_query = $this->getFilter($filters,true,true);
10042
10043
		if ($globalDBdriver == 'mysql') {
10044
			$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
10045
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
10046
								GROUP BY year_name, month_name
10047
								ORDER BY date_count DESC";
10048
		} else {
10049
			$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
10050
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
10051
								GROUP BY year_name, month_name
10052
								ORDER BY date_count DESC";
10053
		}
10054
		
10055
		$sth = $this->db->prepare($query);
10056
		$sth->execute(array(':offset' => $offset));
10057
      
10058
		$date_array = array();
10059
		$temp_array = array();
10060
        
10061
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10062
		{
10063
			$temp_array['month_name'] = $row['month_name'];
10064
			$temp_array['year_name'] = $row['year_name'];
10065
			$temp_array['date_count'] = $row['date_count'];
10066
10067
			$date_array[] = $temp_array;
10068
		}
10069
10070
		return $date_array;
10071
	}
10072
	
10073
10074
	/**
10075
	* Counts all month real arrival
10076
	*
10077
	* @return Array the month list
10078
	*
10079
	*/
10080
	public function countAllMonthsRealArrivalsByAirlines($filters = array())
10081
	{
10082
		global $globalTimezone, $globalDBdriver;
10083
		$filter_query = $this->getFilter($filters,true,true);
10084
		if ($globalTimezone != '') {
10085
			date_default_timezone_set($globalTimezone);
10086
			$datetime = new DateTime();
10087
			$offset = $datetime->format('P');
10088
		} else $offset = '+00:00';
10089
10090
		if ($globalDBdriver == 'mysql') {
10091
			$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
10092
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
10093
								GROUP BY spotter_output.airline_icao, year_name, month_name
10094
								ORDER BY date_count DESC";
10095
		} else {
10096
			$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
10097
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
10098
								GROUP BY spotter_output.airline_icao, year_name, month_name
10099
								ORDER BY date_count DESC";
10100
		}
10101
		
10102
		$sth = $this->db->prepare($query);
10103
		$sth->execute(array(':offset' => $offset));
10104
      
10105
		$date_array = array();
10106
		$temp_array = array();
10107
        
10108
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10109
		{
10110
			$temp_array['month_name'] = $row['month_name'];
10111
			$temp_array['year_name'] = $row['year_name'];
10112
			$temp_array['date_count'] = $row['date_count'];
10113
			$temp_array['airline_icao'] = $row['airline_icao'];
10114
10115
			$date_array[] = $temp_array;
10116
		}
10117
10118
		return $date_array;
10119
	}
10120
	
10121
10122
	/**
10123
	* Counts all dates during the last year
10124
	*
10125
	* @return Array the date list
10126
	*
10127
	*/
10128
	public function countAllMonthsLastYear($filters)
10129
	{
10130
		global $globalTimezone, $globalDBdriver;
10131
		if ($globalTimezone != '') {
10132
			date_default_timezone_set($globalTimezone);
10133
			$datetime = new DateTime();
10134
			$offset = $datetime->format('P');
10135
		} else $offset = '+00:00';
10136
		$filter_query = $this->getFilter($filters,true,true);
10137
		if ($globalDBdriver == 'mysql') {
10138
			$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
10139
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 YEAR)";
10140
			$query .= " GROUP BY year_name, month_name
10141
								ORDER BY year_name, month_name ASC";
10142
			$query_data = array(':offset' => $offset);
10143
		} else {
10144
			$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
10145
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 YEARS'";
10146
			$query .= " GROUP BY year_name, month_name
10147
								ORDER BY year_name, month_name ASC";
10148
			$query_data = array(':offset' => $offset);
10149
    		}
10150
		
10151
		$sth = $this->db->prepare($query);
10152
		$sth->execute($query_data);
10153
      
10154
		$date_array = array();
10155
		$temp_array = array();
10156
        
10157
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10158
		{
10159
			$temp_array['year_name'] = $row['year_name'];
10160
			$temp_array['month_name'] = $row['month_name'];
10161
			$temp_array['date_count'] = $row['date_count'];
10162
          
10163
			$date_array[] = $temp_array;
10164
		}
10165
10166
		return $date_array;
10167
	}
10168
	
10169
	
10170
	
10171
	/**
10172
	* Counts all hours
10173
	*
10174
	* @return Array the hour list
10175
	*
10176
	*/
10177
	public function countAllHours($orderby,$filters = array())
10178
	{
10179
		global $globalTimezone, $globalDBdriver;
10180
		if ($globalTimezone != '') {
10181
			date_default_timezone_set($globalTimezone);
10182
			$datetime = new DateTime();
10183
			$offset = $datetime->format('P');
10184
		} else $offset = '+00:00';
10185
10186
		$orderby_sql = '';
10187
		if ($orderby == "hour")
10188
		{
10189
			$orderby_sql = "ORDER BY hour_name ASC";
10190
		}
10191
		if ($orderby == "count")
10192
		{
10193
			$orderby_sql = "ORDER BY hour_count DESC";
10194
		}
10195
		
10196
		if ($globalDBdriver == 'mysql') {
10197
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10198
								FROM spotter_output";
10199
			$query .= $this->getFilter($filters);
10200
			$query .= " GROUP BY hour_name 
10201
								".$orderby_sql;
10202
10203
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
10204
								FROM spotter_output 
10205
								GROUP BY hour_name 
10206
								".$orderby_sql."
10207
								LIMIT 10 OFFSET 00";
10208
  */    
10209
		$query_data = array(':offset' => $offset);
10210
		} else {
10211
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10212
								FROM spotter_output";
10213
			$query .= $this->getFilter($filters);
10214
			$query .= " GROUP BY hour_name 
10215
								".$orderby_sql;
10216
			$query_data = array(':offset' => $offset);
10217
		}
10218
		
10219
		$sth = $this->db->prepare($query);
10220
		$sth->execute($query_data);
10221
      
10222
		$hour_array = array();
10223
		$temp_array = array();
10224
        
10225
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10226
		{
10227
			$temp_array['hour_name'] = $row['hour_name'];
10228
			$temp_array['hour_count'] = $row['hour_count'];
10229
          
10230
			$hour_array[] = $temp_array;
10231
		}
10232
10233
		return $hour_array;
10234
	}
10235
	
10236
	/**
10237
	* Counts all hours
10238
	*
10239
	* @return Array the hour list
10240
	*
10241
	*/
10242
	public function countAllHoursByAirlines($orderby, $filters = array())
10243
	{
10244
		global $globalTimezone, $globalDBdriver;
10245
		$filter_query = $this->getFilter($filters,true,true);
10246
		if ($globalTimezone != '') {
10247
			date_default_timezone_set($globalTimezone);
10248
			$datetime = new DateTime();
10249
			$offset = $datetime->format('P');
10250
		} else $offset = '+00:00';
10251
10252
		$orderby_sql = '';
10253
		if ($orderby == "hour")
10254
		{
10255
			$orderby_sql = "ORDER BY hour_name ASC";
10256
		}
10257
		if ($orderby == "count")
10258
		{
10259
			$orderby_sql = "ORDER BY hour_count DESC";
10260
		}
10261
		
10262
		if ($globalDBdriver == 'mysql') {
10263
			$query  = "SELECT spotter_output.airline_icao, HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10264
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
10265
								GROUP BY spotter_output.airline_icao, hour_name 
10266
								".$orderby_sql;
10267
10268
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
10269
								FROM spotter_output 
10270
								GROUP BY hour_name 
10271
								".$orderby_sql."
10272
								LIMIT 10 OFFSET 00";
10273
  */    
10274
		$query_data = array(':offset' => $offset);
10275
		} else {
10276
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10277
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
10278
								GROUP BY spotter_output.airline_icao, hour_name 
10279
								".$orderby_sql;
10280
			$query_data = array(':offset' => $offset);
10281
		}
10282
		
10283
		$sth = $this->db->prepare($query);
10284
		$sth->execute($query_data);
10285
      
10286
		$hour_array = array();
10287
		$temp_array = array();
10288
        
10289
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10290
		{
10291
			$temp_array['hour_name'] = $row['hour_name'];
10292
			$temp_array['hour_count'] = $row['hour_count'];
10293
			$temp_array['airline_icao'] = $row['airline_icao'];
10294
          
10295
			$hour_array[] = $temp_array;
10296
		}
10297
10298
		return $hour_array;
10299
	}
10300
10301
10302
10303
	/**
10304
	* Counts all hours by airline
10305
	*
10306
	* @return Array the hour list
10307
	*
10308
	*/
10309
	public function countAllHoursByAirline($airline_icao, $filters = array())
10310
	{
10311
		global $globalTimezone, $globalDBdriver;
10312
		$filter_query = $this->getFilter($filters,true,true);
10313
		if ($globalTimezone != '') {
10314
			date_default_timezone_set($globalTimezone);
10315
			$datetime = new DateTime();
10316
			$offset = $datetime->format('P');
10317
		} else $offset = '+00:00';
10318
10319
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
10320
10321
		if ($globalDBdriver == 'mysql') {
10322
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10323
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
10324
								GROUP BY hour_name 
10325
								ORDER BY hour_name ASC";
10326
		} else {
10327
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10328
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
10329
								GROUP BY hour_name 
10330
								ORDER BY hour_name ASC";
10331
		}
10332
		
10333
		$sth = $this->db->prepare($query);
10334
		$sth->execute(array(':airline_icao' => $airline_icao,':offset' => $offset));
10335
      
10336
		$hour_array = array();
10337
		$temp_array = array();
10338
        
10339
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10340
		{
10341
			$temp_array['hour_name'] = $row['hour_name'];
10342
			$temp_array['hour_count'] = $row['hour_count'];
10343
          
10344
			$hour_array[] = $temp_array;
10345
		}
10346
10347
		return $hour_array;
10348
	}
10349
	
10350
	
10351
	
10352
	
10353
	/**
10354
	* Counts all hours by aircraft
10355
	*
10356
	* @return Array the hour list
10357
	*
10358
	*/
10359
	public function countAllHoursByAircraft($aircraft_icao, $filters = array())
10360
	{
10361
		global $globalTimezone, $globalDBdriver;
10362
		$filter_query = $this->getFilter($filters,true,true);
10363
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
10364
		if ($globalTimezone != '') {
10365
			date_default_timezone_set($globalTimezone);
10366
			$datetime = new DateTime();
10367
			$offset = $datetime->format('P');
10368
		} else $offset = '+00:00';
10369
10370
		if ($globalDBdriver == 'mysql') {
10371
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10372
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
10373
								GROUP BY hour_name 
10374
								ORDER BY hour_name ASC";
10375
		} else {
10376
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10377
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
10378
								GROUP BY hour_name 
10379
								ORDER BY hour_name ASC";
10380
		}
10381
		
10382
		$sth = $this->db->prepare($query);
10383
		$sth->execute(array(':aircraft_icao' => $aircraft_icao,':offset' => $offset));
10384
      
10385
		$hour_array = array();
10386
		$temp_array = array();
10387
        
10388
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10389
		{
10390
			$temp_array['hour_name'] = $row['hour_name'];
10391
			$temp_array['hour_count'] = $row['hour_count'];
10392
          
10393
			$hour_array[] = $temp_array;
10394
		}
10395
10396
		return $hour_array;
10397
	}
10398
	
10399
	
10400
	/**
10401
	* Counts all hours by aircraft registration
10402
	*
10403
	* @return Array the hour list
10404
	*
10405
	*/
10406
	public function countAllHoursByRegistration($registration, $filters = array())
10407
	{
10408
		global $globalTimezone, $globalDBdriver;
10409
		$filter_query = $this->getFilter($filters,true,true);
10410
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
10411
		if ($globalTimezone != '') {
10412
			date_default_timezone_set($globalTimezone);
10413
			$datetime = new DateTime();
10414
			$offset = $datetime->format('P');
10415
		} else $offset = '+00:00';
10416
10417
		if ($globalDBdriver == 'mysql') {
10418
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10419
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
10420
								GROUP BY hour_name 
10421
								ORDER BY hour_name ASC";
10422
		} else {
10423
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10424
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
10425
								GROUP BY hour_name 
10426
								ORDER BY hour_name ASC";
10427
		}
10428
		
10429
		$sth = $this->db->prepare($query);
10430
		$sth->execute(array(':registration' => $registration,':offset' => $offset));
10431
      
10432
		$hour_array = array();
10433
		$temp_array = array();
10434
        
10435
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10436
		{
10437
			$temp_array['hour_name'] = $row['hour_name'];
10438
			$temp_array['hour_count'] = $row['hour_count'];
10439
          
10440
			$hour_array[] = $temp_array;
10441
		}
10442
10443
		return $hour_array;
10444
	}
10445
	
10446
	
10447
	/**
10448
	* Counts all hours by airport
10449
	*
10450
	* @return Array the hour list
10451
	*
10452
	*/
10453
	public function countAllHoursByAirport($airport_icao, $filters = array())
10454
	{
10455
		global $globalTimezone, $globalDBdriver;
10456
		$filter_query = $this->getFilter($filters,true,true);
10457
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
10458
		if ($globalTimezone != '') {
10459
			date_default_timezone_set($globalTimezone);
10460
			$datetime = new DateTime();
10461
			$offset = $datetime->format('P');
10462
		} else $offset = '+00:00';
10463
10464
		if ($globalDBdriver == 'mysql') {
10465
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10466
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
10467
								GROUP BY hour_name 
10468
								ORDER BY hour_name ASC";
10469
		} else {
10470
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10471
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
10472
								GROUP BY hour_name 
10473
								ORDER BY hour_name ASC";
10474
		}
10475
		
10476
		$sth = $this->db->prepare($query);
10477
		$sth->execute(array(':airport_icao' => $airport_icao,':offset' => $offset));
10478
      
10479
		$hour_array = array();
10480
		$temp_array = array();
10481
        
10482
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10483
		{
10484
			$temp_array['hour_name'] = $row['hour_name'];
10485
			$temp_array['hour_count'] = $row['hour_count'];
10486
          
10487
			$hour_array[] = $temp_array;
10488
		}
10489
10490
		return $hour_array;
10491
	}
10492
	
10493
	
10494
	
10495
	/**
10496
	* Counts all hours by manufacturer
10497
	*
10498
	* @return Array the hour list
10499
	*
10500
	*/
10501
	public function countAllHoursByManufacturer($aircraft_manufacturer,$filters =array())
10502
	{
10503
		global $globalTimezone, $globalDBdriver;
10504
		$filter_query = $this->getFilter($filters,true,true);
10505
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
10506
		if ($globalTimezone != '') {
10507
			date_default_timezone_set($globalTimezone);
10508
			$datetime = new DateTime();
10509
			$offset = $datetime->format('P');
10510
		} else $offset = '+00:00';
10511
10512
		if ($globalDBdriver == 'mysql') {
10513
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10514
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
10515
								GROUP BY hour_name 
10516
								ORDER BY hour_name ASC";
10517
		} else {
10518
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10519
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
10520
								GROUP BY hour_name 
10521
								ORDER BY hour_name ASC";
10522
		}
10523
		
10524
		$sth = $this->db->prepare($query);
10525
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer,':offset' => $offset));
10526
      
10527
		$hour_array = array();
10528
		$temp_array = array();
10529
        
10530
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10531
		{
10532
			$temp_array['hour_name'] = $row['hour_name'];
10533
			$temp_array['hour_count'] = $row['hour_count'];
10534
          
10535
			$hour_array[] = $temp_array;
10536
		}
10537
10538
		return $hour_array;
10539
	}
10540
	
10541
	
10542
	
10543
	/**
10544
	* Counts all hours by date
10545
	*
10546
	* @return Array the hour list
10547
	*
10548
	*/
10549
	public function countAllHoursByDate($date, $filters = array())
10550
	{
10551
		global $globalTimezone, $globalDBdriver;
10552
		$filter_query = $this->getFilter($filters,true,true);
10553
		$date = filter_var($date,FILTER_SANITIZE_STRING);
10554
		if ($globalTimezone != '') {
10555
			date_default_timezone_set($globalTimezone);
10556
			$datetime = new DateTime($date);
10557
			$offset = $datetime->format('P');
10558
		} else $offset = '+00:00';
10559
10560
		if ($globalDBdriver == 'mysql') {
10561
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10562
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
10563
								GROUP BY hour_name 
10564
								ORDER BY hour_name ASC";
10565
		} else {
10566
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10567
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset, 'YYYY-mm-dd') = :date
10568
								GROUP BY hour_name 
10569
								ORDER BY hour_name ASC";
10570
		}
10571
		
10572
		$sth = $this->db->prepare($query);
10573
		$sth->execute(array(':date' => $date, ':offset' => $offset));
10574
      
10575
		$hour_array = array();
10576
		$temp_array = array();
10577
        
10578
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10579
		{
10580
			$temp_array['hour_name'] = $row['hour_name'];
10581
			$temp_array['hour_count'] = $row['hour_count'];
10582
          
10583
			$hour_array[] = $temp_array;
10584
		}
10585
10586
		return $hour_array;
10587
	}
10588
	
10589
	
10590
	
10591
	/**
10592
	* Counts all hours by a ident/callsign
10593
	*
10594
	* @return Array the hour list
10595
	*
10596
	*/
10597
	public function countAllHoursByIdent($ident, $filters = array())
10598
	{
10599
		global $globalTimezone, $globalDBdriver;
10600
		$filter_query = $this->getFilter($filters,true,true);
10601
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
10602
		if ($globalTimezone != '') {
10603
			date_default_timezone_set($globalTimezone);
10604
			$datetime = new DateTime();
10605
			$offset = $datetime->format('P');
10606
		} else $offset = '+00:00';
10607
10608
		if ($globalDBdriver == 'mysql') {
10609
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10610
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
10611
								GROUP BY hour_name 
10612
								ORDER BY hour_name ASC";
10613
		} else {
10614
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10615
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
10616
								GROUP BY hour_name 
10617
								ORDER BY hour_name ASC";
10618
		}
10619
      
10620
		
10621
		$sth = $this->db->prepare($query);
10622
		$sth->execute(array(':ident' => $ident,':offset' => $offset));
10623
      
10624
		$hour_array = array();
10625
		$temp_array = array();
10626
        
10627
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10628
		{
10629
			$temp_array['hour_name'] = $row['hour_name'];
10630
			$temp_array['hour_count'] = $row['hour_count'];
10631
          
10632
			$hour_array[] = $temp_array;
10633
		}
10634
10635
		return $hour_array;
10636
	}
10637
	
10638
	/**
10639
	* Counts all hours by a owner
10640
	*
10641
	* @return Array the hour list
10642
	*
10643
	*/
10644
	public function countAllHoursByOwner($owner, $filters = array())
10645
	{
10646
		global $globalTimezone, $globalDBdriver;
10647
		$filter_query = $this->getFilter($filters,true,true);
10648
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
10649
		if ($globalTimezone != '') {
10650
			date_default_timezone_set($globalTimezone);
10651
			$datetime = new DateTime();
10652
			$offset = $datetime->format('P');
10653
		} else $offset = '+00:00';
10654
10655
		if ($globalDBdriver == 'mysql') {
10656
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10657
								FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
10658
								GROUP BY hour_name 
10659
								ORDER BY hour_name ASC";
10660
		} else {
10661
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10662
								FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
10663
								GROUP BY hour_name 
10664
								ORDER BY hour_name ASC";
10665
		}
10666
      
10667
		
10668
		$sth = $this->db->prepare($query);
10669
		$sth->execute(array(':owner' => $owner,':offset' => $offset));
10670
      
10671
		$hour_array = array();
10672
		$temp_array = array();
10673
        
10674
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10675
		{
10676
			$temp_array['hour_name'] = $row['hour_name'];
10677
			$temp_array['hour_count'] = $row['hour_count'];
10678
          
10679
			$hour_array[] = $temp_array;
10680
		}
10681
10682
		return $hour_array;
10683
	}
10684
	
10685
	/**
10686
	* Counts all hours by a pilot
10687
	*
10688
	* @return Array the hour list
10689
	*
10690
	*/
10691
	public function countAllHoursByPilot($pilot, $filters = array())
10692
	{
10693
		global $globalTimezone, $globalDBdriver;
10694
		$filter_query = $this->getFilter($filters,true,true);
10695
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
10696
		if ($globalTimezone != '') {
10697
			date_default_timezone_set($globalTimezone);
10698
			$datetime = new DateTime();
10699
			$offset = $datetime->format('P');
10700
		} else $offset = '+00:00';
10701
10702
		if ($globalDBdriver == 'mysql') {
10703
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10704
								FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
10705
								GROUP BY hour_name 
10706
								ORDER BY hour_name ASC";
10707
		} else {
10708
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10709
								FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
10710
								GROUP BY hour_name 
10711
								ORDER BY hour_name ASC";
10712
		}
10713
      
10714
		
10715
		$sth = $this->db->prepare($query);
10716
		$sth->execute(array(':pilot' => $pilot,':offset' => $offset));
10717
      
10718
		$hour_array = array();
10719
		$temp_array = array();
10720
        
10721
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10722
		{
10723
			$temp_array['hour_name'] = $row['hour_name'];
10724
			$temp_array['hour_count'] = $row['hour_count'];
10725
          
10726
			$hour_array[] = $temp_array;
10727
		}
10728
10729
		return $hour_array;
10730
	}
10731
	
10732
	
10733
	
10734
	/**
10735
	* Counts all hours by route
10736
	*
10737
	* @return Array the hour list
10738
	*
10739
	*/
10740
	public function countAllHoursByRoute($departure_airport_icao, $arrival_airport_icao, $filters =array())
10741
	{
10742
		global $globalTimezone, $globalDBdriver;
10743
		$filter_query = $this->getFilter($filters,true,true);
10744
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
10745
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
10746
		if ($globalTimezone != '') {
10747
			date_default_timezone_set($globalTimezone);
10748
			$datetime = new DateTime();
10749
			$offset = $datetime->format('P');
10750
		} else $offset = '+00:00';
10751
10752
		if ($globalDBdriver == 'mysql') {
10753
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10754
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
10755
								GROUP BY hour_name 
10756
								ORDER BY hour_name ASC";
10757
		} else {
10758
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10759
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
10760
								GROUP BY hour_name 
10761
								ORDER BY hour_name ASC";
10762
		}
10763
		
10764
		$sth = $this->db->prepare($query);
10765
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao,':offset' => $offset));
10766
      
10767
		$hour_array = array();
10768
		$temp_array = array();
10769
        
10770
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10771
		{
10772
			$temp_array['hour_name'] = $row['hour_name'];
10773
			$temp_array['hour_count'] = $row['hour_count'];
10774
          
10775
			$hour_array[] = $temp_array;
10776
		}
10777
10778
		return $hour_array;
10779
	}
10780
	
10781
	
10782
	/**
10783
	* Counts all hours by country
10784
	*
10785
	* @return Array the hour list
10786
	*
10787
	*/
10788
	public function countAllHoursByCountry($country, $filters = array())
10789
	{
10790
		global $globalTimezone, $globalDBdriver;
10791
		$filter_query = $this->getFilter($filters,true,true);
10792
		$country = filter_var($country,FILTER_SANITIZE_STRING);
10793
		if ($globalTimezone != '') {
10794
			date_default_timezone_set($globalTimezone);
10795
			$datetime = new DateTime();
10796
			$offset = $datetime->format('P');
10797
		} else $offset = '+00:00';
10798
10799
		if ($globalDBdriver == 'mysql') {
10800
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10801
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
10802
								GROUP BY hour_name 
10803
								ORDER BY hour_name ASC";
10804
		} else {
10805
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10806
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
10807
								GROUP BY hour_name 
10808
								ORDER BY hour_name ASC";
10809
		}
10810
		
10811
		$sth = $this->db->prepare($query);
10812
		$sth->execute(array(':country' => $country,':offset' => $offset));
10813
      
10814
		$hour_array = array();
10815
		$temp_array = array();
10816
        
10817
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10818
		{
10819
			$temp_array['hour_name'] = $row['hour_name'];
10820
			$temp_array['hour_count'] = $row['hour_count'];
10821
          
10822
			$hour_array[] = $temp_array;
10823
		}
10824
10825
		return $hour_array;
10826
	}
10827
10828
10829
10830
10831
	/**
10832
	* Counts all aircraft that have flown over
10833
	*
10834
	* @return Integer the number of aircrafts
10835
	*
10836
	*/
10837
	public function countOverallAircrafts($filters = array(),$year = '',$month = '')
10838
	{
10839
		global $globalDBdriver;
10840
		$filter_query = $this->getFilter($filters,true,true);
10841
		$query  = "SELECT COUNT(DISTINCT spotter_output.aircraft_icao) AS aircraft_count  
10842
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''";
10843
		$query_values = array();
10844
		if ($year != '') {
10845
			if ($globalDBdriver == 'mysql') {
10846
				$query .= " AND YEAR(spotter_output.date) = :year";
10847
				$query_values = array_merge($query_values,array(':year' => $year));
10848
			} else {
10849
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10850
				$query_values = array_merge($query_values,array(':year' => $year));
10851
			}
10852
		}
10853
		if ($month != '') {
10854
			if ($globalDBdriver == 'mysql') {
10855
				$query .= " AND MONTH(spotter_output.date) = :month";
10856
				$query_values = array_merge($query_values,array(':month' => $month));
10857
			} else {
10858
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10859
				$query_values = array_merge($query_values,array(':month' => $month));
10860
			}
10861
		}
10862
10863
		$sth = $this->db->prepare($query);
10864
		$sth->execute($query_values);
10865
		return $sth->fetchColumn();
10866
	}
10867
10868
	/**
10869
	* Counts all flight that really arrival
10870
	*
10871
	* @return Integer the number of aircrafts
10872
	*
10873
	*/
10874
	public function countOverallArrival($filters = array(),$year = '',$month = '')
10875
	{
10876
		global $globalDBdriver;
10877
		$filter_query = $this->getFilter($filters,true,true);
10878
		$query  = "SELECT COUNT(spotter_output.real_arrival_airport_icao) AS arrival_count  
10879
                    FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> ''";
10880
		$query_values = array();
10881
		if ($year != '') {
10882
			if ($globalDBdriver == 'mysql') {
10883
				$query .= " AND YEAR(spotter_output.date) = :year";
10884
				$query_values = array_merge($query_values,array(':year' => $year));
10885
			} else {
10886
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10887
				$query_values = array_merge($query_values,array(':year' => $year));
10888
			}
10889
		}
10890
		if ($month != '') {
10891
			if ($globalDBdriver == 'mysql') {
10892
				$query .= " AND MONTH(spotter_output.date) = :month";
10893
				$query_values = array_merge($query_values,array(':month' => $month));
10894
			} else {
10895
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10896
				$query_values = array_merge($query_values,array(':month' => $month));
10897
			}
10898
		}
10899
		
10900
		$sth = $this->db->prepare($query);
10901
		$sth->execute($query_values);
10902
		return $sth->fetchColumn();
10903
	}
10904
10905
	/**
10906
	* Counts all pilots that have flown over
10907
	*
10908
	* @return Integer the number of pilots
10909
	*
10910
	*/
10911
	public function countOverallPilots($filters = array(),$year = '',$month = '')
10912
	{
10913
		global $globalDBdriver;
10914
		$filter_query = $this->getFilter($filters,true,true);
10915
		$query  = "SELECT COUNT(DISTINCT spotter_output.pilot_id) AS pilot_count  
10916
                    FROM spotter_output".$filter_query." spotter_output.pilot_id <> ''";
10917
		$query_values = array();
10918
		if ($year != '') {
10919
			if ($globalDBdriver == 'mysql') {
10920
				$query .= " AND YEAR(spotter_output.date) = :year";
10921
				$query_values = array_merge($query_values,array(':year' => $year));
10922
			} else {
10923
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10924
				$query_values = array_merge($query_values,array(':year' => $year));
10925
			}
10926
		}
10927
		if ($month != '') {
10928
			if ($globalDBdriver == 'mysql') {
10929
				$query .= " AND MONTH(spotter_output.date) = :month";
10930
				$query_values = array_merge($query_values,array(':month' => $month));
10931
			} else {
10932
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10933
				$query_values = array_merge($query_values,array(':month' => $month));
10934
			}
10935
		}
10936
		$sth = $this->db->prepare($query);
10937
		$sth->execute($query_values);
10938
		return $sth->fetchColumn();
10939
	}
10940
10941
	/**
10942
	* Counts all owners that have flown over
10943
	*
10944
	* @return Integer the number of owners
10945
	*
10946
	*/
10947
	public function countOverallOwners($filters = array(),$year = '',$month = '')
10948
	{
10949
		global $globalDBdriver;
10950
		$filter_query = $this->getFilter($filters,true,true);
10951
		$query  = "SELECT COUNT(DISTINCT spotter_output.owner_name) AS owner_count  
10952
                    FROM spotter_output".$filter_query." spotter_output.owner_name <> ''";
10953
		$query_values = array();
10954
		if ($year != '') {
10955
			if ($globalDBdriver == 'mysql') {
10956
				$query .= " AND YEAR(spotter_output.date) = :year";
10957
				$query_values = array_merge($query_values,array(':year' => $year));
10958
			} else {
10959
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10960
				$query_values = array_merge($query_values,array(':year' => $year));
10961
			}
10962
		}
10963
		if ($month != '') {
10964
			if ($globalDBdriver == 'mysql') {
10965
				$query .= " AND MONTH(spotter_output.date) = :month";
10966
				$query_values = array_merge($query_values,array(':month' => $month));
10967
			} else {
10968
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10969
				$query_values = array_merge($query_values,array(':month' => $month));
10970
			}
10971
		}
10972
		$sth = $this->db->prepare($query);
10973
		$sth->execute($query_values);
10974
		return $sth->fetchColumn();
10975
	}
10976
	
10977
	
10978
	/**
10979
	* Counts all flights that have flown over
10980
	*
10981
	* @return Integer the number of flights
10982
	*
10983
	*/
10984
	public function countOverallFlights($filters = array(),$year = '',$month = '')
10985
	{
10986
		global $globalDBdriver;
10987
		$queryi  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count FROM spotter_output";
10988
		$query_values = array();
10989
		$query = '';
10990
		if ($year != '') {
10991
			if ($globalDBdriver == 'mysql') {
10992
				$query .= " AND YEAR(spotter_output.date) = :year";
10993
				$query_values = array_merge($query_values,array(':year' => $year));
10994
			} else {
10995
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10996
				$query_values = array_merge($query_values,array(':year' => $year));
10997
			}
10998
		}
10999
		if ($month != '') {
11000
			if ($globalDBdriver == 'mysql') {
11001
				$query .= " AND MONTH(spotter_output.date) = :month";
11002
				$query_values = array_merge($query_values,array(':month' => $month));
11003
			} else {
11004
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
11005
				$query_values = array_merge($query_values,array(':month' => $month));
11006
			}
11007
		}
11008
		if (empty($query_values)) $queryi .= $this->getFilter($filters);
11009
		else $queryi .= $this->getFilter($filters,true,true).substr($query,4);
11010
		
11011
		$sth = $this->db->prepare($queryi);
11012
		$sth->execute($query_values);
11013
		return $sth->fetchColumn();
11014
	}
11015
	
11016
	/**
11017
	* Counts all military flights that have flown over
11018
	*
11019
	* @return Integer the number of flights
11020
	*
11021
	*/
11022
	public function countOverallMilitaryFlights($filters = array(),$year = '',$month = '')
11023
	{
11024
		global $globalDBdriver;
11025
		$filter_query = $this->getFilter($filters,true,true);
11026
		$query  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count  
11027
                    FROM airlines,spotter_output".$filter_query." spotter_output.airline_icao = airlines.icao AND airlines.type = 'military'";
11028
		$query_values = array();
11029
		if ($year != '') {
11030
			if ($globalDBdriver == 'mysql') {
11031
				$query .= " AND YEAR(spotter_output.date) = :year";
11032
				$query_values = array_merge($query_values,array(':year' => $year));
11033
			} else {
11034
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
11035
				$query_values = array_merge($query_values,array(':year' => $year));
11036
			}
11037
		}
11038
		if ($month != '') {
11039
			if ($globalDBdriver == 'mysql') {
11040
				$query .= " AND MONTH(spotter_output.date) = :month";
11041
				$query_values = array_merge($query_values,array(':month' => $month));
11042
			} else {
11043
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
11044
				$query_values = array_merge($query_values,array(':month' => $month));
11045
			}
11046
		}
11047
      
11048
		$sth = $this->db->prepare($query);
11049
		$sth->execute($query_values);
11050
		return $sth->fetchColumn();
11051
	}
11052
	
11053
	
11054
	
11055
	/**
11056
	* Counts all airlines that have flown over
11057
	*
11058
	* @return Integer the number of airlines
11059
	*
11060
	*/
11061
	public function countOverallAirlines($filters = array(),$year = '',$month = '')
11062
	{
11063
		global $globalDBdriver;
11064
		$queryi  = "SELECT COUNT(DISTINCT spotter_output.airline_name) AS airline_count 
11065
							FROM spotter_output";
11066
      
11067
		$query_values = array();
11068
		$query = '';
11069
		if ($year != '') {
11070
			if ($globalDBdriver == 'mysql') {
11071
				$query .= " AND YEAR(spotter_output.date) = :year";
11072
				$query_values = array_merge($query_values,array(':year' => $year));
11073
			} else {
11074
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
11075
				$query_values = array_merge($query_values,array(':year' => $year));
11076
			}
11077
		}
11078
		if ($month != '') {
11079
			if ($globalDBdriver == 'mysql') {
11080
				$query .= " AND MONTH(spotter_output.date) = :month";
11081
				$query_values = array_merge($query_values,array(':month' => $month));
11082
			} else {
11083
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
11084
				$query_values = array_merge($query_values,array(':month' => $month));
11085
			}
11086
		}
11087
                if ($query == '') $queryi .= $this->getFilter($filters);
11088
                else $queryi .= $this->getFilter($filters,true,true).substr($query,4);
11089
11090
11091
		$sth = $this->db->prepare($queryi);
11092
		$sth->execute($query_values);
11093
		return $sth->fetchColumn();
11094
	}
11095
11096
  
11097
	/**
11098
	* Counts all hours of today
11099
	*
11100
	* @return Array the hour list
11101
	*
11102
	*/
11103
	public function countAllHoursFromToday($filters = array())
11104
	{
11105
		global $globalTimezone, $globalDBdriver;
11106
		$filter_query = $this->getFilter($filters,true,true);
11107
		if ($globalTimezone != '') {
11108
			date_default_timezone_set($globalTimezone);
11109
			$datetime = new DateTime();
11110
			$offset = $datetime->format('P');
11111
		} else $offset = '+00:00';
11112
11113
		if ($globalDBdriver == 'mysql') {
11114
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
11115
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = CURDATE()
11116
								GROUP BY hour_name 
11117
								ORDER BY hour_name ASC";
11118
		} else {
11119
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
11120
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = CAST(NOW() AS date)
11121
								GROUP BY hour_name 
11122
								ORDER BY hour_name ASC";
11123
		}
11124
		
11125
		$sth = $this->db->prepare($query);
11126
		$sth->execute(array(':offset' => $offset));
11127
      
11128
		$hour_array = array();
11129
		$temp_array = array();
11130
        
11131
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11132
		{
11133
			$temp_array['hour_name'] = $row['hour_name'];
11134
			$temp_array['hour_count'] = $row['hour_count'];
11135
			$hour_array[] = $temp_array;
11136
		}
11137
11138
		return $hour_array;
11139
	}
11140
    
11141
	/**
11142
	* Gets all the spotter information based on calculated upcoming flights
11143
	*
11144
	* @return Array the spotter information
11145
	*
11146
	*/
11147
	public function getUpcomingFlights($limit = '', $sort = '', $filters = array())
11148
	{
11149
		global $global_query, $globalDBdriver, $globalTimezone;
11150
		$filter_query = $this->getFilter($filters,true,true);
11151
		date_default_timezone_set('UTC');
11152
		$limit_query = '';
11153
		if ($limit != "")
11154
		{
11155
			$limit_array = explode(",", $limit);
11156
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
11157
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
11158
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
11159
			{
11160
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
11161
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
11162
			}
11163
		}
11164
		$currentHour = date("G");
11165
		$next3Hours = date("G", strtotime("+3 hour"));
11166
		//if the next 3 hours is already equal to/past midnight, we limit it to stay there, otherwise the query will fail
11167
		if ($currentHour >= 21 && $next3Hours >= 00)
11168
		{
11169
			$next3Hours = 24;
11170
		}
11171
		$currentDayofWeek = date("l");
11172
		if ($globalDBdriver == 'mysql') {
11173
			if ($sort != "")
11174
			{
11175
				$search_orderby_array = $this->getOrderBy();
11176
				$orderby_query = $search_orderby_array[$sort]['sql'];
11177
			} else {
11178
				$orderby_query = " ORDER BY HOUR(spotter_output.date) ASC";
11179
			}
11180
/*
11181
			$query = "SELECT spotter_output.*, count(spotter_output.ident) as ident_count
11182
			    FROM spotter_output
11183
			    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'
11184
			    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";
11185
*/
11186
/*			$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
11187
			    FROM spotter_output
11188
			    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'
11189
			    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";
11190
*/
11191
			$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 
11192
			    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'
11193
			    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
11194
			    HAVING count(spotter_output.ident) > 5$orderby_query";
11195
11196
			$spotter_array = $this->getDataFromDB($query.$limit_query);
11197
		} else {
11198
			if ($sort != "")
11199
			{
11200
				$search_orderby_array = $this->getOrderBy();
11201
				$orderby_query = $search_orderby_array[$sort]['sql'];
11202
			} else {
11203
				$orderby_query = " ORDER BY to_char(spotter_output.date,'HH') ASC";
11204
			}
11205
			$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') 
11206
			    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 <> '' 
11207
			    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')
11208
			    HAVING count(spotter_output.ident) > 5$orderby_query";
11209
			//echo $query;
11210
			$spotter_array = $this->getDataFromDB($query.$limit_query,array(':timezone' => $globalTimezone));
11211
			/*
11212
			$sth = $this->db->prepare($query);
11213
			$sth->execute(array(':timezone' => $globalTimezone));
11214
			return $sth->fetchAll(PDO::FETCH_ASSOC);
11215
			*/
11216
		}
11217
		return $spotter_array;
11218
	}
11219
    
11220
    
11221
     /**
11222
	* Gets the Barrie Spotter ID based on the FlightAware ID
11223
	*
11224
	* @return Integer the Barrie Spotter ID
11225
q	*
11226
	*/
11227
	public function getSpotterIDBasedOnFlightAwareID($flightaware_id)
11228
	{
11229
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
11230
11231
		$query  = "SELECT spotter_output.spotter_id
11232
								FROM spotter_output 
11233
								WHERE spotter_output.flightaware_id = '".$flightaware_id."'";
11234
        
11235
		
11236
		$sth = $this->db->prepare($query);
11237
		$sth->execute();
11238
11239
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11240
		{
11241
			return $row['spotter_id'];
11242
		}
11243
	}
11244
  
11245
 
11246
	/**
11247
	* Parses a date string
11248
	*
11249
	* @param String $dateString the date string
11250
	* @param String $timezone the timezone of a user
11251
	* @return Array the time information
11252
	*
11253
	*/
11254
	public function parseDateString($dateString, $timezone = '')
11255
	{
11256
		$time_array = array();
11257
	
11258
		if ($timezone != "")
11259
		{
11260
			date_default_timezone_set($timezone);
11261
		}
11262
		
11263
		$current_date = date("Y-m-d H:i:s");
11264
		$date = date("Y-m-d H:i:s",strtotime($dateString." UTC"));
11265
		
11266
		$diff = abs(strtotime($current_date) - strtotime($date));
11267
11268
		$time_array['years'] = floor($diff / (365*60*60*24)); 
11269
		$years = $time_array['years'];
11270
		
11271
		$time_array['months'] = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
11272
		$months = $time_array['months'];
11273
		
11274
		$time_array['days'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
11275
		$days = $time_array['days'];
11276
		$time_array['hours'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24)/ (60*60));
11277
		$hours = $time_array['hours'];
11278
		$time_array['minutes'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60)/ 60);
11279
		$minutes = $time_array['minutes'];
11280
		$time_array['seconds'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60 - $minutes*60));  
11281
		
11282
		return $time_array;	
11283
	}	
11284
	
11285
	
11286
	
11287
	
11288
	/**
11289
	* Parses the direction degrees to working
11290
	*
11291
	* @param Float $direction the direction in degrees
11292
	* @return Array the direction information
11293
	*
11294
	*/
11295
	public function parseDirection($direction = 0)
11296
	{
11297
		if ($direction == '') $direction = 0;
11298
		$direction_array = array();
11299
		$temp_array = array();
11300
11301
		if ($direction == 360 || ($direction >= 0 && $direction < 22.5))
11302
		{
11303
			$temp_array['direction_degree'] = $direction;
11304
			$temp_array['direction_shortname'] = "N";
11305
			$temp_array['direction_fullname'] = "North";
11306
		} elseif ($direction >= 22.5 && $direction < 45){
11307
			$temp_array['direction_degree'] = $direction;
11308
			$temp_array['direction_shortname'] = "NNE";
11309
			$temp_array['direction_fullname'] = "North-Northeast";
11310
		} elseif ($direction >= 45 && $direction < 67.5){
11311
			$temp_array['direction_degree'] = $direction;
11312
			$temp_array['direction_shortname'] = "NE";
11313
			$temp_array['direction_fullname'] = "Northeast";
11314
		} elseif ($direction >= 67.5 && $direction < 90){
11315
			$temp_array['direction_degree'] = $direction;
11316
			$temp_array['direction_shortname'] = "ENE";
11317
			$temp_array['direction_fullname'] = "East-Northeast";
11318
		} elseif ($direction >= 90 && $direction < 112.5){
11319
			$temp_array['direction_degree'] = $direction;
11320
			$temp_array['direction_shortname'] = "E";
11321
			$temp_array['direction_fullname'] = "East";
11322
		} elseif ($direction >= 112.5 && $direction < 135){
11323
			$temp_array['direction_degree'] = $direction;
11324
			$temp_array['direction_shortname'] = "ESE";
11325
			$temp_array['direction_fullname'] = "East-Southeast";
11326
		} elseif ($direction >= 135 && $direction < 157.5){
11327
			$temp_array['direction_degree'] = $direction;
11328
			$temp_array['direction_shortname'] = "SE";
11329
			$temp_array['direction_fullname'] = "Southeast";
11330
		} elseif ($direction >= 157.5 && $direction < 180){
11331
			$temp_array['direction_degree'] = $direction;
11332
			$temp_array['direction_shortname'] = "SSE";
11333
			$temp_array['direction_fullname'] = "South-Southeast";
11334
		} elseif ($direction >= 180 && $direction < 202.5){
11335
			$temp_array['direction_degree'] = $direction;
11336
			$temp_array['direction_shortname'] = "S";
11337
			$temp_array['direction_fullname'] = "South";
11338
		} elseif ($direction >= 202.5 && $direction < 225){
11339
			$temp_array['direction_degree'] = $direction;
11340
			$temp_array['direction_shortname'] = "SSW";
11341
			$temp_array['direction_fullname'] = "South-Southwest";
11342
		} elseif ($direction >= 225 && $direction < 247.5){
11343
			$temp_array['direction_degree'] = $direction;
11344
			$temp_array['direction_shortname'] = "SW";
11345
			$temp_array['direction_fullname'] = "Southwest";
11346
		} elseif ($direction >= 247.5 && $direction < 270){
11347
			$temp_array['direction_degree'] = $direction;
11348
			$temp_array['direction_shortname'] = "WSW";
11349
			$temp_array['direction_fullname'] = "West-Southwest";
11350
		} elseif ($direction >= 270 && $direction < 292.5){
11351
			$temp_array['direction_degree'] = $direction;
11352
			$temp_array['direction_shortname'] = "W";
11353
			$temp_array['direction_fullname'] = "West";
11354
		} elseif ($direction >= 292.5 && $direction < 315){
11355
			$temp_array['direction_degree'] = $direction;
11356
			$temp_array['direction_shortname'] = "WNW";
11357
			$temp_array['direction_fullname'] = "West-Northwest";
11358
		} elseif ($direction >= 315 && $direction < 337.5){
11359
			$temp_array['direction_degree'] = $direction;
11360
			$temp_array['direction_shortname'] = "NW";
11361
			$temp_array['direction_fullname'] = "Northwest";
11362
		} elseif ($direction >= 337.5 && $direction < 360){
11363
			$temp_array['direction_degree'] = $direction;
11364
			$temp_array['direction_shortname'] = "NNW";
11365
			$temp_array['direction_fullname'] = "North-Northwest";
11366
		}
11367
		$direction_array[] = $temp_array;
11368
		return $direction_array;
11369
	}
11370
	
11371
	
11372
	/**
11373
	* Gets the aircraft registration
11374
	*
11375
	* @param String $flightaware_id the flight aware id
11376
	* @return String the aircraft registration
11377
	*
11378
	*/
11379
	
11380
	public function getAircraftRegistration($flightaware_id)
11381
	{
11382
		global $globalFlightAwareUsername, $globalFlightAwarePassword;
11383
        
11384
		$options = array(
11385
			'trace' => true,
11386
			'exceptions' => 0,
11387
			'login' => $globalFlightAwareUsername,
11388
			'password' => $globalFlightAwarePassword,
11389
		);
11390
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
11391
		
11392
		$params = array('faFlightID' => $flightaware_id);
11393
		$result = $client->AirlineFlightInfo($params);
11394
		
11395
		if (isset($result->AirlineFlightInfoResult))
11396
		{
11397
			$registration = $result->AirlineFlightInfoResult->tailnumber;
11398
		} else return '';
11399
		
11400
		$registration = $this->convertAircraftRegistration($registration);
11401
		
11402
		return $registration;
11403
	}
11404
11405
11406
	/**
11407
	* Gets the aircraft registration from ModeS
11408
	*
11409
	* @param String $aircraft_modes the flight ModeS in hex
11410
	* @return String the aircraft registration
11411
	*
11412
	*/
11413
	public function getAircraftRegistrationBymodeS($aircraft_modes)
11414
	{
11415
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
11416
	
11417
		$query  = "SELECT aircraft_modes.Registration FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes ORDER BY FirstCreated DESC LIMIT 1";
11418
		
11419
		$sth = $this->db->prepare($query);
11420
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
11421
    
11422
		$row = $sth->fetch(PDO::FETCH_ASSOC);
11423
		$sth->closeCursor();
11424
		if (count($row) > 0) {
11425
		    //return $row['Registration'];
11426
		    return $row['registration'];
11427
		} else return '';
11428
	
11429
	}
11430
11431
	/**
11432
	* Gets the aircraft type from ModeS
11433
	*
11434
	* @param String $aircraft_modes the flight ModeS in hex
11435
	* @return String the aircraft type
11436
	*
11437
	*/
11438
	public function getAircraftTypeBymodeS($aircraft_modes)
11439
	{
11440
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
11441
	
11442
		$query  = "SELECT aircraft_modes.type_flight FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes ORDER BY FirstCreated DESC LIMIT 1";
11443
		
11444
		$sth = $this->db->prepare($query);
11445
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
11446
    
11447
		$row = $sth->fetch(PDO::FETCH_ASSOC);
11448
		$sth->closeCursor();
11449
		if (count($row) > 0) {
11450
		    if ($row['type_flight'] == null) return '';
11451
		    else return $row['type_flight'];
11452
		} else return '';
11453
	
11454
	}
11455
11456
	/**
11457
	* Gets Country from latitude/longitude
11458
	*
11459
	* @param Float $latitude latitute of the flight
11460
	* @param Float $longitude longitute of the flight
11461
	* @return String the countrie
11462
	*/
11463
	public function getCountryFromLatitudeLongitude($latitude,$longitude)
11464
	{
11465
		global $globalDBdriver, $globalDebug;
11466
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
11467
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
11468
	
11469
		$Connection = new Connection($this->db);
11470
		if (!$Connection->tableExists('countries')) return '';
11471
	
11472
		try {
11473
			/*
11474
			if ($globalDBdriver == 'mysql') {
11475
				//$query  = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(:latitude :longitude)'), ogc_geom) LIMIT 1";
11476
				$query = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(".$longitude.' '.$latitude.")'), ogc_geom) LIMIT 1";
11477
			}
11478
			*/
11479
			// This query seems to work both for MariaDB and PostgreSQL
11480
			$query = "SELECT name,iso2,iso3 FROM countries WHERE ST_Within(ST_GeomFromText('POINT(".$longitude." ".$latitude.")',4326), ogc_geom) LIMIT 1";
11481
		
11482
			$sth = $this->db->prepare($query);
11483
			//$sth->execute(array(':latitude' => $latitude,':longitude' => $longitude));
11484
			$sth->execute();
11485
    
11486
			$row = $sth->fetch(PDO::FETCH_ASSOC);
11487
			$sth->closeCursor();
11488
			if (count($row) > 0) {
11489
				return $row;
11490
			} else return '';
11491
		} catch (PDOException $e) {
11492
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
11493
			return '';
11494
		}
11495
	
11496
	}
11497
11498
	/**
11499
	* Gets Country from iso2
11500
	*
11501
	* @param String $iso2 ISO2 country code
11502
	* @return String the countrie
11503
	*/
11504
	public function getCountryFromISO2($iso2)
11505
	{
11506
		global $globalDBdriver, $globalDebug;
11507
		$iso2 = filter_var($iso2,FILTER_SANITIZE_STRING);
11508
	
11509
		$Connection = new Connection($this->db);
11510
		if (!$Connection->tableExists('countries')) return '';
11511
	
11512
		try {
11513
			$query = "SELECT name,iso2,iso3 FROM countries WHERE iso2 = :iso2 LIMIT 1";
11514
		
11515
			$sth = $this->db->prepare($query);
11516
			$sth->execute(array(':iso2' => $iso2));
11517
    
11518
			$row = $sth->fetch(PDO::FETCH_ASSOC);
11519
			$sth->closeCursor();
11520
			if (count($row) > 0) {
11521
				return $row;
11522
			} else return '';
11523
		} catch (PDOException $e) {
11524
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
11525
			return '';
11526
		}
11527
	
11528
	}
11529
11530
	/**
11531
	* converts the registration code using the country prefix
11532
	*
11533
	* @param String $registration the aircraft registration
11534
	* @return String the aircraft registration
11535
	*
11536
	*/
11537
	public function convertAircraftRegistration($registration)
11538
	{
11539
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11540
		$registration_prefix = '';
11541
		$registration_1 = substr($registration, 0, 1);
11542
		$registration_2 = substr($registration, 0, 2);
11543
11544
		//first get the prefix based on two characters
11545
		$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_2";
11546
      
11547
		
11548
		$sth = $this->db->prepare($query);
11549
		$sth->execute(array(':registration_2' => $registration_2));
11550
        
11551
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11552
		{
11553
			$registration_prefix = $row['registration_prefix'];
11554
		}
11555
11556
		//if we didn't find a two chracter prefix lets just search the one with one character
11557
		if ($registration_prefix == '')
11558
		{
11559
			$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_1";
11560
			$sth = $this->db->prepare($query);
11561
			$sth->execute(array(':registration_1' => $registration_1));
11562
	        
11563
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11564
			{
11565
				$registration_prefix = $row['registration_prefix'];
11566
			}
11567
		}
11568
11569
		//determine which characters are being used and convert the registration code appropiately
11570
		if (strlen($registration_prefix) == 1)
11571
		{
11572
			if (0 === strpos($registration, 'N')) {
11573
				$registration = preg_replace("/^(.{1})/", "$1", $registration);
11574
			} else {
11575
				$registration = preg_replace("/^(.{1})/", "$1-", $registration);
11576
			}
11577
		} else if(strlen($registration_prefix) == 2){
11578
			if (0 === strpos($registration, 'N')) {
11579
				$registration = preg_replace("/^(.{2})/", "$1", $registration);
11580
			} else {
11581
				$registration = preg_replace("/^(.{2})/", "$1-", $registration);
11582
			}
11583
		}
11584
		return $registration;
11585
	}
11586
11587
	/**
11588
	* Country from the registration code
11589
	*
11590
	* @param String $registration the aircraft registration
11591
	* @return String the country
11592
	*
11593
	*/
11594
	public function countryFromAircraftRegistration($registration)
11595
	{
11596
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11597
		
11598
		$registration_prefix = '';
11599
		$registration_test = explode('-',$registration);
11600
		$country = '';
11601
		if ($registration_test[0] != $registration) {
11602
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11603
	      
11604
			$sth = $this->db->prepare($query);
11605
			$sth->execute(array(':registration_1' => $registration_test[0]));
11606
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11607
			{
11608
				//$registration_prefix = $row['registration_prefix'];
11609
				$country = $row['country'];
11610
			}
11611
		} else {
11612
    			$registration_1 = substr($registration, 0, 1);
11613
		        $registration_2 = substr($registration, 0, 2);
11614
11615
			$country = '';
11616
			//first get the prefix based on two characters
11617
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
11618
      
11619
			
11620
			$sth = $this->db->prepare($query);
11621
			$sth->execute(array(':registration_2' => $registration_2));
11622
        
11623
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11624
			{
11625
				$registration_prefix = $row['registration_prefix'];
11626
				$country = $row['country'];
11627
			}
11628
11629
			//if we didn't find a two chracter prefix lets just search the one with one character
11630
			if ($registration_prefix == "")
11631
			{
11632
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11633
	      
11634
				$sth = $this->db->prepare($query);
11635
				$sth->execute(array(':registration_1' => $registration_1));
11636
	        
11637
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
11638
				{
11639
					//$registration_prefix = $row['registration_prefix'];
11640
					$country = $row['country'];
11641
				}
11642
			}
11643
		}
11644
    
11645
		return $country;
11646
	}
11647
11648
	/**
11649
	* Registration prefix from the registration code
11650
	*
11651
	* @param String $registration the aircraft registration
11652
	* @return String the registration prefix
11653
	*
11654
	*/
11655
	public function registrationPrefixFromAircraftRegistration($registration)
11656
	{
11657
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11658
		
11659
		$registration_prefix = '';
11660
		$registration_test = explode('-',$registration);
11661
		//$country = '';
11662
		if ($registration_test[0] != $registration) {
11663
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11664
	      
11665
			$sth = $this->db->prepare($query);
11666
			$sth->execute(array(':registration_1' => $registration_test[0]));
11667
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11668
			{
11669
				$registration_prefix = $row['registration_prefix'];
11670
				//$country = $row['country'];
11671
			}
11672
		} else {
11673
    			$registration_1 = substr($registration, 0, 1);
11674
		        $registration_2 = substr($registration, 0, 2);
11675
11676
			//first get the prefix based on two characters
11677
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
11678
      
11679
			
11680
			$sth = $this->db->prepare($query);
11681
			$sth->execute(array(':registration_2' => $registration_2));
11682
        
11683
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11684
			{
11685
				$registration_prefix = $row['registration_prefix'];
11686
				//$country = $row['country'];
11687
			}
11688
11689
			//if we didn't find a two chracter prefix lets just search the one with one character
11690
			if ($registration_prefix == "")
11691
			{
11692
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11693
	      
11694
				$sth = $this->db->prepare($query);
11695
				$sth->execute(array(':registration_1' => $registration_1));
11696
	        
11697
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
11698
				{
11699
					$registration_prefix = $row['registration_prefix'];
11700
					//$country = $row['country'];
11701
				}
11702
			}
11703
		}
11704
    
11705
		return $registration_prefix;
11706
	}
11707
11708
11709
	/**
11710
	* Country from the registration code
11711
	*
11712
	* @param String $registration the aircraft registration
11713
	* @return String the country
11714
	*
11715
	*/
11716
	public function countryFromAircraftRegistrationCode($registration)
11717
	{
11718
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11719
		
11720
		$country = '';
11721
		$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration LIMIT 1";
11722
		$sth = $this->db->prepare($query);
11723
		$sth->execute(array(':registration' => $registration));
11724
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11725
		{
11726
			$country = $row['country'];
11727
		}
11728
		return $country;
11729
	}
11730
	
11731
	/**
11732
	* Set a new highlight value for a flight
11733
	*
11734
	* @param String $flightaware_id flightaware_id from spotter_output table
11735
	* @param String $highlight New highlight value
11736
	*/
11737
	public function setHighlightFlight($flightaware_id,$highlight) {
11738
		
11739
		$query  = "UPDATE spotter_output SET highlight = :highlight WHERE flightaware_id = :flightaware_id";
11740
		$sth = $this->db->prepare($query);
11741
		$sth->execute(array(':flightaware_id' => $flightaware_id, ':highlight' => $highlight));
11742
	}
11743
11744
	/**
11745
	* Set a new highlight value for a flight by Registration
11746
	*
11747
	* @param String $registration Registration of the aircraft
11748
	* @param String $date Date of spotted aircraft
11749
	* @param String $highlight New highlight value
11750
	*/
11751
	public function setHighlightFlightByRegistration($registration,$highlight, $date = '') {
11752
		if ($date == '') {
11753
			$query  = "UPDATE spotter_output SET highlight = :highlight WHERE spotter_id IN (SELECT MAX(spotter_id) FROM spotter_output WHERE registration = :registration)";
11754
			$query_values = array(':registration' => $registration, ':highlight' => $highlight);
11755
		} else {
11756
			$query  = "UPDATE spotter_output SET highlight = :highlight WHERE registration = :registration AND date(date) = :date";
11757
			$query_values = array(':registration' => $registration, ':highlight' => $highlight,':date' => $date);
11758
		}
11759
		$sth = $this->db->prepare($query);
11760
		$sth->execute($query_values);
11761
	}
11762
	
11763
	/**
11764
	* Gets the short url from bit.ly
11765
	*
11766
	* @param String $url the full url
11767
	* @return String the bit.ly url
11768
	*
11769
	*/
11770
	public function getBitlyURL($url)
11771
	{
11772
		global $globalBitlyAccessToken;
11773
		
11774
		if ($globalBitlyAccessToken == '') return $url;
11775
        
11776
		$google_url = 'https://api-ssl.bitly.com/v3/shorten?access_token='.$globalBitlyAccessToken.'&longUrl='.$url;
11777
		
11778
		$ch = curl_init();
11779
		curl_setopt($ch, CURLOPT_HEADER, 0);
11780
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
11781
		curl_setopt($ch, CURLOPT_URL, $google_url);
11782
		$bitly_data = curl_exec($ch);
11783
		curl_close($ch);
11784
		
11785
		$bitly_data = json_decode($bitly_data);
11786
		$bitly_url = '';
11787
		if ($bitly_data->status_txt = "OK"){
11788
			$bitly_url = $bitly_data->data->url;
11789
		}
11790
11791
		return $bitly_url;
11792
	}
11793
11794
11795
	public function getOrderBy()
11796
	{
11797
		$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"));
11798
		
11799
		return $orderby;
11800
		
11801
	}
11802
    
11803
/*
11804
	public function importFromFlightAware()
11805
	{
11806
		global $globalFlightAwareUsername, $globalFlightAwarePassword, $globalLatitudeMax, $globalLatitudeMin, $globalLongitudeMax, $globalLongitudeMin, $globalAirportIgnore;
11807
		$Spotter = new Spotter($this->db);
11808
		$SpotterLive = new SpotterLive($this->db);
11809
		$options = array(
11810
		            'trace' => true,
11811
		            'exceptions' => 0,
11812
		            'login' => $globalFlightAwareUsername,
11813
		            'password' => $globalFlightAwarePassword,
11814
		);
11815
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
11816
		$params = array('query' => '{range lat '.$globalLatitudeMin.' '.$globalLatitudeMax.'} {range lon '.$globalLongitudeMax.' '.$globalLongitudeMin.'} {true inAir}', 'howMany' => '15', 'offset' => '0');
11817
		$result = $client->SearchBirdseyeInFlight($params);
11818
		$dataFound = false;
11819
		$ignoreImport = false;
11820
		if (isset($result->SearchBirdseyeInFlightResult))
11821
		{
11822
			if (is_array($result->SearchBirdseyeInFlightResult->aircraft))
11823
			{
11824
				foreach($result->SearchBirdseyeInFlightResult->aircraft as $aircraft)
11825
				{
11826
					if (!strstr($aircraft->origin, 'L ') && !strstr($aircraft->destination, 'L '))
11827
					{
11828
						foreach($globalAirportIgnore as $airportIgnore)
11829
						{
11830
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
11831
							{
11832
								$ignoreImport = true; 
11833
							}
11834
						}
11835
						if ($ignoreImport == false)
11836
						{
11837
							$flightaware_id = $aircraft->faFlightID;
11838
							$ident = $aircraft->ident;
11839
							$aircraft_type = $aircraft->type;
11840
							$departure_airport = $aircraft->origin;
11841
							$arrival_airport = $aircraft->destination;
11842
							$latitude = $aircraft->latitude;
11843
							$longitude = $aircraft->longitude;
11844
							$waypoints = $aircraft->waypoints;
11845
							$altitude = $aircraft->altitude;
11846
							$heading = $aircraft->heading;
11847
							$groundspeed = $aircraft->groundspeed;
11848
							$dataFound = true;
11849
							//gets the callsign from the last hour
11850
							$last_hour_ident = $this->getIdentFromLastHour($ident);
11851
							//change the departure/arrival airport to NA if its not available
11852
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
11853
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
11854
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
11855
							if($last_hour_ident == "")
11856
							{
11857
								//adds the spotter data for the archive
11858
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11859
							}
11860
11861
							//adds the spotter LIVE data
11862
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11863
						}
11864
					}
11865
					$ignoreImport = false;
11866
				}
11867
			} else {
11868
				if (!strstr($result->SearchBirdseyeInFlightResult->aircraft->origin, 'L ') && !strstr($result->SearchBirdseyeInFlightResult->aircraft->destination, 'L '))
11869
				{
11870
					foreach($globalAirportIgnore as $airportIgnore)
11871
					{
11872
						foreach($globalAirportIgnore as $airportIgnore)
11873
						{
11874
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
11875
							{
11876
								$ignoreImport = true; 
11877
							}
11878
						}
11879
						if ($ignoreImport == false)
11880
						{
11881
							$flightaware_id = $result->SearchBirdseyeInFlightResult->aircraft->faFlightID;
11882
							$ident = $result->SearchBirdseyeInFlightResult->aircraft->ident;
11883
							$aircraft_type = $result->SearchBirdseyeInFlightResult->aircraft->type;
11884
							$departure_airport = $result->SearchBirdseyeInFlightResult->aircraft->origin;
11885
							$arrival_airport = $result->SearchBirdseyeInFlightResult->aircraft->destination;
11886
							$latitude = $result->SearchBirdseyeInFlightResult->aircraft->latitude;
11887
							$longitude = $result->SearchBirdseyeInFlightResult->aircraft->longitude;
11888
							$waypoints = $result->SearchBirdseyeInFlightResult->aircraft->waypoints;
11889
							$altitude = $result->SearchBirdseyeInFlightResult->aircraft->altitude;
11890
							$heading = $result->SearchBirdseyeInFlightResult->aircraft->heading;
11891
							$groundspeed = $result->SearchBirdseyeInFlightResult->aircraft->groundspeed;
11892
							$dataFound = true;
11893
							//gets the callsign from the last hour
11894
							$last_hour_ident = $this->getIdentFromLastHour($ident);
11895
							//change the departure/arrival airport to NA if its not available
11896
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
11897
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
11898
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
11899
							if($last_hour_ident == "")
11900
							{
11901
								//adds the spotter data for the archive
11902
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11903
							}
11904
							//adds the spotter LIVE data
11905
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11906
						}
11907
						$ignoreImport = false;
11908
					}
11909
				}
11910
			}
11911
		} 
11912
	}
11913
*/
11914
11915
	// Update flights data when new data in DB
11916
	public function updateFieldsFromOtherTables()
11917
	{
11918
		global $globalDebug, $globalDBdriver;
11919
		$Image = new Image($this->db);
11920
		
11921
11922
		// routes
11923
		if ($globalDebug) print "Routes...\n";
11924
		if ($globalDBdriver == 'mysql') {
11925
			$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)";
11926
		} else {
11927
			$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'";
11928
		}
11929
		$sth = $this->db->prepare($query);
11930
		$sth->execute();
11931
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11932
		{
11933
			$departure_airport_array = $this->getAllAirportInfo($row['fromairport_icao']);
11934
			$arrival_airport_array = $this->getAllAirportInfo($row['toairport_icao']);
11935
			if (count($departure_airport_array) > 0 && count($arrival_airport_array) > 0) {
11936
				$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";
11937
				$sthu = $this->db->prepare($update_query);
11938
				$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']));
11939
			}
11940
		}
11941
		
11942
		if ($globalDebug) print "Airlines...\n";
11943
		//airlines
11944
		if ($globalDBdriver == 'mysql') {
11945
			$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)";
11946
		} elseif ($globalDBdriver == 'pgsql') {
11947
			$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'";
11948
		}
11949
		$sth = $this->db->prepare($query);
11950
		$sth->execute();
11951
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11952
		{
11953
			if (is_numeric(substr($row['ident'], -1, 1)))
11954
			{
11955
				$fromsource = NULL;
11956
				if (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
11957
				elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
11958
				elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
11959
				elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
11960
				$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
11961
				if (isset($airline_array[0]['name'])) {
11962
					$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";
11963
					$sthu = $this->db->prepare($update_query);
11964
					$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']));
11965
				}
11966
			}
11967
		}
11968
11969
		if ($globalDebug) print "Remove Duplicate in aircraft_modes...\n";
11970
		//duplicate modes
11971
		$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";
11972
		$sth = $this->db->prepare($query);
11973
		$sth->execute();
11974
		
11975
		if ($globalDebug) print "Aircraft...\n";
11976
		//aircraft
11977
		if ($globalDBdriver == 'mysql') {
11978
			$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)";
11979
		} elseif ($globalDBdriver == 'pgsql') {
11980
			$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'";
11981
		}
11982
		$sth = $this->db->prepare($query);
11983
		$sth->execute();
11984
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11985
		{
11986
			if ($row['aircraft_icao'] != '') {
11987
				$aircraft_name = $this->getAllAircraftInfo($row['aircraft_icao']);
11988
				if ($row['registration'] != ""){
11989
					$image_array = $Image->getSpotterImage($row['registration']);
11990
					if (!isset($image_array[0]['registration'])) {
11991
						$Image->addSpotterImage($row['registration']);
11992
					}
11993
				}
11994
				if (count($aircraft_name) > 0) {
11995
					$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";
11996
					$sthu = $this->db->prepare($update_query);
11997
					$sthu->execute(array(':aircraft_name' => $aircraft_name[0]['type'], ':aircraft_manufacturer' => $aircraft_name[0]['manufacturer'], ':spotter_id' => $row['spotter_id']));
11998
				}
11999
			}
12000
		}
12001
	}	
12002
12003
	// Update arrival airports for data already in DB
12004
	public function updateArrivalAirports()
12005
	{
12006
		global $globalDebug, $globalDBdriver, $globalClosestMinDist;
12007
		$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";
12008
		$sth = $this->db->prepare($query);
12009
		$sth->execute();
12010
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
12011
		{
12012
			if ($row['last_latitude'] != '' && $row['last_longitude'] != '') {
12013
				$closestAirports = $this->closestAirports($row['last_latitude'],$row['last_longitude'],$globalClosestMinDist);
12014
				$airport_icao = '';
12015
				 if (isset($closestAirports[0])) {
12016
					if ($row['arrival_airport_icao'] == $closestAirports[0]['icao']) {
12017
						$airport_icao = $closestAirports[0]['icao'];
12018
						if ($globalDebug) echo "\o/ 1st ---++ Find arrival airport. airport_icao : ".$airport_icao."\n";
12019
					} elseif (count($closestAirports > 1) && $row['arrival_airport_icao'] != '' && $row['arrival_airport_icao'] != 'NA') {
12020
						foreach ($closestAirports as $airport) {
12021
							if ($row['arrival_airport_icao'] == $airport['icao']) {
12022
								$airport_icao = $airport['icao'];
12023
								if ($globalDebug) echo "\o/ try --++ Find arrival airport. airport_icao : ".$airport_icao."\n";
12024
								break;
12025
							}
12026
						}
12027
					} elseif ($row['last_altitude'] == 0 || ($row['last_altitude'] != '' && ($closestAirports[0]['altitude'] <= $row['last_altitude']*100+1000 && $row['last_altitude']*100 < $closestAirports[0]['altitude']+5000))) {
12028
						$airport_icao = $closestAirports[0]['icao'];
12029
						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";
12030
					} else {
12031
						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";
12032
					}
12033
				} else {
12034
					if ($globalDebug) echo "----- No Airport near last coord. Latitude : ".$row['last_latitude'].' - Longitude : '.$row['last_longitude'].' - MinDist : '.$globalClosestMinDist."\n";
12035
				}
12036
				if ($row['real_arrival_airport_icao'] != $airport_icao) {
12037
					if ($globalDebug) echo "Updating airport to ".$airport_icao."...\n";
12038
					$update_query="UPDATE spotter_output SET real_arrival_airport_icao = :airport_icao WHERE spotter_id = :spotter_id";
12039
					$sthu = $this->db->prepare($update_query);
12040
					$sthu->execute(array(':airport_icao' => $airport_icao,':spotter_id' => $row['spotter_id']));
12041
				}
12042
			}
12043
		}
12044
	}
12045
	
12046
	public function closestAirports($origLat,$origLon,$dist = 10) {
12047
		global $globalDBdriver;
12048
		$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
12049
/*
12050
		$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 
12051
                      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)) 
12052
                      having distance < $dist ORDER BY distance limit 100;";
12053
*/
12054
		if ($globalDBdriver == 'mysql') {
12055
			$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 
12056
	                      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)) 
12057
	                      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;";
12058
                } else {
12059
			$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 
12060
	                      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)) 
12061
	                      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;";
12062
    		}
12063
		$sth = $this->db->prepare($query);
12064
		$sth->execute();
12065
		return $sth->fetchAll(PDO::FETCH_ASSOC);
12066
	}
12067
}
12068
/*
12069
$Spotter = new Spotter();
12070
print_r($Spotter->closestAirports('-19.9813','-47.8286',10));
12071
*/
12072
/*
12073
$Spotter = new Spotter();
12074
$da = $Spotter->countAllDetectedArrivalAirports(true,0,'',true);
12075
$aa = $Spotter->countAllArrivalAirports(true,0,'',true);
12076
print_r($da);
12077
print_r($aa);
12078
print_r(array_merge($da,$aa));
12079
*/
12080
?>