Completed
Push — master ( 79e230...523b76 )
by Yannick
07:34
created

Spotter::countAllArrivalAirportCountriesByIdent()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 22
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 15
nc 2
nop 2
dl 0
loc 22
rs 9.2
c 0
b 0
f 0
1
<?php
2
require_once(dirname(__FILE__).'/class.Scheduler.php');
3
require_once(dirname(__FILE__).'/class.ACARS.php');
4
require_once(dirname(__FILE__).'/class.Image.php');
5
$global_query = "SELECT spotter_output.* FROM spotter_output";
6
7
class Spotter{
8
	public $aircraft_correct_icaotype = array('CL64' => 'CL60',
9
					'F9LX' => 'F900',
10
					'K35T' => 'K35R',
11
					'F5EX' => 'FA50',
12
					'G102' => 'GLID',
13
					'LJ36' => 'LJ35',
14
					'G500' => 'EGRT',
15
					'A300' => 'A30B',
16
					'ROT' => 'B77W',
17
					'BPN' => 'B772',
18
					'0011' => 'B77W',
19
					'F9DX' => 'F900',
20
					'B757' => 'B752',
21
					'4/05' => 'A332',
22
					'F/A3' => 'A320',
23
					'F2EX' => 'F2TH',
24
					'EA55' => 'EA50',
25
					'B73B' => 'B737',
26
					'G450' => 'GLF4',
27
					'H25X' => 'H25B',
28
					'E175' => 'E75S',
29
					'B777' => 'B77W',
30
					'F2LX' => 'F2TH',
31
					'CL65' => 'CL60',
32
					'A380' => 'A388',
33
					'G550' => 'GLF5',
34
					'F9EX' => 'F900',
35
					'E195' => 'E190',
36
					'H750' => 'H25B',
37
					'B747' => 'B744',
38
					'B757' => 'B753',
39
					'B767' => 'B763',
40
					'PA39' => 'PA30',
41
					'H900' => 'H25B',
42
					'AN74' => 'AN72',
43
					'CL85' => 'CRJ2',
44
					'G400' => 'GLF4',
45
					'CL61' => 'CL60',
46
					'F2TS' => 'F2TH',
47
					'Z602' => 'CH60',
48
					'G100' => 'ASTR');
49
50
51
	public $db;
52
	
53
	public function __construct($dbc = null) {
54
		$Connection = new Connection($dbc);
55
		$this->db = $Connection->db();
56
	}
57
58
	/**
59
	* Get SQL query part for filter used
60
	* @param Array $filter the filter
61
	* @return Array the SQL part
62
	*/
63
	public function getFilter($filter = array(),$where = false,$and = false) {
64
		global $globalFilter, $globalStatsFilters, $globalFilterName, $globalDBdriver;
65
		$filters = array();
66
		if (is_array($globalStatsFilters) && isset($globalStatsFilters[$globalFilterName])) {
67
			if (isset($globalStatsFilters[$globalFilterName][0]['source'])) {
68
				$filters = $globalStatsFilters[$globalFilterName];
69
			} else {
70
				$filter = array_merge($filter,$globalStatsFilters[$globalFilterName]);
71
			}
72
		}
73
		if (isset($filter[0]['source'])) {
74
			$filters = array_merge($filters,$filter);
75
		}
76
		if (is_array($globalFilter)) $filter = array_merge($filter,$globalFilter);
77
		$filter_query_join = '';
78
		$filter_query_where = '';
79
		foreach($filters as $flt) {
80
			if (isset($flt['airlines']) && !empty($flt['airlines'])) {
81
				if ($flt['airlines'][0] != '') {
82
					if (isset($flt['source'])) {
83
						$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_icao IN ('".implode("','",$flt['airlines'])."') AND spotter_output.format_source IN ('".implode("','",$flt['source'])."')) saf ON saf.flightaware_id = spotter_output.flightaware_id";
84
					} else {
85
						$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_icao IN ('".implode("','",$flt['airlines'])."')) saf ON saf.flightaware_id = spotter_output.flightaware_id";
86
					}
87
				}
88
			}
89
			if (isset($flt['pilots_id']) && !empty($flt['pilots_id'])) {
90
				if (isset($flt['source'])) {
91
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.pilot_id IN ('".implode("','",$flt['pilots_id'])."') AND spotter_output.format_source IN ('".implode("','",$flt['source'])."')) spf ON spf.flightaware_id = spotter_output.flightaware_id";
92
				} else {
93
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.pilot_id IN ('".implode("','",$flt['pilots_id'])."')) spf ON spf.flightaware_id = spotter_output.flightaware_id";
94
				}
95
			}
96
			if (isset($flt['idents']) && !empty($flt['idents'])) {
97
				if (isset($flt['source'])) {
98
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.ident IN ('".implode("','",$flt['idents'])."') AND spotter_output.format_source IN ('".implode("','",$flt['source'])."')) spfi ON spfi.flightaware_id = spotter_output.flightaware_id";
99
				} else {
100
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.ident IN ('".implode("','",$flt['idents'])."')) spfi ON spfi.flightaware_id = spotter_output.flightaware_id";
101
				}
102
			}
103
			if (isset($flt['registrations']) && !empty($flt['registrations'])) {
104
				if (isset($flt['source'])) {
105
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.registration IN ('".implode("','",$flt['registrations'])."') AND spotter_output.format_source IN ('".implode("','",$flt['source'])."')) sre ON sre.flightaware_id = spotter_output.flightaware_id";
106
				} else {
107
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.registration IN ('".implode("','",$flt['registrations'])."')) sre ON sre.flightaware_id = spotter_output.flightaware_id";
108
				}
109
			}
110
			if ((isset($flt['airlines']) && empty($flt['airlines']) && isset($flt['pilots_id']) && empty($flt['pilots_id']) && isset($flt['idents']) && empty($flt['idents']) && isset($flt['registrations']) && empty($flt['registrations'])) || (!isset($flt['airlines']) && !isset($flt['pilots_id']) && !isset($flt['idents']) && !isset($flt['registrations']))) {
111
				if (isset($flt['source'])) {
112
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.format_source IN ('".implode("','",$flt['source'])."')) sf ON sf.flightaware_id = spotter_output.flightaware_id";
113
				}
114
			}
115
		}
116
		if (isset($filter['airlines']) && !empty($filter['airlines'])) {
117
			if ($filter['airlines'][0] != '') {
118
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_icao IN ('".implode("','",$filter['airlines'])."')) sof ON sof.flightaware_id = spotter_output.flightaware_id";
119
			}
120
		}
121
		if (isset($filter['airlinestype']) && !empty($filter['airlinestype'])) {
122
			$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 ";
123
		}
124
		if (isset($filter['alliance']) && !empty($filter['alliance'])) {
125
			$filter_query_join .= " INNER JOIN (SELECT icao FROM airlines WHERE alliance = '".$filter['alliance']."') sal ON sal.icao = spotter_output.airline_icao ";
126
		}
127
		if (isset($filter['pilots_id']) && !empty($filter['pilots_id'])) {
128
				$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.pilot_id IN ('".implode("','",$filter['pilots_id'])."')) spid ON spid.flightaware_id = spotter_output.flightaware_id";
129
			}
130
		if (isset($filter['source']) && !empty($filter['source'])) {
131
			$filter_query_where .= " AND format_source IN ('".implode("','",$filter['source'])."')";
132
		}
133
		if (isset($filter['ident']) && !empty($filter['ident'])) {
134
			$filter_query_where .= " AND ident = '".$filter['ident']."'";
135
		}
136
		if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
137
			$filter_query_where .= " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
138
		}
139
		if (isset($filter['year']) && $filter['year'] != '') {
140
			if ($globalDBdriver == 'mysql') {
141
				$filter_query_where .= " AND YEAR(spotter_output.date) = '".$filter['year']."'";
142
			} else {
143
				$filter_query_where .= " AND EXTRACT(YEAR FROM spotter_output.date) = '".$filter['year']."'";
144
			}
145
		}
146
		if (isset($filter['month']) && $filter['month'] != '') {
147
			if ($globalDBdriver == 'mysql') {
148
				$filter_query_where .= " AND MONTH(spotter_output.date) = '".$filter['month']."'";
149
			} else {
150
				$filter_query_where .= " AND EXTRACT(MONTH FROM spotter_output.date) = '".$filter['month']."'";
151
			}
152
		}
153
		if (isset($filter['day']) && $filter['day'] != '') {
154
			if ($globalDBdriver == 'mysql') {
155
				$filter_query_where .= " AND DAY(spotter_output.date) = '".$filter['day']."'";
156
			} else {
157
				$filter_query_where .= " AND EXTRACT(DAY FROM spotter_output.date) = '".$filter['day']."'";
158
			}
159
		}
160
		if ($filter_query_where == '' && $where) $filter_query_where = ' WHERE';
161
		elseif ($filter_query_where != '' && $and) $filter_query_where .= ' AND';
162
		if ($filter_query_where != '') {
163
			$filter_query_where = preg_replace('/^ AND/',' WHERE',$filter_query_where);
164
		}
165
		$filter_query = $filter_query_join.$filter_query_where;
166
		return $filter_query;
167
	}
168
169
	/**
170
	* Executes the SQL statements to get the spotter information
171
	*
172
	* @param String $query the SQL query
173
	* @param Array $params parameter of the query
174
	* @param String $limitQuery the limit query
175
	* @return Array the spotter information
176
	*
177
	*/
178
	public function getDataFromDB($query, $params = array(), $limitQuery = '',$schedules = false)
179
	{
180
		global $globalSquawkCountry, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalAirlinesSource, $globalVAM;
181
		$Image = new Image($this->db);
182
		$Schedule = new Schedule($this->db);
183
		$ACARS = new ACARS($this->db);
184
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
185
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
186
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
187
		if (!isset($globalVAM)) $globalVAM = FALSE;
188
		date_default_timezone_set('UTC');
189
		
190
		if (!is_string($query))
191
		{
192
			return false;
193
		}
194
		
195
		if ($limitQuery != "")
196
		{
197
			if (!is_string($limitQuery))
198
			{
199
				return false;
200
			}
201
		}
202
203
		
204
		try {
205
			$sth = $this->db->prepare($query.$limitQuery);
206
			$sth->execute($params);
207
		} catch (PDOException $e) {
208
			printf("Invalid query : %s\nWhole query: %s\n",$e->getMessage(), $query.$limitQuery);
209
			exit();
210
		}
211
		
212
	//	$num_rows = count($sth->fetchAll());
213
		$num_rows = 0;
214
215
		$spotter_array = array();
216
217
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
218
		{
219
			$num_rows++;
220
			$temp_array = array();
221
			if (isset($row['spotter_live_id'])) {
222
				//$temp_array['spotter_id'] = $row['spotter_live_id'];
223
				$temp_array['spotter_id'] = $this->getSpotterIDBasedOnFlightAwareID($row['flightaware_id']);
224
			} elseif (isset($row['spotter_archive_id'])) {
225
				$temp_array['spotter_id'] = $row['spotter_archive_id'];
226
			} elseif (isset($row['spotter_archive_output_id'])) {
227
				$temp_array['spotter_id'] = $row['spotter_archive_output_id'];
228
			} elseif (isset($row['spotter_id'])) {
229
				$temp_array['spotter_id'] = $row['spotter_id'];
230
			} else {
231
				$temp_array['spotter_id'] = '';
232
			}
233
			if (isset($row['flightaware_id'])) $temp_array['flightaware_id'] = $row['flightaware_id'];
234
			if (isset($row['modes'])) $temp_array['modes'] = $row['modes'];
235
			$temp_array['ident'] = $row['ident'];
236
			if (isset($row['registration']) && $row['registration'] != '') {
237
				$temp_array['registration'] = $row['registration'];
238
			} elseif (isset($temp_array['modes'])) {
239
				$temp_array['registration'] = $this->getAircraftRegistrationBymodeS($temp_array['modes']);
240
			} else $temp_array['registration'] = '';
241
			if (isset($row['aircraft_icao'])) $temp_array['aircraft_type'] = $row['aircraft_icao'];
242
			
243
			$temp_array['departure_airport'] = $row['departure_airport_icao'];
244
			$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
245
			if (isset($row['real_arrival_airport_icao']) && $row['real_arrival_airport_icao'] != NULL) $temp_array['real_arrival_airport'] = $row['real_arrival_airport_icao'];
246
			if (isset($row['latitude'])) $temp_array['latitude'] = $row['latitude'];
247
			if (isset($row['longitude'])) $temp_array['longitude'] = $row['longitude'];
248
			/*
249
			if (Connection->tableExists('countries')) {
250
				$country_info = $this->getCountryFromLatitudeLongitude($temp_array['latitude'],$temp_array['longitude']);
251
				if (is_array($country_info) && isset($country_info['name']) && isset($country_info['iso2'])) {
252
				    $temp_array['country'] = $country_info['name'];
253
				    $temp_array['country_iso2'] = $country_info['iso2'];
254
				}
255
			}
256
			*/
257
			if (isset($row['waypoints'])) $temp_array['waypoints'] = $row['waypoints'];
258
			if (isset($row['format_source'])) $temp_array['format_source'] = $row['format_source'];
259
			if (isset($row['route_stop']) && $row['route_stop'] != '') {
260
				$temp_array['route_stop'] = $row['route_stop'];
261
				$allroute = explode(' ',$row['route_stop']);
262
				foreach ($allroute as $route) {
263
					$route_airport_array = $this->getAllAirportInfo($route);
264
					if (isset($route_airport_array[0]['name'])) {
265
						$route_stop_details = array();
266
						$route_stop_details['airport_name'] = $route_airport_array[0]['name'];
267
						$route_stop_details['airport_city'] = $route_airport_array[0]['city'];
268
						$route_stop_details['airport_country'] = $route_airport_array[0]['country'];
269
						$route_stop_details['airport_icao'] = $route_airport_array[0]['icao'];
270
						$temp_array['route_stop_details'][] = $route_stop_details;
271
					}
272
				}
273
			}
274
			if (isset($row['altitude'])) $temp_array['altitude'] = $row['altitude'];
275
			if (isset($row['heading'])) {
276
				$temp_array['heading'] = $row['heading'];
277
				$heading_direction = $this->parseDirection($row['heading']);
278
				if (isset($heading_direction[0]['direction_fullname'])) $temp_array['heading_name'] = $heading_direction[0]['direction_fullname'];
279
			}
280
			if (isset($row['ground_speed'])) $temp_array['ground_speed'] = $row['ground_speed'];
281
			$temp_array['image'] = "";
282
			$temp_array['image_thumbnail'] = "";
283
			$temp_array['image_source'] = "";
284
			$temp_array['image_copyright'] = "";
285
 
286
			if (isset($row['highlight'])) {
287
				$temp_array['highlight'] = $row['highlight'];
288
			} else $temp_array['highlight'] = '';
289
			
290
			if (isset($row['date'])) {
291
				$dateArray = $this->parseDateString($row['date']);
292
				if ($dateArray['seconds'] < 10)
293
				{
294
					$temp_array['date'] = "a few seconds ago";
295
				} elseif ($dateArray['seconds'] >= 5 && $dateArray['seconds'] < 30)
296
				{
297
					$temp_array['date'] = "half a minute ago";
298
				} elseif ($dateArray['seconds'] >= 30 && $dateArray['seconds'] < 60)
299
				{
300
					$temp_array['date'] = "about a minute ago";
301
				} elseif ($dateArray['minutes'] < 5)
302
				{
303
					$temp_array['date'] = "a few minutes ago";
304
				} elseif ($dateArray['minutes'] >= 5 && $dateArray['minutes'] < 60)
305
				{
306
					$temp_array['date'] = "about ".$dateArray['minutes']." minutes ago";
307
				} elseif ($dateArray['hours'] < 2)
308
				{
309
					$temp_array['date'] = "about an hour ago";
310
				} elseif ($dateArray['hours'] >= 2 && $dateArray['hours'] < 24)
311
				{
312
					$temp_array['date'] = "about ".$dateArray['hours']." hours ago";
313
				} else {
314
					$temp_array['date'] = date("M j Y, g:i a",strtotime($row['date']." UTC"));
315
				}
316
				$temp_array['date_minutes_past'] = $dateArray['minutes'];
317
				$temp_array['date_iso_8601'] = date("c",strtotime($row['date']." UTC"));
318
				$temp_array['date_rfc_2822'] = date("r",strtotime($row['date']." UTC"));
319
				$temp_array['date_unix'] = strtotime($row['date']." UTC");
320
				if (isset($row['last_seen']) && $row['last_seen'] != '') {
321
					if (strtotime($row['last_seen']) > strtotime($row['date'])) {
322
						$temp_array['duration'] = strtotime($row['last_seen']) - strtotime($row['date']);
323
						$temp_array['last_seen_date_iso_8601'] = date("c",strtotime($row['last_seen']." UTC"));
324
						$temp_array['last_seen_date_rfc_2822'] = date("r",strtotime($row['last_seen']." UTC"));
325
						$temp_array['last_seen_date_unix'] = strtotime($row['last_seen']." UTC");
326
					}
327
				}
328
			}
329
			
330
			if (isset($row['aircraft_name']) && $row['aircraft_name'] != '' && isset($row['aircraft_shadow']) && $row['aircraft_shadow'] != '') {
331
				$temp_array['aircraft_name'] = $row['aircraft_name'];
332
				$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
333
				if (isset($row['aircraft_shadow'])) {
334
					$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
335
				}
336
			} elseif (isset($row['aircraft_icao'])) {
337
				$aircraft_array = $this->getAllAircraftInfo($row['aircraft_icao']);
338
				if (count($aircraft_array) > 0) {
339
					$temp_array['aircraft_name'] = $aircraft_array[0]['type'];
340
					$temp_array['aircraft_manufacturer'] = $aircraft_array[0]['manufacturer'];
341
				
342
					if ($aircraft_array[0]['aircraft_shadow'] != NULL) {
343
						$temp_array['aircraft_shadow'] = $aircraft_array[0]['aircraft_shadow'];
344
					} else $temp_array['aircraft_shadow'] = 'default.png';
345
                                } else {
346
                            		$temp_array['aircraft_shadow'] = 'default.png';
347
					$temp_array['aircraft_name'] = 'N/A';
348
					$temp_array['aircraft_manufacturer'] = 'N/A';
349
                            	}
350
			}
351
			$fromsource = NULL;
352
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
353
			elseif (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
354
			elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
355
			elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
356
			elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
357
			if (!isset($row['airline_name']) || $row['airline_name'] == '') {
358
				if (!is_numeric(substr($row['ident'], 0, 3))) {
359
					if (is_numeric(substr($row['ident'], 2, 1))) {
360
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 2),$fromsource);
361
					} elseif (is_numeric(substr($row['ident'], 3, 1))) {
362
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
363
					} else {
364
						$airline_array = $this->getAllAirlineInfo('NA');
365
					}
366
				} else {
367
					$airline_array = $this->getAllAirlineInfo('NA');
368
				}
369
				if (count($airline_array) > 0) {
370
					$temp_array['airline_icao'] = $airline_array[0]['icao'];
371
					$temp_array['airline_iata'] = $airline_array[0]['iata'];
372
					$temp_array['airline_name'] = $airline_array[0]['name'];
373
					$temp_array['airline_country'] = $airline_array[0]['country'];
374
					$temp_array['airline_callsign'] = $airline_array[0]['callsign'];
375
					$temp_array['airline_type'] = $airline_array[0]['type'];
376
				}
377
			} else {
378
				$temp_array['airline_icao'] = $row['airline_icao'];
379
				if (isset($row['airline_iata'])) $temp_array['airline_iata'] = $row['airline_iata'];
380
				else $temp_array['airline_iata'] = 'N/A';
381
				$temp_array['airline_name'] = $row['airline_name'];
382
				$temp_array['airline_country'] = $row['airline_country'];
383
				if (isset($row['airline_callsign'])) $temp_array['airline_callsign'] = $row['airline_callsign'];
384
				else $temp_array['airline_callsign'] = 'N/A';
385
				$temp_array['airline_type'] = $row['airline_type'];
386
				if ($temp_array['airline_icao'] != '' && $temp_array['airline_iata'] == 'N/A') {
387
					$airline_array = $this->getAllAirlineInfo($temp_array['airline_icao']);
388
					if (count($airline_array) > 0) {
389
						$temp_array['airline_icao'] = $airline_array[0]['icao'];
390
						$temp_array['airline_iata'] = $airline_array[0]['iata'];
391
						$temp_array['airline_name'] = $airline_array[0]['name'];
392
						$temp_array['airline_country'] = $airline_array[0]['country'];
393
						$temp_array['airline_callsign'] = $airline_array[0]['callsign'];
394
						$temp_array['airline_type'] = $airline_array[0]['type'];
395
					}
396
				}
397
			}
398
			if (isset($temp_array['airline_iata']) && $temp_array['airline_iata'] != '') {
399
				$acars_array = $ACARS->getLiveAcarsData($temp_array['airline_iata'].substr($temp_array['ident'],3));
400
				//$acars_array = ACARS->getLiveAcarsData('BA40YL');
401
				if (count($acars_array) > 0) {
402
					$temp_array['acars'] = $acars_array;
403
					//print_r($acars_array);
404
				}
405
			}
406
			if (isset($row['owner_name']) && $row['owner_name'] != '' && $row['owner_name'] != NULL) {
407
				$temp_array['aircraft_owner'] = $row['owner_name'];
408
			}
409
			if ($temp_array['registration'] != "" && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM && !isset($temp_array['aircraft_owner'])) {
410
				$owner_info = $this->getAircraftOwnerByRegistration($temp_array['registration']);
411
				if ($owner_info['owner'] != '') $temp_array['aircraft_owner'] = ucwords(strtolower($owner_info['owner']));
412
				$temp_array['aircraft_base'] = $owner_info['base'];
413
				$temp_array['aircraft_date_first_reg'] = $owner_info['date_first_reg'];
414
			}
415
416
			if($temp_array['registration'] != "" || (($globalIVAO || $globalVATSIM || $globalphpVMS || $globalVAM) && isset($temp_array['aircraft_type']) && $temp_array['aircraft_type'] != ''))
417
			{
418
				if ($globalIVAO) {
419
					if (isset($temp_array['airline_icao']))	$image_array = $Image->getSpotterImage('',$temp_array['aircraft_type'],$temp_array['airline_icao']);
420
					else $image_array = $Image->getSpotterImage('',$temp_array['aircraft_type']);
421
				} elseif (isset($temp_array['aircraft_type']) && isset($temp_array['airline_icao'])) $image_array = $Image->getSpotterImage($temp_array['registration'],$temp_array['aircraft_type'],$temp_array['airline_icao']);
422
				elseif (isset($temp_array['aircraft_type'])) $image_array = $Image->getSpotterImage($temp_array['registration'],$temp_array['aircraft_type']);
423
				else $image_array = $Image->getSpotterImage($temp_array['registration']);
424
				if (count($image_array) > 0) {
425
					$temp_array['image'] = $image_array[0]['image'];
426
					$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
427
					$temp_array['image_source'] = $image_array[0]['image_source'];
428
					$temp_array['image_source_website'] = $image_array[0]['image_source_website'];
429
					if ($temp_array['image_source_website'] == '' && $temp_array['image_source'] == 'planespotters') {
430
						$planespotter_url_array = explode("_", $temp_array['image']);
431
						$planespotter_id = str_replace(".jpg", "", $planespotter_url_array[1]);
432
						$temp_array['image_source_website'] = 'http://www.planespotters.net/Aviation_Photos/photo.show?id='.$planespotter_id;
433
					 }
434
					$temp_array['image_copyright'] = $image_array[0]['image_copyright'];
435
				}
436
			}
437
438
439
			if (isset($row['departure_airport_time']) && $row['departure_airport_time'] != '') {
440
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
441
			}
442
			if (isset($row['arrival_airport_time']) && $row['arrival_airport_time'] != '') {
443
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
444
			}
445
			
446
			if ((!isset($globalIVAO) || ! $globalIVAO) && (!isset($globalVATSIM) || !$globalVATSIM) && (!isset($globalphpVMS) || !$globalphpVMS) && (!isset($globalVAM) || !$globalVAM)) {
447
				if ($schedules === true) {
448
					$schedule_array = $Schedule->getSchedule($temp_array['ident']);
449
					//print_r($schedule_array);
450
					if (count($schedule_array) > 0) {
451
						if ($schedule_array['departure_airport_icao'] != '') {
452
							$row['departure_airport_icao'] = $schedule_array['departure_airport_icao'];
453
							$temp_array['departure_airport'] = $row['departure_airport_icao'];
454
						}
455
						if ($schedule_array['arrival_airport_icao'] != '') {
456
							$row['arrival_airport_icao'] = $schedule_array['arrival_airport_icao'];
457
							$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
458
						}
459
						$temp_array['departure_airport_time'] = $schedule_array['departure_airport_time'];
460
						$temp_array['arrival_airport_time'] = $schedule_array['arrival_airport_time'];
461
					}
462
				}
463
			} else {
464
				if (isset($row['real_departure_airport_time']) && $row['real_departure_airport_time'] != '') {
465
					$temp_array['departure_airport_time'] = $row['real_departure_airport_time'];
466
				}
467
				if (isset($row['real_arrival_airport_time']) && $row['real_arrival_airport_time'] != '') {
468
					$temp_array['real_arrival_airport_time'] = $row['real_arrival_airport_time'];
469
				}
470
			}
471
			
472
			//if ($row['departure_airport_icao'] != '' && $row['departure_airport_name'] == '') {
473
			if ($row['departure_airport_icao'] != '') {
474
				$departure_airport_array = $this->getAllAirportInfo($row['departure_airport_icao']);
475
				if (!isset($departure_airport_array[0]['name'])) $departure_airport_array = $this->getAllAirportInfo('NA');
476
			/*
477
			} elseif ($row['departure_airport_name'] != '') {
478
				$temp_array['departure_airport_name'] = $row['departure_airport_name'];
479
				$temp_array['departure_airport_city'] = $row['departure_airport_city'];
480
				$temp_array['departure_airport_country'] = $row['departure_airport_country'];
481
				$temp_array['departure_airport_icao'] = $row['departure_airport_icao'];
482
			*/
483
			} else $departure_airport_array = $this->getAllAirportInfo('NA');
484
			if (isset($departure_airport_array[0]['name'])) {
485
				$temp_array['departure_airport_name'] = $departure_airport_array[0]['name'];
486
				$temp_array['departure_airport_city'] = $departure_airport_array[0]['city'];
487
				$temp_array['departure_airport_country'] = $departure_airport_array[0]['country'];
488
				$temp_array['departure_airport_iata'] = $departure_airport_array[0]['iata'];
489
				$temp_array['departure_airport_icao'] = $departure_airport_array[0]['icao'];
490
				$temp_array['departure_airport_latitude'] = $departure_airport_array[0]['latitude'];
491
				$temp_array['departure_airport_longitude'] = $departure_airport_array[0]['longitude'];
492
				$temp_array['departure_airport_altitude'] = $departure_airport_array[0]['altitude'];
493
			}
494
495
			/*
496
			if (isset($row['departure_airport_time'])) {
497
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
498
			}
499
			*/
500
			
501
			if ($row['arrival_airport_icao'] != '') {
502
				$arrival_airport_array = $this->getAllAirportInfo($row['arrival_airport_icao']);
503
				if (count($arrival_airport_array) == 0) $arrival_airport_array = $this->getAllAirportInfo('NA');
504
			} else $arrival_airport_array = $this->getAllAirportInfo('NA');
505
			if (isset($arrival_airport_array[0]['name'])) {
506
				$temp_array['arrival_airport_name'] = $arrival_airport_array[0]['name'];
507
				$temp_array['arrival_airport_city'] = $arrival_airport_array[0]['city'];
508
				$temp_array['arrival_airport_country'] = $arrival_airport_array[0]['country'];
509
				$temp_array['arrival_airport_iata'] = $arrival_airport_array[0]['iata'];
510
				$temp_array['arrival_airport_icao'] = $arrival_airport_array[0]['icao'];
511
				$temp_array['arrival_airport_latitude'] = $arrival_airport_array[0]['latitude'];
512
				$temp_array['arrival_airport_longitude'] = $arrival_airport_array[0]['longitude'];
513
				$temp_array['arrival_airport_altitude'] = $arrival_airport_array[0]['altitude'];
514
			}
515
			/*
516
			if (isset($row['arrival_airport_time'])) {
517
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
518
			}
519
			*/
520
			if (isset($row['pilot_id']) && $row['pilot_id'] != '') $temp_array['pilot_id'] = $row['pilot_id'];
521
			if (isset($row['pilot_name']) && $row['pilot_name'] != '') $temp_array['pilot_name'] = $row['pilot_name'];
522
			if (isset($row['source_name']) && $row['source_name'] != '') $temp_array['source_name'] = $row['source_name'];
523
			if (isset($row['over_country']) && $row['over_country'] != '') $temp_array['over_country'] = $row['over_country'];
524
			if (isset($row['distance']) && $row['distance'] != '') $temp_array['distance'] = $row['distance'];
525
			if (isset($row['squawk'])) {
526
				$temp_array['squawk'] = $row['squawk'];
527
				if ($row['squawk'] != '' && isset($temp_array['country_iso2'])) {
528
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['country_iso2']);
529
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
530
				} elseif ($row['squawk'] != '' && isset($temp_array['over_country'])) {
531
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['over_country']);
532
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
533
				} elseif ($row['squawk'] != '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
534
			}
535
    			
536
			$temp_array['query_number_rows'] = $num_rows;
537
			
538
			$spotter_array[] = $temp_array;
539
		}
540
		if ($num_rows == 0) return array();
541
		$spotter_array[0]['query_number_rows'] = $num_rows;
542
		return $spotter_array;
543
	}	
544
	
545
	
546
	/**
547
	* Gets all the spotter information
548
	*
549
	* @return Array the spotter information
550
	*
551
	*/
552
	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())
553
	{
554
		global $globalTimezone, $globalDBdriver;
555
		require_once(dirname(__FILE__).'/class.Translation.php');
556
		$Translation = new Translation();
557
558
		date_default_timezone_set('UTC');
559
560
		$query_values = array();
561
		$additional_query = '';
562
		$filter_query = $this->getFilter($filters,true,true);
563
		if ($q != "")
564
		{
565
			if (!is_string($q))
566
			{
567
				return false;
568
			} else {
569
				$q_array = explode(" ", $q);
570
				foreach ($q_array as $q_item){
571
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
572
					$additional_query .= " AND (";
573
					if (is_int($q_item)) $additional_query .= "(spotter_output.spotter_id like '%".$q_item."%') OR ";
574
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
575
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
576
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
577
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
578
					$additional_query .= "(spotter_output.airline_name like '%".$q_item."%') OR ";
579
					$additional_query .= "(spotter_output.airline_country like '%".$q_item."%') OR ";
580
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
581
					$additional_query .= "(spotter_output.departure_airport_name like '%".$q_item."%') OR ";
582
					$additional_query .= "(spotter_output.departure_airport_city like '%".$q_item."%') OR ";
583
					$additional_query .= "(spotter_output.departure_airport_country like '%".$q_item."%') OR ";
584
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
585
					$additional_query .= "(spotter_output.arrival_airport_name like '%".$q_item."%') OR ";
586
					$additional_query .= "(spotter_output.arrival_airport_city like '%".$q_item."%') OR ";
587
					$additional_query .= "(spotter_output.arrival_airport_country like '%".$q_item."%') OR ";
588
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
589
					$additional_query .= "(spotter_output.owner_name like '%".$q_item."%') OR ";
590
					$additional_query .= "(spotter_output.pilot_id like '%".$q_item."%') OR ";
591
					$additional_query .= "(spotter_output.pilot_name like '%".$q_item."%') OR ";
592
					$additional_query .= "(spotter_output.ident like '%".$q_item."%') OR ";
593
					$translate = $Translation->ident2icao($q_item);
594
					if ($translate != $q_item) $additional_query .= "(spotter_output.ident like '%".$translate."%') OR ";
595
					$additional_query .= "(spotter_output.highlight like '%".$q_item."%')";
596
					$additional_query .= ")";
597
				}
598
			}
599
		}
600
601
		if ($registration != "")
602
		{
603
			$registration = filter_var($registration,FILTER_SANITIZE_STRING);
604
			if (!is_string($registration))
605
			{
606
				return false;
607
			} else {
608
				$additional_query .= " AND spotter_output.registration = :registration";
609
				$query_values = array_merge($query_values,array(':registration' => $registration));
610
			}
611
		}
612
613
		if ($aircraft_icao != "")
614
		{
615
			$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
616
			if (!is_string($aircraft_icao))
617
			{
618
				return false;
619
			} else {
620
				$additional_query .= " AND spotter_output.aircraft_icao = :aircraft_icao";
621
				$query_values = array_merge($query_values,array(':aircraft_icao' => $aircraft_icao));
622
			}
623
		}
624
625
		if ($aircraft_manufacturer != "")
626
		{
627
			$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
628
			if (!is_string($aircraft_manufacturer))
629
			{
630
				return false;
631
			} else {
632
				$additional_query .= " AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer";
633
				$query_values = array_merge($query_values,array(':aircraft_manufacturer' => $aircraft_manufacturer));
634
			}
635
		}
636
637
		if ($highlights == "true")
638
		{
639
			if (!is_string($highlights))
640
			{
641
				return false;
642
			} else {
643
				$additional_query .= " AND (spotter_output.highlight <> '')";
644
			}
645
		}
646
647
		if ($airline_icao != "")
648
		{
649
			$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
650
			if (!is_string($airline_icao))
651
			{
652
				return false;
653
			} else {
654
				$additional_query .= " AND spotter_output.airline_icao = :airline_icao";
655
				$query_values = array_merge($query_values,array(':airline_icao' => $airline_icao));
656
			}
657
		}
658
659
		if ($airline_country != "")
660
		{
661
			$airline_country = filter_var($airline_country,FILTER_SANITIZE_STRING);
662
			if (!is_string($airline_country))
663
			{
664
				return false;
665
			} else {
666
				$additional_query .= " AND spotter_output.airline_country = :airline_country";
667
				$query_values = array_merge($query_values,array(':airline_country' => $airline_country));
668
			}
669
		}
670
671
		if ($airline_type != "")
672
		{
673
			if (!is_string($airline_type))
674
			{
675
				return false;
676
			} else {
677
				if ($airline_type == "passenger")
678
				{
679
					$additional_query .= " AND (spotter_output.airline_type = 'passenger')";
680
				}
681
				if ($airline_type == "cargo")
682
				{
683
					$additional_query .= " AND (spotter_output.airline_type = 'cargo')";
684
				}
685
				if ($airline_type == "military")
686
				{
687
					$additional_query .= " AND (spotter_output.airline_type = 'military')";
688
				}
689
			}
690
		}
691
692
		if ($airport != "")
693
		{
694
			$airport = filter_var($airport,FILTER_SANITIZE_STRING);
695
			if (!is_string($airport))
696
			{
697
				return false;
698
			} else {
699
				$additional_query .= " AND (spotter_output.departure_airport_icao = :airport OR spotter_output.arrival_airport_icao = :airport)";
700
				$query_values = array_merge($query_values,array(':airport' => $airport));
701
			}
702
		}
703
704
		if ($airport_country != "")
705
		{
706
			$airport_country = filter_var($airport_country,FILTER_SANITIZE_STRING);
707
			if (!is_string($airport_country))
708
			{
709
				return false;
710
			} else {
711
				$additional_query .= " AND (spotter_output.departure_airport_country = :airport_country OR spotter_output.arrival_airport_country = :airport_country)";
712
				$query_values = array_merge($query_values,array(':airport_country' => $airport_country));
713
			}
714
		}
715
    
716
		if ($callsign != "")
717
		{
718
			$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
719
			if (!is_string($callsign))
720
			{
721
				return false;
722
			} else {
723
				$translate = $Translation->ident2icao($callsign);
724
				if ($translate != $callsign) {
725
					$additional_query .= " AND (spotter_output.ident = :callsign OR spotter_output.ident = :translate)";
726
					$query_values = array_merge($query_values,array(':callsign' => $callsign,':translate' => $translate));
727
				} else {
728
					$additional_query .= " AND spotter_output.ident = :callsign";
729
					$query_values = array_merge($query_values,array(':callsign' => $callsign));
730
				}
731
			}
732
		}
733
734
		if ($owner != "")
735
		{
736
			$owner = filter_var($owner,FILTER_SANITIZE_STRING);
737
			if (!is_string($owner))
738
			{
739
				return false;
740
			} else {
741
				$additional_query .= " AND spotter_output.owner_name = :owner";
742
				$query_values = array_merge($query_values,array(':owner' => $owner));
743
			}
744
		}
745
746
		if ($pilot_name != "")
747
		{
748
			$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
749
			if (!is_string($pilot_name))
750
			{
751
				return false;
752
			} else {
753
				$additional_query .= " AND spotter_output.pilot_name = :pilot_name";
754
				$query_values = array_merge($query_values,array(':pilot_name' => $pilot_name));
755
			}
756
		}
757
758
		if ($pilot_id != "")
759
		{
760
			$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_STRING);
761
			if (!is_string($pilot_id))
762
			{
763
				return false;
764
			} else {
765
				$additional_query .= " AND spotter_output.pilot_id = :pilot_id";
766
				$query_values = array_merge($query_values,array(':pilot_id' => $pilot_id));
767
			}
768
		}
769
770
		if ($departure_airport_route != "")
771
		{
772
			$departure_airport_route = filter_var($departure_airport_route,FILTER_SANITIZE_STRING);
773
			if (!is_string($departure_airport_route))
774
			{
775
				return false;
776
			} else {
777
				$additional_query .= " AND spotter_output.departure_airport_icao = :departure_airport_route";
778
				$query_values = array_merge($query_values,array(':departure_airport_route' => $departure_airport_route));
779
			}
780
		}
781
782
		if ($arrival_airport_route != "")
783
		{
784
			$arrival_airport_route = filter_var($arrival_airport_route,FILTER_SANITIZE_STRING);
785
			if (!is_string($arrival_airport_route))
786
			{
787
				return false;
788
			} else {
789
				$additional_query .= " AND spotter_output.arrival_airport_icao = :arrival_airport_route";
790
				$query_values = array_merge($query_values,array(':arrival_airport_route' => $arrival_airport_route));
791
			}
792
		}
793
794
		if ($altitude != "")
795
		{
796
			$altitude_array = explode(",", $altitude);
797
			$altitude_array[0] = filter_var($altitude_array[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
798
			$altitude_array[1] = filter_var($altitude_array[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
799
800
			if ($altitude_array[1] != "")
801
			{                
802
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
803
				$altitude_array[1] = substr($altitude_array[1], 0, -2);
804
				$additional_query .= " AND altitude BETWEEN '".$altitude_array[0]."' AND '".$altitude_array[1]."' ";
805
			} else {
806
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
807
				$additional_query .= " AND altitude <= '".$altitude_array[0]."' ";
808
			}
809
		}
810
811
		if ($date_posted != "")
812
		{
813
			$date_array = explode(",", $date_posted);
814
			$date_array[0] = filter_var($date_array[0],FILTER_SANITIZE_STRING);
815
			$date_array[1] = filter_var($date_array[1],FILTER_SANITIZE_STRING);
816
817
			if ($globalTimezone != '') {
818
				date_default_timezone_set($globalTimezone);
819
				$datetime = new DateTime();
820
				$offset = $datetime->format('P');
821
			} else $offset = '+00:00';
822
823
			if ($date_array[1] != "")
824
			{
825
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
826
				$date_array[1] = date("Y-m-d H:i:s", strtotime($date_array[1]));
827
				if ($globalDBdriver == 'mysql') {
828
					$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]."' ";
829
				} else {
830
					$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]."' ";
831
				}
832
			} else {
833
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
834
				if ($globalDBdriver == 'mysql') {
835
					$additional_query .= " AND TIMESTAMP(CONVERT_TZ(spotter_output.date,'+00:00', '".$offset."')) >= '".$date_array[0]."' ";
836
				} else {
837
					$additional_query .= " AND CAST(spotter_output.date AT TIME ZONE INTERVAL ".$offset." AS TIMESTAMP) >= '".$date_array[0]."' ";
838
				}
839
			}
840
		}
841
842
		if ($limit != "")
843
		{
844
			$limit_array = explode(",", $limit);
845
			
846
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
847
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
848
			
849
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
850
			{
851
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
852
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
853
			} else $limit_query = "";
854
		} else $limit_query = "";
855
856
857
		if ($sort != "")
858
		{
859
			$search_orderby_array = $this->getOrderBy();
860
			$orderby_query = $search_orderby_array[$sort]['sql'];
861
		} else {
862
			if ($origLat != "" && $origLon != "" && $dist != "") {
863
				$orderby_query = " ORDER BY distance ASC";
864
			} else {
865
				$orderby_query = " ORDER BY spotter_output.date DESC";
866
			}
867
		}
868
869
		if ($includegeodata == "true")
870
		{
871
			$additional_query .= " AND spotter_output.waypoints <> ''";
872
		}
873
874
875
		if ($origLat != "" && $origLon != "" && $dist != "") {
876
			$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
877
878
			if ($globalDBdriver == 'mysql') {
879
				$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 
880
						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)) 
881
						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;
882
			} else {
883
				$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 
884
						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)) 
885
						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;
886
			}
887
		} else {		
888
			$query  = "SELECT spotter_output.* FROM spotter_output".$filter_query." spotter_output.ident <> '' 
889
					".$additional_query."
890
					".$orderby_query;
891
		}
892
		$spotter_array = $this->getDataFromDB($query, $query_values,$limit_query);
893
		return $spotter_array;
894
	}
895
	
896
	
897
	/**
898
	* Gets all the spotter information based on the latest data entry
899
	*
900
	* @return Array the spotter information
901
	*
902
	*/
903
	public function getLatestSpotterData($limit = '', $sort = '', $filter = array())
904
	{
905
		global $global_query;
906
		
907
		date_default_timezone_set('UTC');
908
909
		$filter_query = $this->getFilter($filter);
910
		
911
		if ($limit != "")
912
		{
913
			$limit_array = explode(",", $limit);
914
			
915
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
916
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
917
			
918
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
919
			{
920
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
921
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
922
			} else $limit_query = "";
923
		} else $limit_query = "";
924
		
925
		if ($sort != "")
926
		{
927
			$search_orderby_array = $this->getOrderBy();
928
			$orderby_query = $search_orderby_array[$sort]['sql'];
929
		} else {
930
			$orderby_query = " ORDER BY spotter_output.date DESC";
931
		}
932
933
		$query  = $global_query.$filter_query." ".$orderby_query;
934
935
		$spotter_array = $this->getDataFromDB($query, array(),$limit_query,true);
936
937
		return $spotter_array;
938
	}
939
    
940
    
941
    /**
942
	* Gets all the spotter information based on a user's latitude and longitude
943
	*
944
	* @return Array the spotter information
945
	*
946
	*/
947
	public function getLatestSpotterForLayar($lat, $lng, $radius, $interval)
948
	{
949
		date_default_timezone_set('UTC');
950
		$limit_query = '';
951
		if ($lat != "")
952
		{
953
			if (!is_numeric($lat))
954
			{
955
				return false;
956
			}
957
		}
958
        
959
		if ($lng != "")
960
		{
961
			if (!is_numeric($lng))
962
			{
963
				return false;
964
			}
965
		}
966
		
967
		if ($radius != "")
968
		{
969
			if (!is_numeric($radius))
970
			{
971
				return false;
972
			}
973
		}
974
    		$additional_query = '';
975
		if ($interval != "")
976
		{
977
			if (!is_string($interval))
978
			{
979
				return false;
980
			} else {
981
				if ($interval == "30m"){
982
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 MINUTE) <= $this_output.date ';
983
				} else if ($interval == "1h"){
984
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) <= $this_output.date ';
985
				} else if ($interval == "3h"){
986
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 3 HOUR) <= $this_output.date ';
987
				} else if ($interval == "6h"){
988
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 6 HOUR) <= $this_output.date ';
989
				} else if ($interval == "12h"){
990
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 12 HOUR) <= $this_output.date ';
991
				} else if ($interval == "24h"){
992
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 24 HOUR) <= $this_output.date ';
993
				} else if ($interval == "7d"){
994
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY) <= $this_output.date ';
995
				} else if ($interval == "30d"){
996
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 DAY) <= $this_output.date ';
997
				} 
998
			}
999
		}
1000
1001
		$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 
1002
                   WHERE spotter_output.latitude <> '' 
1003
				   AND spotter_output.longitude <> '' 
1004
                   ".$additional_query."
1005
                   HAVING distance < :radius  
1006
				   ORDER BY distance";
1007
1008
		$spotter_array = $this->getDataFromDB($query, array(':radius' => $radius),$limit_query);
1009
1010
		return $spotter_array;
1011
	}
1012
    
1013
    
1014
    /**
1015
	* Gets all the spotter information sorted by the newest aircraft type
1016
	*
1017
	* @return Array the spotter information
1018
	*
1019
	*/
1020
	public function getNewestSpotterDataSortedByAircraftType($limit = '', $sort = '',$filter = array())
1021
	{
1022
		global $global_query;
1023
		
1024
		date_default_timezone_set('UTC');
1025
1026
		$filter_query = $this->getFilter($filter,true,true);
1027
1028
		$limit_query = '';
1029
		if ($limit != "")
1030
		{
1031
			$limit_array = explode(",", $limit);
1032
			
1033
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1034
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1035
			
1036
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1037
			{
1038
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1039
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1040
			}
1041
		}
1042
		
1043
		if ($sort != "")
1044
		{
1045
			$search_orderby_array = $this->getOrderBy();
1046
			$orderby_query = $search_orderby_array[$sort]['sql'];
1047
		} else {
1048
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1049
		}
1050
1051
		$query  = $global_query." ".$filter_query." spotter_output.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;
1052
1053
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1054
1055
		return $spotter_array;
1056
	}
1057
    
1058
    
1059
	/**
1060
	* Gets all the spotter information sorted by the newest aircraft registration
1061
	*
1062
	* @return Array the spotter information
1063
	*
1064
	*/
1065
	public function getNewestSpotterDataSortedByAircraftRegistration($limit = '', $sort = '', $filter = array())
1066
	{
1067
		global $global_query;
1068
		
1069
		date_default_timezone_set('UTC');
1070
		$filter_query = $this->getFilter($filter,true,true);
1071
1072
		$limit_query = '';
1073
		if ($limit != "")
1074
		{
1075
			$limit_array = explode(",", $limit);
1076
			
1077
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1078
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1079
			
1080
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1081
			{
1082
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1083
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1084
			}
1085
		}
1086
		
1087
		if ($sort != "")
1088
		{
1089
			$search_orderby_array = $this->getOrderBy();
1090
			$orderby_query = $search_orderby_array[$sort]['sql'];
1091
		} else {
1092
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1093
		}
1094
1095
		$query  = $global_query." ".$filter_query." spotter_output.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;
1096
1097
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1098
1099
		return $spotter_array;
1100
	}
1101
1102
1103
	/**
1104
	* Gets all the spotter information sorted by the newest airline
1105
	*
1106
	* @return Array the spotter information
1107
	*
1108
	*/
1109
	public function getNewestSpotterDataSortedByAirline($limit = '', $sort = '',$filter = array())
1110
	{
1111
		global $global_query;
1112
		
1113
		date_default_timezone_set('UTC');
1114
		$filter_query = $this->getFilter($filter,true,true);
1115
		
1116
		$limit_query = '';
1117
		if ($limit != "")
1118
		{
1119
			$limit_array = explode(",", $limit);
1120
			
1121
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1122
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1123
			
1124
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1125
			{
1126
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1127
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1128
			}
1129
		}
1130
		
1131
		if ($sort != "")
1132
		{
1133
			$search_orderby_array = $this->getOrderBy();
1134
			$orderby_query = $search_orderby_array[$sort]['sql'];
1135
		} else {
1136
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1137
		}
1138
1139
		$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;
1140
1141
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1142
1143
		return $spotter_array;
1144
	}
1145
    
1146
    
1147
    /**
1148
	* Gets all the spotter information sorted by the newest departure airport
1149
	*
1150
	* @return Array the spotter information
1151
	*
1152
	*/
1153
	public function getNewestSpotterDataSortedByDepartureAirport($limit = '', $sort = '', $filter = array())
1154
	{
1155
		global $global_query;
1156
		
1157
		date_default_timezone_set('UTC');
1158
		
1159
		$filter_query = $this->getFilter($filter,true,true);
1160
		
1161
		$limit_query = '';
1162
		
1163
		if ($limit != "")
1164
		{
1165
			$limit_array = explode(",", $limit);
1166
			
1167
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1168
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1169
			
1170
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1171
			{
1172
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1173
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1174
			}
1175
		}
1176
		
1177
		if ($sort != "")
1178
		{
1179
			$search_orderby_array = $this->getOrderBy();
1180
			$orderby_query = $search_orderby_array[$sort]['sql'];
1181
		} else {
1182
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1183
		}
1184
1185
		$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;
1186
1187
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1188
1189
		return $spotter_array;
1190
	}
1191
1192
1193
	/**
1194
	* Gets all the spotter information sorted by the newest arrival airport
1195
	*
1196
	* @return Array the spotter information
1197
	*
1198
	*/
1199
	public function getNewestSpotterDataSortedByArrivalAirport($limit = '', $sort = '', $filter = array())
1200
	{
1201
		global $global_query;
1202
		
1203
		date_default_timezone_set('UTC');
1204
		$filter_query = $this->getFilter($filter,true,true);
1205
		$limit_query = '';
1206
		if ($limit != "")
1207
		{
1208
			$limit_array = explode(",", $limit);
1209
			
1210
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1211
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1212
			
1213
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1214
			{
1215
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1216
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1217
			}
1218
		}
1219
		
1220
		if ($sort != "")
1221
		{
1222
			$search_orderby_array = $this->getOrderBy();
1223
			$orderby_query = $search_orderby_array[$sort]['sql'];
1224
		} else {
1225
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1226
		}
1227
1228
		$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;
1229
1230
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1231
1232
		return $spotter_array;
1233
	}
1234
	
1235
1236
	/**
1237
	* Gets all the spotter information based on the spotter id
1238
	*
1239
	* @return Array the spotter information
1240
	*
1241
	*/
1242
	public function getSpotterDataByID($id = '')
1243
	{
1244
		global $global_query;
1245
		
1246
		date_default_timezone_set('UTC');
1247
		if ($id == '') return array();
1248
		$additional_query = "spotter_output.spotter_id = :id";
1249
		$query_values = array(':id' => $id);
1250
1251
		//$query  = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ";
1252
		$query  = $global_query." WHERE ".$additional_query." ";
1253
1254
		$spotter_array = $this->getDataFromDB($query,$query_values);
1255
1256
		return $spotter_array;
1257
	}
1258
1259
	
1260
	
1261
	
1262
	/**
1263
	* Gets all the spotter information based on the callsign
1264
	*
1265
	* @return Array the spotter information
1266
	*
1267
	*/
1268
	public function getSpotterDataByIdent($ident = '', $limit = '', $sort = '', $filter = array())
1269
	{
1270
		global $global_query;
1271
		
1272
		date_default_timezone_set('UTC');
1273
		
1274
		$query_values = array();
1275
		$limit_query = '';
1276
		$additional_query = '';
1277
		$filter_query = $this->getFilter($filter,true,true);
1278
		if ($ident != "")
1279
		{
1280
			if (!is_string($ident))
1281
			{
1282
				return false;
1283
			} else {
1284
				$additional_query = " AND (spotter_output.ident = :ident)";
1285
				$query_values = array(':ident' => $ident);
1286
			}
1287
		}
1288
		
1289
		if ($limit != "")
1290
		{
1291
			$limit_array = explode(",", $limit);
1292
			
1293
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1294
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1295
			
1296
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1297
			{
1298
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1299
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1300
			}
1301
		}
1302
1303
		if ($sort != "")
1304
		{
1305
			$search_orderby_array = $this->getOrderBy();
1306
			$orderby_query = $search_orderby_array[$sort]['sql'];
1307
		} else {
1308
			$orderby_query = " ORDER BY spotter_output.date DESC";
1309
		}
1310
1311
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1312
1313
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1314
1315
		return $spotter_array;
1316
	}
1317
	
1318
	/**
1319
	* Gets all the spotter information based on the owner
1320
	*
1321
	* @return Array the spotter information
1322
	*
1323
	*/
1324
	public function getSpotterDataByOwner($owner = '', $limit = '', $sort = '', $filter = array())
1325
	{
1326
		global $global_query;
1327
		
1328
		date_default_timezone_set('UTC');
1329
		
1330
		$query_values = array();
1331
		$limit_query = '';
1332
		$additional_query = '';
1333
		$filter_query = $this->getFilter($filter,true,true);
1334
		if ($owner != "")
1335
		{
1336
			if (!is_string($owner))
1337
			{
1338
				return false;
1339
			} else {
1340
				$additional_query = " AND (spotter_output.owner_name = :owner)";
1341
				$query_values = array(':owner' => $owner);
1342
			}
1343
		}
1344
		
1345
		if ($limit != "")
1346
		{
1347
			$limit_array = explode(",", $limit);
1348
			
1349
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1350
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1351
			
1352
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1353
			{
1354
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1355
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1356
			}
1357
		}
1358
1359
		if ($sort != "")
1360
		{
1361
			$search_orderby_array = $this->getOrderBy();
1362
			if (isset($search_orderby_array[$sort]['sql'])) $orderby_query = $search_orderby_array[$sort]['sql'];
1363
			else $orderby_query = " ORDER BY spotter_output.date DESC";
1364
		} else {
1365
			$orderby_query = " ORDER BY spotter_output.date DESC";
1366
		}
1367
1368
		$query = $global_query.$filter_query." spotter_output.owner_name <> '' ".$additional_query." ".$orderby_query;
1369
1370
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1371
1372
		return $spotter_array;
1373
	}
1374
	
1375
	/**
1376
	* Gets all the spotter information based on the pilot
1377
	*
1378
	* @return Array the spotter information
1379
	*
1380
	*/
1381
	public function getSpotterDataByPilot($pilot = '', $limit = '', $sort = '', $filter = array())
1382
	{
1383
		global $global_query;
1384
		
1385
		date_default_timezone_set('UTC');
1386
		
1387
		$query_values = array();
1388
		$limit_query = '';
1389
		$additional_query = '';
1390
		$filter_query = $this->getFilter($filter,true,true);
1391
		if ($pilot != "")
1392
		{
1393
			$additional_query = " AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot)";
1394
			$query_values = array(':pilot' => $pilot);
1395
		}
1396
		
1397
		if ($limit != "")
1398
		{
1399
			$limit_array = explode(",", $limit);
1400
			
1401
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1402
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1403
			
1404
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1405
			{
1406
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1407
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1408
			}
1409
		}
1410
1411
		if ($sort != "")
1412
		{
1413
			$search_orderby_array = $this->getOrderBy();
1414
			$orderby_query = $search_orderby_array[$sort]['sql'];
1415
		} else {
1416
			$orderby_query = " ORDER BY spotter_output.date DESC";
1417
		}
1418
1419
		$query = $global_query.$filter_query." spotter_output.pilot_name <> '' ".$additional_query." ".$orderby_query;
1420
1421
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1422
1423
		return $spotter_array;
1424
	}
1425
	
1426
	
1427
	
1428
	/**
1429
	* Gets all the spotter information based on the aircraft type
1430
	*
1431
	* @return Array the spotter information
1432
	*
1433
	*/
1434
	public function getSpotterDataByAircraft($aircraft_type = '', $limit = '', $sort = '', $filter = array())
1435
	{
1436
		global $global_query;
1437
		
1438
		date_default_timezone_set('UTC');
1439
		
1440
		$query_values = array();
1441
		$limit_query = '';
1442
		$additional_query = '';
1443
		$filter_query = $this->getFilter($filter,true,true);
1444
		
1445
		if ($aircraft_type != "")
1446
		{
1447
			if (!is_string($aircraft_type))
1448
			{
1449
				return false;
1450
			} else {
1451
				$additional_query = " AND (spotter_output.aircraft_icao = :aircraft_type)";
1452
				$query_values = array(':aircraft_type' => $aircraft_type);
1453
			}
1454
		}
1455
		
1456
		if ($limit != "")
1457
		{
1458
			$limit_array = explode(",", $limit);
1459
			
1460
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1461
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1462
			
1463
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1464
			{
1465
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1466
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1467
			}
1468
		}
1469
1470
		if ($sort != "")
1471
		{
1472
			$search_orderby_array = $this->getOrderBy();
1473
			$orderby_query = $search_orderby_array[$sort]['sql'];
1474
		} else {
1475
			$orderby_query = " ORDER BY spotter_output.date DESC";
1476
		}
1477
1478
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1479
1480
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1481
1482
		return $spotter_array;
1483
	}
1484
	
1485
	
1486
	/**
1487
	* Gets all the spotter information based on the aircraft registration
1488
	*
1489
	* @return Array the spotter information
1490
	*
1491
	*/
1492
	public function getSpotterDataByRegistration($registration = '', $limit = '', $sort = '', $filter = array())
1493
	{
1494
		global $global_query;
1495
		
1496
		date_default_timezone_set('UTC');
1497
		
1498
		$query_values = array();
1499
		$limit_query = '';
1500
		$additional_query = '';
1501
		
1502
		if ($registration != "")
1503
		{
1504
			if (!is_string($registration))
1505
			{
1506
				return false;
1507
			} else {
1508
				$additional_query = " (spotter_output.registration = :registration)";
1509
				$query_values = array(':registration' => $registration);
1510
			}
1511
		}
1512
		
1513
		if ($limit != "")
1514
		{
1515
			$limit_array = explode(",", $limit);
1516
			
1517
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1518
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1519
			
1520
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1521
			{
1522
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1523
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1524
			}
1525
		}
1526
1527
		if ($sort != "")
1528
		{
1529
			$search_orderby_array = $this->getOrderBy();
1530
			$orderby_query = $search_orderby_array[$sort]['sql'];
1531
		} else {
1532
			$orderby_query = " ORDER BY spotter_output.date DESC";
1533
		}
1534
		$filter_query = $this->getFilter($filter,true,true);
1535
1536
		//$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1537
		$query = $global_query.$filter_query." ".$additional_query." ".$orderby_query;
1538
1539
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1540
1541
		return $spotter_array;
1542
	}
1543
1544
	
1545
	
1546
	
1547
	/**
1548
	* Gets all the spotter information based on the airline
1549
	*
1550
	* @return Array the spotter information
1551
	*
1552
	*/
1553
	public function getSpotterDataByAirline($airline = '', $limit = '', $sort = '',$filters = array())
1554
	{
1555
		global $global_query;
1556
		
1557
		date_default_timezone_set('UTC');
1558
1559
		$query_values = array();
1560
		$limit_query = '';
1561
		$additional_query = '';
1562
		$filter_query = $this->getFilter($filters,true,true);
1563
		
1564
		if ($airline != "")
1565
		{
1566
			if (!is_string($airline))
1567
			{
1568
				return false;
1569
			} else {
1570
				$additional_query = " AND (spotter_output.airline_icao = :airline)";
1571
				$query_values = array(':airline' => $airline);
1572
			}
1573
		}
1574
		
1575
		if ($limit != "")
1576
		{
1577
			$limit_array = explode(",", $limit);
1578
			
1579
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1580
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1581
			
1582
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1583
			{
1584
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1585
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1586
			}
1587
		}
1588
		
1589
		if ($sort != "")
1590
		{
1591
			$search_orderby_array = $this->getOrderBy();
1592
			$orderby_query = $search_orderby_array[$sort]['sql'];
1593
		} else {
1594
			$orderby_query = " ORDER BY spotter_output.date DESC";
1595
		}
1596
1597
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1598
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1599
1600
		return $spotter_array;
1601
	}
1602
	
1603
	
1604
	/**
1605
	* Gets all the spotter information based on the airport
1606
	*
1607
	* @return Array the spotter information
1608
	*
1609
	*/
1610
	public function getSpotterDataByAirport($airport = '', $limit = '', $sort = '',$filters = array())
1611
	{
1612
		global $global_query;
1613
		
1614
		date_default_timezone_set('UTC');
1615
		$query_values = array();
1616
		$limit_query = '';
1617
		$additional_query = '';
1618
		$filter_query = $this->getFilter($filters,true,true);
1619
		
1620
		if ($airport != "")
1621
		{
1622
			if (!is_string($airport))
1623
			{
1624
				return false;
1625
			} else {
1626
				$additional_query .= " AND ((spotter_output.departure_airport_icao = :airport) OR (spotter_output.arrival_airport_icao = :airport))";
1627
				$query_values = array(':airport' => $airport);
1628
			}
1629
		}
1630
		
1631
		if ($limit != "")
1632
		{
1633
			$limit_array = explode(",", $limit);
1634
			
1635
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1636
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1637
			
1638
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1639
			{
1640
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1641
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1642
			}
1643
		}
1644
		
1645
		if ($sort != "")
1646
		{
1647
			$search_orderby_array = $this->getOrderBy();
1648
			$orderby_query = $search_orderby_array[$sort]['sql'];
1649
		} else {
1650
			$orderby_query = " ORDER BY spotter_output.date DESC";
1651
		}
1652
1653
		$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;
1654
1655
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1656
1657
		return $spotter_array;
1658
	}
1659
1660
1661
1662
	/**
1663
	* Gets all the spotter information based on the date
1664
	*
1665
	* @return Array the spotter information
1666
	*
1667
	*/
1668
	public function getSpotterDataByDate($date = '', $limit = '', $sort = '',$filter = array())
1669
	{
1670
		global $global_query, $globalTimezone, $globalDBdriver;
1671
		
1672
		$query_values = array();
1673
		$limit_query = '';
1674
		$additional_query = '';
1675
1676
		$filter_query = $this->getFilter($filter,true,true);
1677
		
1678
		if ($date != "")
1679
		{
1680
			if ($globalTimezone != '') {
1681
				date_default_timezone_set($globalTimezone);
1682
				$datetime = new DateTime($date);
1683
				$offset = $datetime->format('P');
1684
			} else {
1685
				date_default_timezone_set('UTC');
1686
				$datetime = new DateTime($date);
1687
				$offset = '+00:00';
1688
			}
1689
			if ($globalDBdriver == 'mysql') {
1690
				$additional_query = " AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date ";
1691
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':offset' => $offset);
1692
			} elseif ($globalDBdriver == 'pgsql') {
1693
				//$globalTimezone = 'UTC';
1694
				$additional_query = " AND to_char(spotter_output.date AT TIME ZONE :timezone,'YYYY-mm-dd') = :date ";
1695
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':timezone' => $globalTimezone);
1696
				//$additional_query = " AND to_char(spotter_output.date,'YYYY-mm-dd') = :date ";
1697
				//$query_values = array(':date' => $datetime->format('Y-m-d'));
1698
			}
1699
		}
1700
		
1701
		if ($limit != "")
1702
		{
1703
			$limit_array = explode(",", $limit);
1704
			
1705
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1706
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1707
			
1708
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1709
			{
1710
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1711
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1712
			}
1713
		}
1714
1715
		if ($sort != "")
1716
		{
1717
			$search_orderby_array = $this->getOrderBy();
1718
			$orderby_query = $search_orderby_array[$sort]['sql'];
1719
		} else {
1720
			$orderby_query = " ORDER BY spotter_output.date DESC";
1721
		}
1722
1723
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query.$orderby_query;
1724
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1725
		return $spotter_array;
1726
	}
1727
1728
1729
1730
	/**
1731
	* Gets all the spotter information based on the country name
1732
	*
1733
	* @return Array the spotter information
1734
	*
1735
	*/
1736
	public function getSpotterDataByCountry($country = '', $limit = '', $sort = '',$filters = array())
1737
	{
1738
		global $global_query;
1739
		
1740
		date_default_timezone_set('UTC');
1741
		
1742
		$query_values = array();
1743
		$limit_query = '';
1744
		$additional_query = '';
1745
		$filter_query = $this->getFilter($filters,true,true);
1746
		if ($country != "")
1747
		{
1748
			if (!is_string($country))
1749
			{
1750
				return false;
1751
			} else {
1752
				$additional_query .= " AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country))";
1753
				$additional_query .= " OR spotter_output.airline_country = :country";
1754
				$query_values = array(':country' => $country);
1755
			}
1756
		}
1757
		
1758
		if ($limit != "")
1759
		{
1760
			$limit_array = explode(",", $limit);
1761
			
1762
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1763
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1764
			
1765
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1766
			{
1767
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1768
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1769
			}
1770
		}
1771
					
1772
		if ($sort != "")
1773
		{
1774
			$search_orderby_array = $this->getOrderBy();
1775
			$orderby_query = $search_orderby_array[$sort]['sql'];
1776
		} else {
1777
			$orderby_query = " ORDER BY spotter_output.date DESC";
1778
		}
1779
1780
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1781
1782
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1783
1784
		return $spotter_array;
1785
	}	
1786
	
1787
	
1788
	/**
1789
	* Gets all the spotter information based on the manufacturer name
1790
	*
1791
	* @return Array the spotter information
1792
	*
1793
	*/
1794
	public function getSpotterDataByManufacturer($aircraft_manufacturer = '', $limit = '', $sort = '', $filters = array())
1795
	{
1796
		global $global_query;
1797
		
1798
		date_default_timezone_set('UTC');
1799
		
1800
		$query_values = array();
1801
		$additional_query = '';
1802
		$limit_query = '';
1803
		$filter_query = $this->getFilter($filters,true,true);
1804
		
1805
		if ($aircraft_manufacturer != "")
1806
		{
1807
			if (!is_string($aircraft_manufacturer))
1808
			{
1809
				return false;
1810
			} else {
1811
				$additional_query .= " AND (spotter_output.aircraft_manufacturer = :aircraft_manufacturer)";
1812
				$query_values = array(':aircraft_manufacturer' => $aircraft_manufacturer);
1813
			}
1814
		}
1815
		
1816
		if ($limit != "")
1817
		{
1818
			$limit_array = explode(",", $limit);
1819
			
1820
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1821
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1822
			
1823
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1824
			{
1825
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1826
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1827
			}
1828
		}
1829
1830
		if ($sort != "")
1831
		{
1832
			$search_orderby_array = $this->getOrderBy();
1833
			$orderby_query = $search_orderby_array[$sort]['sql'];
1834
		} else {
1835
			$orderby_query = " ORDER BY spotter_output.date DESC";
1836
		}
1837
1838
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1839
1840
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1841
1842
		return $spotter_array;
1843
	}
1844
1845
1846
  
1847
  
1848
	/**
1849
	* Gets a list of all aircraft that take a route
1850
	*
1851
	* @param String $departure_airport_icao ICAO code of departure airport
1852
	* @param String $arrival_airport_icao ICAO code of arrival airport
1853
	* @return Array the spotter information
1854
	*
1855
	*/
1856
	public function getSpotterDataByRoute($departure_airport_icao = '', $arrival_airport_icao = '', $limit = '', $sort = '', $filters = array())
1857
	{
1858
		global $global_query;
1859
		
1860
		$query_values = array();
1861
		$additional_query = '';
1862
		$limit_query = '';
1863
		$filter_query = $this->getFilter($filters,true,true);
1864
		if ($departure_airport_icao != "")
1865
		{
1866
			if (!is_string($departure_airport_icao))
1867
			{
1868
				return false;
1869
			} else {
1870
				$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
1871
				$additional_query .= " AND (spotter_output.departure_airport_icao = :departure_airport_icao)";
1872
				//$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";
1873
				$query_values = array(':departure_airport_icao' => $departure_airport_icao);
1874
			}
1875
		}
1876
		
1877
		if ($arrival_airport_icao != "")
1878
		{
1879
			if (!is_string($arrival_airport_icao))
1880
			{
1881
				return false;
1882
			} else {
1883
				$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
1884
				$additional_query .= " AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)";
1885
				//$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)";
1886
				$query_values = array_merge($query_values,array(':arrival_airport_icao' => $arrival_airport_icao));
1887
			}
1888
		}
1889
		
1890
		if ($limit != "")
1891
		{
1892
			$limit_array = explode(",", $limit);
1893
			
1894
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1895
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1896
			
1897
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1898
			{
1899
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1900
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1901
			}
1902
		}
1903
	
1904
		if ($sort != "")
1905
		{
1906
			$search_orderby_array = $this->getOrderBy();
1907
			$orderby_query = $search_orderby_array[$sort]['sql'];
1908
		} else {
1909
			$orderby_query = " ORDER BY spotter_output.date DESC";
1910
		}
1911
1912
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1913
          
1914
		//$result = mysqli_query($GLOBALS["___mysqli_ston"], $query);
1915
1916
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1917
1918
		return $spotter_array;
1919
	}
1920
	
1921
	
1922
	
1923
	/**
1924
	* Gets all the spotter information based on the special column in the table
1925
	*
1926
	* @return Array the spotter information
1927
	*
1928
	*/
1929
	public function getSpotterDataByHighlight($limit = '', $sort = '', $filter = array())
1930
	{
1931
		global $global_query;
1932
		
1933
		date_default_timezone_set('UTC');
1934
		$filter_query = $this->getFilter($filter,true,true);
1935
		$limit_query = '';
1936
		
1937
		if ($limit != "")
1938
		{
1939
			$limit_array = explode(",", $limit);
1940
			
1941
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1942
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1943
			
1944
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1945
			{
1946
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1947
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1948
			}
1949
		}
1950
		
1951
		if ($sort != "")
1952
		{
1953
			$search_orderby_array = $this->getOrderBy();
1954
			$orderby_query = $search_orderby_array[$sort]['sql'];
1955
		} else {
1956
			$orderby_query = " ORDER BY spotter_output.date DESC";
1957
		}
1958
1959
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' ".$orderby_query;
1960
1961
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1962
1963
		return $spotter_array;
1964
	}
1965
1966
	/**
1967
	* Gets all the highlight based on a aircraft registration
1968
	*
1969
	* @return String the highlight text
1970
	*
1971
	*/
1972
	public function getHighlightByRegistration($registration,$filter = array())
1973
	{
1974
		global $global_query;
1975
		
1976
		date_default_timezone_set('UTC');
1977
		$filter_query = $this->getFilter($filter,true,true);
1978
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
1979
		
1980
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' AND spotter_output.registration = :registration";
1981
		$sth = $this->db->prepare($query);
1982
		$sth->execute(array(':registration' => $registration));
1983
1984
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1985
		{
1986
			$highlight = $row['highlight'];
1987
		}
1988
		if (isset($highlight)) return $highlight;
1989
	}
1990
1991
	
1992
	/**
1993
	* Gets the squawk usage from squawk code
1994
	*
1995
	* @param String $squawk squawk code
1996
	* @param String $country country
1997
	* @return String usage
1998
	*
1999
	*/
2000
	public function getSquawkUsage($squawk = '',$country = 'FR')
2001
	{
2002
		
2003
		$squawk = filter_var($squawk,FILTER_SANITIZE_STRING);
2004
		$country = filter_var($country,FILTER_SANITIZE_STRING);
2005
2006
		$query  = "SELECT squawk.* FROM squawk WHERE squawk.code = :squawk AND squawk.country = :country LIMIT 1";
2007
		$query_values = array(':squawk' => ltrim($squawk,'0'), ':country' => $country);
2008
		
2009
		$sth = $this->db->prepare($query);
2010
		$sth->execute($query_values);
2011
    
2012
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2013
		$sth->closeCursor();
2014
		if (count($row) > 0) {
2015
			return $row['usage'];
2016
		} else return '';
2017
	}
2018
2019
	/**
2020
	* Gets the airport icao from the iata
2021
	*
2022
	* @param String $airport_iata the iata code of the airport
2023
	* @return String airport iata
2024
	*
2025
	*/
2026
	public function getAirportIcao($airport_iata = '')
2027
	{
2028
		
2029
		$airport_iata = filter_var($airport_iata,FILTER_SANITIZE_STRING);
2030
2031
		$query  = "SELECT airport.* FROM airport WHERE airport.iata = :airport LIMIT 1";
2032
		$query_values = array(':airport' => $airport_iata);
2033
		
2034
		$sth = $this->db->prepare($query);
2035
		$sth->execute($query_values);
2036
		
2037
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2038
		$sth->closeCursor();
2039
		if (count($row) > 0) {
2040
			return $row['icao'];
2041
		} else return '';
2042
	}
2043
2044
	/**
2045
	* Gets the airport distance
2046
	*
2047
	* @param String $airport_icao the icao code of the airport
2048
	* @param Float $latitude the latitude
2049
	* @param Float $longitude the longitude
2050
	* @return Float distance to the airport
2051
	*
2052
	*/
2053
	public function getAirportDistance($airport_icao,$latitude,$longitude)
2054
	{
2055
		
2056
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
2057
2058
		$query  = "SELECT airport.latitude, airport.longitude FROM airport WHERE airport.icao = :airport LIMIT 1";
2059
		$query_values = array(':airport' => $airport_icao);
2060
		$sth = $this->db->prepare($query);
2061
		$sth->execute($query_values);
2062
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2063
		$sth->closeCursor();
2064
		if (count($row) > 0) {
2065
			$airport_latitude = $row['latitude'];
2066
			$airport_longitude = $row['longitude'];
2067
			$Common = new Common();
2068
			return $Common->distance($latitude,$longitude,$airport_latitude,$airport_longitude);
2069
		} else return '';
2070
	}
2071
	
2072
	/**
2073
	* Gets the airport info based on the icao
2074
	*
2075
	* @param String $airport the icao code of the airport
2076
	* @return Array airport information
2077
	*
2078
	*/
2079
	public function getAllAirportInfo($airport = '')
2080
	{
2081
		
2082
		$airport = filter_var($airport,FILTER_SANITIZE_STRING);
2083
2084
		$query_values = array();
2085
		if ($airport == 'NA') {
2086
			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' => ''));
2087
		} elseif ($airport == '') {
2088
			$query  = "SELECT airport.name, airport.city, airport.country, airport.iata, airport.icao, airport.latitude, airport.longitude, airport.altitude, airport.type, airport.home_link, airport.wikipedia_link, airport.image_thumb, airport.image FROM airport";
2089
		} else {
2090
			$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";
2091
			$query_values = array(':airport' => $airport);
2092
		}
2093
		
2094
		$sth = $this->db->prepare($query);
2095
		$sth->execute($query_values);
2096
		/*
2097
		$airport_array = array();
2098
		$temp_array = array();
2099
		
2100
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2101
		{
2102
			$temp_array['name'] = $row['name'];
2103
			$temp_array['city'] = $row['city'];
2104
			$temp_array['country'] = $row['country'];
2105
			$temp_array['iata'] = $row['iata'];
2106
			$temp_array['icao'] = $row['icao'];
2107
			$temp_array['latitude'] = $row['latitude'];
2108
			$temp_array['longitude'] = $row['longitude'];
2109
			$temp_array['altitude'] = $row['altitude'];
2110
			$temp_array['home_link'] = $row['home_link'];
2111
			$temp_array['wikipedia_link'] = $row['wikipedia_link'];
2112
			$temp_array['image'] = $row['image'];
2113
			$temp_array['image_thumb'] = $row['image_thumb'];
2114
2115
			$airport_array[] = $temp_array;
2116
		}
2117
2118
		return $airport_array;
2119
		*/
2120
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2121
	}
2122
	
2123
	/**
2124
	* Gets the airport info based on the country
2125
	*
2126
	* @param Array $countries Airports countries
2127
	* @return Array airport information
2128
	*
2129
	*/
2130
	public function getAllAirportInfobyCountry($countries)
2131
	{
2132
		$lst_countries = '';
2133
		foreach ($countries as $country) {
2134
			$country = filter_var($country,FILTER_SANITIZE_STRING);
2135
			if ($lst_countries == '') {
2136
				$lst_countries = "'".$country."'";
2137
			} else {
2138
				$lst_countries .= ",'".$country."'";
2139
			}
2140
		}
2141
		$query  = "SELECT airport.* FROM airport WHERE airport.country IN (".$lst_countries.")";
2142
		
2143
		$sth = $this->db->prepare($query);
2144
		$sth->execute();
2145
    
2146
		$airport_array = array();
2147
		$temp_array = array();
2148
		
2149
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2150
		{
2151
			$temp_array['name'] = $row['name'];
2152
			$temp_array['city'] = $row['city'];
2153
			$temp_array['country'] = $row['country'];
2154
			$temp_array['iata'] = $row['iata'];
2155
			$temp_array['icao'] = $row['icao'];
2156
			$temp_array['latitude'] = $row['latitude'];
2157
			$temp_array['longitude'] = $row['longitude'];
2158
			$temp_array['altitude'] = $row['altitude'];
2159
2160
			$airport_array[] = $temp_array;
2161
		}
2162
2163
		return $airport_array;
2164
	}
2165
	
2166
	/**
2167
	* Gets airports info based on the coord
2168
	*
2169
	* @param Array $coord Airports longitude min,latitude min, longitude max, latitude max
2170
	* @return Array airport information
2171
	*
2172
	*/
2173
	public function getAllAirportInfobyCoord($coord)
2174
	{
2175
		global $globalDBdriver;
2176
		if (is_array($coord)) {
2177
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2178
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2179
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2180
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2181
		} else return array();
2182
		if ($globalDBdriver == 'mysql') {
2183
			$query  = "SELECT airport.* FROM airport WHERE airport.latitude BETWEEN ".$minlat." AND ".$maxlat." AND airport.longitude BETWEEN ".$minlong." AND ".$maxlong." AND airport.type != 'closed'";
2184
		} else {
2185
			$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'";
2186
		}
2187
		$sth = $this->db->prepare($query);
2188
		$sth->execute();
2189
    
2190
		$airport_array = array();
2191
		
2192
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2193
		{
2194
			$temp_array = $row;
2195
2196
			$airport_array[] = $temp_array;
2197
		}
2198
2199
		return $airport_array;
2200
	}
2201
2202
	/**
2203
	* Gets waypoints info based on the coord
2204
	*
2205
	* @param Array $coord waypoints coord
2206
	* @return Array airport information
2207
	*
2208
	*/
2209
	public function getAllWaypointsInfobyCoord($coord)
2210
	{
2211
		if (is_array($coord)) {
2212
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2213
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2214
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2215
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2216
		} else return array();
2217
		//$query  = "SELECT waypoints.* FROM waypoints WHERE waypoints.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_begin BETWEEN ".$minlong." AND ".$maxlong;
2218
		$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.")";
2219
		//$query  = "SELECT waypoints.* FROM waypoints";
2220
		//$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";
2221
		//$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;
2222
		//$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;
2223
		//echo $query;
2224
		
2225
		$sth = $this->db->prepare($query);
2226
		$sth->execute();
2227
    
2228
		$waypoints_array = array();
2229
		
2230
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2231
		{
2232
			$temp_array = $row;
2233
2234
			$waypoints_array[] = $temp_array;
2235
		}
2236
2237
		return $waypoints_array;
2238
	}
2239
	
2240
	
2241
	/**
2242
	* Gets the airline info based on the icao code or iata code
2243
	*
2244
	* @param String $airline_icao the iata code of the airport
2245
	* @return Array airport information
2246
	*
2247
	*/
2248
	public function getAllAirlineInfo($airline_icao, $fromsource = NULL)
2249
	{
2250
		global $globalUseRealAirlines;
2251
		if (isset($globalUseRealAirlines) && $globalUseRealAirlines) $fromsource = NULL;
2252
		$airline_icao = strtoupper(filter_var($airline_icao,FILTER_SANITIZE_STRING));
2253
		if ($airline_icao == 'NA') {
2254
			$airline_array = array();
2255
			$airline_array[] = array('name' => 'Not Available','iata' => 'NA', 'icao' => 'NA', 'callsign' => '', 'country' => 'NA', 'type' =>'');
2256
			return $airline_array;
2257
		} else {
2258
			if (strlen($airline_icao) == 2) {
2259
				if ($fromsource === NULL) {
2260
					$query  = "SELECT airlines.name, airlines.iata, airlines.icao, airlines.callsign, airlines.country, airlines.type FROM airlines WHERE airlines.iata = :airline_icao AND airlines.active = 'Y' AND airlines.forsource IS NULL LIMIT 1";
2261
				} else {
2262
					$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";
2263
				}
2264
			} else {
2265
				if ($fromsource === NULL) {
2266
					$query  = "SELECT airlines.name, airlines.iata, airlines.icao, airlines.callsign, airlines.country, airlines.type FROM airlines WHERE airlines.icao = :airline_icao AND airlines.active = 'Y' AND airlines.forsource IS NULL LIMIT 1";
2267
				} else {
2268
					$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";
2269
				}
2270
			}
2271
			
2272
			$sth = $this->db->prepare($query);
2273
			if ($fromsource === NULL) {
2274
				$sth->execute(array(':airline_icao' => $airline_icao));
2275
			} else {
2276
				$sth->execute(array(':airline_icao' => $airline_icao,':fromsource' => $fromsource));
2277
			}
2278
                        /*
2279
			$airline_array = array();
2280
			$temp_array = array();
2281
		
2282
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2283
			{
2284
				$temp_array['name'] = $row['name'];
2285
				$temp_array['iata'] = $row['iata'];
2286
				$temp_array['icao'] = $row['icao'];
2287
				$temp_array['callsign'] = $row['callsign'];
2288
				$temp_array['country'] = $row['country'];
2289
				$temp_array['type'] = $row['type'];
2290
				$airline_array[] = $temp_array;
2291
			}
2292
			return $airline_array;
2293
			*/
2294
			$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2295
			if (empty($result) && $fromsource !== NULL) {
2296
				/*
2297
				$query = 'SELECT COUNT(*) AS nb FROM airlines WHERE forsource = :fromsource';
2298
				$sth = $this->db->prepare($query);
2299
				$sth->execute(array(':fromsource' => $fromsource));
2300
				$row = $sth->fetch(PDO::FETCH_ASSOC);
2301
				$sth->closeCursor();
2302
				if ($row['nb'] == 0) $result = $this->getAllAirlineInfo($airline_icao);
2303
				*/
2304
				$result = $this->getAllAirlineInfo($airline_icao);
2305
			}
2306
			return $result;
2307
		}
2308
	}
2309
	
2310
	/**
2311
	* Gets the airline info based on the airline name
2312
	*
2313
	* @param String $airline_name the name of the airline
2314
	* @return Array airline information
2315
	*
2316
	*/
2317
	public function getAllAirlineInfoByName($airline_name, $fromsource = NULL)
2318
	{
2319
		global $globalUseRealAirlines;
2320
		if (isset($globalUseRealAirlines) && $globalUseRealAirlines) $fromsource = NULL;
2321
		$airline_name = strtolower(filter_var($airline_name,FILTER_SANITIZE_STRING));
2322
		$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";
2323
		$sth = $this->db->prepare($query);
2324
		if ($fromsource === NULL) {
2325
			$sth->execute(array(':airline_name' => $airline_name));
2326
		} else {
2327
			$sth->execute(array(':airline_name' => $airline_name,':fromsource' => $fromsource));
2328
		}
2329
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2330
		if (empty($result) && $fromsource !== NULL) {
2331
			$query = 'SELECT COUNT(*) AS nb FROM airlines WHERE forsource = :fromsource';
2332
			$sth = $this->db->prepare($query);
2333
			$sth->execute(array(':fromsource' => $fromsource));
2334
			$row = $sth->fetch(PDO::FETCH_ASSOC);
2335
			$sth->closeCursor();
2336
			if ($row['nb'] == 0) $result = $this->getAllAirlineInfoByName($airline_name);
2337
		}
2338
		return $result;
2339
	}
2340
	
2341
	
2342
	
2343
	/**
2344
	* Gets the aircraft info based on the aircraft type
2345
	*
2346
	* @param String $aircraft_type the aircraft type
2347
	* @return Array aircraft information
2348
	*
2349
	*/
2350
	public function getAllAircraftInfo($aircraft_type)
2351
	{
2352
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2353
2354
		if ($aircraft_type == 'NA') {
2355
			return array(array('icao' => 'NA','type' => 'Not Available', 'manufacturer' => 'Not Available', 'aircraft_shadow' => NULL));
2356
		}
2357
		$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";
2358
		
2359
		$sth = $this->db->prepare($query);
2360
		$sth->execute(array(':aircraft_type' => $aircraft_type));
2361
		/*
2362
		$aircraft_array = array();
2363
		$temp_array = array();
2364
		
2365
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2366
		{
2367
			$temp_array = array();
2368
			$temp_array['icao'] = $row['icao'];
2369
			$temp_array['type'] = $row['type'];
2370
			$temp_array['manufacturer'] = $row['manufacturer'];
2371
			$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
2372
2373
			$aircraft_array[] = $temp_array;
2374
		}
2375
		return $aircraft_array;
2376
		*/
2377
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2378
	}
2379
2380
	/**
2381
	* Gets the aircraft icao based on the aircraft name/type
2382
	*
2383
	* @param String $aircraft_type the aircraft type
2384
	* @return String aircraft information
2385
	*
2386
	*/
2387
	public function getAircraftIcao($aircraft_type)
2388
	{
2389
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2390
		$all_aircraft = array('737-300' => 'B733',
2391
				'777-200' => 'B772',
2392
				'777-200ER' => 'B772',
2393
				'777-300ER' => 'B77W',
2394
				'c172p' => 'C172',
2395
				'aerostar' => 'AEST',
2396
				'A320-211' => 'A320',
2397
				'747-8i' => 'B748',
2398
				'A380' => 'A388');
2399
		if (isset($all_aircraft[$aircraft_type])) return $all_aircraft[$aircraft_type];
2400
2401
		$query  = "SELECT aircraft.icao FROM aircraft WHERE aircraft.type LIKE :saircraft_type OR aircraft.type = :aircraft_type OR aircraft.icao = :aircraft_type LIMIT 1";
2402
		$aircraft_type = strtoupper($aircraft_type);
2403
		$sth = $this->db->prepare($query);
2404
		$sth->execute(array(':saircraft_type' => '%'.$aircraft_type.'%',':aircraft_type' => $aircraft_type,));
2405
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2406
		if (isset($result[0]['icao'])) return $result[0]['icao'];
2407
		else return '';
2408
	}
2409
	
2410
	/**
2411
	* Gets the aircraft info based on the aircraft modes
2412
	*
2413
	* @param String $aircraft_modes the aircraft ident (hex)
2414
	* @return String aircraft type
2415
	*
2416
	*/
2417
	public function getAllAircraftType($aircraft_modes,$source_type = '')
2418
	{
2419
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
2420
		$source_type = filter_var($source_type,FILTER_SANITIZE_STRING);
2421
2422
		if ($source_type == '' || $source_type == 'modes') {
2423
			$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes AND aircraft_modes.source_type = 'modes' ORDER BY FirstCreated DESC LIMIT 1";
2424
		} else {
2425
			$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes AND aircraft_modes.source_type = 'flarm' ORDER BY FirstCreated DESC LIMIT 1";
2426
		}
2427
		
2428
		$sth = $this->db->prepare($query);
2429
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
2430
2431
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2432
		$sth->closeCursor();
2433
		if (isset($row['icaotypecode'])) {
2434
			$icao = $row['icaotypecode'];
2435
			if (isset($this->aircraft_correct_icaotype[$icao])) $icao = $this->aircraft_correct_icaotype[$icao];
2436
			return $icao;
2437
		} elseif ($source_type == 'flarm') {
2438
			return $this->getAllAircraftType($aircraft_modes);
2439
		} else  return '';
2440
	}
2441
2442
	/**
2443
	* Gets the aircraft info based on the aircraft registration
2444
	*
2445
	* @param String $registration the aircraft registration
2446
	* @return String aircraft type
2447
	*
2448
	*/
2449
	public function getAllAircraftTypeByRegistration($registration)
2450
	{
2451
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2452
2453
		$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.registration = :registration ORDER BY FirstCreated DESC LIMIT 1";
2454
		
2455
		$sth = $this->db->prepare($query);
2456
		$sth->execute(array(':registration' => $registration));
2457
2458
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2459
		$sth->closeCursor();
2460
		if (isset($row['icaotypecode'])) {
2461
			return $row['icaotypecode'];
2462
		} else return '';
2463
	}
2464
2465
	/**
2466
	* Gets the spotter_id and flightaware_id based on the aircraft registration
2467
	*
2468
	* @param String $registration the aircraft registration
2469
	* @return Array spotter_id and flightaware_id
2470
	*
2471
	*/
2472
	public function getAllIDByRegistration($registration)
2473
	{
2474
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2475
2476
		$query  = "SELECT spotter_id,flightaware_id, date FROM spotter_output WHERE spotter_output.registration = :registration";
2477
		
2478
		$sth = $this->db->prepare($query);
2479
		$sth->execute(array(':registration' => $registration));
2480
2481
		$idarray = array();
2482
		while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
2483
			$date = $row['date'];
2484
			$idarray[$date] = array('flightaware_id' => $row['flightaware_id'],'spotter_id' => $row['spotter_id']);
2485
		}
2486
		return $idarray;
2487
	}
2488
2489
	/**
2490
	* Gets correct aircraft operator code
2491
	*
2492
	* @param String $operator the aircraft operator code (callsign)
2493
	* @return String aircraft operator code
2494
	*
2495
	*/
2496
	public function getOperator($operator)
2497
	{
2498
		$operator = filter_var($operator,FILTER_SANITIZE_STRING);
2499
		$query  = "SELECT translation.operator_correct FROM translation WHERE translation.operator = :operator LIMIT 1";
2500
		
2501
		$sth = $this->db->prepare($query);
2502
		$sth->execute(array(':operator' => $operator));
2503
2504
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2505
		$sth->closeCursor();
2506
		if (isset($row['operator_correct'])) {
2507
			return $row['operator_correct'];
2508
		} else return $operator;
2509
	}
2510
2511
	/**
2512
	* Gets the aircraft route based on the aircraft callsign
2513
	*
2514
	* @param String $callsign the aircraft callsign
2515
	* @return Array aircraft type
2516
	*
2517
	*/
2518
	public function getRouteInfo($callsign)
2519
	{
2520
		$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
2521
                if ($callsign == '') return array();
2522
		$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";
2523
		
2524
		$sth = $this->db->prepare($query);
2525
		$sth->execute(array(':callsign' => $callsign));
2526
2527
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2528
		$sth->closeCursor();
2529
		if (count($row) > 0) {
2530
			return $row;
2531
		} else return array();
2532
	}
2533
	
2534
	/**
2535
	* Gets the aircraft info based on the aircraft registration
2536
	*
2537
	* @param String $registration the aircraft registration
2538
	* @return Array aircraft information
2539
	*
2540
	*/
2541
	public function getAircraftInfoByRegistration($registration)
2542
	{
2543
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2544
2545
		$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";
2546
		
2547
		$sth = $this->db->prepare($query);
2548
		$sth->execute(array(':registration' => $registration));
2549
2550
		$aircraft_array = array();
2551
		$temp_array = array();
2552
		
2553
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2554
		{
2555
			$temp_array['airline_icao'] = $row['airline_icao'];
2556
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2557
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2558
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2559
2560
			$aircraft_array[] = $temp_array;
2561
		}
2562
2563
		return $aircraft_array;
2564
	}
2565
	
2566
	/**
2567
	* Gets the aircraft owner & base based on the aircraft registration
2568
	*
2569
	* @param String $registration the aircraft registration
2570
	* @return Array aircraft information
2571
	*
2572
	*/
2573
	public function getAircraftOwnerByRegistration($registration)
2574
	{
2575
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2576
		$Connection = new Connection($this->db);
2577
		if ($Connection->tableExists('aircraft_owner')) {
2578
			$query  = "SELECT aircraft_owner.base, aircraft_owner.owner, aircraft_owner.date_first_reg FROM aircraft_owner WHERE registration = :registration LIMIT 1";
2579
			$sth = $this->db->prepare($query);
2580
			$sth->execute(array(':registration' => $registration));
2581
			$result = $sth->fetch(PDO::FETCH_ASSOC);
2582
			$sth->closeCursor();
2583
			return $result;
2584
		} else return array();
2585
	}
2586
	
2587
  
2588
  /**
2589
	* Gets all flights (but with only little info)
2590
	*
2591
	* @return Array basic flight information
2592
	*
2593
	*/
2594
	public function getAllFlightsforSitemap()
2595
	{
2596
		//$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 ";
2597
		$query  = "SELECT spotter_output.spotter_id FROM spotter_output ORDER BY spotter_id DESC LIMIT 200 OFFSET 0";
2598
		
2599
		$sth = $this->db->prepare($query);
2600
		$sth->execute();
2601
                  /*
2602
		$flight_array = array();
2603
		$temp_array = array();
2604
		
2605
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2606
		{
2607
			$temp_array['spotter_id'] = $row['spotter_id'];
2608
//			$temp_array['ident'] = $row['ident'];
2609
//			$temp_array['airline_name'] = $row['airline_name'];
2610
//			$temp_array['aircraft_type'] = $row['aircraft_icao'];
2611
//			$temp_array['aircraft_name'] = $row['aircraft_name'];
2612
			//$temp_array['image'] = $row['image'];
2613
2614
			$flight_array[] = $temp_array;
2615
		}
2616
2617
		return $flight_array;
2618
		*/
2619
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2620
	}
2621
  
2622
	/**
2623
	* Gets a list of all aircraft manufacturers
2624
	*
2625
	* @return Array list of aircraft types
2626
	*
2627
	*/
2628
	public function getAllManufacturers()
2629
	{
2630
		/*
2631
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer AS aircraft_manufacturer
2632
								FROM spotter_output
2633
								WHERE spotter_output.aircraft_manufacturer <> '' 
2634
								ORDER BY spotter_output.aircraft_manufacturer ASC";
2635
		  */
2636
		
2637
		$query = "SELECT DISTINCT manufacturer AS aircraft_manufacturer FROM aircraft WHERE manufacturer <> '' ORDER BY manufacturer ASC";
2638
		$sth = $this->db->prepare($query);
2639
		$sth->execute();
2640
2641
		$manufacturer_array = array();
2642
		$temp_array = array();
2643
		
2644
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2645
		{
2646
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2647
2648
			$manufacturer_array[] = $temp_array;
2649
		}
2650
2651
		return $manufacturer_array;
2652
	}
2653
  
2654
  
2655
  /**
2656
	* Gets a list of all aircraft types
2657
	*
2658
	* @return Array list of aircraft types
2659
	*
2660
	*/
2661
	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...
2662
	{
2663
		/*
2664
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao AS aircraft_icao, spotter_output.aircraft_name AS aircraft_name
2665
								FROM spotter_output  
2666
								WHERE spotter_output.aircraft_icao <> '' 
2667
								ORDER BY spotter_output.aircraft_name ASC";
2668
								
2669
		*/
2670
		//$filter_query = $this->getFilter($filters,true,true);
2671
		//$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";
2672
2673
		$query = "SELECT DISTINCT icao AS aircraft_icao, type AS aircraft_name, manufacturer AS aircraft_manufacturer FROM aircraft WHERE icao <> '' ORDER BY aircraft_manufacturer ASC";
2674
		
2675
		$sth = $this->db->prepare($query);
2676
		$sth->execute();
2677
2678
		$aircraft_array = array();
2679
		$temp_array = array();
2680
		
2681
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2682
		{
2683
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2684
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2685
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2686
2687
			$aircraft_array[] = $temp_array;
2688
		}
2689
2690
		return $aircraft_array;
2691
	}
2692
	
2693
	
2694
	/**
2695
	* Gets a list of all aircraft registrations
2696
	*
2697
	* @return Array list of aircraft registrations
2698
	*
2699
	*/
2700
	public function getAllAircraftRegistrations($filters = array())
2701
	{
2702
		$filter_query = $this->getFilter($filters,true,true);
2703
		$query  = "SELECT DISTINCT spotter_output.registration 
2704
				FROM spotter_output".$filter_query." spotter_output.registration <> '' 
2705
				ORDER BY spotter_output.registration ASC";
2706
2707
		$sth = $this->db->prepare($query);
2708
		$sth->execute();
2709
2710
		$aircraft_array = array();
2711
		$temp_array = array();
2712
		
2713
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2714
		{
2715
			$temp_array['registration'] = $row['registration'];
2716
2717
			$aircraft_array[] = $temp_array;
2718
		}
2719
2720
		return $aircraft_array;
2721
	}
2722
2723
	/**
2724
	* Gets all source name
2725
	*
2726
	* @param String type format of source
2727
	* @return Array list of source name
2728
	*
2729
	*/
2730
	public function getAllSourceName($type = '',$filters = array())
2731
	{
2732
		$filter_query = $this->getFilter($filters,true,true);
2733
		$query_values = array();
2734
		$query  = "SELECT DISTINCT spotter_output.source_name 
2735
				FROM spotter_output".$filter_query." spotter_output.source_name <> ''";
2736
		if ($type != '') {
2737
			$query_values = array(':type' => $type);
2738
			$query .= " AND format_source = :type";
2739
		}
2740
		$query .= " ORDER BY spotter_output.source_name ASC";
2741
2742
		$sth = $this->db->prepare($query);
2743
		if (!empty($query_values)) $sth->execute($query_values);
2744
		else $sth->execute();
2745
2746
		$source_array = array();
2747
		$temp_array = array();
2748
		
2749
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2750
		{
2751
			$temp_array['source_name'] = $row['source_name'];
2752
			$source_array[] = $temp_array;
2753
		}
2754
		return $source_array;
2755
	}
2756
2757
2758
2759
	/**
2760
	* Gets a list of all airline names
2761
	*
2762
	* @return Array list of airline names
2763
	*
2764
	*/
2765
	public function getAllAirlineNames($airline_type = '',$forsource = NULL,$filters = array())
2766
	{
2767
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2768
		$filter_query = $this->getFilter($filters,true,true);
2769
		$airline_type = filter_var($airline_type,FILTER_SANITIZE_STRING);
2770
		if ($airline_type == '' || $airline_type == 'all') {
2771
			/*
2772
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2773
								FROM spotter_output
2774
								WHERE spotter_output.airline_icao <> '' 
2775
								ORDER BY spotter_output.airline_name ASC";
2776
			*/
2777
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2778
			elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2779
			elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2780
			if ($forsource === NULL) {
2781
				$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";
2782
				$query_data = array();
2783
			} else {
2784
				$query = "SELECT DISTINCT icao AS airline_icao, name AS airline_name, type AS airline_type FROM airlines WHERE forsource = :forsource ORDER BY name ASC";
2785
				$query_data = array(':forsource' => $forsource);
2786
			}
2787
		} else {
2788
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2789
					FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
2790
					AND spotter_output.airline_type = :airline_type 
2791
					ORDER BY spotter_output.airline_icao ASC";
2792
			$query_data = array(':airline_type' => $airline_type);
2793
		}
2794
		
2795
		$sth = $this->db->prepare($query);
2796
		$sth->execute($query_data);
2797
    
2798
		$airline_array = array();
2799
		$temp_array = array();
2800
		
2801
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2802
		{
2803
			$temp_array['airline_icao'] = $row['airline_icao'];
2804
			$temp_array['airline_name'] = $row['airline_name'];
2805
			$temp_array['airline_type'] = $row['airline_type'];
2806
2807
			$airline_array[] = $temp_array;
2808
		}
2809
		return $airline_array;
2810
	}
2811
	
2812
	/**
2813
	* Gets a list of all alliance names
2814
	*
2815
	* @return Array list of alliance names
2816
	*
2817
	*/
2818
	public function getAllAllianceNames($forsource = NULL,$filters = array())
2819
	{
2820
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2821
		$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...
2822
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2823
		elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2824
		elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2825
		if ($forsource === NULL) {
2826
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND forsource IS NULL ORDER BY alliance ASC";
2827
			$query_data = array();
2828
		} else {
2829
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND  forsource = :forsource ORDER BY alliance ASC";
2830
			$query_data = array(':forsource' => $forsource);
2831
		}
2832
		
2833
		$sth = $this->db->prepare($query);
2834
		$sth->execute($query_data);
2835
    
2836
		$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...
2837
		$alliance_array = $sth->fetchAll(PDO::FETCH_ASSOC);
2838
		return $alliance_array;
2839
	}
2840
	
2841
	/**
2842
	* Gets a list of all airline countries
2843
	*
2844
	* @return Array list of airline countries
2845
	*
2846
	*/
2847
	public function getAllAirlineCountries($filters = array())
2848
	{
2849
		$filter_query = $this->getFilter($filters,true,true);
2850
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
2851
				FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
2852
				ORDER BY spotter_output.airline_country ASC";
2853
		
2854
		//$query = "SELECT DISTINCT country AS airline_country FROM airlines WHERE country <> '' AND active = 'Y' ORDER BY country ASC";
2855
		$sth = $this->db->prepare($query);
2856
		$sth->execute();
2857
2858
		$airline_array = array();
2859
		$temp_array = array();
2860
		
2861
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2862
		{
2863
			$temp_array['airline_country'] = $row['airline_country'];
2864
2865
			$airline_array[] = $temp_array;
2866
		}
2867
2868
		return $airline_array;
2869
	}
2870
2871
	
2872
	
2873
	/**
2874
	* Gets a list of all departure & arrival names
2875
	*
2876
	* @return Array list of airport names
2877
	*
2878
	*/
2879
	public function getAllAirportNames($filters = array())
2880
	{
2881
		$filter_query = $this->getFilter($filters,true,true);
2882
		$airport_array = array();
2883
		$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
2884
				FROM spotter_output".$filter_query." spotter_output.departure_airport_icao <> '' AND spotter_output.departure_airport_icao <> 'NA' 
2885
				ORDER BY spotter_output.departure_airport_city ASC";
2886
		
2887
		//$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";
2888
		$sth = $this->db->prepare($query);
2889
		$sth->execute();
2890
2891
		$temp_array = array();
2892
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2893
		{
2894
			$temp_array['airport_icao'] = $row['airport_icao'];
2895
			$temp_array['airport_name'] = $row['airport_name'];
2896
			$temp_array['airport_city'] = $row['airport_city'];
2897
			$temp_array['airport_country'] = $row['airport_country'];
2898
2899
			$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2900
		}
2901
2902
		$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
2903
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> '' AND spotter_output.arrival_airport_icao <> 'NA' 
2904
								ORDER BY spotter_output.arrival_airport_city ASC";
2905
					
2906
		$sth = $this->db->prepare($query);
2907
		$sth->execute();
2908
2909
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2910
			{
2911
		//	if ($airport_array[$row['airport_city'].",".$row['airport_name']]['airport_icao'] != $row['airport_icao'])
2912
		//	{
2913
				$temp_array['airport_icao'] = $row['airport_icao'];
2914
				$temp_array['airport_name'] = $row['airport_name'];
2915
				$temp_array['airport_city'] = $row['airport_city'];
2916
				$temp_array['airport_country'] = $row['airport_country'];
2917
				
2918
				$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2919
		//	}
2920
		}
2921
2922
		return $airport_array;
2923
	} 
2924
2925
	/**
2926
	* Gets a list of all owner names
2927
	*
2928
	* @return Array list of owner names
2929
	*
2930
	*/
2931
	public function getAllOwnerNames($filters = array())
2932
	{
2933
		$filter_query = $this->getFilter($filters,true,true);
2934
		$query  = "SELECT DISTINCT spotter_output.owner_name
2935
				FROM spotter_output".$filter_query." spotter_output.owner_name <> '' 
2936
				ORDER BY spotter_output.owner_name ASC";
2937
		
2938
		$sth = $this->db->prepare($query);
2939
		$sth->execute();
2940
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2941
	} 
2942
2943
	/**
2944
	* Gets a list of all pilot names and pilot ids
2945
	*
2946
	* @return Array list of pilot names and pilot ids
2947
	*
2948
	*/
2949
	public function getAllPilotNames($filters = array())
2950
	{
2951
		$filter_query = $this->getFilter($filters,true,true);
2952
		$query  = "SELECT DISTINCT spotter_output.pilot_name, spotter_output.pilot_id
2953
				FROM spotter_output".$filter_query." spotter_output.pilot_name <> '' 
2954
				ORDER BY spotter_output.pilot_name ASC";
2955
		
2956
		$sth = $this->db->prepare($query);
2957
		$sth->execute();
2958
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2959
	} 
2960
	
2961
	
2962
	/**
2963
	* Gets a list of all departure & arrival airport countries
2964
	*
2965
	* @return Array list of airport countries
2966
	*
2967
	*/
2968
	public function getAllAirportCountries($filters = array())
2969
	{
2970
		$airport_array = array();
2971
					
2972
		  /*
2973
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
2974
								FROM spotter_output
2975
								WHERE spotter_output.departure_airport_country <> '' 
2976
								ORDER BY spotter_output.departure_airport_country ASC";
2977
		*/
2978
		$query = "SELECT DISTINCT country AS airport_country FROM airport ORDER BY country ASC";
2979
		
2980
		$sth = $this->db->prepare($query);
2981
		$sth->execute();
2982
   
2983
		$temp_array = array();
2984
		
2985
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2986
		{
2987
			$temp_array['airport_country'] = $row['airport_country'];
2988
2989
			$airport_array[$row['airport_country']] = $temp_array;
2990
		}
2991
		$filter_query = $this->getFilter($filters,true,true);
2992
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
2993
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
2994
								ORDER BY spotter_output.arrival_airport_country ASC";
2995
					
2996
		$sth = $this->db->prepare($query);
2997
		$sth->execute();
2998
		
2999
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3000
		{
3001
			if (isset($airport_array[$row['airport_country']]['airport_country']) && $airport_array[$row['airport_country']]['airport_country'] != $row['airport_country'])
3002
			{
3003
				$temp_array['airport_country'] = $row['airport_country'];
3004
				$airport_array[$row['airport_country']] = $temp_array;
3005
			}
3006
		}
3007
3008
		return $airport_array;
3009
	} 
3010
	
3011
	
3012
	
3013
	
3014
	/**
3015
	* Gets a list of all countries (airline, departure airport & arrival airport)
3016
	*
3017
	* @return Array list of countries
3018
	*
3019
	*/
3020
	public function getAllCountries($filters = array())
3021
	{
3022
		$Connection= new Connection($this->db);
3023
		if ($Connection->tableExists('countries')) {
3024
			$query  = "SELECT countries.name AS airport_country
3025
				FROM countries
3026
				ORDER BY countries.name ASC";
3027
			$sth = $this->db->prepare($query);
3028
			$sth->execute();
3029
   
3030
			$temp_array = array();
3031
			$country_array = array();
3032
		
3033
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
3034
			{
3035
				$temp_array['country'] = $row['airport_country'];
3036
				$country_array[$row['airport_country']] = $temp_array;
3037
			}
3038
		} else {
3039
			$filter_query = $this->getFilter($filters,true,true);
3040
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
3041
								FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' 
3042
								ORDER BY spotter_output.departure_airport_country ASC";
3043
3044
			$sth = $this->db->prepare($query);
3045
			$sth->execute();
3046
   
3047
			$temp_array = array();
3048
			$country_array = array();
3049
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
3050
			{
3051
				$temp_array['country'] = $row['airport_country'];
3052
				$country_array[$row['airport_country']] = $temp_array;
3053
			}
3054
3055
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
3056
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
3057
								ORDER BY spotter_output.arrival_airport_country ASC";
3058
					
3059
		$sth = $this->db->prepare($query);
3060
		$sth->execute();
3061
		
3062
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3063
		{
3064
			if ($country_array[$row['airport_country']]['country'] != $row['airport_country'])
3065
			{
3066
				$temp_array['country'] = $row['airport_country'];
3067
				
3068
				$country_array[$row['country']] = $temp_array;
3069
			}
3070
		}
3071
		
3072
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
3073
								FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
3074
								ORDER BY spotter_output.airline_country ASC";
3075
					
3076
		$sth = $this->db->prepare($query);
3077
		$sth->execute();
3078
		
3079
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3080
		{
3081
			if (isset($country_array[$row['airline_country']]['country']) && $country_array[$row['airline_country']]['country'] != $row['airline_country'])
3082
			{
3083
				$temp_array['country'] = $row['airline_country'];
3084
				
3085
				$country_array[$row['country']] = $temp_array;
3086
			}
3087
		}
3088
		}  
3089
		return $country_array;
3090
	} 
3091
	
3092
	
3093
	
3094
	
3095
	/**
3096
	* Gets a list of all idents/callsigns
3097
	*
3098
	* @return Array list of ident/callsign names
3099
	*
3100
	*/
3101
	public function getAllIdents($filters = array())
3102
	{
3103
		$filter_query = $this->getFilter($filters,true,true);
3104
		$query  = "SELECT DISTINCT spotter_output.ident
3105
								FROM spotter_output".$filter_query." spotter_output.ident <> '' 
3106
								ORDER BY spotter_output.date ASC LIMIT 700 OFFSET 0";
3107
3108
		$sth = $this->db->prepare($query);
3109
		$sth->execute();
3110
    
3111
		$ident_array = array();
3112
		$temp_array = array();
3113
		
3114
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3115
		{
3116
			$temp_array['ident'] = $row['ident'];
3117
			$ident_array[] = $temp_array;
3118
		}
3119
3120
		return $ident_array;
3121
	}
3122
3123
	/**
3124
	* Get a list of flights from airport since 7 days
3125
	* @return Array number, icao, name and city of airports
3126
	*/
3127
3128
	public function getLast7DaysAirportsDeparture($airport_icao = '',$filters = array()) {
3129
		global $globalTimezone, $globalDBdriver;
3130
		$filter_query = $this->getFilter($filters,true,true);
3131
		if ($globalTimezone != '') {
3132
			date_default_timezone_set($globalTimezone);
3133
			$datetime = new DateTime();
3134
			$offset = $datetime->format('P');
3135
		} else $offset = '+00:00';
3136
		if ($airport_icao == '') {
3137
			if ($globalDBdriver == 'mysql') {
3138
				$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";
3139
			} else {
3140
				$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";
3141
			}
3142
			$sth = $this->db->prepare($query);
3143
			$sth->execute(array(':offset' => $offset));
3144
		} else {
3145
			if ($globalDBdriver == 'mysql') {
3146
				$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";
3147
			} else {
3148
				$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";
3149
			}
3150
			$sth = $this->db->prepare($query);
3151
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3152
		}
3153
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3154
	}
3155
3156
	/**
3157
	* Get a list of flights from airport since 7 days
3158
	* @return Array number, icao, name and city of airports
3159
	*/
3160
3161
	public function getLast7DaysAirportsDepartureByAirlines($airport_icao = '') {
3162
		global $globalTimezone, $globalDBdriver;
3163
		if ($globalTimezone != '') {
3164
			date_default_timezone_set($globalTimezone);
3165
			$datetime = new DateTime();
3166
			$offset = $datetime->format('P');
3167
		} else $offset = '+00:00';
3168
		if ($airport_icao == '') {
3169
			if ($globalDBdriver == 'mysql') {
3170
				$query = "SELECT spotter_output.airline_icao, COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, 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";
3171
			} else {
3172
				$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";
3173
			}
3174
			$sth = $this->db->prepare($query);
3175
			$sth->execute(array(':offset' => $offset));
3176
		} else {
3177
			if ($globalDBdriver == 'mysql') {
3178
				$query = "SELECT spotter_output.airline_icao, COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, 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";
3179
			} else {
3180
				$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";
3181
			}
3182
			$sth = $this->db->prepare($query);
3183
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3184
		}
3185
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3186
	}
3187
3188
	/**
3189
	* Get a list of flights from detected airport since 7 days
3190
	* @return Array number, icao, name and city of airports
3191
	*/
3192
3193
	public function getLast7DaysDetectedAirportsDeparture($airport_icao = '', $filters = array()) {
3194
		global $globalTimezone, $globalDBdriver;
3195
		$filter_query = $this->getFilter($filters,true,true);
3196
		if ($globalTimezone != '') {
3197
			date_default_timezone_set($globalTimezone);
3198
			$datetime = new DateTime();
3199
			$offset = $datetime->format('P');
3200
		} else $offset = '+00:00';
3201
		if ($airport_icao == '') {
3202
			if ($globalDBdriver == 'mysql') {
3203
				$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 
3204
				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 <> '' 
3205
				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";
3206
			} else {
3207
				$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 
3208
				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 <> '' 
3209
				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";
3210
			}
3211
			$sth = $this->db->prepare($query);
3212
			$sth->execute(array(':offset' => $offset));
3213
		} else {
3214
			if ($globalDBdriver == 'mysql') {
3215
				$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 
3216
				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 
3217
				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";
3218
			} else {
3219
				$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 
3220
				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";
3221
			}
3222
			$sth = $this->db->prepare($query);
3223
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3224
		}
3225
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3226
	}
3227
3228
	/**
3229
	* Get a list of flights from detected airport since 7 days
3230
	* @return Array number, icao, name and city of airports
3231
	*/
3232
3233
	public function getLast7DaysDetectedAirportsDepartureByAirlines($airport_icao = '') {
3234
		global $globalTimezone, $globalDBdriver;
3235
		if ($globalTimezone != '') {
3236
			date_default_timezone_set($globalTimezone);
3237
			$datetime = new DateTime();
3238
			$offset = $datetime->format('P');
3239
		} else $offset = '+00:00';
3240
		if ($airport_icao == '') {
3241
			if ($globalDBdriver == 'mysql') {
3242
				$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 
3243
				FROM `spotter_output`, airport 
3244
				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 <> '' 
3245
				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";
3246
			} else {
3247
				$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 
3248
				FROM spotter_output, airport 
3249
				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 <> '' 
3250
				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";
3251
			}
3252
			$sth = $this->db->prepare($query);
3253
			$sth->execute(array(':offset' => $offset));
3254
		} else {
3255
			if ($globalDBdriver == 'mysql') {
3256
				$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 
3257
				FROM `spotter_output`, airport 
3258
				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 
3259
				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";
3260
			} else {
3261
				$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 
3262
				FROM spotter_output, airport 
3263
				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";
3264
			}
3265
			$sth = $this->db->prepare($query);
3266
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3267
		}
3268
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3269
	}
3270
3271
3272
	/**
3273
	* Get a list of flights to airport since 7 days
3274
	* @return Array number, icao, name and city of airports
3275
	*/
3276
3277
	public function getLast7DaysAirportsArrival($airport_icao = '', $filters = array()) {
3278
		global $globalTimezone, $globalDBdriver;
3279
		$filter_query = $this->getFilter($filters,true,true);
3280
		if ($globalTimezone != '') {
3281
			date_default_timezone_set($globalTimezone);
3282
			$datetime = new DateTime();
3283
			$offset = $datetime->format('P');
3284
		} else $offset = '+00:00';
3285
		if ($airport_icao == '') {
3286
			if ($globalDBdriver == 'mysql') {
3287
				$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";
3288
			} else {
3289
				$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";
3290
			}
3291
			$sth = $this->db->prepare($query);
3292
			$sth->execute(array(':offset' => $offset));
3293
		} else {
3294
			if ($globalDBdriver == 'mysql') {
3295
				$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";
3296
			} else {
3297
				$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";
3298
			}
3299
			$sth = $this->db->prepare($query);
3300
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3301
		}
3302
		
3303
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3304
	}
3305
3306
3307
	/**
3308
	* Get a list of flights detected to airport since 7 days
3309
	* @return Array number, icao, name and city of airports
3310
	*/
3311
3312
	public function getLast7DaysDetectedAirportsArrival($airport_icao = '',$filters = array()) {
3313
		global $globalTimezone, $globalDBdriver;
3314
		$filter_query = $this->getFilter($filters,true,true);
3315
		if ($globalTimezone != '') {
3316
			date_default_timezone_set($globalTimezone);
3317
			$datetime = new DateTime();
3318
			$offset = $datetime->format('P');
3319
		} else $offset = '+00:00';
3320
		if ($airport_icao == '') {
3321
			if ($globalDBdriver == 'mysql') {
3322
				$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 
3323
				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 <> '' 
3324
				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";
3325
			} else {
3326
				$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 
3327
				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 <> '' 
3328
				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";
3329
			}
3330
			$sth = $this->db->prepare($query);
3331
			$sth->execute(array(':offset' => $offset));
3332
		} else {
3333
			if ($globalDBdriver == 'mysql') {
3334
				$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 
3335
				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 
3336
				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";
3337
			} else {
3338
				$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 
3339
				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 
3340
				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";
3341
			}
3342
			$sth = $this->db->prepare($query);
3343
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3344
		}
3345
		
3346
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3347
	}
3348
3349
3350
	/**
3351
	* Get a list of flights to airport since 7 days
3352
	* @return Array number, icao, name and city of airports
3353
	*/
3354
3355
	public function getLast7DaysAirportsArrivalByAirlines($airport_icao = '') {
3356
		global $globalTimezone, $globalDBdriver;
3357
		if ($globalTimezone != '') {
3358
			date_default_timezone_set($globalTimezone);
3359
			$datetime = new DateTime();
3360
			$offset = $datetime->format('P');
3361
		} else $offset = '+00:00';
3362
		if ($airport_icao == '') {
3363
			if ($globalDBdriver == 'mysql') {
3364
				$query = "SELECT spotter_output.airline_icao, COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, 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";
3365
			} else {
3366
				$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";
3367
			}
3368
			$sth = $this->db->prepare($query);
3369
			$sth->execute(array(':offset' => $offset));
3370
		} else {
3371
			if ($globalDBdriver == 'mysql') {
3372
				$query = "SELECT spotter_output.airline_icao, COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, 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";
3373
			} else {
3374
				$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";
3375
			}
3376
			$sth = $this->db->prepare($query);
3377
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3378
		}
3379
		
3380
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3381
	}
3382
3383
3384
	/**
3385
	* Get a list of flights detected to airport since 7 days
3386
	* @return Array number, icao, name and city of airports
3387
	*/
3388
3389
	public function getLast7DaysDetectedAirportsArrivalByAirlines($airport_icao = '') {
3390
		global $globalTimezone, $globalDBdriver;
3391
		if ($globalTimezone != '') {
3392
			date_default_timezone_set($globalTimezone);
3393
			$datetime = new DateTime();
3394
			$offset = $datetime->format('P');
3395
		} else $offset = '+00:00';
3396
		if ($airport_icao == '') {
3397
			if ($globalDBdriver == 'mysql') {
3398
				$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 
3399
				FROM `spotter_output`, airport 
3400
				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 <> '' 
3401
				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";
3402
			} else {
3403
				$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 
3404
				FROM spotter_output, airport 
3405
				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 <> '' 
3406
				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";
3407
			}
3408
			$sth = $this->db->prepare($query);
3409
			$sth->execute(array(':offset' => $offset));
3410
		} else {
3411
			if ($globalDBdriver == 'mysql') {
3412
				$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 
3413
				FROM `spotter_output`, airport 
3414
				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 
3415
				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";
3416
			} else {
3417
				$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 
3418
				FROM spotter_output, airport 
3419
				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 
3420
				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";
3421
			}
3422
			$sth = $this->db->prepare($query);
3423
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3424
		}
3425
		
3426
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3427
	}
3428
3429
3430
	/**
3431
	* Gets a list of all dates
3432
	*
3433
	* @return Array list of date names
3434
	*
3435
	*/
3436
	public function getAllDates()
3437
	{
3438
		global $globalTimezone, $globalDBdriver;
3439
		if ($globalTimezone != '') {
3440
			date_default_timezone_set($globalTimezone);
3441
			$datetime = new DateTime();
3442
			$offset = $datetime->format('P');
3443
		} else $offset = '+00:00';
3444
3445
		if ($globalDBdriver == 'mysql') {
3446
			$query  = "SELECT DISTINCT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) as date
3447
								FROM spotter_output
3448
								WHERE spotter_output.date <> '' 
3449
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3450
		} else {
3451
			$query  = "SELECT DISTINCT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date
3452
								FROM spotter_output
3453
								WHERE spotter_output.date <> '' 
3454
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3455
		}
3456
		
3457
		$sth = $this->db->prepare($query);
3458
		$sth->execute(array(':offset' => $offset));
3459
    
3460
		$date_array = array();
3461
		$temp_array = array();
3462
		
3463
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3464
		{
3465
			$temp_array['date'] = $row['date'];
3466
3467
			$date_array[] = $temp_array;
3468
		}
3469
3470
		return $date_array;
3471
	}
3472
	
3473
	
3474
	
3475
	/**
3476
	* Gets all route combinations
3477
	*
3478
	* @return Array the route list
3479
	*
3480
	*/
3481
	public function getAllRoutes()
3482
	{
3483
		$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 
3484
				FROM spotter_output
3485
				WHERE spotter_output.ident <> '' 
3486
				GROUP BY route
3487
				ORDER BY route ASC";
3488
3489
		$sth = $this->db->prepare($query);
3490
		$sth->execute();
3491
3492
		$routes_array = array();
3493
		$temp_array = array();
3494
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3495
		{
3496
			$temp_array['route'] = $row['route'];
3497
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
3498
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
3499
3500
			$routes_array[] = $temp_array;
3501
		}
3502
		return $routes_array;
3503
	}
3504
3505
	/**
3506
	* Update ident spotter data
3507
	*
3508
	* @param String $flightaware_id the ID from flightaware
3509
	* @param String $ident the flight ident
3510
	* @return String success or false
3511
	*
3512
	*/	
3513
	public function updateIdentSpotterData($flightaware_id = '', $ident = '',$fromsource = NULL)
3514
	{
3515
		if (!is_numeric(substr($ident, 0, 3)))
3516
		{
3517
			if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3518
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3519
			} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3520
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3521
			} else {
3522
				$airline_array = $this->getAllAirlineInfo("NA");
3523
			}
3524
			if (count($airline_array) == 0) {
3525
				$airline_array = $this->getAllAirlineInfo("NA");
3526
			}
3527
			if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3528
				$airline_array = $this->getAllAirlineInfo("NA");
3529
			}
3530
		} else {
3531
			$airline_array = $this->getAllAirlineInfo("NA");
3532
		}
3533
                $airline_name = $airline_array[0]['name'];
3534
                $airline_icao = $airline_array[0]['icao'];
3535
                $airline_country = $airline_array[0]['country'];
3536
                $airline_type = $airline_array[0]['type'];
3537
3538
3539
		$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';
3540
                $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);
3541
3542
		try {
3543
			$sth = $this->db->prepare($query);
3544
			$sth->execute($query_values);
3545
		} catch (PDOException $e) {
3546
			return "error : ".$e->getMessage();
3547
		}
3548
		
3549
		return "success";
3550
3551
	}
3552
	/**
3553
	* Update latest spotter data
3554
	*
3555
	* @param String $flightaware_id the ID from flightaware
3556
	* @param String $ident the flight ident
3557
	* @param String $arrival_airport_icao the arrival airport
3558
	* @return String success or false
3559
	*
3560
	*/	
3561
	public function updateLatestSpotterData($flightaware_id = '', $ident = '', $latitude = '', $longitude = '', $altitude = '', $ground = false, $groundspeed = NULL, $date = '', $arrival_airport_icao = '',$arrival_airport_time = '')
3562
	{
3563
		if ($groundspeed == '') $groundspeed = NULL;
3564
		$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';
3565
                $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);
3566
3567
		try {
3568
			$sth = $this->db->prepare($query);
3569
			$sth->execute($query_values);
3570
		} catch (PDOException $e) {
3571
			return "error : ".$e->getMessage();
3572
		}
3573
		
3574
		return "success";
3575
3576
	}
3577
3578
	/**
3579
	* Adds a new spotter data
3580
	*
3581
	* @param String $flightaware_id the ID from flightaware
3582
	* @param String $ident the flight ident
3583
	* @param String $aircraft_icao the aircraft type
3584
	* @param String $departure_airport_icao the departure airport
3585
	* @param String $arrival_airport_icao the arrival airport
3586
	* @param String $latitude latitude of flight
3587
	* @param String $longitude latitude of flight
3588
	* @param String $waypoints waypoints of flight
3589
	* @param String $altitude altitude of flight
3590
	* @param String $heading heading of flight
3591
	* @param String $groundspeed speed of flight
3592
	* @param String $date date of flight
3593
	* @param String $departure_airport_time departure time of flight
3594
	* @param String $arrival_airport_time arrival time of flight
3595
	* @param String $squawk squawk code of flight
3596
	* @param String $route_stop route stop of flight
3597
	* @param String $highlight highlight or not
3598
	* @param String $ModeS ModesS code of flight
3599
	* @param String $registration registration code of flight
3600
	* @param String $pilot_id pilot id of flight (for virtual airlines)
3601
	* @param String $pilot_name pilot name of flight (for virtual airlines)
3602
	* @param String $verticalrate vertival rate of flight
3603
	* @return String success or false
3604
	*/
3605
	public function addSpotterData($flightaware_id = '', $ident = '', $aircraft_icao = '', $departure_airport_icao = '', $arrival_airport_icao = '', $latitude = '', $longitude = '', $waypoints = '', $altitude = '', $altitude_real = '',$heading = '', $groundspeed = '', $date = '', $departure_airport_time = '', $arrival_airport_time = '',$squawk = '', $route_stop = '', $highlight = '', $ModeS = '', $registration = '',$pilot_id = '', $pilot_name = '', $verticalrate = '', $ground = false,$format_source = '', $source_name = '',$source_type = '')
0 ignored issues
show
Unused Code introduced by
The parameter $altitude_real 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...
3606
	{
3607
		global $globalURL, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalDebugTimeElapsed, $globalAirlinesSource, $globalVAM;
3608
		
3609
		//if (isset($globalDebugTimeElapsed) || $globalDebugTimeElapsed == '') $globalDebugTimeElapsed = FALSE;
3610
		$Image = new Image($this->db);
3611
		$Common = new Common();
3612
		
3613
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
3614
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
3615
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
3616
		if (!isset($globalVAM)) $globalVAM = FALSE;
3617
		date_default_timezone_set('UTC');
3618
		
3619
		//getting the registration
3620
		if ($flightaware_id != "" && $registration == '')
3621
		{
3622
			if (!is_string($flightaware_id))
3623
			{
3624
				return false;
3625
			} else {
3626
				if ($ModeS != '') {
3627
					$timeelapsed = microtime(true);
3628
					$registration = $this->getAircraftRegistrationBymodeS($ModeS,$source_type);
3629
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3630
				} else {
3631
					$myhex = explode('-',$flightaware_id);
3632
					if (count($myhex) > 0) {
3633
						$timeelapsed = microtime(true);
3634
						$registration = $this->getAircraftRegistrationBymodeS($myhex[0],$source_type);
3635
						if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3636
					}
3637
				}
3638
			}
3639
		}
3640
		$fromsource = NULL;
3641
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
3642
		elseif ($format_source == 'vatsimtxt') $fromsource = 'vatsim';
3643
		elseif ($format_source == 'whazzup') $fromsource = 'ivao';
3644
		elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
3645
		elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
3646
		//getting the airline information
3647
		if ($ident != "")
3648
		{
3649
			if (!is_string($ident))
3650
			{
3651
				return false;
3652
			} else {
3653
				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'))
3654
				{
3655
					$timeelapsed = microtime(true);
3656
					if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3657
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3658
					} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3659
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3660
					} else {
3661
						$airline_array = $this->getAllAirlineInfo("NA");
3662
					}
3663
					if (count($airline_array) == 0) {
3664
						$airline_array = $this->getAllAirlineInfo("NA");
3665
					}
3666
					if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3667
						$airline_array = $this->getAllAirlineInfo("NA");
3668
					}
3669
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3670
3671
				} else {
3672
					$timeelapsed = microtime(true);
3673
					$airline_array = $this->getAllAirlineInfo("NA");
3674
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3675
				}
3676
			}
3677
		} else $airline_array = array();
3678
		
3679
		//getting the aircraft information
3680
		$aircraft_array = array();
3681
		if ($aircraft_icao != '')
3682
		{
3683
			if (!is_string($aircraft_icao))
3684
			{
3685
				return false;
3686
			} else {
3687
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3688
				{
3689
					$timeelapsed = microtime(true);
3690
					$aircraft_array = $this->getAllAircraftInfo("NA");
3691
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3692
				} else {
3693
					$timeelapsed = microtime(true);
3694
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3695
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3696
				}
3697
			}
3698
		} else {
3699
			if ($ModeS != '') {
3700
				$timeelapsed = microtime(true);
3701
				$aircraft_icao = $this->getAllAircraftType($ModeS,$source_type);
3702
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAircraftType : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3703
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3704
				{
3705
					$timeelapsed = microtime(true);
3706
					$aircraft_array = $this->getAllAircraftInfo("NA");
3707
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3708
				} else {
3709
					$timeelapsed = microtime(true);
3710
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3711
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3712
				}
3713
			}
3714
		}
3715
		
3716
		//getting the departure airport information
3717
		$departure_airport_array = array();
3718
		$departure_airport_icao = trim($departure_airport_icao);
3719
		if ($departure_airport_icao != '')
3720
		{
3721
			if (!is_string($departure_airport_icao))
3722
			{
3723
				return false;
3724
			} else {
3725
				$timeelapsed = microtime(true);
3726
				$departure_airport_array = $this->getAllAirportInfo($departure_airport_icao);
3727
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3728
			}
3729
		}
3730
		
3731
		//getting the arrival airport information
3732
		$arrival_airport_array = array();
3733
		$arrival_airport_icao = trim($arrival_airport_icao);
3734
		if ($arrival_airport_icao != '')
3735
		{
3736
			if (!is_string($arrival_airport_icao))
3737
			{
3738
				return false;
3739
			} else {
3740
				$timeelapsed = microtime(true);
3741
				$arrival_airport_array = $this->getAllAirportInfo($arrival_airport_icao);
3742
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3743
			}
3744
		}
3745
3746
		if ($latitude != "")
3747
		{
3748
			if (!is_numeric($latitude))
3749
			{
3750
				return false;
3751
			}
3752
		}
3753
		
3754
		if ($longitude != "")
3755
		{
3756
			if (!is_numeric($longitude))
3757
			{
3758
				return false;
3759
			}
3760
		}
3761
		
3762
		if ($waypoints != "")
3763
		{
3764
			if (!is_string($waypoints))
3765
			{
3766
				return false;
3767
			}
3768
		}
3769
		
3770
		if ($altitude != "")
3771
		{
3772
			if (!is_numeric($altitude))
3773
			{
3774
				return false;
3775
			}
3776
		} else $altitude = 0;
3777
		
3778
		if ($heading != "")
3779
		{
3780
			if (!is_numeric($heading))
3781
			{
3782
				return false;
3783
			}
3784
		}
3785
		
3786
		if ($groundspeed != "")
3787
		{
3788
			if (!is_numeric($groundspeed))
3789
			{
3790
				return false;
3791
			}
3792
		}
3793
3794
    
3795
		if ($date == "" || strtotime($date) < time()-20*60)
3796
		{
3797
			$date = date("Y-m-d H:i:s", time());
3798
		}
3799
3800
		//getting the aircraft image
3801
		if (($registration != "" || $registration != 'NA') && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM)
3802
		{
3803
			$timeelapsed = microtime(true);
3804
			$image_array = $Image->getSpotterImage($registration);
3805
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getSpotterImage : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3806
			if (!isset($image_array[0]['registration']))
3807
			{
3808
				//echo "Add image !!!! \n";
3809
				$Image->addSpotterImage($registration);
3810
			}
3811
			$timeelapsed = microtime(true);
3812
			$owner_info = $this->getAircraftOwnerByRegistration($registration);
3813
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftOwnerByRegistration : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3814
			if ($owner_info['owner'] != '') $aircraft_owner = ucwords(strtolower($owner_info['owner']));
3815
		}
3816
    
3817
		if (($globalIVAO || $globalVATSIM || $globalphpVMS || $globalVAM) && $aircraft_icao != '')
3818
		{
3819
            		if (isset($airline_array[0]['icao'])) $airline_icao = $airline_array[0]['icao'];
3820
            		else $airline_icao = '';
3821
			$image_array = $Image->getSpotterImage('',$aircraft_icao,$airline_icao);
3822
			if (!isset($image_array[0]['registration']))
3823
			{
3824
				//echo "Add image !!!! \n";
3825
				$Image->addSpotterImage('',$aircraft_icao,$airline_icao);
3826
			}
3827
		}
3828
    
3829
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
3830
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
3831
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
3832
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
3833
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
3834
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
3835
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3836
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3837
		$waypoints = filter_var($waypoints,FILTER_SANITIZE_STRING);
3838
		$altitude = filter_var($altitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3839
		$heading = filter_var($heading,FILTER_SANITIZE_NUMBER_INT);
3840
		$groundspeed = filter_var($groundspeed,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3841
		$squawk = filter_var($squawk,FILTER_SANITIZE_NUMBER_INT);
3842
		$route_stop = filter_var($route_stop,FILTER_SANITIZE_STRING);
3843
		$ModeS = filter_var($ModeS,FILTER_SANITIZE_STRING);
3844
		$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_STRING);
3845
		$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
3846
		$format_source = filter_var($format_source,FILTER_SANITIZE_STRING);
3847
		$verticalrate = filter_var($verticalrate,FILTER_SANITIZE_NUMBER_INT);
3848
	
3849
		if (count($airline_array) == 0) 
3850
		{
3851
                        $airline_array = $this->getAllAirlineInfo('NA');
3852
                }
3853
                if (count($aircraft_array) == 0) 
3854
                {
3855
                        $aircraft_array = $this->getAllAircraftInfo('NA');
3856
                }
3857
                if (count($departure_airport_array) == 0 || $departure_airport_array[0]['icao'] == '' || $departure_airport_icao == '') 
3858
                {
3859
                        $departure_airport_array = $this->getAllAirportInfo('NA');
3860
                }
3861
                if (count($arrival_airport_array) == 0 || $arrival_airport_array[0]['icao'] == '' || $arrival_airport_icao == '') 
3862
                {
3863
                        $arrival_airport_array = $this->getAllAirportInfo('NA');
3864
                }
3865
                if ($registration == '') $registration = 'NA';
3866
                if ($latitude == '' && $longitude == '') {
3867
            		$latitude = 0;
3868
            		$longitude = 0;
3869
            	}
3870
                if ($squawk == '' || $Common->isInteger($squawk) === false) $squawk = NULL;
3871
                if ($verticalrate == '' || $Common->isInteger($verticalrate) === false) $verticalrate = NULL;
3872
                if ($heading == '' || $Common->isInteger($heading) === false) $heading = 0;
3873
                if ($groundspeed == '' || $Common->isInteger($groundspeed) === false) $groundspeed = 0;
3874
                if (!isset($aircraft_owner)) $aircraft_owner = NULL;
3875
                $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) 
3876
                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)";
3877
3878
                $airline_name = $airline_array[0]['name'];
3879
                $airline_icao = $airline_array[0]['icao'];
3880
                $airline_country = $airline_array[0]['country'];
3881
                $airline_type = $airline_array[0]['type'];
3882
		if ($airline_type == '') {
3883
			$timeelapsed = microtime(true);
3884
			$airline_type = $this->getAircraftTypeBymodeS($ModeS);
3885
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftTypeBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3886
		}
3887
		if ($airline_type == null) $airline_type = '';
3888
                $aircraft_type = $aircraft_array[0]['type'];
3889
                $aircraft_manufacturer = $aircraft_array[0]['manufacturer'];
3890
                $departure_airport_name = $departure_airport_array[0]['name'];
3891
	        $departure_airport_city = $departure_airport_array[0]['city'];
3892
            	$departure_airport_country = $departure_airport_array[0]['country'];
3893
                
3894
                $arrival_airport_name = $arrival_airport_array[0]['name'];
3895
                $arrival_airport_city = $arrival_airport_array[0]['city'];
3896
                $arrival_airport_country = $arrival_airport_array[0]['country'];
3897
                $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);
3898
3899
		try {
3900
		        
3901
			$sth = $this->db->prepare($query);
3902
			$sth->execute($query_values);
3903
			$this->db = null;
3904
		} catch (PDOException $e) {
3905
		    return "error : ".$e->getMessage();
3906
		}
3907
		
3908
		return "success";
3909
3910
	}
3911
	
3912
  
3913
	/**
3914
	* Gets the aircraft ident within the last hour
3915
	*
3916
	* @return String the ident
3917
	*
3918
	*/
3919
	public function getIdentFromLastHour($ident)
3920
	{
3921
		global $globalDBdriver, $globalTimezone;
3922
		if ($globalDBdriver == 'mysql') {
3923
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3924
								WHERE spotter_output.ident = :ident 
3925
								AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) 
3926
								AND spotter_output.date < UTC_TIMESTAMP()";
3927
			$query_data = array(':ident' => $ident);
3928
		} else {
3929
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3930
								WHERE spotter_output.ident = :ident 
3931
								AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INTERVAL '1 HOURS'
3932
								AND spotter_output.date < now() AT TIME ZONE 'UTC'";
3933
			$query_data = array(':ident' => $ident);
3934
    		}
3935
		
3936
		$sth = $this->db->prepare($query);
3937
		$sth->execute($query_data);
3938
    		$ident_result='';
3939
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3940
		{
3941
			$ident_result = $row['ident'];
3942
		}
3943
3944
		return $ident_result;
3945
	}
3946
	
3947
	
3948
	/**
3949
	* Gets the aircraft data from the last 20 seconds
3950
	*
3951
	* @return Array the spotter data
3952
	*
3953
	*/
3954
	public function getRealTimeData($q = '')
3955
	{
3956
		global $globalDBdriver;
3957
		$additional_query = '';
3958
		if ($q != "")
3959
		{
3960
			if (!is_string($q))
3961
			{
3962
				return false;
3963
			} else {
3964
				$q_array = explode(" ", $q);
3965
				foreach ($q_array as $q_item){
3966
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
3967
					$additional_query .= " AND (";
3968
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
3969
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
3970
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
3971
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
3972
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
3973
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
3974
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
3975
					$additional_query .= "(spotter_output.ident like '%".$q_item."%')";
3976
					$additional_query .= ")";
3977
				}
3978
			}
3979
		}
3980
		if ($globalDBdriver == 'mysql') {
3981
			$query  = "SELECT spotter_output.* FROM spotter_output 
3982
				WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 20 SECOND) ".$additional_query." 
3983
				AND spotter_output.date < UTC_TIMESTAMP()";
3984
		} else {
3985
			$query  = "SELECT spotter_output.* FROM spotter_output 
3986
				WHERE spotter_output.date::timestamp >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '20 SECONDS' ".$additional_query." 
3987
				AND spotter_output.date::timestamp < CURRENT_TIMESTAMP AT TIME ZONE 'UTC'";
3988
		}
3989
		$spotter_array = $this->getDataFromDB($query, array());
3990
3991
		return $spotter_array;
3992
	}
3993
	
3994
	
3995
	
3996
	 /**
3997
	* Gets all airlines that have flown over
3998
	*
3999
	* @return Array the airline list
4000
	*
4001
	*/
4002
	public function countAllAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(), $year = '', $month = '', $day = '')
4003
	{
4004
		global $globalDBdriver;
4005
		$filter_query = $this->getFilter($filters,true,true);
4006
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4007
		 			FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.airline_icao <> 'NA'";
4008
		if ($olderthanmonths > 0) {
4009
			if ($globalDBdriver == 'mysql') {
4010
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4011
			} else {
4012
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4013
			}
4014
		}
4015
                if ($sincedate != '') {
4016
			if ($globalDBdriver == 'mysql') {
4017
				$query .= " AND spotter_output.date > '".$sincedate."'";
4018
			} else {
4019
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4020
			}
4021
		}
4022
		$query_values = array();
4023
		if ($year != '') {
4024
			if ($globalDBdriver == 'mysql') {
4025
				$query .= " AND YEAR(spotter_output.date) = :year";
4026
				$query_values = array_merge($query_values,array(':year' => $year));
4027
			} else {
4028
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4029
				$query_values = array_merge($query_values,array(':year' => $year));
4030
			}
4031
		}
4032
		if ($month != '') {
4033
			if ($globalDBdriver == 'mysql') {
4034
				$query .= " AND MONTH(spotter_output.date) = :month";
4035
				$query_values = array_merge($query_values,array(':month' => $month));
4036
			} else {
4037
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4038
				$query_values = array_merge($query_values,array(':month' => $month));
4039
			}
4040
		}
4041
		if ($day != '') {
4042
			if ($globalDBdriver == 'mysql') {
4043
				$query .= " AND DAY(spotter_output.date) = :day";
4044
				$query_values = array_merge($query_values,array(':day' => $day));
4045
			} else {
4046
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4047
				$query_values = array_merge($query_values,array(':day' => $day));
4048
			}
4049
		}
4050
		$query .= " GROUP BY spotter_output.airline_name,spotter_output.airline_icao, spotter_output.airline_country ORDER BY airline_count DESC";
4051
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4052
4053
		$sth = $this->db->prepare($query);
4054
		$sth->execute($query_values);
4055
		$airline_array = array();
4056
		$temp_array = array();
4057
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4058
		{
4059
			$temp_array['airline_name'] = $row['airline_name'];
4060
			$temp_array['airline_icao'] = $row['airline_icao'];
4061
			$temp_array['airline_count'] = $row['airline_count'];
4062
			$temp_array['airline_country'] = $row['airline_country'];
4063
			$airline_array[] = $temp_array;
4064
		}
4065
		return $airline_array;
4066
	}
4067
4068
	 /**
4069
	* Gets all pilots that have flown over
4070
	*
4071
	* @return Array the pilots list
4072
	*
4073
	*/
4074
	public function countAllPilots($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '', $month = '',$day = '')
4075
	{
4076
		global $globalDBdriver;
4077
		$filter_query = $this->getFilter($filters,true,true);
4078
		$query  = "SELECT DISTINCT spotter_output.pilot_id, s.pilot_name, COUNT(spotter_output.pilot_id) AS pilot_count, spotter_output.format_source
4079
			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 <> ''";
4080
                if ($olderthanmonths > 0) {
4081
            		if ($globalDBdriver == 'mysql') {
4082
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4083
			} else {
4084
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4085
			}
4086
		}
4087
                if ($sincedate != '') {
4088
            		if ($globalDBdriver == 'mysql') {
4089
				$query .= " AND spotter_output.date > '".$sincedate."'";
4090
			} else {
4091
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4092
			}
4093
		}
4094
		$query_values = array();
4095
		if ($year != '') {
4096
			if ($globalDBdriver == 'mysql') {
4097
				$query .= " AND YEAR(spotter_output.date) = :year";
4098
				$query_values = array_merge($query_values,array(':year' => $year));
4099
			} else {
4100
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4101
				$query_values = array_merge($query_values,array(':year' => $year));
4102
			}
4103
		}
4104
		if ($month != '') {
4105
			if ($globalDBdriver == 'mysql') {
4106
				$query .= " AND MONTH(spotter_output.date) = :month";
4107
				$query_values = array_merge($query_values,array(':month' => $month));
4108
			} else {
4109
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4110
				$query_values = array_merge($query_values,array(':month' => $month));
4111
			}
4112
		}
4113
		if ($day != '') {
4114
			if ($globalDBdriver == 'mysql') {
4115
				$query .= " AND DAY(spotter_output.date) = :day";
4116
				$query_values = array_merge($query_values,array(':day' => $day));
4117
			} else {
4118
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4119
				$query_values = array_merge($query_values,array(':day' => $day));
4120
			}
4121
		}
4122
		
4123
		$query .= " GROUP BY spotter_output.pilot_id,s.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
4124
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4125
      
4126
		
4127
		$sth = $this->db->prepare($query);
4128
		$sth->execute($query_values);
4129
		$airline_array = array();
4130
		$temp_array = array();
4131
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4132
		{
4133
			$temp_array['pilot_name'] = $row['pilot_name'];
4134
			$temp_array['pilot_id'] = $row['pilot_id'];
4135
			$temp_array['pilot_count'] = $row['pilot_count'];
4136
			$temp_array['format_source'] = $row['format_source'];
4137
			$airline_array[] = $temp_array;
4138
		}
4139
		return $airline_array;
4140
	}
4141
	
4142
	/**
4143
	* Gets all pilots that have flown over
4144
	*
4145
	* @return Array the pilots list
4146
	*
4147
	*/
4148
	public function countAllPilotsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '')
4149
	{
4150
		global $globalDBdriver;
4151
		$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
4152
		 			FROM spotter_output WHERE spotter_output.pilot_id <> '' ";
4153
                if ($olderthanmonths > 0) {
4154
            		if ($globalDBdriver == 'mysql') {
4155
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4156
			} else {
4157
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4158
			}
4159
		}
4160
                if ($sincedate != '') {
4161
            		if ($globalDBdriver == 'mysql') {
4162
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4163
			} else {
4164
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4165
			}
4166
		}
4167
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
4168
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4169
      
4170
		
4171
		$sth = $this->db->prepare($query);
4172
		$sth->execute();
4173
      
4174
		$airline_array = array();
4175
		$temp_array = array();
4176
        
4177
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4178
		{
4179
			$temp_array['pilot_name'] = $row['pilot_name'];
4180
			$temp_array['pilot_id'] = $row['pilot_id'];
4181
			$temp_array['pilot_count'] = $row['pilot_count'];
4182
			$temp_array['airline_icao'] = $row['airline_icao'];
4183
			$temp_array['format_source'] = $row['format_source'];
4184
			$airline_array[] = $temp_array;
4185
		}
4186
		return $airline_array;
4187
	}
4188
	
4189
	 /**
4190
	* Gets all owner that have flown over
4191
	*
4192
	* @return Array the pilots list
4193
	*
4194
	*/
4195
	public function countAllOwners($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
4196
	{
4197
		global $globalDBdriver;
4198
		$filter_query = $this->getFilter($filters,true,true);
4199
		$query  = "SELECT DISTINCT spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
4200
					FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL";
4201
                if ($olderthanmonths > 0) {
4202
            		if ($globalDBdriver == 'mysql') {
4203
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4204
			} else {
4205
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4206
			}
4207
		}
4208
                if ($sincedate != '') {
4209
            		if ($globalDBdriver == 'mysql') {
4210
				$query .= " AND spotter_output.date > '".$sincedate."' ";
4211
			} else {
4212
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4213
			}
4214
		}
4215
		$query_values = array();
4216
		if ($year != '') {
4217
			if ($globalDBdriver == 'mysql') {
4218
				$query .= " AND YEAR(spotter_output.date) = :year";
4219
				$query_values = array_merge($query_values,array(':year' => $year));
4220
			} else {
4221
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4222
				$query_values = array_merge($query_values,array(':year' => $year));
4223
			}
4224
		}
4225
		if ($month != '') {
4226
			if ($globalDBdriver == 'mysql') {
4227
				$query .= " AND MONTH(spotter_output.date) = :month";
4228
				$query_values = array_merge($query_values,array(':month' => $month));
4229
			} else {
4230
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4231
				$query_values = array_merge($query_values,array(':month' => $month));
4232
			}
4233
		}
4234
		if ($day != '') {
4235
			if ($globalDBdriver == 'mysql') {
4236
				$query .= " AND DAY(spotter_output.date) = :day";
4237
				$query_values = array_merge($query_values,array(':day' => $day));
4238
			} else {
4239
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4240
				$query_values = array_merge($query_values,array(':day' => $day));
4241
			}
4242
		}
4243
		$query .= " GROUP BY spotter_output.owner_name ORDER BY owner_count DESC";
4244
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4245
		
4246
		$sth = $this->db->prepare($query);
4247
		$sth->execute($query_values);
4248
		$airline_array = array();
4249
		$temp_array = array();
4250
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4251
		{
4252
			$temp_array['owner_name'] = $row['owner_name'];
4253
			$temp_array['owner_count'] = $row['owner_count'];
4254
			$airline_array[] = $temp_array;
4255
		}
4256
		return $airline_array;
4257
	}
4258
	
4259
	 /**
4260
	* Gets all owner that have flown over
4261
	*
4262
	* @return Array the pilots list
4263
	*
4264
	*/
4265
	public function countAllOwnersByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
4266
	{
4267
		global $globalDBdriver;
4268
		$filter_query = $this->getFilter($filters,true,true);
4269
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
4270
		 			FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL ";
4271
                if ($olderthanmonths > 0) {
4272
            		if ($globalDBdriver == 'mysql') {
4273
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4274
			} else {
4275
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4276
			}
4277
		}
4278
                if ($sincedate != '') {
4279
            		if ($globalDBdriver == 'mysql') {
4280
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4281
			} else {
4282
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4283
			}
4284
		}
4285
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.owner_name ORDER BY owner_count DESC";
4286
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4287
      
4288
		
4289
		$sth = $this->db->prepare($query);
4290
		$sth->execute();
4291
      
4292
		$airline_array = array();
4293
		$temp_array = array();
4294
        
4295
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4296
		{
4297
			$temp_array['owner_name'] = $row['owner_name'];
4298
			$temp_array['owner_count'] = $row['owner_count'];
4299
			$temp_array['airline_icao'] = $row['airline_icao'];
4300
			$airline_array[] = $temp_array;
4301
		}
4302
		return $airline_array;
4303
	}
4304
4305
	/**
4306
	* Gets all airlines that have flown over by aircraft
4307
	*
4308
	* @return Array the airline list
4309
	*
4310
	*/
4311
	public function countAllAirlinesByAircraft($aircraft_icao,$filters = array())
4312
	{
4313
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4314
		$filter_query = $this->getFilter($filters,true,true);
4315
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4316
		 	    FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
4317
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
4318
			    ORDER BY airline_count DESC";
4319
      
4320
		
4321
		$sth = $this->db->prepare($query);
4322
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4323
      
4324
		$airline_array = array();
4325
		$temp_array = array();
4326
        
4327
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4328
		{
4329
			$temp_array['airline_name'] = $row['airline_name'];
4330
			$temp_array['airline_icao'] = $row['airline_icao'];
4331
			$temp_array['airline_count'] = $row['airline_count'];
4332
			$temp_array['airline_country'] = $row['airline_country'];
4333
4334
			$airline_array[] = $temp_array;
4335
		}
4336
4337
		return $airline_array;
4338
	}
4339
4340
4341
	/**
4342
	* Gets all airline countries that have flown over by aircraft
4343
	*
4344
	* @return Array the airline country list
4345
	*
4346
	*/
4347
	public function countAllAirlineCountriesByAircraft($aircraft_icao,$filters = array())
4348
	{
4349
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4350
		$filter_query = $this->getFilter($filters,true,true);
4351
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count, countries.iso3 AS airline_country_iso3 
4352
			FROM spotter_output, countries ".$filter_query." countries.name = spotter_output.airline_country AND spotter_output.airline_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
4353
			GROUP BY spotter_output.airline_country, countries.iso3
4354
			ORDER BY airline_country_count DESC
4355
			LIMIT 10 OFFSET 0";
4356
      
4357
		
4358
		$sth = $this->db->prepare($query);
4359
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4360
      
4361
		$airline_country_array = array();
4362
		$temp_array = array();
4363
        
4364
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4365
		{
4366
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4367
			$temp_array['airline_country'] = $row['airline_country'];
4368
			$temp_array['airline_country_iso3'] = $row['airline_country_iso3'];
4369
 
4370
			$airline_country_array[] = $temp_array;
4371
		}
4372
		return $airline_country_array;
4373
	}
4374
4375
4376
	
4377
	
4378
	/**
4379
	* Gets all airlines that have flown over by airport
4380
	*
4381
	* @return Array the airline list
4382
	*
4383
	*/
4384
	public function countAllAirlinesByAirport($airport_icao,$filters = array())
4385
	{
4386
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4387
		$filter_query = $this->getFilter($filters,true,true);
4388
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4389
		    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 ) 
4390
                    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country
4391
		    ORDER BY airline_count DESC";
4392
      
4393
		
4394
		$sth = $this->db->prepare($query);
4395
		$sth->execute(array(':airport_icao' => $airport_icao));
4396
      
4397
		$airline_array = array();
4398
		$temp_array = array();
4399
        
4400
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4401
		{
4402
			$temp_array['airline_name'] = $row['airline_name'];
4403
			$temp_array['airline_icao'] = $row['airline_icao'];
4404
			$temp_array['airline_count'] = $row['airline_count'];
4405
			$temp_array['airline_country'] = $row['airline_country'];
4406
4407
			$airline_array[] = $temp_array;
4408
		}
4409
		return $airline_array;
4410
	}
4411
4412
4413
	/**
4414
	* Gets all airline countries that have flown over by airport icao
4415
	*
4416
	* @return Array the airline country list
4417
	*
4418
	*/
4419
	public function countAllAirlineCountriesByAirport($airport_icao,$filters = array())
4420
	{
4421
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4422
		$filter_query = $this->getFilter($filters,true,true);
4423
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count, countries.iso3 AS airline_country_iso3 
4424
			FROM countries, spotter_output".$filter_query." countries.name = spotter_output.airline_country AND spotter_output.airline_country <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao )
4425
			GROUP BY spotter_output.airline_country, countries.iso3
4426
			ORDER BY airline_country_count DESC
4427
			LIMIT 10 OFFSET 0";
4428
4429
		
4430
		$sth = $this->db->prepare($query);
4431
		$sth->execute(array(':airport_icao' => $airport_icao));
4432
4433
		$airline_country_array = array();
4434
		$temp_array = array();
4435
        
4436
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4437
		{
4438
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4439
			$temp_array['airline_country'] = $row['airline_country'];
4440
			$temp_array['airline_country_iso3'] = $row['airline_country_iso3'];
4441
 
4442
			$airline_country_array[] = $temp_array;
4443
		}
4444
		return $airline_country_array;
4445
	}
4446
4447
4448
	/**
4449
	* Gets all airlines that have flown over by aircraft manufacturer
4450
	*
4451
	* @return Array the airline list
4452
	*
4453
	*/
4454
	public function countAllAirlinesByManufacturer($aircraft_manufacturer,$filters = array())
4455
	{
4456
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4457
		$filter_query = $this->getFilter($filters,true,true);
4458
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4459
		 			FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4460
					GROUP BY spotter_output.airline_name
4461
					ORDER BY airline_count DESC";
4462
 
4463
		$sth = $this->db->prepare($query);
4464
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4465
 
4466
		$airline_array = array();
4467
		$temp_array = array();
4468
        
4469
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4470
		{
4471
			$temp_array['airline_name'] = $row['airline_name'];
4472
			$temp_array['airline_icao'] = $row['airline_icao'];
4473
			$temp_array['airline_count'] = $row['airline_count'];
4474
			$temp_array['airline_country'] = $row['airline_country'];
4475
4476
			$airline_array[] = $temp_array;
4477
		}
4478
		return $airline_array;
4479
	}
4480
4481
4482
4483
	/**
4484
	* Gets all airline countries that have flown over by aircraft manufacturer
4485
	*
4486
	* @return Array the airline country list
4487
	*
4488
	*/
4489
	public function countAllAirlineCountriesByManufacturer($aircraft_manufacturer,$filters = array())
4490
	{
4491
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4492
		$filter_query = $this->getFilter($filters,true,true);
4493
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4494
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4495
					GROUP BY spotter_output.airline_country
4496
					ORDER BY airline_country_count DESC
4497
					LIMIT 10 OFFSET 0";
4498
      
4499
		
4500
		$sth = $this->db->prepare($query);
4501
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4502
4503
		$airline_country_array = array();
4504
		$temp_array = array();
4505
        
4506
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4507
		{
4508
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4509
			$temp_array['airline_country'] = $row['airline_country'];
4510
			$airline_country_array[] = $temp_array;
4511
		}
4512
		return $airline_country_array;
4513
	}
4514
4515
4516
	/**
4517
	* Gets all airlines that have flown over by date
4518
	*
4519
	* @return Array the airline list
4520
	*
4521
	*/
4522
	public function countAllAirlinesByDate($date,$filters = array())
4523
	{
4524
		global $globalTimezone, $globalDBdriver;
4525
		$filter_query = $this->getFilter($filters,true,true);
4526
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4527
		if ($globalTimezone != '') {
4528
			date_default_timezone_set($globalTimezone);
4529
			$datetime = new DateTime($date);
4530
			$offset = $datetime->format('P');
4531
		} else $offset = '+00:00';
4532
4533
		if ($globalDBdriver == 'mysql') {
4534
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4535
		 			FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4536
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country 
4537
					ORDER BY airline_count DESC";
4538
		} else {
4539
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4540
		 			FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4541
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country
4542
					ORDER BY airline_count DESC";
4543
		}
4544
		
4545
		$sth = $this->db->prepare($query);
4546
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4547
4548
		$airline_array = array();
4549
		$temp_array = array();
4550
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4551
		{
4552
			$temp_array['airline_name'] = $row['airline_name'];
4553
			$temp_array['airline_icao'] = $row['airline_icao'];
4554
			$temp_array['airline_count'] = $row['airline_count'];
4555
			$temp_array['airline_country'] = $row['airline_country'];
4556
 
4557
			$airline_array[] = $temp_array;
4558
		}
4559
4560
		return $airline_array;
4561
	}	
4562
	
4563
	
4564
	/**
4565
	* Gets all airline countries that have flown over by date
4566
	*
4567
	* @return Array the airline country list
4568
	*
4569
	*/
4570
	public function countAllAirlineCountriesByDate($date,$filters = array())
4571
	{
4572
		global $globalTimezone, $globalDBdriver;
4573
		$filter_query = $this->getFilter($filters,true,true);
4574
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4575
		if ($globalTimezone != '') {
4576
			date_default_timezone_set($globalTimezone);
4577
			$datetime = new DateTime($date);
4578
			$offset = $datetime->format('P');
4579
		} else $offset = '+00:00';
4580
		
4581
		if ($globalDBdriver == 'mysql') {
4582
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4583
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4584
					GROUP BY spotter_output.airline_country
4585
					ORDER BY airline_country_count DESC
4586
					LIMIT 10 OFFSET 0";
4587
		} else {
4588
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4589
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4590
					GROUP BY spotter_output.airline_country
4591
					ORDER BY airline_country_count DESC
4592
					LIMIT 10 OFFSET 0";
4593
		}
4594
4595
		$sth = $this->db->prepare($query);
4596
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4597
 
4598
		$airline_country_array = array();
4599
		$temp_array = array();
4600
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4601
		{
4602
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4603
			$temp_array['airline_country'] = $row['airline_country'];
4604
4605
			$airline_country_array[] = $temp_array;
4606
		}
4607
		return $airline_country_array;
4608
	}
4609
4610
4611
	/**
4612
	* Gets all airlines that have flown over by ident/callsign
4613
	*
4614
	* @return Array the airline list
4615
	*
4616
	*/
4617
	public function countAllAirlinesByIdent($ident,$filters = array())
4618
	{
4619
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
4620
		$filter_query = $this->getFilter($filters,true,true);
4621
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4622
		 		FROM spotter_output".$filter_query." spotter_output.ident = :ident  
4623
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4624
				ORDER BY airline_count DESC";
4625
      
4626
		
4627
		$sth = $this->db->prepare($query);
4628
		$sth->execute(array(':ident' => $ident));
4629
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4630
	}
4631
4632
	/**
4633
	* Gets all airlines by owner
4634
	*
4635
	* @return Array the airline list
4636
	*
4637
	*/
4638
	public function countAllAirlinesByOwner($owner,$filters = array())
4639
	{
4640
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
4641
		$filter_query = $this->getFilter($filters,true,true);
4642
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4643
		 		FROM spotter_output".$filter_query." spotter_output.owner_name = :owner  
4644
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4645
				ORDER BY airline_count DESC";
4646
      
4647
		
4648
		$sth = $this->db->prepare($query);
4649
		$sth->execute(array(':owner' => $owner));
4650
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4651
	}
4652
4653
	/**
4654
	* Gets flight duration by owner
4655
	*
4656
	* @return String Duration of all flights
4657
	*
4658
	*/
4659
	public function getFlightDurationByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
4660
	{
4661
		global $globalDBdriver;
4662
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
4663
		$filter_query = $this->getFilter($filters,true,true);
4664
		$query  = "SELECT SUM(last_seen - date) AS duration 
4665
				FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
4666
				AND last_seen > date";
4667
		$query_values = array();
4668
		if ($year != '') {
4669
			if ($globalDBdriver == 'mysql') {
4670
				$query .= " AND YEAR(spotter_output.date) = :year";
4671
				$query_values = array_merge($query_values,array(':year' => $year));
4672
			} else {
4673
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4674
				$query_values = array_merge($query_values,array(':year' => $year));
4675
			}
4676
		}
4677
		if ($month != '') {
4678
			if ($globalDBdriver == 'mysql') {
4679
				$query .= " AND MONTH(spotter_output.date) = :month";
4680
				$query_values = array_merge($query_values,array(':month' => $month));
4681
			} else {
4682
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4683
				$query_values = array_merge($query_values,array(':month' => $month));
4684
			}
4685
		}
4686
		if ($day != '') {
4687
			if ($globalDBdriver == 'mysql') {
4688
				$query .= " AND DAY(spotter_output.date) = :day";
4689
				$query_values = array_merge($query_values,array(':day' => $day));
4690
			} else {
4691
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4692
				$query_values = array_merge($query_values,array(':day' => $day));
4693
			}
4694
		}
4695
		$query_values = array_merge($query_values,array(':owner' => $owner));
4696
		$sth = $this->db->prepare($query);
4697
		$sth->execute($query_values);
4698
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4699
		if (is_numeric($result[0]['duration'])) return gmdate('H:i:s',$result[0]['duration']);
4700
		elseif ($result[0]['duration'] == '') return 0;
4701
		else return $result[0]['duration'];
4702
	}
4703
4704
	/**
4705
	* Count flights by owner
4706
	*
4707
	* @return String Duration of all flights
4708
	*
4709
	*/
4710
	public function countFlightsByOwner($owner,$filters = array())
4711
	{
4712
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
4713
		$filter_query = $this->getFilter($filters,true,true);
4714
		$query  = "SELECT COUNT(*) AS nb 
4715
				FROM spotter_output".$filter_query." spotter_output.owner_name = :owner";
4716
		$query_values = array();
4717
		$query_values = array_merge($query_values,array(':owner' => $owner));
4718
		$sth = $this->db->prepare($query);
4719
		$sth->execute($query_values);
4720
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4721
		return $result[0]['nb'];
4722
	}
4723
4724
	/**
4725
	* Count flights by pilot
4726
	*
4727
	* @return String Duration of all flights
4728
	*
4729
	*/
4730
	public function countFlightsByPilot($pilot,$filters = array())
4731
	{
4732
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
4733
		$filter_query = $this->getFilter($filters,true,true);
4734
		$query  = "SELECT COUNT(*) AS nb 
4735
				FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilod_id = :pilot)";
4736
		$query_values = array();
4737
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
4738
		$sth = $this->db->prepare($query);
4739
		$sth->execute($query_values);
4740
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4741
		return $result[0]['nb'];
4742
	}
4743
4744
	/**
4745
	* Gets flight duration by pilot
4746
	*
4747
	* @return String Duration of all flights
4748
	*
4749
	*/
4750
	public function getFlightDurationByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
4751
	{
4752
		global $globalDBdriver;
4753
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
4754
		$filter_query = $this->getFilter($filters,true,true);
4755
		$query  = "SELECT SUM(last_seen - date) AS duration 
4756
		 		FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
4757
		 		AND last_seen > date";
4758
		$query_values = array();
4759
		if ($year != '') {
4760
			if ($globalDBdriver == 'mysql') {
4761
				$query .= " AND YEAR(spotter_output.date) = :year";
4762
				$query_values = array_merge($query_values,array(':year' => $year));
4763
			} else {
4764
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4765
				$query_values = array_merge($query_values,array(':year' => $year));
4766
			}
4767
		}
4768
		if ($month != '') {
4769
			if ($globalDBdriver == 'mysql') {
4770
				$query .= " AND MONTH(spotter_output.date) = :month";
4771
				$query_values = array_merge($query_values,array(':month' => $month));
4772
			} else {
4773
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4774
				$query_values = array_merge($query_values,array(':month' => $month));
4775
			}
4776
		}
4777
		if ($day != '') {
4778
			if ($globalDBdriver == 'mysql') {
4779
				$query .= " AND DAY(spotter_output.date) = :day";
4780
				$query_values = array_merge($query_values,array(':day' => $day));
4781
			} else {
4782
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4783
				$query_values = array_merge($query_values,array(':day' => $day));
4784
			}
4785
		}
4786
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
4787
		$sth = $this->db->prepare($query);
4788
		$sth->execute($query_values);
4789
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
4790
		if (is_int($result[0]['duration'])) return gmdate('H:i:s',$result[0]['duration']);
4791
		else return $result[0]['duration'];
4792
	}
4793
4794
	/**
4795
	* Gets all airlines used by pilot
4796
	*
4797
	* @return Array the airline list
4798
	*
4799
	*/
4800
	public function countAllAirlinesByPilot($pilot,$filters = array())
4801
	{
4802
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
4803
		$filter_query = $this->getFilter($filters,true,true);
4804
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4805
		 		FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
4806
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4807
				ORDER BY airline_count DESC";
4808
      
4809
		
4810
		$sth = $this->db->prepare($query);
4811
		$sth->execute(array(':pilot' => $pilot));
4812
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4813
	}
4814
4815
	/**
4816
	* Gets all airlines that have flown over by route
4817
	*
4818
	* @return Array the airline list
4819
	*
4820
	*/
4821
	public function countAllAirlinesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
4822
	{
4823
		$filter_query = $this->getFilter($filters,true,true);
4824
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4825
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4826
4827
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4828
		 			FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
4829
					GROUP BY spotter_output.airline_name
4830
					ORDER BY airline_count DESC";
4831
      
4832
		
4833
		$sth = $this->db->prepare($query);
4834
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4835
      
4836
		$airline_array = array();
4837
		$temp_array = array();
4838
        
4839
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4840
		{
4841
			$temp_array['airline_name'] = $row['airline_name'];
4842
			$temp_array['airline_icao'] = $row['airline_icao'];
4843
			$temp_array['airline_count'] = $row['airline_count'];
4844
			$temp_array['airline_country'] = $row['airline_country'];
4845
4846
			$airline_array[] = $temp_array;
4847
		}
4848
		return $airline_array;
4849
	}
4850
4851
	/**
4852
	* Gets all airline countries that have flown over by route
4853
	*
4854
	* @return Array the airline country list
4855
	*
4856
	*/
4857
	public function countAllAirlineCountriesByRoute($departure_airport_icao, $arrival_airport_icao,$filters= array())
4858
	{
4859
		$filter_query = $this->getFilter($filters,true,true);
4860
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4861
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4862
      
4863
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4864
		 		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) 
4865
				GROUP BY spotter_output.airline_country
4866
				ORDER BY airline_country_count DESC
4867
				LIMIT 10 OFFSET 0";
4868
      
4869
		
4870
		$sth = $this->db->prepare($query);
4871
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4872
      
4873
		$airline_country_array = array();
4874
		$temp_array = array();
4875
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4876
		{
4877
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4878
			$temp_array['airline_country'] = $row['airline_country'];
4879
4880
			$airline_country_array[] = $temp_array;
4881
		}
4882
4883
		return $airline_country_array;
4884
	}
4885
4886
4887
	/**
4888
	* Gets all airlines that have flown over by country
4889
	*
4890
	* @return Array the airline list
4891
	*
4892
	*/
4893
	public function countAllAirlinesByCountry($country,$filters = array())
4894
	{
4895
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4896
		$filter_query = $this->getFilter($filters,true,true);
4897
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4898
		 	    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
4899
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
4900
			    ORDER BY airline_count DESC";
4901
      
4902
		
4903
		$sth = $this->db->prepare($query);
4904
		$sth->execute(array(':country' => $country));
4905
4906
		$airline_array = array();
4907
		$temp_array = array();
4908
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4909
		{
4910
			$temp_array['airline_name'] = $row['airline_name'];
4911
			$temp_array['airline_icao'] = $row['airline_icao'];
4912
			$temp_array['airline_count'] = $row['airline_count'];
4913
			$temp_array['airline_country'] = $row['airline_country'];
4914
 
4915
			$airline_array[] = $temp_array;
4916
		}
4917
		return $airline_array;
4918
	}
4919
4920
4921
	/**
4922
	* Gets all airline countries that have flown over by country
4923
	*
4924
	* @return Array the airline country list
4925
	*
4926
	*/
4927
	public function countAllAirlineCountriesByCountry($country,$filters = array())
4928
	{
4929
		$filter_query = $this->getFilter($filters,true,true);
4930
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4931
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count, countries.iso3 AS airline_country_iso3
4932
			FROM countries,spotter_output".$filter_query." countries.name = spotter_output.airline_country AND spotter_output.airline_country <> '' AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country) OR spotter_output.airline_country = :country) 
4933
			GROUP BY spotter_output.airline_country, countries.iso3
4934
			ORDER BY airline_country_count DESC
4935
			LIMIT 10 OFFSET 0";
4936
		
4937
		$sth = $this->db->prepare($query);
4938
		$sth->execute(array(':country' => $country));
4939
4940
		$airline_country_array = array();
4941
		$temp_array = array();
4942
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4943
		{
4944
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4945
			$temp_array['airline_country'] = $row['airline_country'];
4946
			$temp_array['airline_country_iso3'] = $row['airline_country_iso3'];
4947
			$airline_country_array[] = $temp_array;
4948
		}
4949
		return $airline_country_array;
4950
	}
4951
4952
4953
	/**
4954
	* Gets all airlines countries
4955
	*
4956
	* @return Array the airline country list
4957
	*
4958
	*/
4959
	public function countAllAirlineCountries($limit = true, $filters = array(), $year = '', $month = '', $day = '')
4960
	{
4961
		global $globalDBdriver;
4962
		$filter_query = $this->getFilter($filters,true,true);
4963
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count, countries.iso3 AS airline_country_iso3
4964
		 			FROM countries, spotter_output".$filter_query." countries.name = spotter_output.airline_country AND spotter_output.airline_country <> '' AND spotter_output.airline_country <> 'NA'";
4965
		$query_values = array();
4966
		if ($year != '') {
4967
			if ($globalDBdriver == 'mysql') {
4968
				$query .= " AND YEAR(spotter_output.date) = :year";
4969
				$query_values = array_merge($query_values,array(':year' => $year));
4970
			} else {
4971
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4972
				$query_values = array_merge($query_values,array(':year' => $year));
4973
			}
4974
		}
4975
		if ($month != '') {
4976
			if ($globalDBdriver == 'mysql') {
4977
				$query .= " AND MONTH(spotter_output.date) = :month";
4978
				$query_values = array_merge($query_values,array(':month' => $month));
4979
			} else {
4980
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4981
				$query_values = array_merge($query_values,array(':month' => $month));
4982
			}
4983
		}
4984
		if ($day != '') {
4985
			if ($globalDBdriver == 'mysql') {
4986
				$query .= " AND DAY(spotter_output.date) = :day";
4987
				$query_values = array_merge($query_values,array(':day' => $day));
4988
			} else {
4989
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4990
				$query_values = array_merge($query_values,array(':day' => $day));
4991
			}
4992
		}
4993
		$query .= " GROUP BY spotter_output.airline_country, countries.iso3
4994
					ORDER BY airline_country_count DESC";
4995
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4996
      
4997
		$sth = $this->db->prepare($query);
4998
		$sth->execute($query_values);
4999
5000
		$airline_array = array();
5001
		$temp_array = array();
5002
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5003
		{
5004
			$temp_array['airline_country_count'] = $row['airline_country_count'];
5005
			$temp_array['airline_country'] = $row['airline_country'];
5006
			$temp_array['airline_country_iso3'] = $row['airline_country_iso3'];
5007
5008
			$airline_array[] = $temp_array;
5009
		}
5010
		return $airline_array;
5011
	}
5012
5013
	/**
5014
	* Gets all number of flight over countries
5015
	*
5016
	* @return Array the airline country list
5017
	*
5018
	*/
5019
	public function countAllFlightOverCountries($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
5020
	{
5021
		global $globalDBdriver;
5022
		//$filter_query = $this->getFilter($filters,true,true);
5023
		$Connection= new Connection($this->db);
5024
		if (!$Connection->tableExists('countries')) return array();
5025
		/*
5026
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
5027
					FROM countries c, spotter_output s
5028
					WHERE Within(GeomFromText(CONCAT('POINT(',s.longitude,' ',s.latitude,')')), ogc_geom) ";
5029
		*/
5030
/*
5031
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
5032
					FROM countries c, spotter_live s
5033
					WHERE c.iso2 = s.over_country ";
5034
		$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 ";
5035
*/
5036
		require_once('class.SpotterLive.php');
5037
		$SpotterLive = new SpotterLive();
5038
		$filter_query = $SpotterLive->getFilter($filters,true,true);
5039
		$filter_query .= ' over_country IS NOT NULL';
5040
                if ($olderthanmonths > 0) {
5041
			if ($globalDBdriver == 'mysql') {
5042
				$filter_query .= ' AND spotter_live.date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5043
			} else {
5044
				$filter_query .= " AND spotter_live.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5045
			}
5046
		}
5047
                if ($sincedate != '') {
5048
            		if ($globalDBdriver == 'mysql') {
5049
				$filter_query .= " AND spotter_live.date > '".$sincedate."' ";
5050
			} else {
5051
				$filter_query .= " AND spotter_live.date > CAST('".$sincedate."' AS TIMESTAMP)";
5052
			}
5053
		}
5054
		$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 ";
5055
		$query .= "GROUP BY c.name,c.iso3,c.iso2 ORDER BY nb DESC";
5056
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5057
      
5058
		
5059
		$sth = $this->db->prepare($query);
5060
		$sth->execute();
5061
 
5062
		$flight_array = array();
5063
		$temp_array = array();
5064
        
5065
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5066
		{
5067
			$temp_array['flight_count'] = $row['nb'];
5068
			$temp_array['flight_country'] = $row['name'];
5069
			$temp_array['flight_country_iso3'] = $row['iso3'];
5070
			$temp_array['flight_country_iso2'] = $row['iso2'];
5071
			$flight_array[] = $temp_array;
5072
		}
5073
		return $flight_array;
5074
	}
5075
	
5076
	
5077
	/**
5078
	* Gets all aircraft types that have flown over
5079
	*
5080
	* @return Array the aircraft list
5081
	*
5082
	*/
5083
	public function countAllAircraftTypes($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
5084
	{
5085
		global $globalDBdriver;
5086
		$filter_query = $this->getFilter($filters,true,true);
5087
		$query  = "SELECT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
5088
		    FROM spotter_output ".$filter_query." spotter_output.aircraft_name  <> '' AND spotter_output.aircraft_icao  <> ''";
5089
		if ($olderthanmonths > 0) {
5090
			if ($globalDBdriver == 'mysql') {
5091
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5092
			} else {
5093
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5094
			}
5095
		}
5096
		if ($sincedate != '') {
5097
			if ($globalDBdriver == 'mysql') {
5098
				$query .= " AND spotter_output.date > '".$sincedate."'";
5099
			} else {
5100
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5101
			}
5102
		}
5103
		$query_values = array();
5104
		if ($year != '') {
5105
			if ($globalDBdriver == 'mysql') {
5106
				$query .= " AND YEAR(spotter_output.date) = :year";
5107
				$query_values = array_merge($query_values,array(':year' => $year));
5108
			} else {
5109
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5110
				$query_values = array_merge($query_values,array(':year' => $year));
5111
			}
5112
		}
5113
		if ($month != '') {
5114
			if ($globalDBdriver == 'mysql') {
5115
				$query .= " AND MONTH(spotter_output.date) = :month";
5116
				$query_values = array_merge($query_values,array(':month' => $month));
5117
			} else {
5118
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5119
				$query_values = array_merge($query_values,array(':month' => $month));
5120
			}
5121
		}
5122
		if ($day != '') {
5123
			if ($globalDBdriver == 'mysql') {
5124
				$query .= " AND DAY(spotter_output.date) = :day";
5125
				$query_values = array_merge($query_values,array(':day' => $day));
5126
			} else {
5127
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5128
				$query_values = array_merge($query_values,array(':day' => $day));
5129
			}
5130
		}
5131
5132
		$query .= " GROUP BY spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer ORDER BY aircraft_icao_count DESC";
5133
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5134
 
5135
		$sth = $this->db->prepare($query);
5136
		$sth->execute($query_values);
5137
5138
		$aircraft_array = array();
5139
		$temp_array = array();
5140
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5141
		{
5142
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5143
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5144
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5145
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5146
			$aircraft_array[] = $temp_array;
5147
		}
5148
		return $aircraft_array;
5149
	}
5150
5151
	/**
5152
	* Gets all aircraft types that have flown over by airline
5153
	*
5154
	* @return Array the aircraft list
5155
	*
5156
	*/
5157
	public function countAllAircraftTypesByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '',$month = '', $day = '')
5158
	{
5159
		global $globalDBdriver;
5160
		$filter_query = $this->getFilter($filters,true,true);
5161
		$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 
5162
		    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'";
5163
		if ($olderthanmonths > 0) {
5164
			if ($globalDBdriver == 'mysql') {
5165
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5166
			} else {
5167
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5168
			}
5169
		}
5170
		if ($sincedate != '') {
5171
			if ($globalDBdriver == 'mysql') {
5172
				$query .= " AND spotter_output.date > '".$sincedate."'";
5173
			} else {
5174
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5175
			}
5176
		}
5177
		$query_values = array();
5178
		if ($year != '') {
5179
			if ($globalDBdriver == 'mysql') {
5180
				$query .= " AND YEAR(spotter_output.date) = :year";
5181
				$query_values = array_merge($query_values,array(':year' => $year));
5182
			} else {
5183
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5184
				$query_values = array_merge($query_values,array(':year' => $year));
5185
			}
5186
		}
5187
		if ($month != '') {
5188
			if ($globalDBdriver == 'mysql') {
5189
				$query .= " AND MONTH(spotter_output.date) = :month";
5190
				$query_values = array_merge($query_values,array(':month' => $month));
5191
			} else {
5192
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5193
				$query_values = array_merge($query_values,array(':month' => $month));
5194
			}
5195
		}
5196
		if ($day != '') {
5197
			if ($globalDBdriver == 'mysql') {
5198
				$query .= " AND DAY(spotter_output.date) = :day";
5199
				$query_values = array_merge($query_values,array(':day' => $day));
5200
			} else {
5201
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5202
				$query_values = array_merge($query_values,array(':day' => $day));
5203
			}
5204
		}
5205
5206
		$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";
5207
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5208
 
5209
		$sth = $this->db->prepare($query);
5210
		$sth->execute($query_values);
5211
5212
		$aircraft_array = array();
5213
		$temp_array = array();
5214
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5215
		{
5216
			$temp_array['airline_icao'] = $row['airline_icao'];
5217
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5218
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5219
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5220
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5221
			$aircraft_array[] = $temp_array;
5222
		}
5223
		return $aircraft_array;
5224
	}
5225
5226
	/**
5227
	* Gets all aircraft types that have flown over by months
5228
	*
5229
	* @return Array the aircraft list
5230
	*
5231
	*/
5232
	public function countAllAircraftTypesByMonths($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
5233
	{
5234
		global $globalDBdriver;
5235
		$filter_query = $this->getFilter($filters,true,true);
5236
		$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 
5237
		    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' ";
5238
		if ($olderthanmonths > 0) {
5239
			if ($globalDBdriver == 'mysql') {
5240
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5241
			} else {
5242
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5243
			}
5244
		}
5245
		if ($sincedate != '') {
5246
			if ($globalDBdriver == 'mysql') {
5247
				$query .= "AND spotter_output.date > '".$sincedate."' ";
5248
			} else {
5249
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5250
			}
5251
		}
5252
5253
		$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";
5254
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5255
 
5256
		$sth = $this->db->prepare($query);
5257
		$sth->execute();
5258
5259
		$aircraft_array = array();
5260
		$temp_array = array();
5261
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5262
		{
5263
			//$temp_array['airline_icao'] = $row['airline_icao'];
5264
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5265
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5266
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5267
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5268
			$aircraft_array[] = $temp_array;
5269
		}
5270
		return $aircraft_array;
5271
	}
5272
5273
5274
	/**
5275
	* Gets all aircraft registration that have flown over by aircaft icao
5276
	*
5277
	* @return Array the aircraft list
5278
	*
5279
	*/
5280
	public function countAllAircraftRegistrationByAircraft($aircraft_icao,$filters = array())
5281
	{
5282
		$Image = new Image($this->db);
5283
		$filter_query = $this->getFilter($filters,true,true);
5284
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
5285
5286
		$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  
5287
				FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_icao = :aircraft_icao  
5288
				GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name  
5289
				ORDER BY registration_count DESC";
5290
5291
		$sth = $this->db->prepare($query);
5292
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
5293
5294
		$aircraft_array = array();
5295
		$temp_array = array();
5296
        
5297
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5298
		{
5299
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5300
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5301
			$temp_array['registration'] = $row['registration'];
5302
			$temp_array['airline_name'] = $row['airline_name'];
5303
			$temp_array['image_thumbnail'] = "";
5304
			if($row['registration'] != "")
5305
			{
5306
				$image_array = $Image->getSpotterImage($row['registration']);
5307
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5308
			}
5309
			$temp_array['registration_count'] = $row['registration_count'];
5310
5311
			$aircraft_array[] = $temp_array;
5312
		}
5313
		return $aircraft_array;
5314
	}
5315
5316
5317
	/**
5318
	* Gets all aircraft types that have flown over by airline icao
5319
	*
5320
	* @return Array the aircraft list
5321
	*
5322
	*/
5323
	public function countAllAircraftTypesByAirline($airline_icao,$filters = array())
5324
	{
5325
		$filter_query = $this->getFilter($filters,true,true);
5326
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5327
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5328
			    FROM spotter_output".$filter_query." spotter_output.aircraft_icao <> '' AND spotter_output.airline_icao = :airline_icao 
5329
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5330
			    ORDER BY aircraft_icao_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
5338
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5339
		{
5340
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5341
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5342
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5343
5344
			$aircraft_array[] = $temp_array;
5345
		}
5346
		return $aircraft_array;
5347
	}
5348
5349
5350
	/**
5351
	* Gets all aircraft registration that have flown over by airline icao
5352
	*
5353
	* @return Array the aircraft list
5354
	*
5355
	*/
5356
	public function countAllAircraftRegistrationByAirline($airline_icao,$filters = array())
5357
	{
5358
		$filter_query = $this->getFilter($filters,true,true);
5359
		$Image = new Image($this->db);
5360
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5361
5362
		$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 
5363
			    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.airline_icao = :airline_icao 
5364
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
5365
			    ORDER BY registration_count DESC";
5366
5367
		$sth = $this->db->prepare($query);
5368
		$sth->execute(array(':airline_icao' => $airline_icao));
5369
5370
		$aircraft_array = array();
5371
		$temp_array = array();
5372
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5373
		{
5374
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5375
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5376
			$temp_array['registration'] = $row['registration'];
5377
			$temp_array['airline_name'] = $row['airline_name'];
5378
			$temp_array['image_thumbnail'] = "";
5379
			if($row['registration'] != "")
5380
			{
5381
				$image_array = $Image->getSpotterImage($row['registration']);
5382
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5383
			}
5384
			$temp_array['registration_count'] = $row['registration_count'];
5385
5386
			$aircraft_array[] = $temp_array;
5387
		}
5388
		return $aircraft_array;
5389
	}
5390
5391
5392
	/**
5393
	* Gets all aircraft manufacturer that have flown over by airline icao
5394
	*
5395
	* @return Array the aircraft list
5396
	*
5397
	*/
5398
	public function countAllAircraftManufacturerByAirline($airline_icao,$filters = array())
5399
	{
5400
		$filter_query = $this->getFilter($filters,true,true);
5401
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5402
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5403
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.airline_icao = :airline_icao 
5404
				GROUP BY spotter_output.aircraft_manufacturer 
5405
				ORDER BY aircraft_manufacturer_count DESC";
5406
5407
		$sth = $this->db->prepare($query);
5408
		$sth->execute(array(':airline_icao' => $airline_icao));
5409
5410
		$aircraft_array = array();
5411
		$temp_array = array();
5412
5413
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5414
		{
5415
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5416
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5417
5418
			$aircraft_array[] = $temp_array;
5419
		}
5420
		return $aircraft_array;
5421
	}
5422
5423
5424
	/**
5425
	* Gets all aircraft types that have flown over by airline icao
5426
	*
5427
	* @return Array the aircraft list
5428
	*
5429
	*/
5430
	public function countAllAircraftTypesByAirport($airport_icao,$filters = array())
5431
	{
5432
		$filter_query = $this->getFilter($filters,true,true);
5433
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5434
5435
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5436
				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) 
5437
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5438
				ORDER BY aircraft_icao_count DESC";
5439
 
5440
		$sth = $this->db->prepare($query);
5441
		$sth->execute(array(':airport_icao' => $airport_icao));
5442
5443
		$aircraft_array = array();
5444
		$temp_array = array();
5445
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5446
		{
5447
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5448
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5449
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5450
5451
			$aircraft_array[] = $temp_array;
5452
		}
5453
		return $aircraft_array;
5454
	}
5455
5456
5457
	/**
5458
	* Gets all aircraft registration that have flown over by airport icao
5459
	*
5460
	* @return Array the aircraft list
5461
	*
5462
	*/
5463
	public function countAllAircraftRegistrationByAirport($airport_icao,$filters = array())
5464
	{
5465
		$filter_query = $this->getFilter($filters,true,true);
5466
		$Image = new Image($this->db);
5467
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5468
5469
		$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  
5470
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)   
5471
                    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5472
		    ORDER BY registration_count DESC";
5473
5474
		$sth = $this->db->prepare($query);
5475
		$sth->execute(array(':airport_icao' => $airport_icao));
5476
5477
		$aircraft_array = array();
5478
		$temp_array = array();
5479
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5480
		{
5481
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5482
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5483
			$temp_array['registration'] = $row['registration'];
5484
			$temp_array['airline_name'] = $row['airline_name'];
5485
			$temp_array['image_thumbnail'] = "";
5486
			if($row['registration'] != "")
5487
			{
5488
				$image_array = $Image->getSpotterImage($row['registration']);
5489
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5490
			}
5491
			$temp_array['registration_count'] = $row['registration_count'];
5492
			$aircraft_array[] = $temp_array;
5493
		}
5494
		return $aircraft_array;
5495
	}
5496
	
5497
	
5498
	/**
5499
	* Gets all aircraft manufacturer that have flown over by airport icao
5500
	*
5501
	* @return Array the aircraft list
5502
	*
5503
	*/
5504
	public function countAllAircraftManufacturerByAirport($airport_icao,$filters = array())
5505
	{
5506
		$filter_query = $this->getFilter($filters,true,true);
5507
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5508
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5509
                    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)  
5510
                    GROUP BY spotter_output.aircraft_manufacturer 
5511
					ORDER BY aircraft_manufacturer_count DESC";
5512
5513
		
5514
		$sth = $this->db->prepare($query);
5515
		$sth->execute(array(':airport_icao' => $airport_icao));
5516
5517
		$aircraft_array = array();
5518
		$temp_array = array();
5519
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5520
		{
5521
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5522
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5523
			$aircraft_array[] = $temp_array;
5524
		}
5525
		return $aircraft_array;
5526
	}
5527
5528
	/**
5529
	* Gets all aircraft types that have flown over by aircraft manufacturer
5530
	*
5531
	* @return Array the aircraft list
5532
	*
5533
	*/
5534
	public function countAllAircraftTypesByManufacturer($aircraft_manufacturer,$filters = array())
5535
	{
5536
		$filter_query = $this->getFilter($filters,true,true);
5537
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5538
5539
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5540
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
5541
                    GROUP BY spotter_output.aircraft_name 
5542
					ORDER BY aircraft_icao_count DESC";
5543
5544
		$sth = $this->db->prepare($query);
5545
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5546
		$aircraft_array = array();
5547
		$temp_array = array();
5548
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5549
		{
5550
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5551
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5552
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5553
			$aircraft_array[] = $temp_array;
5554
		}
5555
		return $aircraft_array;
5556
	}
5557
5558
5559
	/**
5560
	* Gets all aircraft registration that have flown over by aircaft manufacturer
5561
	*
5562
	* @return Array the aircraft list
5563
	*
5564
	*/
5565
	public function countAllAircraftRegistrationByManufacturer($aircraft_manufacturer, $filters = array())
5566
	{
5567
		$filter_query = $this->getFilter($filters,true,true);
5568
		$Image = new Image($this->db);
5569
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5570
5571
		$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   
5572
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
5573
                    GROUP BY spotter_output.registration 
5574
					ORDER BY registration_count DESC";
5575
5576
		
5577
		$sth = $this->db->prepare($query);
5578
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5579
		$aircraft_array = array();
5580
		$temp_array = array();
5581
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5582
		{
5583
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5584
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5585
			$temp_array['registration'] = $row['registration'];
5586
			$temp_array['airline_name'] = $row['airline_name'];
5587
			$temp_array['image_thumbnail'] = "";
5588
			if($row['registration'] != "")
5589
			{
5590
				$image_array = $Image->getSpotterImage($row['registration']);
5591
				$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5592
			}
5593
			$temp_array['registration_count'] = $row['registration_count'];
5594
			$aircraft_array[] = $temp_array;
5595
		}
5596
		return $aircraft_array;
5597
	}
5598
5599
	/**
5600
	* Gets all aircraft types that have flown over by date
5601
	*
5602
	* @return Array the aircraft list
5603
	*
5604
	*/
5605
	public function countAllAircraftTypesByDate($date,$filters = array())
5606
	{
5607
		global $globalTimezone, $globalDBdriver;
5608
		$filter_query = $this->getFilter($filters,true,true);
5609
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5610
		if ($globalTimezone != '') {
5611
			date_default_timezone_set($globalTimezone);
5612
			$datetime = new DateTime($date);
5613
			$offset = $datetime->format('P');
5614
		} else $offset = '+00:00';
5615
5616
		if ($globalDBdriver == 'mysql') {
5617
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5618
					FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
5619
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5620
					ORDER BY aircraft_icao_count DESC";
5621
		} else {
5622
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5623
					FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date
5624
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5625
					ORDER BY aircraft_icao_count DESC";
5626
		}
5627
		
5628
		$sth = $this->db->prepare($query);
5629
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5630
5631
		$aircraft_array = array();
5632
		$temp_array = array();
5633
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5634
		{
5635
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5636
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5637
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5638
5639
			$aircraft_array[] = $temp_array;
5640
		}
5641
		return $aircraft_array;
5642
	}
5643
5644
5645
	/**
5646
	* Gets all aircraft registration that have flown over by date
5647
	*
5648
	* @return Array the aircraft list
5649
	*
5650
	*/
5651
	public function countAllAircraftRegistrationByDate($date,$filters = array())
5652
	{
5653
		global $globalTimezone, $globalDBdriver;
5654
		$filter_query = $this->getFilter($filters,true,true);
5655
		$Image = new Image($this->db);
5656
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5657
		if ($globalTimezone != '') {
5658
			date_default_timezone_set($globalTimezone);
5659
			$datetime = new DateTime($date);
5660
			$offset = $datetime->format('P');
5661
		} else $offset = '+00:00';
5662
5663
		if ($globalDBdriver == 'mysql') {
5664
			$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 
5665
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5666
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5667
					ORDER BY registration_count DESC";
5668
		} else {
5669
			$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    
5670
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5671
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5672
					ORDER BY registration_count DESC";
5673
		}
5674
		
5675
		$sth = $this->db->prepare($query);
5676
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5677
5678
		$aircraft_array = array();
5679
		$temp_array = array();
5680
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5681
		{
5682
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5683
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5684
			$temp_array['registration'] = $row['registration'];
5685
			$temp_array['airline_name'] = $row['airline_name'];
5686
			$temp_array['image_thumbnail'] = "";
5687
			if($row['registration'] != "")
5688
			{
5689
				$image_array = $Image->getSpotterImage($row['registration']);
5690
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5691
			}
5692
			$temp_array['registration_count'] = $row['registration_count'];
5693
 
5694
			$aircraft_array[] = $temp_array;
5695
		}
5696
		return $aircraft_array;
5697
	}
5698
5699
5700
	/**
5701
	* Gets all aircraft manufacturer that have flown over by date
5702
	*
5703
	* @return Array the aircraft manufacturer list
5704
	*
5705
	*/
5706
	public function countAllAircraftManufacturerByDate($date,$filters = array())
5707
	{
5708
		global $globalTimezone, $globalDBdriver;
5709
		$filter_query = $this->getFilter($filters,true,true);
5710
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5711
		if ($globalTimezone != '') {
5712
			date_default_timezone_set($globalTimezone);
5713
			$datetime = new DateTime($date);
5714
			$offset = $datetime->format('P');
5715
		} else $offset = '+00:00';
5716
5717
		if ($globalDBdriver == 'mysql') {
5718
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5719
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5720
				GROUP BY spotter_output.aircraft_manufacturer 
5721
				ORDER BY aircraft_manufacturer_count DESC";
5722
		} else {
5723
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5724
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5725
				GROUP BY spotter_output.aircraft_manufacturer 
5726
				ORDER BY aircraft_manufacturer_count DESC";
5727
		}
5728
		
5729
		$sth = $this->db->prepare($query);
5730
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5731
5732
		$aircraft_array = array();
5733
		$temp_array = array();
5734
5735
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5736
		{
5737
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5738
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5739
5740
			$aircraft_array[] = $temp_array;
5741
		}
5742
		return $aircraft_array;
5743
	}
5744
5745
5746
	/**
5747
	* Gets all aircraft types that have flown over by ident/callsign
5748
	*
5749
	* @return Array the aircraft list
5750
	*
5751
	*/
5752
	public function countAllAircraftTypesByIdent($ident,$filters = array())
5753
	{
5754
		$filter_query = $this->getFilter($filters,true,true);
5755
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5756
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5757
				FROM spotter_output".$filter_query." spotter_output.ident = :ident 
5758
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao
5759
				ORDER BY aircraft_icao_count DESC";
5760
5761
		$sth = $this->db->prepare($query);
5762
		$sth->execute(array(':ident' => $ident));
5763
      
5764
		$aircraft_array = array();
5765
		$temp_array = array();
5766
5767
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5768
		{
5769
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5770
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5771
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5772
5773
			$aircraft_array[] = $temp_array;
5774
		}
5775
		return $aircraft_array;
5776
	}
5777
5778
	/**
5779
	* Gets all aircraft types that have flown over by pilot
5780
	*
5781
	* @return Array the aircraft list
5782
	*
5783
	*/
5784
	public function countAllAircraftTypesByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
5785
	{
5786
		global $globalDBdriver;
5787
		$filter_query = $this->getFilter($filters,true,true);
5788
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
5789
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5790
				FROM spotter_output".$filter_query." (spotter_output.pilot_id = :pilot OR spotter_output.pilot_name = :pilot)";
5791
		$query_values = array();
5792
		if ($year != '') {
5793
			if ($globalDBdriver == 'mysql') {
5794
				$query .= " AND YEAR(spotter_output.date) = :year";
5795
				$query_values = array_merge($query_values,array(':year' => $year));
5796
			} else {
5797
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5798
				$query_values = array_merge($query_values,array(':year' => $year));
5799
			}
5800
		}
5801
		if ($month != '') {
5802
			if ($globalDBdriver == 'mysql') {
5803
				$query .= " AND MONTH(spotter_output.date) = :month";
5804
				$query_values = array_merge($query_values,array(':month' => $month));
5805
			} else {
5806
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5807
				$query_values = array_merge($query_values,array(':month' => $month));
5808
			}
5809
		}
5810
		if ($day != '') {
5811
			if ($globalDBdriver == 'mysql') {
5812
				$query .= " AND DAY(spotter_output.date) = :day";
5813
				$query_values = array_merge($query_values,array(':day' => $day));
5814
			} else {
5815
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5816
				$query_values = array_merge($query_values,array(':day' => $day));
5817
			}
5818
		}
5819
5820
		$query .= " GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao
5821
				ORDER BY aircraft_icao_count DESC";
5822
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
5823
		$sth = $this->db->prepare($query);
5824
		$sth->execute($query_values);
5825
		return $sth->fetchAll(PDO::FETCH_ASSOC);
5826
	}
5827
5828
	/**
5829
	* Gets all aircraft types that have flown over by owner
5830
	*
5831
	* @return Array the aircraft list
5832
	*
5833
	*/
5834
	public function countAllAircraftTypesByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
5835
	{
5836
		global $globalDBdriver;
5837
		$filter_query = $this->getFilter($filters,true,true);
5838
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
5839
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
5840
				FROM spotter_output".$filter_query." spotter_output.owner_name = :owner";
5841
		$query_values = array();
5842
		if ($year != '') {
5843
			if ($globalDBdriver == 'mysql') {
5844
				$query .= " AND YEAR(spotter_output.date) = :year";
5845
				$query_values = array_merge($query_values,array(':year' => $year));
5846
			} else {
5847
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5848
				$query_values = array_merge($query_values,array(':year' => $year));
5849
			}
5850
		}
5851
		if ($month != '') {
5852
			if ($globalDBdriver == 'mysql') {
5853
				$query .= " AND MONTH(spotter_output.date) = :month";
5854
				$query_values = array_merge($query_values,array(':month' => $month));
5855
			} else {
5856
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5857
				$query_values = array_merge($query_values,array(':month' => $month));
5858
			}
5859
		}
5860
		if ($day != '') {
5861
			if ($globalDBdriver == 'mysql') {
5862
				$query .= " AND DAY(spotter_output.date) = :day";
5863
				$query_values = array_merge($query_values,array(':day' => $day));
5864
			} else {
5865
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5866
				$query_values = array_merge($query_values,array(':day' => $day));
5867
			}
5868
		}
5869
		$query .= " GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.aircraft_icao
5870
				ORDER BY aircraft_icao_count DESC";
5871
		$query_values = array_merge($query_values,array(':owner' => $owner));
5872
		$sth = $this->db->prepare($query);
5873
		$sth->execute($query_values);
5874
		return $sth->fetchAll(PDO::FETCH_ASSOC);
5875
	}
5876
5877
	/**
5878
	* Gets all aircraft registration that have flown over by ident/callsign
5879
	*
5880
	* @return Array the aircraft list
5881
	*
5882
	*/
5883
	public function countAllAircraftRegistrationByIdent($ident,$filters = array())
5884
	{
5885
		$filter_query = $this->getFilter($filters,true,true);
5886
		$Image = new Image($this->db);
5887
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5888
5889
		$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  
5890
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.ident = :ident   
5891
                    GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
5892
		    ORDER BY registration_count DESC";
5893
5894
		
5895
		$sth = $this->db->prepare($query);
5896
		$sth->execute(array(':ident' => $ident));
5897
      
5898
		$aircraft_array = array();
5899
		$temp_array = array();
5900
        
5901
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5902
		{
5903
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5904
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5905
			$temp_array['registration'] = $row['registration'];
5906
			$temp_array['airline_name'] = $row['airline_name'];
5907
			$temp_array['image_thumbnail'] = "";
5908
			if($row['registration'] != "")
5909
			{
5910
				$image_array = $Image->getSpotterImage($row['registration']);
5911
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5912
				else $temp_array['image_thumbnail'] = '';
5913
			}
5914
			$temp_array['registration_count'] = $row['registration_count'];
5915
			$aircraft_array[] = $temp_array;
5916
		}
5917
		return $aircraft_array;
5918
	}
5919
5920
	/**
5921
	* Gets all aircraft registration that have flown over by owner
5922
	*
5923
	* @return Array the aircraft list
5924
	*
5925
	*/
5926
	public function countAllAircraftRegistrationByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
5927
	{
5928
		global $globalDBdriver;
5929
		$filter_query = $this->getFilter($filters,true,true);
5930
		$Image = new Image($this->db);
5931
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
5932
5933
		$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  
5934
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.owner_name = :owner";
5935
		$query_values = array();
5936
		if ($year != '') {
5937
			if ($globalDBdriver == 'mysql') {
5938
				$query .= " AND YEAR(spotter_output.date) = :year";
5939
				$query_values = array_merge($query_values,array(':year' => $year));
5940
			} else {
5941
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5942
				$query_values = array_merge($query_values,array(':year' => $year));
5943
			}
5944
		}
5945
		if ($month != '') {
5946
			if ($globalDBdriver == 'mysql') {
5947
				$query .= " AND MONTH(spotter_output.date) = :month";
5948
				$query_values = array_merge($query_values,array(':month' => $month));
5949
			} else {
5950
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5951
				$query_values = array_merge($query_values,array(':month' => $month));
5952
			}
5953
		}
5954
		if ($day != '') {
5955
			if ($globalDBdriver == 'mysql') {
5956
				$query .= " AND DAY(spotter_output.date) = :day";
5957
				$query_values = array_merge($query_values,array(':day' => $day));
5958
			} else {
5959
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5960
				$query_values = array_merge($query_values,array(':day' => $day));
5961
			}
5962
		}
5963
		$query_values = array_merge($query_values,array(':owner' => $owner));
5964
5965
		$query .= " GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.airline_name
5966
		    ORDER BY registration_count DESC";
5967
5968
		
5969
		$sth = $this->db->prepare($query);
5970
		$sth->execute($query_values);
5971
      
5972
		$aircraft_array = array();
5973
		$temp_array = array();
5974
        
5975
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5976
		{
5977
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5978
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5979
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5980
			$temp_array['registration'] = $row['registration'];
5981
			$temp_array['airline_name'] = $row['airline_name'];
5982
			$temp_array['image_thumbnail'] = "";
5983
			if($row['registration'] != "")
5984
			{
5985
				$image_array = $Image->getSpotterImage($row['registration']);
5986
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5987
				else $temp_array['image_thumbnail'] = '';
5988
			}
5989
			$temp_array['registration_count'] = $row['registration_count'];
5990
			$aircraft_array[] = $temp_array;
5991
		}
5992
		return $aircraft_array;
5993
	}
5994
5995
	/**
5996
	* Gets all aircraft registration that have flown over by pilot
5997
	*
5998
	* @return Array the aircraft list
5999
	*
6000
	*/
6001
	public function countAllAircraftRegistrationByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
6002
	{
6003
		global $globalDBdriver;
6004
		$filter_query = $this->getFilter($filters,true,true);
6005
		$Image = new Image($this->db);
6006
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
6007
6008
		$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  
6009
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot)";
6010
		$query_values = array();
6011
		if ($year != '') {
6012
			if ($globalDBdriver == 'mysql') {
6013
				$query .= " AND YEAR(spotter_output.date) = :year";
6014
				$query_values = array_merge($query_values,array(':year' => $year));
6015
			} else {
6016
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6017
				$query_values = array_merge($query_values,array(':year' => $year));
6018
			}
6019
		}
6020
		if ($month != '') {
6021
			if ($globalDBdriver == 'mysql') {
6022
				$query .= " AND MONTH(spotter_output.date) = :month";
6023
				$query_values = array_merge($query_values,array(':month' => $month));
6024
			} else {
6025
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6026
				$query_values = array_merge($query_values,array(':month' => $month));
6027
			}
6028
		}
6029
		if ($day != '') {
6030
			if ($globalDBdriver == 'mysql') {
6031
				$query .= " AND DAY(spotter_output.date) = :day";
6032
				$query_values = array_merge($query_values,array(':day' => $day));
6033
			} else {
6034
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6035
				$query_values = array_merge($query_values,array(':day' => $day));
6036
			}
6037
		}
6038
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
6039
6040
		$query .= " GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.airline_name
6041
		    ORDER BY registration_count DESC";
6042
6043
		
6044
		$sth = $this->db->prepare($query);
6045
		$sth->execute($query_values);
6046
      
6047
		$aircraft_array = array();
6048
		$temp_array = array();
6049
        
6050
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6051
		{
6052
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6053
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6054
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6055
			$temp_array['registration'] = $row['registration'];
6056
			$temp_array['airline_name'] = $row['airline_name'];
6057
			$temp_array['image_thumbnail'] = "";
6058
			if($row['registration'] != "")
6059
			{
6060
				$image_array = $Image->getSpotterImage($row['registration']);
6061
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6062
				else $temp_array['image_thumbnail'] = '';
6063
			}
6064
			$temp_array['registration_count'] = $row['registration_count'];
6065
			$aircraft_array[] = $temp_array;
6066
		}
6067
		return $aircraft_array;
6068
	}
6069
6070
6071
	/**
6072
	* Gets all aircraft manufacturer that have flown over by ident/callsign
6073
	*
6074
	* @return Array the aircraft manufacturer list
6075
	*
6076
	*/
6077
	public function countAllAircraftManufacturerByIdent($ident,$filters = array())
6078
	{
6079
		$filter_query = $this->getFilter($filters,true,true);
6080
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
6081
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6082
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.ident = :ident  
6083
                    GROUP BY spotter_output.aircraft_manufacturer 
6084
					ORDER BY aircraft_manufacturer_count DESC";
6085
6086
		
6087
		$sth = $this->db->prepare($query);
6088
		$sth->execute(array(':ident' => $ident));
6089
		$aircraft_array = array();
6090
		$temp_array = array();
6091
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6092
		{
6093
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6094
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6095
			$aircraft_array[] = $temp_array;
6096
		}
6097
		return $aircraft_array;
6098
	}
6099
6100
	/**
6101
	* Gets all aircraft manufacturer that have flown over by owner
6102
	*
6103
	* @return Array the aircraft manufacturer list
6104
	*
6105
	*/
6106
	public function countAllAircraftManufacturerByOwner($owner,$filters = array(),$year = '',$month = '',$day = '')
6107
	{
6108
		global $globalDBdriver;
6109
		$filter_query = $this->getFilter($filters,true,true);
6110
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
6111
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6112
		    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.owner_name = :owner";
6113
		$query_values = array();
6114
		if ($year != '') {
6115
			if ($globalDBdriver == 'mysql') {
6116
				$query .= " AND YEAR(spotter_output.date) = :year";
6117
				$query_values = array_merge($query_values,array(':year' => $year));
6118
			} else {
6119
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6120
				$query_values = array_merge($query_values,array(':year' => $year));
6121
			}
6122
		}
6123
		if ($month != '') {
6124
			if ($globalDBdriver == 'mysql') {
6125
				$query .= " AND MONTH(spotter_output.date) = :month";
6126
				$query_values = array_merge($query_values,array(':month' => $month));
6127
			} else {
6128
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6129
				$query_values = array_merge($query_values,array(':month' => $month));
6130
			}
6131
		}
6132
		if ($day != '') {
6133
			if ($globalDBdriver == 'mysql') {
6134
				$query .= " AND DAY(spotter_output.date) = :day";
6135
				$query_values = array_merge($query_values,array(':day' => $day));
6136
			} else {
6137
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6138
				$query_values = array_merge($query_values,array(':day' => $day));
6139
			}
6140
		}
6141
		$query_values = array_merge($query_values,array(':owner' => $owner));
6142
6143
		$query .= " GROUP BY spotter_output.aircraft_manufacturer 
6144
		    ORDER BY aircraft_manufacturer_count DESC";
6145
6146
		
6147
		$sth = $this->db->prepare($query);
6148
		$sth->execute($query_values);
6149
		return $sth->fetchAll(PDO::FETCH_ASSOC);
6150
	}
6151
6152
	/**
6153
	* Gets all aircraft manufacturer that have flown over by pilot
6154
	*
6155
	* @return Array the aircraft manufacturer list
6156
	*
6157
	*/
6158
	public function countAllAircraftManufacturerByPilot($pilot,$filters = array(),$year = '',$month = '',$day = '')
6159
	{
6160
		global $globalDBdriver;
6161
		$filter_query = $this->getFilter($filters,true,true);
6162
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
6163
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6164
		    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot)";
6165
		$query_values = array();
6166
		if ($year != '') {
6167
			if ($globalDBdriver == 'mysql') {
6168
				$query .= " AND YEAR(spotter_output.date) = :year";
6169
				$query_values = array_merge($query_values,array(':year' => $year));
6170
			} else {
6171
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6172
				$query_values = array_merge($query_values,array(':year' => $year));
6173
			}
6174
		}
6175
		if ($month != '') {
6176
			if ($globalDBdriver == 'mysql') {
6177
				$query .= " AND MONTH(spotter_output.date) = :month";
6178
				$query_values = array_merge($query_values,array(':month' => $month));
6179
			} else {
6180
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6181
				$query_values = array_merge($query_values,array(':month' => $month));
6182
			}
6183
		}
6184
		if ($day != '') {
6185
			if ($globalDBdriver == 'mysql') {
6186
				$query .= " AND DAY(spotter_output.date) = :day";
6187
				$query_values = array_merge($query_values,array(':day' => $day));
6188
			} else {
6189
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6190
				$query_values = array_merge($query_values,array(':day' => $day));
6191
			}
6192
		}
6193
		$query_values = array_merge($query_values,array(':pilot' => $pilot));
6194
6195
		$query .= " GROUP BY spotter_output.aircraft_manufacturer 
6196
		    ORDER BY aircraft_manufacturer_count DESC";
6197
6198
		
6199
		$sth = $this->db->prepare($query);
6200
		$sth->execute($query_values);
6201
		return $sth->fetchAll(PDO::FETCH_ASSOC);
6202
	}
6203
6204
6205
	/**
6206
	* Gets all aircraft types that have flown over by route
6207
	*
6208
	* @return Array the aircraft list
6209
	*
6210
	*/
6211
	public function countAllAircraftTypesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
6212
	{
6213
		$filter_query = $this->getFilter($filters,true,true);
6214
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
6215
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
6216
		
6217
6218
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
6219
                    FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
6220
                    GROUP BY spotter_output.aircraft_name 
6221
					ORDER BY aircraft_icao_count DESC";
6222
 
6223
		
6224
		$sth = $this->db->prepare($query);
6225
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
6226
		$aircraft_array = array();
6227
		$temp_array = array();
6228
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6229
		{
6230
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6231
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6232
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
6233
			$aircraft_array[] = $temp_array;
6234
		}
6235
		return $aircraft_array;
6236
	}
6237
6238
	/**
6239
	* Gets all aircraft registration that have flown over by route
6240
	*
6241
	* @return Array the aircraft list
6242
	*
6243
	*/
6244
	public function countAllAircraftRegistrationByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
6245
	{
6246
		$filter_query = $this->getFilter($filters,true,true);
6247
		$Image = new Image($this->db);
6248
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
6249
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
6250
6251
		$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   
6252
                    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)   
6253
                    GROUP BY spotter_output.registration 
6254
					ORDER BY registration_count DESC";
6255
6256
		
6257
		$sth = $this->db->prepare($query);
6258
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
6259
      
6260
		$aircraft_array = array();
6261
		$temp_array = array();
6262
        
6263
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6264
		{
6265
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6266
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6267
			$temp_array['registration'] = $row['registration'];
6268
			$temp_array['airline_name'] = $row['airline_name'];
6269
			$temp_array['image_thumbnail'] = "";
6270
			if($row['registration'] != "")
6271
			{
6272
				$image_array = $Image->getSpotterImage($row['registration']);
6273
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6274
			}
6275
			$temp_array['registration_count'] = $row['registration_count'];
6276
          
6277
			$aircraft_array[] = $temp_array;
6278
		}
6279
6280
		return $aircraft_array;
6281
	}
6282
	
6283
	
6284
	/**
6285
	* Gets all aircraft manufacturer that have flown over by route
6286
	*
6287
	* @return Array the aircraft manufacturer list
6288
	*
6289
	*/
6290
	public function countAllAircraftManufacturerByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
6291
	{
6292
		$filter_query = $this->getFilter($filters,true,true);
6293
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
6294
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
6295
6296
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6297
                    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) 
6298
                    GROUP BY spotter_output.aircraft_manufacturer 
6299
					ORDER BY aircraft_manufacturer_count DESC";
6300
6301
		
6302
		$sth = $this->db->prepare($query);
6303
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
6304
      
6305
		$aircraft_array = array();
6306
		$temp_array = array();
6307
        
6308
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6309
		{
6310
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6311
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6312
          
6313
			$aircraft_array[] = $temp_array;
6314
		}
6315
6316
		return $aircraft_array;
6317
	}	
6318
6319
	
6320
	
6321
	
6322
	/**
6323
	* Gets all aircraft types that have flown over by country
6324
	*
6325
	* @return Array the aircraft list
6326
	*
6327
	*/
6328
	public function countAllAircraftTypesByCountry($country,$filters = array())
6329
	{
6330
		$filter_query = $this->getFilter($filters,true,true);
6331
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6332
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
6333
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
6334
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
6335
			    ORDER BY aircraft_icao_count DESC";
6336
 
6337
		
6338
		$sth = $this->db->prepare($query);
6339
		$sth->execute(array(':country' => $country));
6340
      
6341
		$aircraft_array = array();
6342
		$temp_array = array();
6343
        
6344
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6345
		{
6346
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6347
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6348
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
6349
          
6350
			$aircraft_array[] = $temp_array;
6351
		}
6352
6353
		return $aircraft_array;
6354
	}
6355
6356
6357
	/**
6358
	* Gets all aircraft registration that have flown over by country
6359
	*
6360
	* @return Array the aircraft list
6361
	*
6362
	*/
6363
	public function countAllAircraftRegistrationByCountry($country,$filters = array())
6364
	{
6365
		$filter_query = $this->getFilter($filters,true,true);
6366
		$Image = new Image($this->db);
6367
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6368
		$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 
6369
			    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)    
6370
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
6371
			    ORDER BY registration_count DESC";
6372
6373
		
6374
		$sth = $this->db->prepare($query);
6375
		$sth->execute(array(':country' => $country));
6376
      
6377
		$aircraft_array = array();
6378
		$temp_array = array();
6379
        
6380
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6381
		{
6382
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6383
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6384
			$temp_array['registration'] = $row['registration'];
6385
			$temp_array['airline_name'] = $row['airline_name'];
6386
			$temp_array['image_thumbnail'] = "";
6387
			if($row['registration'] != "")
6388
			{
6389
				$image_array = $Image->getSpotterImage($row['registration']);
6390
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6391
			}
6392
			$temp_array['registration_count'] = $row['registration_count'];
6393
          
6394
			$aircraft_array[] = $temp_array;
6395
		}
6396
6397
		return $aircraft_array;
6398
	}
6399
	
6400
	
6401
	/**
6402
	* Gets all aircraft manufacturer that have flown over by country
6403
	*
6404
	* @return Array the aircraft manufacturer list
6405
	*
6406
	*/
6407
	public function countAllAircraftManufacturerByCountry($country,$filters = array())
6408
	{
6409
		$filter_query = $this->getFilter($filters,true,true);
6410
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6411
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6412
                    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) 
6413
                    GROUP BY spotter_output.aircraft_manufacturer 
6414
					ORDER BY aircraft_manufacturer_count DESC";
6415
6416
		
6417
		$sth = $this->db->prepare($query);
6418
		$sth->execute(array(':country' => $country));
6419
      
6420
		$aircraft_array = array();
6421
		$temp_array = array();
6422
        
6423
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6424
		{
6425
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6426
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6427
          
6428
			$aircraft_array[] = $temp_array;
6429
		}
6430
6431
		return $aircraft_array;
6432
	}	
6433
	
6434
	
6435
	
6436
	/**
6437
	* Gets all aircraft manufacturers that have flown over
6438
	*
6439
	* @return Array the aircraft list
6440
	*
6441
	*/
6442
	public function countAllAircraftManufacturers($filters = array(),$year = '',$month = '',$day = '')
6443
	{
6444
		global $globalDBdriver;
6445
		$filter_query = $this->getFilter($filters,true,true);
6446
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6447
                    FROM spotter_output ".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.aircraft_manufacturer <> 'Not Available'";
6448
                $query_values = array();
6449
		if ($year != '') {
6450
			if ($globalDBdriver == 'mysql') {
6451
				$query .= " AND YEAR(spotter_output.date) = :year";
6452
				$query_values = array_merge($query_values,array(':year' => $year));
6453
			} else {
6454
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6455
				$query_values = array_merge($query_values,array(':year' => $year));
6456
			}
6457
		}
6458
		if ($month != '') {
6459
			if ($globalDBdriver == 'mysql') {
6460
				$query .= " AND MONTH(spotter_output.date) = :month";
6461
				$query_values = array_merge($query_values,array(':month' => $month));
6462
			} else {
6463
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6464
				$query_values = array_merge($query_values,array(':month' => $month));
6465
			}
6466
		}
6467
		if ($day != '') {
6468
			if ($globalDBdriver == 'mysql') {
6469
				$query .= " AND DAY(spotter_output.date) = :day";
6470
				$query_values = array_merge($query_values,array(':day' => $day));
6471
			} else {
6472
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6473
				$query_values = array_merge($query_values,array(':day' => $day));
6474
			}
6475
		}
6476
		$query .= " GROUP BY spotter_output.aircraft_manufacturer
6477
					ORDER BY aircraft_manufacturer_count DESC
6478
					LIMIT 10";
6479
      
6480
		
6481
		$sth = $this->db->prepare($query);
6482
		$sth->execute($query_values);
6483
      
6484
		$manufacturer_array = array();
6485
		$temp_array = array();
6486
        
6487
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6488
		{
6489
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6490
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6491
          
6492
			$manufacturer_array[] = $temp_array;
6493
		}
6494
6495
		return $manufacturer_array;
6496
	}
6497
	
6498
	
6499
	
6500
	/**
6501
	* Gets all aircraft registrations that have flown over
6502
	*
6503
	* @return Array the aircraft list
6504
	*
6505
	*/
6506
	public function countAllAircraftRegistrations($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '', $month = '', $day = '')
6507
	{
6508
		global $globalDBdriver;
6509
		$Image = new Image($this->db);
6510
		$filter_query = $this->getFilter($filters,true,true);
6511
		$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    
6512
                    FROM spotter_output ".$filter_query." spotter_output.registration <> '' AND spotter_output.registration <> 'NA'";
6513
                if ($olderthanmonths > 0) {
6514
            		if ($globalDBdriver == 'mysql') {
6515
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6516
			} else {
6517
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6518
			}
6519
		}
6520
                if ($sincedate != '') {
6521
            		if ($globalDBdriver == 'mysql') {
6522
				$query .= " AND spotter_output.date > '".$sincedate."'";
6523
			} else {
6524
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6525
			}
6526
		}
6527
		$query_values = array();
6528
		if ($year != '') {
6529
			if ($globalDBdriver == 'mysql') {
6530
				$query .= " AND YEAR(spotter_output.date) = :year";
6531
				$query_values = array_merge($query_values,array(':year' => $year));
6532
			} else {
6533
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6534
				$query_values = array_merge($query_values,array(':year' => $year));
6535
			}
6536
		}
6537
		if ($month != '') {
6538
			if ($globalDBdriver == 'mysql') {
6539
				$query .= " AND MONTH(spotter_output.date) = :month";
6540
				$query_values = array_merge($query_values,array(':month' => $month));
6541
			} else {
6542
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6543
				$query_values = array_merge($query_values,array(':month' => $month));
6544
			}
6545
		}
6546
		if ($day != '') {
6547
			if ($globalDBdriver == 'mysql') {
6548
				$query .= " AND DAY(spotter_output.date) = :day";
6549
				$query_values = array_merge($query_values,array(':day' => $day));
6550
			} else {
6551
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6552
				$query_values = array_merge($query_values,array(':day' => $day));
6553
			}
6554
		}
6555
		$query .= " GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name ORDER BY aircraft_registration_count DESC";
6556
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6557
		
6558
		$sth = $this->db->prepare($query);
6559
		$sth->execute($query_values);
6560
      
6561
		$aircraft_array = array();
6562
		$temp_array = array();
6563
        
6564
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6565
		{
6566
			$temp_array['registration'] = $row['registration'];
6567
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
6568
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6569
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6570
			$temp_array['airline_name'] = $row['airline_name'];
6571
			$temp_array['image_thumbnail'] = "";
6572
			if($row['registration'] != "")
6573
			{
6574
				$image_array = $Image->getSpotterImage($row['registration']);
6575
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6576
			}
6577
          
6578
			$aircraft_array[] = $temp_array;
6579
		}
6580
6581
		return $aircraft_array;
6582
	}
6583
6584
6585
	/**
6586
	* Gets all aircraft registrations that have flown over
6587
	*
6588
	* @return Array the aircraft list
6589
	*
6590
	*/
6591
	public function countAllAircraftRegistrationsByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
6592
	{
6593
		global $globalDBdriver;
6594
		$filter_query = $this->getFilter($filters,true,true);
6595
		$Image = new Image($this->db);
6596
		$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    
6597
                    FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.registration <> '' AND spotter_output.registration <> 'NA' ";
6598
                if ($olderthanmonths > 0) {
6599
            		if ($globalDBdriver == 'mysql') {
6600
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6601
			} else {
6602
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6603
			}
6604
		}
6605
                if ($sincedate != '') {
6606
            		if ($globalDBdriver == 'mysql') {
6607
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6608
			} else {
6609
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6610
			}
6611
		}
6612
6613
		// if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6614
		//if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6615
                $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";
6616
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6617
		
6618
		$sth = $this->db->prepare($query);
6619
		$sth->execute();
6620
      
6621
		$aircraft_array = array();
6622
		$temp_array = array();
6623
        
6624
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6625
		{
6626
			$temp_array['registration'] = $row['registration'];
6627
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
6628
			$temp_array['airline_icao'] = $row['airline_icao'];
6629
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6630
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6631
			$temp_array['airline_name'] = $row['airline_name'];
6632
			$temp_array['image_thumbnail'] = "";
6633
			if($row['registration'] != "")
6634
			{
6635
				$image_array = $Image->getSpotterImage($row['registration']);
6636
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6637
			}
6638
          
6639
			$aircraft_array[] = $temp_array;
6640
		}
6641
6642
		return $aircraft_array;
6643
	}
6644
	
6645
	
6646
	/**
6647
	* Gets all departure airports of the airplanes that have flown over
6648
	*
6649
	* @return Array the airport list
6650
	*
6651
	*/
6652
	public function countAllDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
6653
	{
6654
		global $globalDBdriver;
6655
		$filter_query = $this->getFilter($filters,true,true);
6656
		$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, airport.latitude, airport.longitude
6657
				FROM airport, spotter_output".$filter_query." airport.icao = spotter_output.departure_airport_icao AND spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> ''";
6658
                if ($olderthanmonths > 0) {
6659
            		if ($globalDBdriver == 'mysql') {
6660
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6661
			} else {
6662
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6663
			}
6664
                }
6665
                if ($sincedate != '') {
6666
            		if ($globalDBdriver == 'mysql') {
6667
				$query .= " AND spotter_output.date > '".$sincedate."'";
6668
			} else {
6669
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6670
			}
6671
		}
6672
		$query_values = array();
6673
		if ($year != '') {
6674
			if ($globalDBdriver == 'mysql') {
6675
				$query .= " AND YEAR(spotter_output.date) = :year";
6676
				$query_values = array_merge($query_values,array(':year' => $year));
6677
			} else {
6678
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6679
				$query_values = array_merge($query_values,array(':year' => $year));
6680
			}
6681
		}
6682
		if ($month != '') {
6683
			if ($globalDBdriver == 'mysql') {
6684
				$query .= " AND MONTH(spotter_output.date) = :month";
6685
				$query_values = array_merge($query_values,array(':month' => $month));
6686
			} else {
6687
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6688
				$query_values = array_merge($query_values,array(':month' => $month));
6689
			}
6690
		}
6691
		if ($day != '') {
6692
			if ($globalDBdriver == 'mysql') {
6693
				$query .= " AND DAY(spotter_output.date) = :day";
6694
				$query_values = array_merge($query_values,array(':day' => $day));
6695
			} else {
6696
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6697
				$query_values = array_merge($query_values,array(':day' => $day));
6698
			}
6699
		}
6700
                $query .= " GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, airport.latitude, airport.longitude
6701
				ORDER BY airport_departure_icao_count DESC";
6702
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6703
6704
		$sth = $this->db->prepare($query);
6705
		$sth->execute($query_values);
6706
6707
		$airport_array = array();
6708
		$temp_array = array();
6709
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6710
		{
6711
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6712
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6713
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6714
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6715
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6716
			$temp_array['airport_departure_latitude'] = $row['latitude'];
6717
			$temp_array['airport_departure_longitude'] = $row['longitude'];
6718
			$airport_array[] = $temp_array;
6719
		}
6720
		return $airport_array;
6721
	}
6722
6723
	/**
6724
	* Gets all departure airports of the airplanes that have flown over
6725
	*
6726
	* @return Array the airport list
6727
	*
6728
	*/
6729
	public function countAllDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
6730
	{
6731
		global $globalDBdriver;
6732
		$filter_query = $this->getFilter($filters,true,true);
6733
		$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 
6734
			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 <> '' ";
6735
                if ($olderthanmonths > 0) {
6736
            		if ($globalDBdriver == 'mysql') {
6737
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6738
			} else {
6739
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6740
			}
6741
                }
6742
                if ($sincedate != '') {
6743
            		if ($globalDBdriver == 'mysql') {
6744
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6745
			} else {
6746
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6747
			}
6748
		}
6749
6750
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6751
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6752
                $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
6753
				ORDER BY airport_departure_icao_count DESC";
6754
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6755
      
6756
		$sth = $this->db->prepare($query);
6757
		$sth->execute();
6758
      
6759
		$airport_array = array();
6760
		$temp_array = array();
6761
        
6762
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6763
		{
6764
			$temp_array['airline_icao'] = $row['airline_icao'];
6765
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6766
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6767
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6768
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6769
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6770
          
6771
			$airport_array[] = $temp_array;
6772
		}
6773
		return $airport_array;
6774
	}
6775
6776
	/**
6777
	* Gets all detected departure airports of the airplanes that have flown over
6778
	*
6779
	* @return Array the airport list
6780
	*
6781
	*/
6782
	public function countAllDetectedDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
6783
	{
6784
		global $globalDBdriver;
6785
		$filter_query = $this->getFilter($filters,true,true);
6786
		$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, airport.latitude as departure_airport_latitude, airport.longitude as departure_airport_longitude
6787
				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";
6788
                if ($olderthanmonths > 0) {
6789
            		if ($globalDBdriver == 'mysql') {
6790
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6791
			} else {
6792
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6793
			}
6794
                }
6795
                if ($sincedate != '') {
6796
            		if ($globalDBdriver == 'mysql') {
6797
				$query .= " AND spotter_output.date > '".$sincedate."'";
6798
			} else {
6799
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6800
			}
6801
		}
6802
		$query_values = array();
6803
		if ($year != '') {
6804
			if ($globalDBdriver == 'mysql') {
6805
				$query .= " AND YEAR(spotter_output.date) = :year";
6806
				$query_values = array_merge($query_values,array(':year' => $year));
6807
			} else {
6808
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6809
				$query_values = array_merge($query_values,array(':year' => $year));
6810
			}
6811
		}
6812
		if ($month != '') {
6813
			if ($globalDBdriver == 'mysql') {
6814
				$query .= " AND MONTH(spotter_output.date) = :month";
6815
				$query_values = array_merge($query_values,array(':month' => $month));
6816
			} else {
6817
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6818
				$query_values = array_merge($query_values,array(':month' => $month));
6819
			}
6820
		}
6821
		if ($day != '') {
6822
			if ($globalDBdriver == 'mysql') {
6823
				$query .= " AND DAY(spotter_output.date) = :day";
6824
				$query_values = array_merge($query_values,array(':day' => $day));
6825
			} else {
6826
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6827
				$query_values = array_merge($query_values,array(':day' => $day));
6828
			}
6829
		}
6830
                $query .= " GROUP BY spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country, airport.latitude, airport.longitude
6831
				ORDER BY airport_departure_icao_count DESC";
6832
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6833
    		//echo $query;
6834
		$sth = $this->db->prepare($query);
6835
		$sth->execute($query_values);
6836
      
6837
		$airport_array = array();
6838
		$temp_array = array();
6839
        
6840
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6841
		{
6842
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6843
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6844
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6845
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6846
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6847
			$temp_array['airport_departure_latitude'] = $row['departure_airport_latitude'];
6848
			$temp_array['airport_departure_longitude'] = $row['departure_airport_longitude'];
6849
          
6850
			$airport_array[] = $temp_array;
6851
		}
6852
		return $airport_array;
6853
	}
6854
	
6855
	/**
6856
	* Gets all detected departure airports of the airplanes that have flown over
6857
	*
6858
	* @return Array the airport list
6859
	*
6860
	*/
6861
	public function countAllDetectedDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
6862
	{
6863
		global $globalDBdriver;
6864
		$filter_query = $this->getFilter($filters,true,true);
6865
		$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
6866
				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 ";
6867
                if ($olderthanmonths > 0) {
6868
            		if ($globalDBdriver == 'mysql') {
6869
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6870
			} else {
6871
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6872
			}
6873
                }
6874
                if ($sincedate != '') {
6875
            		if ($globalDBdriver == 'mysql') {
6876
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6877
			} else {
6878
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
6879
			}
6880
		}
6881
6882
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6883
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6884
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
6885
				ORDER BY airport_departure_icao_count DESC";
6886
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6887
      
6888
		$sth = $this->db->prepare($query);
6889
		$sth->execute();
6890
      
6891
		$airport_array = array();
6892
		$temp_array = array();
6893
        
6894
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6895
		{
6896
			$temp_array['airline_icao'] = $row['airline_icao'];
6897
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6898
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6899
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6900
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6901
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6902
          
6903
			$airport_array[] = $temp_array;
6904
		}
6905
		return $airport_array;
6906
	}	
6907
	
6908
	/**
6909
	* Gets all departure airports of the airplanes that have flown over based on an airline icao
6910
	*
6911
	* @return Array the airport list
6912
	*
6913
	*/
6914
	public function countAllDepartureAirportsByAirline($airline_icao,$filters = array())
6915
	{
6916
		$filter_query = $this->getFilter($filters,true,true);
6917
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6918
		$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 
6919
			    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 <> '' 
6920
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6921
			    ORDER BY airport_departure_icao_count DESC";
6922
      
6923
		
6924
		$sth = $this->db->prepare($query);
6925
		$sth->execute(array(':airline_icao' => $airline_icao));
6926
      
6927
		$airport_array = array();
6928
		$temp_array = array();
6929
        
6930
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6931
		{
6932
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6933
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6934
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6935
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6936
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6937
          
6938
			$airport_array[] = $temp_array;
6939
		}
6940
6941
		return $airport_array;
6942
	}
6943
	
6944
	
6945
	
6946
	/**
6947
	* Gets all departure airports by country of the airplanes that have flown over based on an airline icao
6948
	*
6949
	* @return Array the airport list
6950
	*
6951
	*/
6952
	public function countAllDepartureAirportCountriesByAirline($airline_icao,$filters = array())
6953
	{
6954
		$filter_query = $this->getFilter($filters,true,true);
6955
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6956
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count, countries.iso3 AS departure_airport_country_iso3 
6957
			FROM countries,spotter_output".$filter_query." countries.name = spotter_output.departure_airport_country AND spotter_output.departure_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
6958
			GROUP BY spotter_output.departure_airport_country, countries.iso3
6959
			ORDER BY airport_departure_country_count DESC";
6960
		
6961
		$sth = $this->db->prepare($query);
6962
		$sth->execute(array(':airline_icao' => $airline_icao));
6963
      
6964
		$airport_array = array();
6965
		$temp_array = array();
6966
        
6967
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6968
		{
6969
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6970
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6971
			$temp_array['departure_airport_country_iso3'] = $row['departure_airport_country_iso3'];
6972
			$airport_array[] = $temp_array;
6973
		}
6974
		return $airport_array;
6975
	}
6976
	
6977
	
6978
	
6979
	/**
6980
	* Gets all departure airports of the airplanes that have flown over based on an aircraft icao
6981
	*
6982
	* @return Array the airport list
6983
	*
6984
	*/
6985
	public function countAllDepartureAirportsByAircraft($aircraft_icao,$filters = array())
6986
	{
6987
		$filter_query = $this->getFilter($filters,true,true);
6988
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
6989
		$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 
6990
			    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 <> '' 
6991
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6992
			    ORDER BY airport_departure_icao_count DESC";
6993
      
6994
		
6995
		$sth = $this->db->prepare($query);
6996
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
6997
      
6998
		$airport_array = array();
6999
		$temp_array = array();
7000
        
7001
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7002
		{
7003
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7004
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7005
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7006
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7007
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7008
          
7009
			$airport_array[] = $temp_array;
7010
		}
7011
7012
		return $airport_array;
7013
	}
7014
	
7015
	
7016
	/**
7017
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
7018
	*
7019
	* @return Array the airport list
7020
	*
7021
	*/
7022
	public function countAllDepartureAirportCountriesByAircraft($aircraft_icao,$filters = array())
7023
	{
7024
		$filter_query = $this->getFilter($filters,true,true);
7025
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7026
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count, countries.iso3 AS departure_airport_country_iso3 
7027
			FROM countries, spotter_output".$filter_query." countries.name = spotter_output.departure_airport_country AND spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
7028
			GROUP BY spotter_output.departure_airport_country, countries.iso3
7029
			ORDER BY airport_departure_country_count DESC";
7030
      
7031
		
7032
		$sth = $this->db->prepare($query);
7033
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7034
      
7035
		$airport_array = array();
7036
		$temp_array = array();
7037
        
7038
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7039
		{
7040
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7041
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7042
			$temp_array['departure_airport_country_iso3'] = $row['departure_airport_country_iso3'];
7043
			$airport_array[] = $temp_array;
7044
		}
7045
7046
		return $airport_array;
7047
	}
7048
	
7049
	
7050
	/**
7051
	* Gets all departure airports of the airplanes that have flown over based on an aircraft registration
7052
	*
7053
	* @return Array the airport list
7054
	*
7055
	*/
7056
	public function countAllDepartureAirportsByRegistration($registration,$filters = array())
7057
	{
7058
		$filter_query = $this->getFilter($filters,true,true);
7059
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
7060
		$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 
7061
			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 <> '' 
7062
                    GROUP BY spotter_output.departure_airport_icao
7063
					ORDER BY airport_departure_icao_count DESC";
7064
      
7065
		
7066
		$sth = $this->db->prepare($query);
7067
		$sth->execute(array(':registration' => $registration));
7068
      
7069
		$airport_array = array();
7070
		$temp_array = array();
7071
        
7072
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7073
		{
7074
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7075
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7076
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7077
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7078
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7079
          
7080
			$airport_array[] = $temp_array;
7081
		}
7082
7083
		return $airport_array;
7084
	}
7085
	
7086
	
7087
	/**
7088
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft registration
7089
	*
7090
	* @return Array the airport list
7091
	*
7092
	*/
7093
	public function countAllDepartureAirportCountriesByRegistration($registration,$filters = array())
7094
	{
7095
		$filter_query = $this->getFilter($filters,true,true);
7096
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
7097
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7098
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.registration = :registration 
7099
                    GROUP BY spotter_output.departure_airport_country
7100
					ORDER BY airport_departure_country_count DESC";
7101
      
7102
		
7103
		$sth = $this->db->prepare($query);
7104
		$sth->execute(array(':registration' => $registration));
7105
      
7106
		$airport_array = array();
7107
		$temp_array = array();
7108
        
7109
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7110
		{
7111
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7112
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7113
          
7114
			$airport_array[] = $temp_array;
7115
		}
7116
7117
		return $airport_array;
7118
	}
7119
	
7120
	
7121
	/**
7122
	* Gets all departure airports of the airplanes that have flown over based on an arrivl airport icao
7123
	*
7124
	* @return Array the airport list
7125
	*
7126
	*/
7127
	public function countAllDepartureAirportsByAirport($airport_icao,$filters = array())
7128
	{
7129
		$filter_query = $this->getFilter($filters,true,true);
7130
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7131
		$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 
7132
			    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 <> '' 
7133
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7134
			    ORDER BY airport_departure_icao_count DESC";
7135
      
7136
		
7137
		$sth = $this->db->prepare($query);
7138
		$sth->execute(array(':airport_icao' => $airport_icao));
7139
      
7140
		$airport_array = array();
7141
		$temp_array = array();
7142
        
7143
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7144
		{
7145
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7146
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7147
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7148
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7149
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7150
          
7151
			$airport_array[] = $temp_array;
7152
		}
7153
7154
		return $airport_array;
7155
	}
7156
	
7157
	
7158
	/**
7159
	* Gets all departure airports by country of the airplanes that have flown over based on an airport icao
7160
	*
7161
	* @return Array the airport list
7162
	*
7163
	*/
7164
	public function countAllDepartureAirportCountriesByAirport($airport_icao,$filters = array())
7165
	{
7166
		$filter_query = $this->getFilter($filters,true,true);
7167
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7168
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count, countries.iso3 AS departure_airport_country_iso3 
7169
			FROM countries,spotter_output".$filter_query." countries.name = spotter_output.departure_airport_country AND spotter_output.departure_airport_country <> '' AND spotter_output.arrival_airport_icao = :airport_icao 
7170
			GROUP BY spotter_output.departure_airport_country, countries.iso3
7171
			ORDER BY airport_departure_country_count DESC";
7172
		
7173
		$sth = $this->db->prepare($query);
7174
		$sth->execute(array(':airport_icao' => $airport_icao));
7175
      
7176
		$airport_array = array();
7177
		$temp_array = array();
7178
        
7179
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7180
		{
7181
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7182
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7183
			$temp_array['departure_airport_country_iso3'] = $row['departure_airport_country_iso3'];
7184
			$airport_array[] = $temp_array;
7185
		}
7186
		return $airport_array;
7187
	}
7188
	
7189
	
7190
	
7191
	/**
7192
	* Gets all departure airports of the airplanes that have flown over based on an aircraft manufacturer
7193
	*
7194
	* @return Array the airport list
7195
	*
7196
	*/
7197
	public function countAllDepartureAirportsByManufacturer($aircraft_manufacturer,$filters = array())
7198
	{
7199
		$filter_query = $this->getFilter($filters,true,true);
7200
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7201
		$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 
7202
			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 <> '' 
7203
                    GROUP BY spotter_output.departure_airport_icao
7204
					ORDER BY airport_departure_icao_count DESC";
7205
      
7206
		
7207
		$sth = $this->db->prepare($query);
7208
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7209
      
7210
		$airport_array = array();
7211
		$temp_array = array();
7212
        
7213
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7214
		{
7215
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7216
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7217
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7218
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7219
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7220
          
7221
			$airport_array[] = $temp_array;
7222
		}
7223
7224
		return $airport_array;
7225
	}
7226
	
7227
	
7228
	/**
7229
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft manufacturer
7230
	*
7231
	* @return Array the airport list
7232
	*
7233
	*/
7234
	public function countAllDepartureAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
7235
	{
7236
		$filter_query = $this->getFilter($filters,true,true);
7237
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7238
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7239
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
7240
                    GROUP BY spotter_output.departure_airport_country
7241
					ORDER BY airport_departure_country_count DESC";
7242
      
7243
		
7244
		$sth = $this->db->prepare($query);
7245
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7246
      
7247
		$airport_array = array();
7248
		$temp_array = array();
7249
        
7250
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7251
		{
7252
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7253
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7254
          
7255
			$airport_array[] = $temp_array;
7256
		}
7257
7258
		return $airport_array;
7259
	}
7260
	
7261
	
7262
	/**
7263
	* Gets all departure airports of the airplanes that have flown over based on a date
7264
	*
7265
	* @return Array the airport list
7266
	*
7267
	*/
7268
	public function countAllDepartureAirportsByDate($date,$filters = array())
7269
	{
7270
		global $globalTimezone, $globalDBdriver;
7271
		$filter_query = $this->getFilter($filters,true,true);
7272
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7273
		if ($globalTimezone != '') {
7274
			date_default_timezone_set($globalTimezone);
7275
			$datetime = new DateTime($date);
7276
			$offset = $datetime->format('P');
7277
		} else $offset = '+00:00';
7278
7279
		if ($globalDBdriver == 'mysql') {
7280
			$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 
7281
					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
7282
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7283
					ORDER BY airport_departure_icao_count DESC";
7284
		} else {
7285
			$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 
7286
					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
7287
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7288
					ORDER BY airport_departure_icao_count DESC";
7289
		}
7290
7291
		$sth = $this->db->prepare($query);
7292
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7293
      
7294
		$airport_array = array();
7295
		$temp_array = array();
7296
        
7297
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7298
		{
7299
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7300
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7301
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7302
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7303
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7304
          
7305
			$airport_array[] = $temp_array;
7306
		}
7307
		return $airport_array;
7308
	}
7309
	
7310
	
7311
	
7312
	/**
7313
	* Gets all departure airports by country of the airplanes that have flown over based on a date
7314
	*
7315
	* @return Array the airport list
7316
	*
7317
	*/
7318
	public function countAllDepartureAirportCountriesByDate($date,$filters = array())
7319
	{
7320
		global $globalTimezone, $globalDBdriver;
7321
		$filter_query = $this->getFilter($filters,true,true);
7322
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7323
		if ($globalTimezone != '') {
7324
			date_default_timezone_set($globalTimezone);
7325
			$datetime = new DateTime($date);
7326
			$offset = $datetime->format('P');
7327
		} else $offset = '+00:00';
7328
7329
		if ($globalDBdriver == 'mysql') {
7330
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count,countries.iso3 AS departure_airport_country_iso3
7331
					FROM countries,spotter_output".$filter_query." countries.name = spotter_output.departure_airport_country AND spotter_output.departure_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
7332
					GROUP BY spotter_output.departure_airport_country, countries.iso3
7333
					ORDER BY airport_departure_country_count DESC";
7334
		} else {
7335
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count, countries.iso3 AS departure_airport_country_iso3 
7336
					FROM countries, spotter_output".$filter_query." countries.name = spotter_output.departure_airport_country AND spotter_output.departure_airport_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
7337
					GROUP BY spotter_output.departure_airport_country, countries.iso3
7338
					ORDER BY airport_departure_country_count DESC";
7339
		}
7340
		
7341
		$sth = $this->db->prepare($query);
7342
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7343
      
7344
		$airport_array = array();
7345
		$temp_array = array();
7346
        
7347
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7348
		{
7349
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7350
			$temp_array['departure_airport_country_iso3'] = $row['departure_airport_country_iso3'];
7351
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7352
          
7353
			$airport_array[] = $temp_array;
7354
		}
7355
		return $airport_array;
7356
	}
7357
	
7358
	
7359
	
7360
	/**
7361
	* Gets all departure airports of the airplanes that have flown over based on a ident/callsign
7362
	*
7363
	* @return Array the airport list
7364
	*
7365
	*/
7366
	public function countAllDepartureAirportsByIdent($ident,$filters = array())
7367
	{
7368
		$filter_query = $this->getFilter($filters,true,true);
7369
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7370
		$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 
7371
		    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 
7372
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7373
		    ORDER BY airport_departure_icao_count DESC";
7374
      
7375
		
7376
		$sth = $this->db->prepare($query);
7377
		$sth->execute(array(':ident' => $ident));
7378
      
7379
		$airport_array = array();
7380
		$temp_array = array();
7381
        
7382
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7383
		{
7384
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7385
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7386
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7387
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7388
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7389
          
7390
			$airport_array[] = $temp_array;
7391
		}
7392
7393
		return $airport_array;
7394
	}
7395
	
7396
	/**
7397
	* Gets all departure airports of the airplanes that have flown over based on a owner
7398
	*
7399
	* @return Array the airport list
7400
	*
7401
	*/
7402
	public function countAllDepartureAirportsByOwner($owner,$filters = array())
7403
	{
7404
		$filter_query = $this->getFilter($filters,true,true);
7405
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
7406
		$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 
7407
		    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 
7408
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7409
		    ORDER BY airport_departure_icao_count DESC";
7410
      
7411
		
7412
		$sth = $this->db->prepare($query);
7413
		$sth->execute(array(':owner' => $owner));
7414
      
7415
		$airport_array = array();
7416
		$temp_array = array();
7417
        
7418
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7419
		{
7420
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7421
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7422
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7423
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7424
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7425
          
7426
			$airport_array[] = $temp_array;
7427
		}
7428
7429
		return $airport_array;
7430
	}
7431
	
7432
	/**
7433
	* Gets all departure airports of the airplanes that have flown over based on a pilot
7434
	*
7435
	* @return Array the airport list
7436
	*
7437
	*/
7438
	public function countAllDepartureAirportsByPilot($pilot,$filters = array())
7439
	{
7440
		$filter_query = $this->getFilter($filters,true,true);
7441
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
7442
		$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 
7443
		    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) 
7444
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7445
		    ORDER BY airport_departure_icao_count DESC";
7446
		
7447
		$sth = $this->db->prepare($query);
7448
		$sth->execute(array(':pilot' => $pilot));
7449
      
7450
		$airport_array = array();
7451
		$temp_array = array();
7452
        
7453
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7454
		{
7455
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7456
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7457
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7458
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7459
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7460
          
7461
			$airport_array[] = $temp_array;
7462
		}
7463
7464
		return $airport_array;
7465
	}
7466
	
7467
	
7468
	
7469
	/**
7470
	* Gets all departure airports by country of the airplanes that have flown over based on a callsign/ident
7471
	*
7472
	* @return Array the airport list
7473
	*
7474
	*/
7475
	public function countAllDepartureAirportCountriesByIdent($ident,$filters = array())
7476
	{
7477
		$filter_query = $this->getFilter($filters,true,true);
7478
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7479
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7480
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.ident = :ident 
7481
                    GROUP BY spotter_output.departure_airport_country
7482
					ORDER BY airport_departure_country_count DESC";
7483
      
7484
		
7485
		$sth = $this->db->prepare($query);
7486
		$sth->execute(array(':ident' => $ident));
7487
      
7488
		$airport_array = array();
7489
		$temp_array = array();
7490
        
7491
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7492
		{
7493
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7494
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7495
          
7496
			$airport_array[] = $temp_array;
7497
		}
7498
7499
		return $airport_array;
7500
	}
7501
	
7502
	/**
7503
	* Gets all departure airports by country of the airplanes that have flown over based on owner
7504
	*
7505
	* @return Array the airport list
7506
	*
7507
	*/
7508
	public function countAllDepartureAirportCountriesByOwner($owner,$filters = array())
7509
	{
7510
		$filter_query = $this->getFilter($filters,true,true);
7511
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
7512
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7513
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.owner_name = :owner 
7514
			GROUP BY spotter_output.departure_airport_country
7515
			ORDER BY airport_departure_country_count DESC";
7516
		
7517
		$sth = $this->db->prepare($query);
7518
		$sth->execute(array(':owner' => $owner));
7519
		return $sth->fetchAll(PDO::FETCH_ASSOC);
7520
	}
7521
	
7522
	/**
7523
	* Gets all departure airports by country of the airplanes that have flown over based on pilot
7524
	*
7525
	* @return Array the airport list
7526
	*
7527
	*/
7528
	public function countAllDepartureAirportCountriesByPilot($pilot,$filters = array())
7529
	{
7530
		$filter_query = $this->getFilter($filters,true,true);
7531
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
7532
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7533
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
7534
			GROUP BY spotter_output.departure_airport_country
7535
			ORDER BY airport_departure_country_count DESC";
7536
		
7537
		$sth = $this->db->prepare($query);
7538
		$sth->execute(array(':pilot' => $pilot));
7539
		return $sth->fetchAll(PDO::FETCH_ASSOC);
7540
	}
7541
	
7542
	
7543
	
7544
	/**
7545
	* Gets all departure airports of the airplanes that have flown over based on a country
7546
	*
7547
	* @return Array the airport list
7548
	*
7549
	*/
7550
	public function countAllDepartureAirportsByCountry($country,$filters = array())
7551
	{
7552
		$filter_query = $this->getFilter($filters,true,true);
7553
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7554
7555
		$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 
7556
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
7557
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7558
			    ORDER BY airport_departure_icao_count DESC";
7559
      
7560
		
7561
		$sth = $this->db->prepare($query);
7562
		$sth->execute(array(':country' => $country));
7563
      
7564
		$airport_array = array();
7565
		$temp_array = array();
7566
        
7567
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7568
		{
7569
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7570
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7571
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7572
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7573
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7574
          
7575
			$airport_array[] = $temp_array;
7576
		}
7577
7578
		return $airport_array;
7579
	}
7580
7581
7582
	/**
7583
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
7584
	*
7585
	* @return Array the airport list
7586
	*
7587
	*/
7588
	public function countAllDepartureAirportCountriesByCountry($country,$filters = array())
7589
	{
7590
		$filter_query = $this->getFilter($filters,true,true);
7591
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7592
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count, countries.iso3 AS departure_airport_country_iso3 
7593
			FROM countries,spotter_output".$filter_query." countries.name = spotter_output.departure_airport_country AND 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) 
7594
			GROUP BY spotter_output.departure_airport_country, countries.iso3
7595
			ORDER BY airport_departure_country_count DESC";
7596
		
7597
		$sth = $this->db->prepare($query);
7598
		$sth->execute(array(':country' => $country));
7599
		$airport_array = array();
7600
		$temp_array = array();
7601
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7602
		{
7603
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7604
			$temp_array['departure_airport_country_iso3'] = $row['departure_airport_country_iso3'];
7605
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7606
			$airport_array[] = $temp_array;
7607
		}
7608
		return $airport_array;
7609
	}
7610
	
7611
7612
	/**
7613
	* Gets all arrival airports of the airplanes that have flown over
7614
	*
7615
	* @param Boolean $limit Limit result to 10 or not
7616
	* @param Integer $olderthanmonths Only show result older than x months
7617
	* @param String $sincedate Only show result since x date
7618
	* @param Boolean $icaoaskey Show result by ICAO
7619
	* @param Array $filters Filter used here
7620
	* @return Array the airport list
7621
	*
7622
	*/
7623
	public function countAllArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array(),$year = '',$month = '',$day = '')
7624
	{
7625
		global $globalDBdriver;
7626
		$filter_query = $this->getFilter($filters,true,true);
7627
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country, airport.latitude as arrival_airport_latitude, airport.longitude as arrival_airport_longitude 
7628
				FROM airport, spotter_output".$filter_query." airport.icao = spotter_output.arrival_airport_icao AND spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''";
7629
                if ($olderthanmonths > 0) {
7630
            		if ($globalDBdriver == 'mysql') {
7631
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
7632
			} else {
7633
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
7634
			}
7635
		}
7636
                if ($sincedate != '') {
7637
            		if ($globalDBdriver == 'mysql') {
7638
				$query .= " AND spotter_output.date > '".$sincedate."'";
7639
			} else {
7640
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7641
			}
7642
		}
7643
		$query_values = array();
7644
		if ($year != '') {
7645
			if ($globalDBdriver == 'mysql') {
7646
				$query .= " AND YEAR(spotter_output.date) = :year";
7647
				$query_values = array_merge($query_values,array(':year' => $year));
7648
			} else {
7649
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
7650
				$query_values = array_merge($query_values,array(':year' => $year));
7651
			}
7652
		}
7653
		if ($month != '') {
7654
			if ($globalDBdriver == 'mysql') {
7655
				$query .= " AND MONTH(spotter_output.date) = :month";
7656
				$query_values = array_merge($query_values,array(':month' => $month));
7657
			} else {
7658
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
7659
				$query_values = array_merge($query_values,array(':month' => $month));
7660
			}
7661
		}
7662
		if ($day != '') {
7663
			if ($globalDBdriver == 'mysql') {
7664
				$query .= " AND DAY(spotter_output.date) = :day";
7665
				$query_values = array_merge($query_values,array(':day' => $day));
7666
			} else {
7667
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
7668
				$query_values = array_merge($query_values,array(':day' => $day));
7669
			}
7670
		}
7671
                $query .= " GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country, airport.latitude, airport.longitude
7672
					ORDER BY airport_arrival_icao_count DESC";
7673
		if ($limit) $query .= " LIMIT 10";
7674
      
7675
		
7676
		$sth = $this->db->prepare($query);
7677
		$sth->execute($query_values);
7678
      
7679
		$airport_array = array();
7680
		$temp_array = array();
7681
        
7682
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7683
		{
7684
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7685
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7686
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7687
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7688
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7689
			$temp_array['airport_arrival_latitude'] = $row['arrival_airport_latitude'];
7690
			$temp_array['airport_arrival_longitude'] = $row['arrival_airport_longitude'];
7691
          
7692
			if ($icaoaskey) {
7693
				$icao = $row['arrival_airport_icao'];
7694
				$airport_array[$icao] = $temp_array;
7695
			} else $airport_array[] = $temp_array;
7696
		}
7697
7698
		return $airport_array;
7699
	}
7700
7701
	/**
7702
	* Gets all arrival airports of the airplanes that have flown over
7703
	*
7704
	* @return Array the airport list
7705
	*
7706
	*/
7707
	public function countAllArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array())
7708
	{
7709
		global $globalDBdriver;
7710
		$filter_query = $this->getFilter($filters,true,true);
7711
		$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, countries.iso3 AS arrival_airport_country_iso3 
7712
			FROM countries,spotter_output".$filter_query." countries.name = spotter_output.arrival_airport_country AND spotter_output.airline_icao <> '' AND spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' ";
7713
                if ($olderthanmonths > 0) {
7714
            		if ($globalDBdriver == 'mysql') {
7715
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
7716
			} else {
7717
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
7718
			}
7719
		}
7720
                if ($sincedate != '') {
7721
            		if ($globalDBdriver == 'mysql') {
7722
				$query .= "AND spotter_output.date > '".$sincedate."' ";
7723
			} else {
7724
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7725
			}
7726
		}
7727
7728
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
7729
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
7730
                $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, countries.iso3
7731
					ORDER BY airport_arrival_icao_count DESC";
7732
		if ($limit) $query .= " LIMIT 10";
7733
      
7734
		
7735
		$sth = $this->db->prepare($query);
7736
		$sth->execute();
7737
      
7738
		$airport_array = array();
7739
		$temp_array = array();
7740
        
7741
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7742
		{
7743
			$temp_array['airline_icao'] = $row['airline_icao'];
7744
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7745
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7746
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7747
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7748
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7749
			$temp_array['airport_arrival_country_iso3'] = $row['arrival_airport_country_iso3'];
7750
          
7751
			if ($icaoaskey) {
7752
				$icao = $row['arrival_airport_icao'];
7753
				$airport_array[$icao] = $temp_array;
7754
			} else $airport_array[] = $temp_array;
7755
		}
7756
7757
		return $airport_array;
7758
	}
7759
7760
7761
	/**
7762
	* Gets all detected arrival airports of the airplanes that have flown over
7763
	*
7764
	* @return Array the airport list
7765
	*
7766
	*/
7767
	public function countAllDetectedArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array(),$year = '',$month = '',$day = '')
7768
	{
7769
		global $globalDBdriver;
7770
		$filter_query = $this->getFilter($filters,true,true);
7771
		$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, airport.latitude AS arrival_airport_latitude, airport.longitude AS arrival_airport_longitude 
7772
			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";
7773
                if ($olderthanmonths > 0) {
7774
            		if ($globalDBdriver == 'mysql') {
7775
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
7776
			} else {
7777
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
7778
			}
7779
		}
7780
                if ($sincedate != '') {
7781
            		if ($globalDBdriver == 'mysql') {
7782
				$query .= " AND spotter_output.date > '".$sincedate."'";
7783
			} else {
7784
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7785
			}
7786
		}
7787
		$query_values = array();
7788
		if ($year != '') {
7789
			if ($globalDBdriver == 'mysql') {
7790
				$query .= " AND YEAR(spotter_output.date) = :year";
7791
				$query_values = array_merge($query_values,array(':year' => $year));
7792
			} else {
7793
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
7794
				$query_values = array_merge($query_values,array(':year' => $year));
7795
			}
7796
		}
7797
		if ($month != '') {
7798
			if ($globalDBdriver == 'mysql') {
7799
				$query .= " AND MONTH(spotter_output.date) = :month";
7800
				$query_values = array_merge($query_values,array(':month' => $month));
7801
			} else {
7802
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
7803
				$query_values = array_merge($query_values,array(':month' => $month));
7804
			}
7805
		}
7806
		if ($day != '') {
7807
			if ($globalDBdriver == 'mysql') {
7808
				$query .= " AND DAY(spotter_output.date) = :day";
7809
				$query_values = array_merge($query_values,array(':day' => $day));
7810
			} else {
7811
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
7812
				$query_values = array_merge($query_values,array(':day' => $day));
7813
			}
7814
		}
7815
		$query .= " GROUP BY spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country, airport.latitude, airport.longitude
7816
					ORDER BY airport_arrival_icao_count DESC";
7817
		if ($limit) $query .= " LIMIT 10";
7818
      
7819
		
7820
		$sth = $this->db->prepare($query);
7821
		$sth->execute($query_values);
7822
      
7823
		$airport_array = array();
7824
		$temp_array = array();
7825
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7826
		{
7827
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7828
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7829
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7830
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7831
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7832
          
7833
			if ($icaoaskey) {
7834
				$icao = $row['arrival_airport_icao'];
7835
				$airport_array[$icao] = $temp_array;
7836
			} else $airport_array[] = $temp_array;
7837
		}
7838
7839
		return $airport_array;
7840
	}
7841
	
7842
	/**
7843
	* Gets all detected arrival airports of the airplanes that have flown over
7844
	*
7845
	* @return Array the airport list
7846
	*
7847
	*/
7848
	public function countAllDetectedArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array())
7849
	{
7850
		global $globalDBdriver;
7851
		$filter_query = $this->getFilter($filters,true,true);
7852
		$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 
7853
			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 ";
7854
                if ($olderthanmonths > 0) {
7855
            		if ($globalDBdriver == 'mysql') {
7856
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
7857
			} else {
7858
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
7859
			}
7860
		}
7861
                if ($sincedate != '') {
7862
            		if ($globalDBdriver == 'mysql') {
7863
				$query .= "AND spotter_output.date > '".$sincedate."' ";
7864
			} else {
7865
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7866
			}
7867
		}
7868
7869
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
7870
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
7871
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
7872
					ORDER BY airport_arrival_icao_count DESC";
7873
		if ($limit) $query .= " LIMIT 10";
7874
      
7875
		
7876
		$sth = $this->db->prepare($query);
7877
		$sth->execute();
7878
      
7879
		$airport_array = array();
7880
		$temp_array = array();
7881
        
7882
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7883
		{
7884
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7885
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7886
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7887
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7888
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7889
			$temp_array['airline_icao'] = $row['airline_icao'];
7890
          
7891
			if ($icaoaskey) {
7892
				$icao = $row['arrival_airport_icao'];
7893
				$airport_array[$icao] = $temp_array;
7894
			} else $airport_array[] = $temp_array;
7895
		}
7896
7897
		return $airport_array;
7898
	}	
7899
	
7900
	/**
7901
	* Gets all arrival airports of the airplanes that have flown over based on an airline icao
7902
	*
7903
	* @return Array the airport list
7904
	*
7905
	*/
7906
	public function countAllArrivalAirportsByAirline($airline_icao, $filters = array())
7907
	{
7908
		$filter_query = $this->getFilter($filters,true,true);
7909
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7910
		$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 
7911
			    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 
7912
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7913
			    ORDER BY airport_arrival_icao_count DESC";
7914
		
7915
		$sth = $this->db->prepare($query);
7916
		$sth->execute(array(':airline_icao' => $airline_icao));
7917
      
7918
		$airport_array = array();
7919
		$temp_array = array();
7920
        
7921
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7922
		{
7923
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7924
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7925
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7926
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7927
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7928
          
7929
			$airport_array[] = $temp_array;
7930
		}
7931
7932
		return $airport_array;
7933
	}
7934
	
7935
	
7936
	/**
7937
	* Gets all arrival airports by country of the airplanes that have flown over based on an airline icao
7938
	*
7939
	* @return Array the airport list
7940
	*
7941
	*/
7942
	public function countAllArrivalAirportCountriesByAirline($airline_icao,$filters = array())
7943
	{
7944
		$filter_query = $this->getFilter($filters,true,true);
7945
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7946
		
7947
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count, countries.iso3 AS arrival_airport_country_iso3 
7948
			FROM countries, spotter_output".$filter_query." countries.name = spotter_output.arrival_airport_country AND spotter_output.arrival_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
7949
			GROUP BY spotter_output.arrival_airport_country, countries.iso3
7950
			ORDER BY airport_arrival_country_count DESC";
7951
      
7952
		
7953
		$sth = $this->db->prepare($query);
7954
		$sth->execute(array(':airline_icao' => $airline_icao));
7955
      
7956
		$airport_array = array();
7957
		$temp_array = array();
7958
        
7959
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7960
		{
7961
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7962
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7963
			$temp_array['arrival_airport_country_iso3'] = $row['arrival_airport_country_iso3'];
7964
			$airport_array[] = $temp_array;
7965
		}
7966
		return $airport_array;
7967
	}
7968
	
7969
	
7970
	/**
7971
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft icao
7972
	*
7973
	* @return Array the airport list
7974
	*
7975
	*/
7976
	public function countAllArrivalAirportsByAircraft($aircraft_icao,$filters = array())
7977
	{
7978
		$filter_query = $this->getFilter($filters,true,true);
7979
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7980
		$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 
7981
			    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 
7982
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7983
			    ORDER BY airport_arrival_icao_count DESC";
7984
      
7985
		
7986
		$sth = $this->db->prepare($query);
7987
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7988
      
7989
		$airport_array = array();
7990
		$temp_array = array();
7991
        
7992
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7993
		{
7994
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7995
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7996
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7997
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7998
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7999
          
8000
			$airport_array[] = $temp_array;
8001
		}
8002
8003
		return $airport_array;
8004
	}
8005
	
8006
	
8007
	
8008
	/**
8009
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft icao
8010
	*
8011
	* @return Array the airport list
8012
	*
8013
	*/
8014
	public function countAllArrivalAirportCountriesByAircraft($aircraft_icao,$filters = array())
8015
	{
8016
		$filter_query = $this->getFilter($filters,true,true);
8017
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
8018
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count, countries.iso3 AS airport_arrival_country_iso3 
8019
			    FROM countries, spotter_output".$filter_query." countries.name = spotter_output.arrival_airport_country AND spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
8020
			    GROUP BY spotter_output.arrival_airport_country, countries.iso3
8021
			    ORDER BY airport_arrival_country_count DESC";
8022
      
8023
		
8024
		$sth = $this->db->prepare($query);
8025
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
8026
      
8027
		$airport_array = array();
8028
		$temp_array = array();
8029
        
8030
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8031
		{
8032
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8033
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8034
			$temp_array['arrival_airport_country_iso3'] = $row['airport_arrival_country_iso3'];
8035
			$airport_array[] = $temp_array;
8036
		}
8037
8038
		return $airport_array;
8039
	}
8040
	
8041
	
8042
	/**
8043
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft registration
8044
	*
8045
	* @return Array the airport list
8046
	*
8047
	*/
8048
	public function countAllArrivalAirportsByRegistration($registration,$filters = array())
8049
	{
8050
		$filter_query = $this->getFilter($filters,true,true);
8051
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
8052
8053
		$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 
8054
			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 
8055
                    GROUP BY spotter_output.arrival_airport_icao
8056
					ORDER BY airport_arrival_icao_count DESC";
8057
      
8058
		
8059
		$sth = $this->db->prepare($query);
8060
		$sth->execute(array(':registration' => $registration));
8061
      
8062
		$airport_array = array();
8063
		$temp_array = array();
8064
        
8065
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8066
		{
8067
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8068
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8069
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8070
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8071
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8072
          
8073
			$airport_array[] = $temp_array;
8074
		}
8075
8076
		return $airport_array;
8077
	}
8078
	
8079
	
8080
	/**
8081
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft registration
8082
	*
8083
	* @return Array the airport list
8084
	*
8085
	*/
8086
	public function countAllArrivalAirportCountriesByRegistration($registration,$filters = array())
8087
	{
8088
		$filter_query = $this->getFilter($filters,true,true);
8089
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
8090
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8091
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.registration = :registration 
8092
                    GROUP BY spotter_output.arrival_airport_country
8093
					ORDER BY airport_arrival_country_count DESC";
8094
      
8095
		
8096
		$sth = $this->db->prepare($query);
8097
		$sth->execute(array(':registration' => $registration));
8098
      
8099
		$airport_array = array();
8100
		$temp_array = array();
8101
        
8102
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8103
		{
8104
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8105
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8106
          
8107
			$airport_array[] = $temp_array;
8108
		}
8109
8110
		return $airport_array;
8111
	}
8112
	
8113
	
8114
	
8115
	/**
8116
	* Gets all arrival airports of the airplanes that have flown over based on an departure airport
8117
	*
8118
	* @return Array the airport list
8119
	*
8120
	*/
8121
	public function countAllArrivalAirportsByAirport($airport_icao,$filters = array())
8122
	{
8123
		$filter_query = $this->getFilter($filters,true,true);
8124
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8125
		$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 
8126
			    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 
8127
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8128
			    ORDER BY airport_arrival_icao_count DESC";
8129
      
8130
		
8131
		$sth = $this->db->prepare($query);
8132
		$sth->execute(array(':airport_icao' => $airport_icao));
8133
      
8134
		$airport_array = array();
8135
		$temp_array = array();
8136
        
8137
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8138
		{
8139
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8140
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8141
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8142
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8143
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8144
          
8145
			$airport_array[] = $temp_array;
8146
		}
8147
8148
		return $airport_array;
8149
	}
8150
	
8151
	
8152
	/**
8153
	* Gets all arrival airports by country of the airplanes that have flown over based on an airport icao
8154
	*
8155
	* @return Array the airport list
8156
	*
8157
	*/
8158
	public function countAllArrivalAirportCountriesByAirport($airport_icao,$filters = array())
8159
	{
8160
		$filter_query = $this->getFilter($filters,true,true);
8161
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8162
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count, countries.iso3 AS arrival_airport_country_iso3 
8163
			FROM countries, spotter_output".$filter_query." countries.name = spotter_output.arrival_airport_country AND spotter_output.arrival_airport_country <> '' AND spotter_output.departure_airport_icao = :airport_icao 
8164
			GROUP BY spotter_output.arrival_airport_country, countries.iso3
8165
			ORDER BY airport_arrival_country_count DESC";
8166
		
8167
		$sth = $this->db->prepare($query);
8168
		$sth->execute(array(':airport_icao' => $airport_icao));
8169
      
8170
		$airport_array = array();
8171
		$temp_array = array();
8172
        
8173
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8174
		{
8175
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8176
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8177
			$temp_array['arrival_airport_country_iso3'] = $row['arrival_airport_country_iso3'];
8178
			$airport_array[] = $temp_array;
8179
		}
8180
		return $airport_array;
8181
	}
8182
	
8183
	
8184
	/**
8185
	* Gets all arrival airports of the airplanes that have flown over based on a aircraft manufacturer
8186
	*
8187
	* @return Array the airport list
8188
	*
8189
	*/
8190
	public function countAllArrivalAirportsByManufacturer($aircraft_manufacturer,$filters = array())
8191
	{
8192
		$filter_query = $this->getFilter($filters,true,true);
8193
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
8194
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8195
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
8196
                    GROUP BY spotter_output.arrival_airport_icao
8197
					ORDER BY airport_arrival_icao_count DESC";
8198
      
8199
		
8200
		$sth = $this->db->prepare($query);
8201
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
8202
      
8203
		$airport_array = array();
8204
		$temp_array = array();
8205
        
8206
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8207
		{
8208
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8209
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8210
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8211
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8212
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8213
          
8214
			$airport_array[] = $temp_array;
8215
		}
8216
8217
		return $airport_array;
8218
	}
8219
	
8220
	
8221
	
8222
	/**
8223
	* Gets all arrival airports by country of the airplanes that have flown over based on a aircraft manufacturer
8224
	*
8225
	* @return Array the airport list
8226
	*
8227
	*/
8228
	public function countAllArrivalAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
8229
	{
8230
		$filter_query = $this->getFilter($filters,true,true);
8231
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
8232
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8233
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
8234
                    GROUP BY spotter_output.arrival_airport_country
8235
					ORDER BY airport_arrival_country_count DESC";
8236
      
8237
		
8238
		$sth = $this->db->prepare($query);
8239
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
8240
      
8241
		$airport_array = array();
8242
		$temp_array = array();
8243
        
8244
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8245
		{
8246
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8247
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8248
          
8249
			$airport_array[] = $temp_array;
8250
		}
8251
8252
		return $airport_array;
8253
	}
8254
	
8255
	
8256
	
8257
	/**
8258
	* Gets all arrival airports of the airplanes that have flown over based on a date
8259
	*
8260
	* @return Array the airport list
8261
	*
8262
	*/
8263
	public function countAllArrivalAirportsByDate($date,$filters = array())
8264
	{
8265
		global $globalTimezone, $globalDBdriver;
8266
		$filter_query = $this->getFilter($filters,true,true);
8267
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8268
		if ($globalTimezone != '') {
8269
			date_default_timezone_set($globalTimezone);
8270
			$datetime = new DateTime($date);
8271
			$offset = $datetime->format('P');
8272
		} else $offset = '+00:00';
8273
8274
		if ($globalDBdriver == 'mysql') {
8275
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8276
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date  
8277
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8278
					ORDER BY airport_arrival_icao_count DESC";
8279
		} else {
8280
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8281
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date  
8282
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8283
					ORDER BY airport_arrival_icao_count DESC";
8284
		}
8285
		
8286
		$sth = $this->db->prepare($query);
8287
		$sth->execute(array(':date' => $date, ':offset' => $offset));
8288
      
8289
		$airport_array = array();
8290
		$temp_array = array();
8291
        
8292
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8293
		{
8294
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8295
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8296
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8297
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8298
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8299
          
8300
			$airport_array[] = $temp_array;
8301
		}
8302
		return $airport_array;
8303
	}
8304
	
8305
	
8306
	
8307
	/**
8308
	* Gets all arrival airports by country of the airplanes that have flown over based on a date
8309
	*
8310
	* @return Array the airport list
8311
	*
8312
	*/
8313
	public function countAllArrivalAirportCountriesByDate($date, $filters = array())
8314
	{
8315
		global $globalTimezone, $globalDBdriver;
8316
		$filter_query = $this->getFilter($filters,true,true);
8317
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8318
		if ($globalTimezone != '') {
8319
			date_default_timezone_set($globalTimezone);
8320
			$datetime = new DateTime($date);
8321
			$offset = $datetime->format('P');
8322
		} else $offset = '+00:00';
8323
8324
		if ($globalDBdriver == 'mysql') {
8325
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count, countries.iso3 AS arrival_airport_country_iso3 
8326
					FROM countries,spotter_output".$filter_query." countries.name = spotter_output.arrival_airport_country AND spotter_output.arrival_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
8327
					GROUP BY spotter_output.arrival_airport_country, countries.iso3
8328
					ORDER BY airport_arrival_country_count DESC";
8329
		} else {
8330
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count, countries.iso3 AS arrival_airport_country_iso3 
8331
					FROM countries,spotter_output".$filter_query." countries.name = spotter_output.arrival_airport_country AND spotter_output.arrival_airport_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
8332
					GROUP BY spotter_output.arrival_airport_country, countries.iso3
8333
					ORDER BY airport_arrival_country_count DESC";
8334
		}
8335
		
8336
		$sth = $this->db->prepare($query);
8337
		$sth->execute(array(':date' => $date, ':offset' => $offset));
8338
      
8339
		$airport_array = array();
8340
		$temp_array = array();
8341
        
8342
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8343
		{
8344
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8345
			$temp_array['arrival_airport_country_iso3'] = $row['arrival_airport_country_iso3'];
8346
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8347
			$airport_array[] = $temp_array;
8348
		}
8349
		return $airport_array;
8350
	}
8351
	
8352
	
8353
	
8354
	/**
8355
	* Gets all arrival airports of the airplanes that have flown over based on a ident/callsign
8356
	*
8357
	* @return Array the airport list
8358
	*
8359
	*/
8360
	public function countAllArrivalAirportsByIdent($ident,$filters = array())
8361
	{
8362
		$filter_query = $this->getFilter($filters,true,true);
8363
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
8364
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8365
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.ident = :ident  
8366
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8367
		    ORDER BY airport_arrival_icao_count DESC";
8368
      
8369
		
8370
		$sth = $this->db->prepare($query);
8371
		$sth->execute(array(':ident' => $ident));
8372
      
8373
		$airport_array = array();
8374
		$temp_array = array();
8375
        
8376
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8377
		{
8378
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8379
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8380
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8381
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8382
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8383
          
8384
			$airport_array[] = $temp_array;
8385
		}
8386
8387
		return $airport_array;
8388
	}
8389
	
8390
	/**
8391
	* Gets all arrival airports of the airplanes that have flown over based on a owner
8392
	*
8393
	* @return Array the airport list
8394
	*
8395
	*/
8396
	public function countAllArrivalAirportsByOwner($owner,$filters = array())
8397
	{
8398
		$filter_query = $this->getFilter($filters,true,true);
8399
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
8400
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8401
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.owner_name = :owner 
8402
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8403
		    ORDER BY airport_arrival_icao_count DESC";
8404
      
8405
		
8406
		$sth = $this->db->prepare($query);
8407
		$sth->execute(array(':owner' => $owner));
8408
		$airport_array = array();
8409
		$temp_array = array();
8410
        
8411
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8412
		{
8413
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8414
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8415
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8416
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8417
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8418
          
8419
			$airport_array[] = $temp_array;
8420
		}
8421
8422
		return $airport_array;
8423
	}
8424
8425
	/**
8426
	* Gets all arrival airports of the airplanes that have flown over based on a pilot
8427
	*
8428
	* @return Array the airport list
8429
	*
8430
	*/
8431
	public function countAllArrivalAirportsByPilot($pilot,$filters = array())
8432
	{
8433
		$filter_query = $this->getFilter($filters,true,true);
8434
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
8435
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8436
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
8437
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8438
		    ORDER BY airport_arrival_icao_count DESC";
8439
      
8440
		
8441
		$sth = $this->db->prepare($query);
8442
		$sth->execute(array(':pilot' => $pilot));
8443
		$airport_array = array();
8444
		$temp_array = array();
8445
        
8446
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8447
		{
8448
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8449
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8450
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8451
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8452
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8453
          
8454
			$airport_array[] = $temp_array;
8455
		}
8456
8457
		return $airport_array;
8458
	}
8459
	
8460
	/**
8461
	* Gets all arrival airports by country of the airplanes that have flown over based on a callsign/ident
8462
	*
8463
	* @return Array the airport list
8464
	*
8465
	*/
8466
	public function countAllArrivalAirportCountriesByIdent($ident, $filters = array())
8467
	{
8468
		$filter_query = $this->getFilter($filters,true,true);
8469
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
8470
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count, countries.iso3 AS arrival_airport_country_iso3 
8471
			FROM countries,spotter_output".$filter_query." countries.name = spotter_output.arrival_airport_country AND spotter_output.arrival_airport_country <> '' AND spotter_output.ident = :ident 
8472
			GROUP BY spotter_output.arrival_airport_country, countries.iso3
8473
			ORDER BY airport_arrival_country_count DESC";
8474
		
8475
		$sth = $this->db->prepare($query);
8476
		$sth->execute(array(':ident' => $ident));
8477
		$airport_array = array();
8478
		$temp_array = array();
8479
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8480
		{
8481
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8482
			$temp_array['arrival_airport_country_iso3'] = $row['arrival_airport_country_iso3'];
8483
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8484
			$airport_array[] = $temp_array;
8485
		}
8486
		return $airport_array;
8487
	}
8488
	
8489
	/**
8490
	* Gets all arrival airports by country of the airplanes that have flown over based on a owner
8491
	*
8492
	* @return Array the airport list
8493
	*
8494
	*/
8495
	public function countAllArrivalAirportCountriesByOwner($owner, $filters = array())
8496
	{
8497
		$filter_query = $this->getFilter($filters,true,true);
8498
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
8499
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8500
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.owner_name = :owner 
8501
                    GROUP BY spotter_output.arrival_airport_country
8502
		    ORDER BY airport_arrival_country_count DESC";
8503
8504
		$sth = $this->db->prepare($query);
8505
		$sth->execute(array(':owner' => $owner));
8506
		return $sth->fetchAll(PDO::FETCH_ASSOC);
8507
	}
8508
	
8509
	/**
8510
	* Gets all arrival airports by country of the airplanes that have flown over based on a pilot
8511
	*
8512
	* @return Array the airport list
8513
	*
8514
	*/
8515
	public function countAllArrivalAirportCountriesByPilot($pilot, $filters = array())
8516
	{
8517
		$filter_query = $this->getFilter($filters,true,true);
8518
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
8519
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8520
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
8521
                    GROUP BY spotter_output.arrival_airport_country
8522
		    ORDER BY airport_arrival_country_count DESC";
8523
8524
		$sth = $this->db->prepare($query);
8525
		$sth->execute(array(':pilot' => $pilot));
8526
		return $sth->fetchAll(PDO::FETCH_ASSOC);
8527
	}
8528
	
8529
	
8530
	
8531
	/**
8532
	* Gets all arrival airports of the airplanes that have flown over based on a country
8533
	*
8534
	* @return Array the airport list
8535
	*
8536
	*/
8537
	public function countAllArrivalAirportsByCountry($country,$filters = array())
8538
	{
8539
		$filter_query = $this->getFilter($filters,true,true);
8540
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8541
		$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 
8542
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
8543
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8544
			    ORDER BY airport_arrival_icao_count DESC";
8545
      
8546
		
8547
		$sth = $this->db->prepare($query);
8548
		$sth->execute(array(':country' => $country));
8549
      
8550
		$airport_array = array();
8551
		$temp_array = array();
8552
        
8553
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8554
		{
8555
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8556
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8557
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8558
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8559
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8560
          
8561
			$airport_array[] = $temp_array;
8562
		}
8563
8564
		return $airport_array;
8565
	}
8566
	
8567
	
8568
	/**
8569
	* Gets all arrival airports by country of the airplanes that have flown over based on a country
8570
	*
8571
	* @return Array the airport list
8572
	*
8573
	*/
8574
	public function countAllArrivalAirportCountriesByCountry($country,$filters = array())
8575
	{
8576
		global $globalDBdriver;
8577
		$filter_query = $this->getFilter($filters,true,true);
8578
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8579
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count, countries.iso3 AS arrival_airport_country_iso3 
8580
			FROM countries,spotter_output".$filter_query." countries.name = spotter_output.arrival_airport_country AND 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) 
8581
			GROUP BY spotter_output.arrival_airport_country, countries.iso3
8582
			ORDER BY airport_arrival_country_count DESC";
8583
		
8584
		$sth = $this->db->prepare($query);
8585
		$sth->execute(array(':country' => $country));
8586
		$airport_array = array();
8587
		$temp_array = array();
8588
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8589
		{
8590
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8591
			$temp_array['arrival_airport_country_iso3'] = $row['arrival_airport_country_iso3'];
8592
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8593
			$airport_array[] = $temp_array;
8594
		}
8595
		return $airport_array;
8596
	}
8597
8598
8599
8600
	/**
8601
	* Counts all airport departure countries
8602
	*
8603
	* @return Array the airport departure list
8604
	*
8605
	*/
8606
	public function countAllDepartureCountries($filters = array(),$year = '',$month = '', $day = '')
8607
	{
8608
		global $globalDBdriver;
8609
		$filter_query = $this->getFilter($filters,true,true);
8610
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count, countries.iso3 AS airport_departure_country_iso3 
8611
				FROM countries,spotter_output".$filter_query." countries.name = spotter_output.departure_airport_country AND spotter_output.departure_airport_country <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> ''";
8612
		$query_values = array();
8613
		if ($year != '') {
8614
			if ($globalDBdriver == 'mysql') {
8615
				$query .= " AND YEAR(spotter_output.date) = :year";
8616
				$query_values = array_merge($query_values,array(':year' => $year));
8617
			} else {
8618
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
8619
				$query_values = array_merge($query_values,array(':year' => $year));
8620
			}
8621
		}
8622
		if ($month != '') {
8623
			if ($globalDBdriver == 'mysql') {
8624
				$query .= " AND MONTH(spotter_output.date) = :month";
8625
				$query_values = array_merge($query_values,array(':month' => $month));
8626
			} else {
8627
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
8628
				$query_values = array_merge($query_values,array(':month' => $month));
8629
			}
8630
		}
8631
		if ($day != '') {
8632
			if ($globalDBdriver == 'mysql') {
8633
				$query .= " AND DAY(spotter_output.date) = :day";
8634
				$query_values = array_merge($query_values,array(':day' => $day));
8635
			} else {
8636
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
8637
				$query_values = array_merge($query_values,array(':day' => $day));
8638
			}
8639
		}
8640
		$query .= " GROUP BY spotter_output.departure_airport_country, countries.iso3
8641
					ORDER BY airport_departure_country_count DESC
8642
					LIMIT 10 OFFSET 0";
8643
      
8644
		
8645
		$sth = $this->db->prepare($query);
8646
		$sth->execute($query_values);
8647
      
8648
		$airport_array = array();
8649
		$temp_array = array();
8650
        
8651
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8652
		{
8653
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
8654
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
8655
          
8656
			$airport_array[] = $temp_array;
8657
		}
8658
8659
		return $airport_array;
8660
	}
8661
	
8662
	
8663
	/**
8664
	* Counts all airport arrival countries
8665
	*
8666
	* @return Array the airport arrival list
8667
	*
8668
	*/
8669
	public function countAllArrivalCountries($limit = true,$filters = array(),$year = '',$month = '',$day = '')
8670
	{
8671
		global $globalDBdriver;
8672
		$filter_query = $this->getFilter($filters,true,true);
8673
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count, countries.iso3 AS airport_arrival_country_iso3 
8674
			FROM countries, spotter_output".$filter_query." countries.name = spotter_output.arrival_airport_country AND spotter_output.arrival_airport_country <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''";
8675
		$query_values = array();
8676
		if ($year != '') {
8677
			if ($globalDBdriver == 'mysql') {
8678
				$query .= " AND YEAR(spotter_output.date) = :year";
8679
				$query_values = array_merge($query_values,array(':year' => $year));
8680
			} else {
8681
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
8682
				$query_values = array_merge($query_values,array(':year' => $year));
8683
			}
8684
		}
8685
		if ($month != '') {
8686
			if ($globalDBdriver == 'mysql') {
8687
				$query .= " AND MONTH(spotter_output.date) = :month";
8688
				$query_values = array_merge($query_values,array(':month' => $month));
8689
			} else {
8690
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
8691
				$query_values = array_merge($query_values,array(':month' => $month));
8692
			}
8693
		}
8694
		if ($day != '') {
8695
			if ($globalDBdriver == 'mysql') {
8696
				$query .= " AND DAY(spotter_output.date) = :day";
8697
				$query_values = array_merge($query_values,array(':day' => $day));
8698
			} else {
8699
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
8700
				$query_values = array_merge($query_values,array(':day' => $day));
8701
			}
8702
		}
8703
		$query .= " GROUP BY spotter_output.arrival_airport_country, countries.iso3
8704
					ORDER BY airport_arrival_country_count DESC";
8705
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
8706
      
8707
		
8708
		$sth = $this->db->prepare($query);
8709
		$sth->execute($query_values);
8710
      
8711
		$airport_array = array();
8712
		$temp_array = array();
8713
        
8714
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8715
		{
8716
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8717
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8718
			$temp_array['airport_arrival_country_iso3'] = $row['airport_arrival_country_iso3'];
8719
          
8720
			$airport_array[] = $temp_array;
8721
		}
8722
8723
		return $airport_array;
8724
	}
8725
8726
8727
8728
8729
8730
	/**
8731
	* Gets all route combinations
8732
	*
8733
	* @return Array the route list
8734
	*
8735
	*/
8736
	public function countAllRoutes($filters = array())
8737
	{
8738
		$filter_query = $this->getFilter($filters,true,true);
8739
		$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
8740
		    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 <> ''
8741
                    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
8742
                    ORDER BY route_count DESC
8743
		    LIMIT 10 OFFSET 0";
8744
      
8745
		
8746
		$sth = $this->db->prepare($query);
8747
		$sth->execute();
8748
      
8749
		$routes_array = array();
8750
		$temp_array = array();
8751
        
8752
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8753
		{
8754
			$temp_array['route_count'] = $row['route_count'];
8755
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8756
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8757
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8758
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8759
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8760
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8761
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8762
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8763
          
8764
			$routes_array[] = $temp_array;
8765
		}
8766
8767
		return $routes_array;
8768
	}
8769
	
8770
	
8771
	
8772
	
8773
	/**
8774
	* Gets all route combinations based on an aircraft
8775
	*
8776
	* @return Array the route list
8777
	*
8778
	*/
8779
	public function countAllRoutesByAircraft($aircraft_icao,$filters = array())
8780
	{
8781
		$filter_query = $this->getFilter($filters,true,true);
8782
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
8783
		$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
8784
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
8785
			    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 
8786
			    ORDER BY route_count DESC";
8787
		
8788
		$sth = $this->db->prepare($query);
8789
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
8790
      
8791
		$routes_array = array();
8792
		$temp_array = array();
8793
        
8794
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8795
		{
8796
			$temp_array['route_count'] = $row['route_count'];
8797
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8798
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8799
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8800
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8801
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8802
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8803
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8804
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8805
          
8806
			$routes_array[] = $temp_array;
8807
		}
8808
8809
		return $routes_array;
8810
	}
8811
	
8812
	
8813
	/**
8814
	* Gets all route combinations based on an aircraft registration
8815
	*
8816
	* @return Array the route list
8817
	*
8818
	*/
8819
	public function countAllRoutesByRegistration($registration, $filters = array())
8820
	{
8821
		$filter_query = $this->getFilter($filters,true,true);
8822
		$registration = filter_var($registration, FILTER_SANITIZE_STRING);
8823
		$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
8824
			FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.registration = :registration 
8825
                    GROUP BY route
8826
                    ORDER BY route_count DESC";
8827
      
8828
		
8829
		$sth = $this->db->prepare($query);
8830
		$sth->execute(array(':registration' => $registration));
8831
      
8832
		$routes_array = array();
8833
		$temp_array = array();
8834
        
8835
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8836
		{
8837
			$temp_array['route_count'] = $row['route_count'];
8838
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8839
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8840
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8841
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8842
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8843
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8844
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8845
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8846
          
8847
			$routes_array[] = $temp_array;
8848
		}
8849
8850
		return $routes_array;
8851
	}
8852
	
8853
	
8854
	
8855
	/**
8856
	* Gets all route combinations based on an airline
8857
	*
8858
	* @return Array the route list
8859
	*
8860
	*/
8861
	public function countAllRoutesByAirline($airline_icao, $filters = array())
8862
	{
8863
		$filter_query = $this->getFilter($filters,true,true);
8864
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
8865
		$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
8866
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.airline_icao = :airline_icao 
8867
			    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 
8868
			    ORDER BY route_count DESC";
8869
      
8870
		
8871
		$sth = $this->db->prepare($query);
8872
		$sth->execute(array(':airline_icao' => $airline_icao));
8873
      
8874
		$routes_array = array();
8875
		$temp_array = array();
8876
        
8877
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8878
		{
8879
			$temp_array['route_count'] = $row['route_count'];
8880
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8881
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8882
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8883
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8884
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8885
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8886
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8887
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8888
          
8889
			$routes_array[] = $temp_array;
8890
		}
8891
8892
		return $routes_array;
8893
	}
8894
	
8895
	
8896
	
8897
	/**
8898
	* Gets all route combinations based on an airport
8899
	*
8900
	* @return Array the route list
8901
	*
8902
	*/
8903
	public function countAllRoutesByAirport($airport_icao, $filters = array())
8904
	{
8905
		$filter_query = $this->getFilter($filters,true,true);
8906
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8907
		$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
8908
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
8909
			    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 
8910
			    ORDER BY route_count DESC";
8911
		
8912
		$sth = $this->db->prepare($query);
8913
		$sth->execute(array(':airport_icao' => $airport_icao));
8914
      
8915
		$routes_array = array();
8916
		$temp_array = array();
8917
        
8918
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8919
		{
8920
			$temp_array['route_count'] = $row['route_count'];
8921
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8922
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8923
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8924
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8925
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8926
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8927
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8928
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8929
          
8930
			$routes_array[] = $temp_array;
8931
		}
8932
8933
		return $routes_array;
8934
	}
8935
	
8936
	
8937
	
8938
	/**
8939
	* Gets all route combinations based on an country
8940
	*
8941
	* @return Array the route list
8942
	*
8943
	*/
8944
	public function countAllRoutesByCountry($country, $filters = array())
8945
	{
8946
		$filter_query = $this->getFilter($filters,true,true);
8947
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8948
		$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
8949
			    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 
8950
			    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 
8951
			    ORDER BY route_count DESC";
8952
		
8953
		$sth = $this->db->prepare($query);
8954
		$sth->execute(array(':country' => $country));
8955
      
8956
		$routes_array = array();
8957
		$temp_array = array();
8958
        
8959
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8960
		{
8961
			$temp_array['route_count'] = $row['route_count'];
8962
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8963
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8964
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8965
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8966
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8967
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8968
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8969
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8970
          
8971
			$routes_array[] = $temp_array;
8972
		}
8973
8974
		return $routes_array;
8975
	}
8976
8977
8978
	/**
8979
	* Gets all route combinations based on an date
8980
	*
8981
	* @return Array the route list
8982
	*
8983
	*/
8984
	public function countAllRoutesByDate($date, $filters = array())
8985
	{
8986
		global $globalTimezone, $globalDBdriver;
8987
		$filter_query = $this->getFilter($filters,true,true);
8988
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8989
		if ($globalTimezone != '') {
8990
			date_default_timezone_set($globalTimezone);
8991
			$datetime = new DateTime($date);
8992
			$offset = $datetime->format('P');
8993
		} else $offset = '+00:00';
8994
		
8995
		if ($globalDBdriver == 'mysql') {
8996
			$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
8997
				    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date  
8998
				    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
8999
				    ORDER BY route_count DESC";
9000
		} else {
9001
			$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
9002
				    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date  
9003
				    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
9004
				    ORDER BY route_count DESC";
9005
		}
9006
		
9007
		$sth = $this->db->prepare($query);
9008
		$sth->execute(array(':date' => $date, ':offset' => $offset));
9009
      
9010
		$routes_array = array();
9011
		$temp_array = array();
9012
        
9013
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9014
		{
9015
			$temp_array['route_count'] = $row['route_count'];
9016
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9017
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9018
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9019
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9020
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9021
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9022
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9023
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9024
          
9025
			$routes_array[] = $temp_array;
9026
		}
9027
9028
		return $routes_array;
9029
	}
9030
	
9031
	
9032
	/**
9033
	* Gets all route combinations based on an ident/callsign
9034
	*
9035
	* @return Array the route list
9036
	*
9037
	*/
9038
	public function countAllRoutesByIdent($ident, $filters = array())
9039
	{
9040
		$filter_query = $this->getFilter($filters,true,true);
9041
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
9042
		$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
9043
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.ident = :ident   
9044
                    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
9045
                    ORDER BY route_count DESC";
9046
      
9047
		
9048
		$sth = $this->db->prepare($query);
9049
		$sth->execute(array(':ident' => $ident));
9050
      
9051
		$routes_array = array();
9052
		$temp_array = array();
9053
        
9054
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9055
		{
9056
			$temp_array['route_count'] = $row['route_count'];
9057
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9058
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9059
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9060
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9061
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9062
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9063
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9064
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9065
          
9066
			$routes_array[] = $temp_array;
9067
		}
9068
9069
		return $routes_array;
9070
	}
9071
	
9072
	/**
9073
	* Gets all route combinations based on an owner
9074
	*
9075
	* @return Array the route list
9076
	*
9077
	*/
9078
	public function countAllRoutesByOwner($owner,$filters = array())
9079
	{
9080
		$filter_query = $this->getFilter($filters,true,true);
9081
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
9082
		$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
9083
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.owner_name = :owner 
9084
                    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
9085
                    ORDER BY route_count DESC";
9086
      
9087
		
9088
		$sth = $this->db->prepare($query);
9089
		$sth->execute(array(':owner' => $owner));
9090
      
9091
		$routes_array = array();
9092
		$temp_array = array();
9093
        
9094
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9095
		{
9096
			$temp_array['route_count'] = $row['route_count'];
9097
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9098
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9099
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9100
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9101
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9102
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9103
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9104
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9105
          
9106
			$routes_array[] = $temp_array;
9107
		}
9108
9109
		return $routes_array;
9110
	}
9111
	
9112
	/**
9113
	* Gets all route combinations based on a pilot
9114
	*
9115
	* @return Array the route list
9116
	*
9117
	*/
9118
	public function countAllRoutesByPilot($pilot,$filters = array())
9119
	{
9120
		$filter_query = $this->getFilter($filters,true,true);
9121
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
9122
		$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
9123
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
9124
                    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
9125
                    ORDER BY route_count DESC";
9126
      
9127
		
9128
		$sth = $this->db->prepare($query);
9129
		$sth->execute(array(':pilot' => $pilot));
9130
      
9131
		$routes_array = array();
9132
		$temp_array = array();
9133
        
9134
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9135
		{
9136
			$temp_array['route_count'] = $row['route_count'];
9137
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9138
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9139
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9140
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9141
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9142
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9143
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9144
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9145
          
9146
			$routes_array[] = $temp_array;
9147
		}
9148
9149
		return $routes_array;
9150
	}
9151
	
9152
	
9153
	/**
9154
	* Gets all route combinations based on an manufacturer
9155
	*
9156
	* @return Array the route list
9157
	*
9158
	*/
9159
	public function countAllRoutesByManufacturer($aircraft_manufacturer, $filters = array())
9160
	{
9161
		$filter_query = $this->getFilter($filters,true,true);
9162
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
9163
		$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
9164
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
9165
                    GROUP BY route
9166
                    ORDER BY route_count DESC";
9167
      
9168
		
9169
		$sth = $this->db->prepare($query);
9170
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
9171
      
9172
		$routes_array = array();
9173
		$temp_array = array();
9174
        
9175
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9176
		{
9177
			$temp_array['route_count'] = $row['route_count'];
9178
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9179
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9180
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9181
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9182
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9183
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9184
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9185
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9186
          
9187
			$routes_array[] = $temp_array;
9188
		}
9189
9190
		return $routes_array;
9191
	}
9192
9193
	
9194
	
9195
	/**
9196
	* Gets all route combinations with waypoints
9197
	*
9198
	* @return Array the route list
9199
	*
9200
	*/
9201
	public function countAllRoutesWithWaypoints($filters = array())
9202
	{
9203
		$filter_query = $this->getFilter($filters,true,true);
9204
		$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
9205
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.waypoints <> '' 
9206
                    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
9207
                    ORDER BY route_count DESC
9208
		    LIMIT 10 OFFSET 0";
9209
      
9210
		
9211
		$sth = $this->db->prepare($query);
9212
		$sth->execute();
9213
      
9214
		$routes_array = array();
9215
		$temp_array = array();
9216
        
9217
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9218
		{
9219
			$temp_array['spotter_id'] = $row['spotter_id'];
9220
			$temp_array['route_count'] = $row['route_count'];
9221
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
9222
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
9223
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
9224
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
9225
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
9226
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
9227
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
9228
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
9229
          
9230
			$routes_array[] = $temp_array;
9231
		}
9232
9233
		return $routes_array;
9234
	}
9235
	
9236
	/**
9237
	* Gets all callsigns that have flown over
9238
	*
9239
	* @return Array the callsign list
9240
	*
9241
	*/
9242
	public function countAllCallsigns($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '', $month = '', $day = '')
9243
	{
9244
		global $globalDBdriver;
9245
		$filter_query = $this->getFilter($filters,true,true);
9246
		$query  = "SELECT DISTINCT spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name, spotter_output.airline_icao  
9247
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''";
9248
		 if ($olderthanmonths > 0) {
9249
			if ($globalDBdriver == 'mysql') $query .= ' AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH)';
9250
			else $query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
9251
		}
9252
		if ($sincedate != '') {
9253
			if ($globalDBdriver == 'mysql') $query .= " AND spotter_output.date > '".$sincedate."'";
9254
			else $query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
9255
		}
9256
		$query_values = array();
9257
		if ($year != '') {
9258
			if ($globalDBdriver == 'mysql') {
9259
				$query .= " AND YEAR(spotter_output.date) = :year";
9260
				$query_values = array_merge($query_values,array(':year' => $year));
9261
			} else {
9262
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
9263
				$query_values = array_merge($query_values,array(':year' => $year));
9264
			}
9265
		}
9266
		if ($month != '') {
9267
			if ($globalDBdriver == 'mysql') {
9268
				$query .= " AND MONTH(spotter_output.date) = :month";
9269
				$query_values = array_merge($query_values,array(':month' => $month));
9270
			} else {
9271
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
9272
				$query_values = array_merge($query_values,array(':month' => $month));
9273
			}
9274
		}
9275
		if ($day != '') {
9276
			if ($globalDBdriver == 'mysql') {
9277
				$query .= " AND DAY(spotter_output.date) = :day";
9278
				$query_values = array_merge($query_values,array(':day' => $day));
9279
			} else {
9280
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
9281
				$query_values = array_merge($query_values,array(':day' => $day));
9282
			}
9283
		}
9284
		$query .= " GROUP BY spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
9285
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
9286
      		
9287
		$sth = $this->db->prepare($query);
9288
		$sth->execute($query_values);
9289
      
9290
		$callsign_array = array();
9291
		$temp_array = array();
9292
        
9293
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9294
		{
9295
			$temp_array['callsign_icao'] = $row['ident'];
9296
			$temp_array['airline_name'] = $row['airline_name'];
9297
			$temp_array['airline_icao'] = $row['airline_icao'];
9298
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
9299
          
9300
			$callsign_array[] = $temp_array;
9301
		}
9302
9303
		return $callsign_array;
9304
	}
9305
9306
	/**
9307
	* Gets all callsigns that have flown over
9308
	*
9309
	* @return Array the callsign list
9310
	*
9311
	*/
9312
	public function countAllCallsignsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $filters = array())
9313
	{
9314
		global $globalDBdriver;
9315
		$filter_query = $this->getFilter($filters,true,true);
9316
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name  
9317
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''  AND spotter_output.airline_icao <> '' ";
9318
		 if ($olderthanmonths > 0) {
9319
			if ($globalDBdriver == 'mysql') $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
9320
			else $query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
9321
		}
9322
		if ($sincedate != '') {
9323
			if ($globalDBdriver == 'mysql') $query .= "AND spotter_output.date > '".$sincedate."' ";
9324
			else $query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
9325
		}
9326
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
9327
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
9328
      		
9329
		$sth = $this->db->prepare($query);
9330
		$sth->execute();
9331
      
9332
		$callsign_array = array();
9333
		$temp_array = array();
9334
        
9335
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9336
		{
9337
			$temp_array['callsign_icao'] = $row['ident'];
9338
			$temp_array['airline_name'] = $row['airline_name'];
9339
			$temp_array['airline_icao'] = $row['airline_icao'];
9340
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
9341
          
9342
			$callsign_array[] = $temp_array;
9343
		}
9344
9345
		return $callsign_array;
9346
	}
9347
9348
9349
9350
9351
	/**
9352
	* Counts all dates
9353
	*
9354
	* @return Array the date list
9355
	*
9356
	*/
9357
	public function countAllDates($filters = array())
9358
	{
9359
		global $globalTimezone, $globalDBdriver;
9360
		if ($globalTimezone != '') {
9361
			date_default_timezone_set($globalTimezone);
9362
			$datetime = new DateTime();
9363
			$offset = $datetime->format('P');
9364
		} else $offset = '+00:00';
9365
9366
		if ($globalDBdriver == 'mysql') {
9367
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9368
								FROM spotter_output";
9369
			$query .= $this->getFilter($filters);
9370
			$query .= " GROUP BY date_name 
9371
								ORDER BY date_count DESC
9372
								LIMIT 10 OFFSET 0";
9373
		} else {
9374
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9375
								FROM spotter_output";
9376
			$query .= $this->getFilter($filters);
9377
			$query .= " GROUP BY date_name 
9378
								ORDER BY date_count DESC
9379
								LIMIT 10 OFFSET 0";
9380
		}
9381
      
9382
		
9383
		$sth = $this->db->prepare($query);
9384
		$sth->execute(array(':offset' => $offset));
9385
      
9386
		$date_array = array();
9387
		$temp_array = array();
9388
        
9389
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9390
		{
9391
			$temp_array['date_name'] = $row['date_name'];
9392
			$temp_array['date_count'] = $row['date_count'];
9393
9394
			$date_array[] = $temp_array;
9395
		}
9396
9397
		return $date_array;
9398
	}
9399
	
9400
	/**
9401
	* Counts all dates
9402
	*
9403
	* @return Array the date list
9404
	*
9405
	*/
9406
	public function countAllDatesByAirlines($filters = array())
9407
	{
9408
		global $globalTimezone, $globalDBdriver;
9409
		if ($globalTimezone != '') {
9410
			date_default_timezone_set($globalTimezone);
9411
			$datetime = new DateTime();
9412
			$offset = $datetime->format('P');
9413
		} else $offset = '+00:00';
9414
		$filter_query = $this->getFilter($filters,true,true);
9415
		if ($globalDBdriver == 'mysql') {
9416
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9417
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9418
								GROUP BY spotter_output.airline_icao, date_name 
9419
								ORDER BY date_count DESC
9420
								LIMIT 10 OFFSET 0";
9421
		} else {
9422
			$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
9423
								FROM spotter_output 
9424
								WHERE spotter_output.airline_icao <> '' 
9425
								GROUP BY spotter_output.airline_icao, date_name 
9426
								ORDER BY date_count DESC
9427
								LIMIT 10 OFFSET 0";
9428
		}
9429
      
9430
		
9431
		$sth = $this->db->prepare($query);
9432
		$sth->execute(array(':offset' => $offset));
9433
      
9434
		$date_array = array();
9435
		$temp_array = array();
9436
        
9437
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9438
		{
9439
			$temp_array['date_name'] = $row['date_name'];
9440
			$temp_array['date_count'] = $row['date_count'];
9441
			$temp_array['airline_icao'] = $row['airline_icao'];
9442
9443
			$date_array[] = $temp_array;
9444
		}
9445
9446
		return $date_array;
9447
	}	
9448
	
9449
	/**
9450
	* Counts all dates during the last 7 days
9451
	*
9452
	* @return Array the date list
9453
	*
9454
	*/
9455
	public function countAllDatesLast7Days($filters = array())
9456
	{
9457
		global $globalTimezone, $globalDBdriver;
9458
		if ($globalTimezone != '') {
9459
			date_default_timezone_set($globalTimezone);
9460
			$datetime = new DateTime();
9461
			$offset = $datetime->format('P');
9462
		} else $offset = '+00:00';
9463
		$filter_query = $this->getFilter($filters,true,true);
9464
		if ($globalDBdriver == 'mysql') {
9465
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9466
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY)";
9467
			$query .= " GROUP BY date_name 
9468
								ORDER BY spotter_output.date ASC";
9469
			$query_data = array(':offset' => $offset);
9470
		} else {
9471
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9472
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '7 DAYS'";
9473
			$query .= " GROUP BY date_name 
9474
								ORDER BY date_name ASC";
9475
			$query_data = array(':offset' => $offset);
9476
    		}
9477
		
9478
		$sth = $this->db->prepare($query);
9479
		$sth->execute($query_data);
9480
      
9481
		$date_array = array();
9482
		$temp_array = array();
9483
        
9484
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9485
		{
9486
			$temp_array['date_name'] = $row['date_name'];
9487
			$temp_array['date_count'] = $row['date_count'];
9488
          
9489
			$date_array[] = $temp_array;
9490
		}
9491
9492
		return $date_array;
9493
	}
9494
9495
	/**
9496
	* Counts all dates during the last month
9497
	*
9498
	* @return Array the date list
9499
	*
9500
	*/
9501
	public function countAllDatesLastMonth($filters = array())
9502
	{
9503
		global $globalTimezone, $globalDBdriver;
9504
		if ($globalTimezone != '') {
9505
			date_default_timezone_set($globalTimezone);
9506
			$datetime = new DateTime();
9507
			$offset = $datetime->format('P');
9508
		} else $offset = '+00:00';
9509
		$filter_query = $this->getFilter($filters,true,true);
9510
		if ($globalDBdriver == 'mysql') {
9511
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9512
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)";
9513
			$query .= " GROUP BY date_name 
9514
								ORDER BY spotter_output.date ASC";
9515
			$query_data = array(':offset' => $offset);
9516
		} else {
9517
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9518
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'";
9519
			$query .= " GROUP BY date_name 
9520
								ORDER BY date_name ASC";
9521
			$query_data = array(':offset' => $offset);
9522
    		}
9523
		
9524
		$sth = $this->db->prepare($query);
9525
		$sth->execute($query_data);
9526
      
9527
		$date_array = array();
9528
		$temp_array = array();
9529
        
9530
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9531
		{
9532
			$temp_array['date_name'] = $row['date_name'];
9533
			$temp_array['date_count'] = $row['date_count'];
9534
          
9535
			$date_array[] = $temp_array;
9536
		}
9537
9538
		return $date_array;
9539
	}
9540
9541
9542
	/**
9543
	* Counts all dates during the last month
9544
	*
9545
	* @return Array the date list
9546
	*
9547
	*/
9548
	public function countAllDatesLastMonthByAirlines($filters = array())
9549
	{
9550
		global $globalTimezone, $globalDBdriver;
9551
		$filter_query = $this->getFilter($filters,true,true);
9552
		if ($globalTimezone != '') {
9553
			date_default_timezone_set($globalTimezone);
9554
			$datetime = new DateTime();
9555
			$offset = $datetime->format('P');
9556
		} else $offset = '+00:00';
9557
		
9558
		if ($globalDBdriver == 'mysql') {
9559
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9560
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)
9561
								GROUP BY spotter_output.airline_icao, date_name 
9562
								ORDER BY spotter_output.date ASC";
9563
			$query_data = array(':offset' => $offset);
9564
		} else {
9565
			$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
9566
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'
9567
								GROUP BY spotter_output.airline_icao, date_name 
9568
								ORDER BY date_name ASC";
9569
			$query_data = array(':offset' => $offset);
9570
    		}
9571
		
9572
		$sth = $this->db->prepare($query);
9573
		$sth->execute($query_data);
9574
      
9575
		$date_array = array();
9576
		$temp_array = array();
9577
        
9578
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9579
		{
9580
			$temp_array['date_name'] = $row['date_name'];
9581
			$temp_array['date_count'] = $row['date_count'];
9582
			$temp_array['airline_icao'] = $row['airline_icao'];
9583
          
9584
			$date_array[] = $temp_array;
9585
		}
9586
9587
		return $date_array;
9588
	}
9589
	
9590
9591
	/**
9592
	* Counts all month
9593
	*
9594
	* @return Array the month list
9595
	*
9596
	*/
9597
	public function countAllMonths($filters = array())
9598
	{
9599
		global $globalTimezone, $globalDBdriver;
9600
		if ($globalTimezone != '') {
9601
			date_default_timezone_set($globalTimezone);
9602
			$datetime = new DateTime();
9603
			$offset = $datetime->format('P');
9604
		} else $offset = '+00:00';
9605
9606
		if ($globalDBdriver == 'mysql') {
9607
			$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
9608
								FROM spotter_output";
9609
			$query .= $this->getFilter($filters);
9610
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
9611
		} else {
9612
			$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
9613
								FROM spotter_output";
9614
			$query .= $this->getFilter($filters);
9615
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
9616
		}
9617
      
9618
		
9619
		$sth = $this->db->prepare($query);
9620
		$sth->execute(array(':offset' => $offset));
9621
      
9622
		$date_array = array();
9623
		$temp_array = array();
9624
        
9625
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9626
		{
9627
			$temp_array['month_name'] = $row['month_name'];
9628
			$temp_array['year_name'] = $row['year_name'];
9629
			$temp_array['date_count'] = $row['date_count'];
9630
9631
			$date_array[] = $temp_array;
9632
		}
9633
9634
		return $date_array;
9635
	}
9636
9637
	/**
9638
	* Counts all month
9639
	*
9640
	* @return Array the month list
9641
	*
9642
	*/
9643
	public function countAllMonthsByAirlines($filters = array())
9644
	{
9645
		global $globalTimezone, $globalDBdriver;
9646
		$filter_query = $this->getFilter($filters,true,true);
9647
		if ($globalTimezone != '') {
9648
			date_default_timezone_set($globalTimezone);
9649
			$datetime = new DateTime();
9650
			$offset = $datetime->format('P');
9651
		} else $offset = '+00:00';
9652
9653
		if ($globalDBdriver == 'mysql') {
9654
			$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
9655
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9656
								GROUP BY spotter_output.airline_icao, year_name, month_name 
9657
								ORDER BY date_count DESC";
9658
		} else {
9659
			$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
9660
								FROM spotter_output 
9661
								WHERE spotter_output.airline_icao <> '' 
9662
								GROUP BY spotter_output.airline_icao, year_name, month_name 
9663
								ORDER BY date_count DESC";
9664
		}
9665
      
9666
		
9667
		$sth = $this->db->prepare($query);
9668
		$sth->execute(array(':offset' => $offset));
9669
      
9670
		$date_array = array();
9671
		$temp_array = array();
9672
        
9673
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9674
		{
9675
			$temp_array['month_name'] = $row['month_name'];
9676
			$temp_array['year_name'] = $row['year_name'];
9677
			$temp_array['date_count'] = $row['date_count'];
9678
			$temp_array['airline_icao'] = $row['airline_icao'];
9679
9680
			$date_array[] = $temp_array;
9681
		}
9682
9683
		return $date_array;
9684
	}
9685
9686
	/**
9687
	* Counts all military month
9688
	*
9689
	* @return Array the month list
9690
	*
9691
	*/
9692
	public function countAllMilitaryMonths($filters = array())
9693
	{
9694
		global $globalTimezone, $globalDBdriver;
9695
		if ($globalTimezone != '') {
9696
			date_default_timezone_set($globalTimezone);
9697
			$datetime = new DateTime();
9698
			$offset = $datetime->format('P');
9699
		} else $offset = '+00:00';
9700
		$filter_query = $this->getFilter($filters,true,true);
9701
		if ($globalDBdriver == 'mysql') {
9702
			$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
9703
								FROM spotter_output".$filter_query." spotter_output.airline_type = 'military'
9704
								GROUP BY year_name, month_name 
9705
								ORDER BY date_count DESC";
9706
		} else {
9707
			$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
9708
								FROM spotter_output".$filter_query." spotter_output.airline_type = 'military'
9709
								GROUP BY year_name, month_name 
9710
								ORDER BY date_count DESC";
9711
		}
9712
		
9713
		$sth = $this->db->prepare($query);
9714
		$sth->execute(array(':offset' => $offset));
9715
      
9716
		$date_array = array();
9717
		$temp_array = array();
9718
        
9719
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9720
		{
9721
			$temp_array['month_name'] = $row['month_name'];
9722
			$temp_array['year_name'] = $row['year_name'];
9723
			$temp_array['date_count'] = $row['date_count'];
9724
9725
			$date_array[] = $temp_array;
9726
		}
9727
9728
		return $date_array;
9729
	}
9730
	
9731
	/**
9732
	* Counts all month owners
9733
	*
9734
	* @return Array the month list
9735
	*
9736
	*/
9737
	public function countAllMonthsOwners($filters = array())
9738
	{
9739
		global $globalTimezone, $globalDBdriver;
9740
		if ($globalTimezone != '') {
9741
			date_default_timezone_set($globalTimezone);
9742
			$datetime = new DateTime();
9743
			$offset = $datetime->format('P');
9744
		} else $offset = '+00:00';
9745
		$filter_query = $this->getFilter($filters,true,true);
9746
9747
		if ($globalDBdriver == 'mysql') {
9748
			$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
9749
								FROM spotter_output".$filter_query." owner_name <> ''
9750
								GROUP BY year_name, month_name
9751
								ORDER BY date_count DESC";
9752
		} else {
9753
			$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
9754
								FROM spotter_output".$filter_query." owner_name <> ''
9755
								GROUP BY year_name, month_name
9756
								ORDER BY date_count DESC";
9757
		}
9758
		
9759
		$sth = $this->db->prepare($query);
9760
		$sth->execute(array(':offset' => $offset));
9761
      
9762
		$date_array = array();
9763
		$temp_array = array();
9764
        
9765
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9766
		{
9767
			$temp_array['month_name'] = $row['month_name'];
9768
			$temp_array['year_name'] = $row['year_name'];
9769
			$temp_array['date_count'] = $row['date_count'];
9770
9771
			$date_array[] = $temp_array;
9772
		}
9773
9774
		return $date_array;
9775
	}
9776
	
9777
	/**
9778
	* Counts all month owners
9779
	*
9780
	* @return Array the month list
9781
	*
9782
	*/
9783
	public function countAllMonthsOwnersByAirlines($filters = array())
9784
	{
9785
		global $globalTimezone, $globalDBdriver;
9786
		$filter_query = $this->getFilter($filters,true,true);
9787
		if ($globalTimezone != '') {
9788
			date_default_timezone_set($globalTimezone);
9789
			$datetime = new DateTime();
9790
			$offset = $datetime->format('P');
9791
		} else $offset = '+00:00';
9792
9793
		if ($globalDBdriver == 'mysql') {
9794
			$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
9795
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
9796
								GROUP BY spotter_output.airline_icao, year_name, month_name
9797
								ORDER BY date_count DESC";
9798
		} else {
9799
			$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
9800
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
9801
								GROUP BY spotter_output.airline_icao, year_name, month_name
9802
								ORDER BY date_count DESC";
9803
		}
9804
		
9805
		$sth = $this->db->prepare($query);
9806
		$sth->execute(array(':offset' => $offset));
9807
      
9808
		$date_array = array();
9809
		$temp_array = array();
9810
        
9811
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9812
		{
9813
			$temp_array['month_name'] = $row['month_name'];
9814
			$temp_array['year_name'] = $row['year_name'];
9815
			$temp_array['date_count'] = $row['date_count'];
9816
			$temp_array['airline_icao'] = $row['airline_icao'];
9817
9818
			$date_array[] = $temp_array;
9819
		}
9820
9821
		return $date_array;
9822
	}
9823
9824
	/**
9825
	* Counts all month pilot
9826
	*
9827
	* @return Array the month list
9828
	*
9829
	*/
9830
	public function countAllMonthsPilots($filters = array())
9831
	{
9832
		global $globalTimezone, $globalDBdriver;
9833
		if ($globalTimezone != '') {
9834
			date_default_timezone_set($globalTimezone);
9835
			$datetime = new DateTime();
9836
			$offset = $datetime->format('P');
9837
		} else $offset = '+00:00';
9838
		$filter_query = $this->getFilter($filters,true,true);
9839
9840
		if ($globalDBdriver == 'mysql') {
9841
			$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
9842
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
9843
								GROUP BY year_name, month_name
9844
								ORDER BY date_count DESC";
9845
		} else {
9846
			$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
9847
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
9848
								GROUP BY year_name, month_name
9849
								ORDER BY date_count DESC";
9850
		}
9851
		
9852
		$sth = $this->db->prepare($query);
9853
		$sth->execute(array(':offset' => $offset));
9854
      
9855
		$date_array = array();
9856
		$temp_array = array();
9857
        
9858
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9859
		{
9860
			$temp_array['month_name'] = $row['month_name'];
9861
			$temp_array['year_name'] = $row['year_name'];
9862
			$temp_array['date_count'] = $row['date_count'];
9863
9864
			$date_array[] = $temp_array;
9865
		}
9866
9867
		return $date_array;
9868
	}
9869
	
9870
	/**
9871
	* Counts all month pilot
9872
	*
9873
	* @return Array the month list
9874
	*
9875
	*/
9876
	public function countAllMonthsPilotsByAirlines($filters = array())
9877
	{
9878
		global $globalTimezone, $globalDBdriver;
9879
		$filter_query = $this->getFilter($filters,true,true);
9880
		if ($globalTimezone != '') {
9881
			date_default_timezone_set($globalTimezone);
9882
			$datetime = new DateTime();
9883
			$offset = $datetime->format('P');
9884
		} else $offset = '+00:00';
9885
9886
		if ($globalDBdriver == 'mysql') {
9887
			$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
9888
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
9889
								GROUP BY spotter_output.airline_icao,year_name, month_name
9890
								ORDER BY date_count DESC";
9891
		} else {
9892
			$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
9893
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
9894
								GROUP BY spotter_output.airline_icao, year_name, month_name
9895
								ORDER BY date_count DESC";
9896
		}
9897
		
9898
		$sth = $this->db->prepare($query);
9899
		$sth->execute(array(':offset' => $offset));
9900
      
9901
		$date_array = array();
9902
		$temp_array = array();
9903
        
9904
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9905
		{
9906
			$temp_array['month_name'] = $row['month_name'];
9907
			$temp_array['year_name'] = $row['year_name'];
9908
			$temp_array['date_count'] = $row['date_count'];
9909
			$temp_array['airline_icao'] = $row['airline_icao'];
9910
9911
			$date_array[] = $temp_array;
9912
		}
9913
9914
		return $date_array;
9915
	}
9916
9917
	/**
9918
	* Counts all month airline
9919
	*
9920
	* @return Array the month list
9921
	*
9922
	*/
9923
	public function countAllMonthsAirlines($filters = array())
9924
	{
9925
		global $globalTimezone, $globalDBdriver;
9926
		$filter_query = $this->getFilter($filters,true,true);
9927
		if ($globalTimezone != '') {
9928
			date_default_timezone_set($globalTimezone);
9929
			$datetime = new DateTime();
9930
			$offset = $datetime->format('P');
9931
		} else $offset = '+00:00';
9932
9933
		if ($globalDBdriver == 'mysql') {
9934
			$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
9935
								FROM spotter_output".$filter_query." airline_icao <> '' 
9936
								GROUP BY year_name, month_name
9937
								ORDER BY date_count DESC";
9938
		} else {
9939
			$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
9940
								FROM spotter_output".$filter_query." airline_icao <> '' 
9941
								GROUP BY year_name, month_name
9942
								ORDER BY date_count DESC";
9943
		}
9944
		
9945
		$sth = $this->db->prepare($query);
9946
		$sth->execute(array(':offset' => $offset));
9947
      
9948
		$date_array = array();
9949
		$temp_array = array();
9950
        
9951
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9952
		{
9953
			$temp_array['month_name'] = $row['month_name'];
9954
			$temp_array['year_name'] = $row['year_name'];
9955
			$temp_array['date_count'] = $row['date_count'];
9956
9957
			$date_array[] = $temp_array;
9958
		}
9959
9960
		return $date_array;
9961
	}
9962
	
9963
	/**
9964
	* Counts all month aircraft
9965
	*
9966
	* @return Array the month list
9967
	*
9968
	*/
9969
	public function countAllMonthsAircrafts($filters = array())
9970
	{
9971
		global $globalTimezone, $globalDBdriver;
9972
		if ($globalTimezone != '') {
9973
			date_default_timezone_set($globalTimezone);
9974
			$datetime = new DateTime();
9975
			$offset = $datetime->format('P');
9976
		} else $offset = '+00:00';
9977
		$filter_query = $this->getFilter($filters,true,true);
9978
9979
		if ($globalDBdriver == 'mysql') {
9980
			$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
9981
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
9982
								GROUP BY year_name, month_name
9983
								ORDER BY date_count DESC";
9984
		} else {
9985
			$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
9986
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
9987
								GROUP BY year_name, month_name
9988
								ORDER BY date_count DESC";
9989
		}
9990
		
9991
		$sth = $this->db->prepare($query);
9992
		$sth->execute(array(':offset' => $offset));
9993
      
9994
		$date_array = array();
9995
		$temp_array = array();
9996
        
9997
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9998
		{
9999
			$temp_array['month_name'] = $row['month_name'];
10000
			$temp_array['year_name'] = $row['year_name'];
10001
			$temp_array['date_count'] = $row['date_count'];
10002
10003
			$date_array[] = $temp_array;
10004
		}
10005
10006
		return $date_array;
10007
	}
10008
	
10009
10010
	/**
10011
	* Counts all month aircraft
10012
	*
10013
	* @return Array the month list
10014
	*
10015
	*/
10016
	public function countAllMonthsAircraftsByAirlines($filters = array())
10017
	{
10018
		global $globalTimezone, $globalDBdriver;
10019
		$filter_query = $this->getFilter($filters,true,true);
10020
		if ($globalTimezone != '') {
10021
			date_default_timezone_set($globalTimezone);
10022
			$datetime = new DateTime();
10023
			$offset = $datetime->format('P');
10024
		} else $offset = '+00:00';
10025
10026
		if ($globalDBdriver == 'mysql') {
10027
			$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
10028
								FROM spotter_output".$filter_query." aircraft_icao <> ''  AND spotter_output.airline_icao <> '' 
10029
								GROUP BY spotter_output.airline_icao, year_name, month_name
10030
								ORDER BY date_count DESC";
10031
		} else {
10032
			$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
10033
								FROM spotter_output".$filter_query." aircraft_icao <> '' AND spotter_output.airline_icao <> '' 
10034
								GROUP BY spotter_output.airline_icao, year_name, month_name
10035
								ORDER BY date_count DESC";
10036
		}
10037
		
10038
		$sth = $this->db->prepare($query);
10039
		$sth->execute(array(':offset' => $offset));
10040
      
10041
		$date_array = array();
10042
		$temp_array = array();
10043
        
10044
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10045
		{
10046
			$temp_array['month_name'] = $row['month_name'];
10047
			$temp_array['year_name'] = $row['year_name'];
10048
			$temp_array['date_count'] = $row['date_count'];
10049
			$temp_array['airline_icao'] = $row['airline_icao'];
10050
10051
			$date_array[] = $temp_array;
10052
		}
10053
10054
		return $date_array;
10055
	}
10056
10057
	/**
10058
	* Counts all month real arrival
10059
	*
10060
	* @return Array the month list
10061
	*
10062
	*/
10063
	public function countAllMonthsRealArrivals($filters = array())
10064
	{
10065
		global $globalTimezone, $globalDBdriver;
10066
		if ($globalTimezone != '') {
10067
			date_default_timezone_set($globalTimezone);
10068
			$datetime = new DateTime();
10069
			$offset = $datetime->format('P');
10070
		} else $offset = '+00:00';
10071
		$filter_query = $this->getFilter($filters,true,true);
10072
10073
		if ($globalDBdriver == 'mysql') {
10074
			$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
10075
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
10076
								GROUP BY year_name, month_name
10077
								ORDER BY date_count DESC";
10078
		} else {
10079
			$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
10080
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
10081
								GROUP BY year_name, month_name
10082
								ORDER BY date_count DESC";
10083
		}
10084
		
10085
		$sth = $this->db->prepare($query);
10086
		$sth->execute(array(':offset' => $offset));
10087
      
10088
		$date_array = array();
10089
		$temp_array = array();
10090
        
10091
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10092
		{
10093
			$temp_array['month_name'] = $row['month_name'];
10094
			$temp_array['year_name'] = $row['year_name'];
10095
			$temp_array['date_count'] = $row['date_count'];
10096
10097
			$date_array[] = $temp_array;
10098
		}
10099
10100
		return $date_array;
10101
	}
10102
	
10103
10104
	/**
10105
	* Counts all month real arrival
10106
	*
10107
	* @return Array the month list
10108
	*
10109
	*/
10110
	public function countAllMonthsRealArrivalsByAirlines($filters = array())
10111
	{
10112
		global $globalTimezone, $globalDBdriver;
10113
		$filter_query = $this->getFilter($filters,true,true);
10114
		if ($globalTimezone != '') {
10115
			date_default_timezone_set($globalTimezone);
10116
			$datetime = new DateTime();
10117
			$offset = $datetime->format('P');
10118
		} else $offset = '+00:00';
10119
10120
		if ($globalDBdriver == 'mysql') {
10121
			$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
10122
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
10123
								GROUP BY spotter_output.airline_icao, year_name, month_name
10124
								ORDER BY date_count DESC";
10125
		} else {
10126
			$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
10127
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
10128
								GROUP BY spotter_output.airline_icao, year_name, month_name
10129
								ORDER BY date_count DESC";
10130
		}
10131
		
10132
		$sth = $this->db->prepare($query);
10133
		$sth->execute(array(':offset' => $offset));
10134
      
10135
		$date_array = array();
10136
		$temp_array = array();
10137
        
10138
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10139
		{
10140
			$temp_array['month_name'] = $row['month_name'];
10141
			$temp_array['year_name'] = $row['year_name'];
10142
			$temp_array['date_count'] = $row['date_count'];
10143
			$temp_array['airline_icao'] = $row['airline_icao'];
10144
10145
			$date_array[] = $temp_array;
10146
		}
10147
10148
		return $date_array;
10149
	}
10150
	
10151
10152
	/**
10153
	* Counts all dates during the last year
10154
	*
10155
	* @return Array the date list
10156
	*
10157
	*/
10158
	public function countAllMonthsLastYear($filters)
10159
	{
10160
		global $globalTimezone, $globalDBdriver;
10161
		if ($globalTimezone != '') {
10162
			date_default_timezone_set($globalTimezone);
10163
			$datetime = new DateTime();
10164
			$offset = $datetime->format('P');
10165
		} else $offset = '+00:00';
10166
		$filter_query = $this->getFilter($filters,true,true);
10167
		if ($globalDBdriver == 'mysql') {
10168
			$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
10169
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 YEAR)";
10170
			$query .= " GROUP BY year_name, month_name
10171
								ORDER BY year_name, month_name ASC";
10172
			$query_data = array(':offset' => $offset);
10173
		} else {
10174
			$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
10175
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 YEARS'";
10176
			$query .= " GROUP BY year_name, month_name
10177
								ORDER BY year_name, month_name ASC";
10178
			$query_data = array(':offset' => $offset);
10179
    		}
10180
		
10181
		$sth = $this->db->prepare($query);
10182
		$sth->execute($query_data);
10183
      
10184
		$date_array = array();
10185
		$temp_array = array();
10186
        
10187
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10188
		{
10189
			$temp_array['year_name'] = $row['year_name'];
10190
			$temp_array['month_name'] = $row['month_name'];
10191
			$temp_array['date_count'] = $row['date_count'];
10192
          
10193
			$date_array[] = $temp_array;
10194
		}
10195
10196
		return $date_array;
10197
	}
10198
	
10199
	
10200
	
10201
	/**
10202
	* Counts all hours
10203
	*
10204
	* @return Array the hour list
10205
	*
10206
	*/
10207
	public function countAllHours($orderby,$filters = array())
10208
	{
10209
		global $globalTimezone, $globalDBdriver;
10210
		if ($globalTimezone != '') {
10211
			date_default_timezone_set($globalTimezone);
10212
			$datetime = new DateTime();
10213
			$offset = $datetime->format('P');
10214
		} else $offset = '+00:00';
10215
10216
		$orderby_sql = '';
10217
		if ($orderby == "hour")
10218
		{
10219
			$orderby_sql = "ORDER BY hour_name ASC";
10220
		}
10221
		if ($orderby == "count")
10222
		{
10223
			$orderby_sql = "ORDER BY hour_count DESC";
10224
		}
10225
		
10226
		if ($globalDBdriver == 'mysql') {
10227
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10228
								FROM spotter_output";
10229
			$query .= $this->getFilter($filters);
10230
			$query .= " GROUP BY hour_name 
10231
								".$orderby_sql;
10232
10233
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
10234
								FROM spotter_output 
10235
								GROUP BY hour_name 
10236
								".$orderby_sql."
10237
								LIMIT 10 OFFSET 00";
10238
  */    
10239
		$query_data = array(':offset' => $offset);
10240
		} else {
10241
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10242
								FROM spotter_output";
10243
			$query .= $this->getFilter($filters);
10244
			$query .= " GROUP BY hour_name 
10245
								".$orderby_sql;
10246
			$query_data = array(':offset' => $offset);
10247
		}
10248
		
10249
		$sth = $this->db->prepare($query);
10250
		$sth->execute($query_data);
10251
      
10252
		$hour_array = array();
10253
		$temp_array = array();
10254
        
10255
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10256
		{
10257
			$temp_array['hour_name'] = $row['hour_name'];
10258
			$temp_array['hour_count'] = $row['hour_count'];
10259
          
10260
			$hour_array[] = $temp_array;
10261
		}
10262
10263
		return $hour_array;
10264
	}
10265
	
10266
	/**
10267
	* Counts all hours
10268
	*
10269
	* @return Array the hour list
10270
	*
10271
	*/
10272
	public function countAllHoursByAirlines($orderby, $filters = array())
10273
	{
10274
		global $globalTimezone, $globalDBdriver;
10275
		$filter_query = $this->getFilter($filters,true,true);
10276
		if ($globalTimezone != '') {
10277
			date_default_timezone_set($globalTimezone);
10278
			$datetime = new DateTime();
10279
			$offset = $datetime->format('P');
10280
		} else $offset = '+00:00';
10281
10282
		$orderby_sql = '';
10283
		if ($orderby == "hour")
10284
		{
10285
			$orderby_sql = "ORDER BY hour_name ASC";
10286
		}
10287
		if ($orderby == "count")
10288
		{
10289
			$orderby_sql = "ORDER BY hour_count DESC";
10290
		}
10291
		
10292
		if ($globalDBdriver == 'mysql') {
10293
			$query  = "SELECT spotter_output.airline_icao, HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10294
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
10295
								GROUP BY spotter_output.airline_icao, hour_name 
10296
								".$orderby_sql;
10297
10298
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
10299
								FROM spotter_output 
10300
								GROUP BY hour_name 
10301
								".$orderby_sql."
10302
								LIMIT 10 OFFSET 00";
10303
  */    
10304
		$query_data = array(':offset' => $offset);
10305
		} else {
10306
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10307
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
10308
								GROUP BY spotter_output.airline_icao, hour_name 
10309
								".$orderby_sql;
10310
			$query_data = array(':offset' => $offset);
10311
		}
10312
		
10313
		$sth = $this->db->prepare($query);
10314
		$sth->execute($query_data);
10315
      
10316
		$hour_array = array();
10317
		$temp_array = array();
10318
        
10319
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10320
		{
10321
			$temp_array['hour_name'] = $row['hour_name'];
10322
			$temp_array['hour_count'] = $row['hour_count'];
10323
			$temp_array['airline_icao'] = $row['airline_icao'];
10324
          
10325
			$hour_array[] = $temp_array;
10326
		}
10327
10328
		return $hour_array;
10329
	}
10330
10331
10332
10333
	/**
10334
	* Counts all hours by airline
10335
	*
10336
	* @return Array the hour list
10337
	*
10338
	*/
10339
	public function countAllHoursByAirline($airline_icao, $filters = array())
10340
	{
10341
		global $globalTimezone, $globalDBdriver;
10342
		$filter_query = $this->getFilter($filters,true,true);
10343
		if ($globalTimezone != '') {
10344
			date_default_timezone_set($globalTimezone);
10345
			$datetime = new DateTime();
10346
			$offset = $datetime->format('P');
10347
		} else $offset = '+00:00';
10348
10349
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
10350
10351
		if ($globalDBdriver == 'mysql') {
10352
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10353
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
10354
								GROUP BY hour_name 
10355
								ORDER BY hour_name ASC";
10356
		} else {
10357
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10358
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
10359
								GROUP BY hour_name 
10360
								ORDER BY hour_name ASC";
10361
		}
10362
		
10363
		$sth = $this->db->prepare($query);
10364
		$sth->execute(array(':airline_icao' => $airline_icao,':offset' => $offset));
10365
      
10366
		$hour_array = array();
10367
		$temp_array = array();
10368
        
10369
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10370
		{
10371
			$temp_array['hour_name'] = $row['hour_name'];
10372
			$temp_array['hour_count'] = $row['hour_count'];
10373
          
10374
			$hour_array[] = $temp_array;
10375
		}
10376
10377
		return $hour_array;
10378
	}
10379
	
10380
	
10381
	
10382
	
10383
	/**
10384
	* Counts all hours by aircraft
10385
	*
10386
	* @return Array the hour list
10387
	*
10388
	*/
10389
	public function countAllHoursByAircraft($aircraft_icao, $filters = array())
10390
	{
10391
		global $globalTimezone, $globalDBdriver;
10392
		$filter_query = $this->getFilter($filters,true,true);
10393
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
10394
		if ($globalTimezone != '') {
10395
			date_default_timezone_set($globalTimezone);
10396
			$datetime = new DateTime();
10397
			$offset = $datetime->format('P');
10398
		} else $offset = '+00:00';
10399
10400
		if ($globalDBdriver == 'mysql') {
10401
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10402
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
10403
								GROUP BY hour_name 
10404
								ORDER BY hour_name ASC";
10405
		} else {
10406
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10407
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
10408
								GROUP BY hour_name 
10409
								ORDER BY hour_name ASC";
10410
		}
10411
		
10412
		$sth = $this->db->prepare($query);
10413
		$sth->execute(array(':aircraft_icao' => $aircraft_icao,':offset' => $offset));
10414
      
10415
		$hour_array = array();
10416
		$temp_array = array();
10417
        
10418
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10419
		{
10420
			$temp_array['hour_name'] = $row['hour_name'];
10421
			$temp_array['hour_count'] = $row['hour_count'];
10422
          
10423
			$hour_array[] = $temp_array;
10424
		}
10425
10426
		return $hour_array;
10427
	}
10428
	
10429
	
10430
	/**
10431
	* Counts all hours by aircraft registration
10432
	*
10433
	* @return Array the hour list
10434
	*
10435
	*/
10436
	public function countAllHoursByRegistration($registration, $filters = array())
10437
	{
10438
		global $globalTimezone, $globalDBdriver;
10439
		$filter_query = $this->getFilter($filters,true,true);
10440
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
10441
		if ($globalTimezone != '') {
10442
			date_default_timezone_set($globalTimezone);
10443
			$datetime = new DateTime();
10444
			$offset = $datetime->format('P');
10445
		} else $offset = '+00:00';
10446
10447
		if ($globalDBdriver == 'mysql') {
10448
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10449
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
10450
								GROUP BY hour_name 
10451
								ORDER BY hour_name ASC";
10452
		} else {
10453
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10454
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
10455
								GROUP BY hour_name 
10456
								ORDER BY hour_name ASC";
10457
		}
10458
		
10459
		$sth = $this->db->prepare($query);
10460
		$sth->execute(array(':registration' => $registration,':offset' => $offset));
10461
      
10462
		$hour_array = array();
10463
		$temp_array = array();
10464
        
10465
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10466
		{
10467
			$temp_array['hour_name'] = $row['hour_name'];
10468
			$temp_array['hour_count'] = $row['hour_count'];
10469
          
10470
			$hour_array[] = $temp_array;
10471
		}
10472
10473
		return $hour_array;
10474
	}
10475
	
10476
	
10477
	/**
10478
	* Counts all hours by airport
10479
	*
10480
	* @return Array the hour list
10481
	*
10482
	*/
10483
	public function countAllHoursByAirport($airport_icao, $filters = array())
10484
	{
10485
		global $globalTimezone, $globalDBdriver;
10486
		$filter_query = $this->getFilter($filters,true,true);
10487
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
10488
		if ($globalTimezone != '') {
10489
			date_default_timezone_set($globalTimezone);
10490
			$datetime = new DateTime();
10491
			$offset = $datetime->format('P');
10492
		} else $offset = '+00:00';
10493
10494
		if ($globalDBdriver == 'mysql') {
10495
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10496
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
10497
								GROUP BY hour_name 
10498
								ORDER BY hour_name ASC";
10499
		} else {
10500
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10501
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
10502
								GROUP BY hour_name 
10503
								ORDER BY hour_name ASC";
10504
		}
10505
		
10506
		$sth = $this->db->prepare($query);
10507
		$sth->execute(array(':airport_icao' => $airport_icao,':offset' => $offset));
10508
      
10509
		$hour_array = array();
10510
		$temp_array = array();
10511
        
10512
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10513
		{
10514
			$temp_array['hour_name'] = $row['hour_name'];
10515
			$temp_array['hour_count'] = $row['hour_count'];
10516
          
10517
			$hour_array[] = $temp_array;
10518
		}
10519
10520
		return $hour_array;
10521
	}
10522
	
10523
	
10524
	
10525
	/**
10526
	* Counts all hours by manufacturer
10527
	*
10528
	* @return Array the hour list
10529
	*
10530
	*/
10531
	public function countAllHoursByManufacturer($aircraft_manufacturer,$filters =array())
10532
	{
10533
		global $globalTimezone, $globalDBdriver;
10534
		$filter_query = $this->getFilter($filters,true,true);
10535
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
10536
		if ($globalTimezone != '') {
10537
			date_default_timezone_set($globalTimezone);
10538
			$datetime = new DateTime();
10539
			$offset = $datetime->format('P');
10540
		} else $offset = '+00:00';
10541
10542
		if ($globalDBdriver == 'mysql') {
10543
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10544
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
10545
								GROUP BY hour_name 
10546
								ORDER BY hour_name ASC";
10547
		} else {
10548
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10549
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
10550
								GROUP BY hour_name 
10551
								ORDER BY hour_name ASC";
10552
		}
10553
		
10554
		$sth = $this->db->prepare($query);
10555
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer,':offset' => $offset));
10556
      
10557
		$hour_array = array();
10558
		$temp_array = array();
10559
        
10560
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10561
		{
10562
			$temp_array['hour_name'] = $row['hour_name'];
10563
			$temp_array['hour_count'] = $row['hour_count'];
10564
          
10565
			$hour_array[] = $temp_array;
10566
		}
10567
10568
		return $hour_array;
10569
	}
10570
	
10571
	
10572
	
10573
	/**
10574
	* Counts all hours by date
10575
	*
10576
	* @return Array the hour list
10577
	*
10578
	*/
10579
	public function countAllHoursByDate($date, $filters = array())
10580
	{
10581
		global $globalTimezone, $globalDBdriver;
10582
		$filter_query = $this->getFilter($filters,true,true);
10583
		$date = filter_var($date,FILTER_SANITIZE_STRING);
10584
		if ($globalTimezone != '') {
10585
			date_default_timezone_set($globalTimezone);
10586
			$datetime = new DateTime($date);
10587
			$offset = $datetime->format('P');
10588
		} else $offset = '+00:00';
10589
10590
		if ($globalDBdriver == 'mysql') {
10591
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10592
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
10593
								GROUP BY hour_name 
10594
								ORDER BY hour_name ASC";
10595
		} else {
10596
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10597
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset, 'YYYY-mm-dd') = :date
10598
								GROUP BY hour_name 
10599
								ORDER BY hour_name ASC";
10600
		}
10601
		
10602
		$sth = $this->db->prepare($query);
10603
		$sth->execute(array(':date' => $date, ':offset' => $offset));
10604
      
10605
		$hour_array = array();
10606
		$temp_array = array();
10607
        
10608
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10609
		{
10610
			$temp_array['hour_name'] = $row['hour_name'];
10611
			$temp_array['hour_count'] = $row['hour_count'];
10612
          
10613
			$hour_array[] = $temp_array;
10614
		}
10615
10616
		return $hour_array;
10617
	}
10618
	
10619
	
10620
	
10621
	/**
10622
	* Counts all hours by a ident/callsign
10623
	*
10624
	* @return Array the hour list
10625
	*
10626
	*/
10627
	public function countAllHoursByIdent($ident, $filters = array())
10628
	{
10629
		global $globalTimezone, $globalDBdriver;
10630
		$filter_query = $this->getFilter($filters,true,true);
10631
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
10632
		if ($globalTimezone != '') {
10633
			date_default_timezone_set($globalTimezone);
10634
			$datetime = new DateTime();
10635
			$offset = $datetime->format('P');
10636
		} else $offset = '+00:00';
10637
10638
		if ($globalDBdriver == 'mysql') {
10639
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10640
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
10641
								GROUP BY hour_name 
10642
								ORDER BY hour_name ASC";
10643
		} else {
10644
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10645
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
10646
								GROUP BY hour_name 
10647
								ORDER BY hour_name ASC";
10648
		}
10649
      
10650
		
10651
		$sth = $this->db->prepare($query);
10652
		$sth->execute(array(':ident' => $ident,':offset' => $offset));
10653
      
10654
		$hour_array = array();
10655
		$temp_array = array();
10656
        
10657
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10658
		{
10659
			$temp_array['hour_name'] = $row['hour_name'];
10660
			$temp_array['hour_count'] = $row['hour_count'];
10661
          
10662
			$hour_array[] = $temp_array;
10663
		}
10664
10665
		return $hour_array;
10666
	}
10667
	
10668
	/**
10669
	* Counts all hours by a owner
10670
	*
10671
	* @return Array the hour list
10672
	*
10673
	*/
10674
	public function countAllHoursByOwner($owner, $filters = array())
10675
	{
10676
		global $globalTimezone, $globalDBdriver;
10677
		$filter_query = $this->getFilter($filters,true,true);
10678
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
10679
		if ($globalTimezone != '') {
10680
			date_default_timezone_set($globalTimezone);
10681
			$datetime = new DateTime();
10682
			$offset = $datetime->format('P');
10683
		} else $offset = '+00:00';
10684
10685
		if ($globalDBdriver == 'mysql') {
10686
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10687
								FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
10688
								GROUP BY hour_name 
10689
								ORDER BY hour_name ASC";
10690
		} else {
10691
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10692
								FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
10693
								GROUP BY hour_name 
10694
								ORDER BY hour_name ASC";
10695
		}
10696
      
10697
		
10698
		$sth = $this->db->prepare($query);
10699
		$sth->execute(array(':owner' => $owner,':offset' => $offset));
10700
      
10701
		$hour_array = array();
10702
		$temp_array = array();
10703
        
10704
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10705
		{
10706
			$temp_array['hour_name'] = $row['hour_name'];
10707
			$temp_array['hour_count'] = $row['hour_count'];
10708
          
10709
			$hour_array[] = $temp_array;
10710
		}
10711
10712
		return $hour_array;
10713
	}
10714
	
10715
	/**
10716
	* Counts all hours by a pilot
10717
	*
10718
	* @return Array the hour list
10719
	*
10720
	*/
10721
	public function countAllHoursByPilot($pilot, $filters = array())
10722
	{
10723
		global $globalTimezone, $globalDBdriver;
10724
		$filter_query = $this->getFilter($filters,true,true);
10725
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
10726
		if ($globalTimezone != '') {
10727
			date_default_timezone_set($globalTimezone);
10728
			$datetime = new DateTime();
10729
			$offset = $datetime->format('P');
10730
		} else $offset = '+00:00';
10731
10732
		if ($globalDBdriver == 'mysql') {
10733
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10734
								FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
10735
								GROUP BY hour_name 
10736
								ORDER BY hour_name ASC";
10737
		} else {
10738
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10739
								FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
10740
								GROUP BY hour_name 
10741
								ORDER BY hour_name ASC";
10742
		}
10743
      
10744
		
10745
		$sth = $this->db->prepare($query);
10746
		$sth->execute(array(':pilot' => $pilot,':offset' => $offset));
10747
      
10748
		$hour_array = array();
10749
		$temp_array = array();
10750
        
10751
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10752
		{
10753
			$temp_array['hour_name'] = $row['hour_name'];
10754
			$temp_array['hour_count'] = $row['hour_count'];
10755
          
10756
			$hour_array[] = $temp_array;
10757
		}
10758
10759
		return $hour_array;
10760
	}
10761
	
10762
	
10763
	
10764
	/**
10765
	* Counts all hours by route
10766
	*
10767
	* @return Array the hour list
10768
	*
10769
	*/
10770
	public function countAllHoursByRoute($departure_airport_icao, $arrival_airport_icao, $filters =array())
10771
	{
10772
		global $globalTimezone, $globalDBdriver;
10773
		$filter_query = $this->getFilter($filters,true,true);
10774
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
10775
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
10776
		if ($globalTimezone != '') {
10777
			date_default_timezone_set($globalTimezone);
10778
			$datetime = new DateTime();
10779
			$offset = $datetime->format('P');
10780
		} else $offset = '+00:00';
10781
10782
		if ($globalDBdriver == 'mysql') {
10783
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10784
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
10785
								GROUP BY hour_name 
10786
								ORDER BY hour_name ASC";
10787
		} else {
10788
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10789
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
10790
								GROUP BY hour_name 
10791
								ORDER BY hour_name ASC";
10792
		}
10793
		
10794
		$sth = $this->db->prepare($query);
10795
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao,':offset' => $offset));
10796
      
10797
		$hour_array = array();
10798
		$temp_array = array();
10799
        
10800
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10801
		{
10802
			$temp_array['hour_name'] = $row['hour_name'];
10803
			$temp_array['hour_count'] = $row['hour_count'];
10804
          
10805
			$hour_array[] = $temp_array;
10806
		}
10807
10808
		return $hour_array;
10809
	}
10810
	
10811
	
10812
	/**
10813
	* Counts all hours by country
10814
	*
10815
	* @return Array the hour list
10816
	*
10817
	*/
10818
	public function countAllHoursByCountry($country, $filters = array())
10819
	{
10820
		global $globalTimezone, $globalDBdriver;
10821
		$filter_query = $this->getFilter($filters,true,true);
10822
		$country = filter_var($country,FILTER_SANITIZE_STRING);
10823
		if ($globalTimezone != '') {
10824
			date_default_timezone_set($globalTimezone);
10825
			$datetime = new DateTime();
10826
			$offset = $datetime->format('P');
10827
		} else $offset = '+00:00';
10828
10829
		if ($globalDBdriver == 'mysql') {
10830
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10831
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
10832
								GROUP BY hour_name 
10833
								ORDER BY hour_name ASC";
10834
		} else {
10835
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10836
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
10837
								GROUP BY hour_name 
10838
								ORDER BY hour_name ASC";
10839
		}
10840
		
10841
		$sth = $this->db->prepare($query);
10842
		$sth->execute(array(':country' => $country,':offset' => $offset));
10843
      
10844
		$hour_array = array();
10845
		$temp_array = array();
10846
        
10847
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10848
		{
10849
			$temp_array['hour_name'] = $row['hour_name'];
10850
			$temp_array['hour_count'] = $row['hour_count'];
10851
          
10852
			$hour_array[] = $temp_array;
10853
		}
10854
10855
		return $hour_array;
10856
	}
10857
10858
10859
10860
10861
	/**
10862
	* Counts all aircraft that have flown over
10863
	*
10864
	* @return Integer the number of aircrafts
10865
	*
10866
	*/
10867
	public function countOverallAircrafts($filters = array(),$year = '',$month = '')
10868
	{
10869
		global $globalDBdriver;
10870
		$filter_query = $this->getFilter($filters,true,true);
10871
		$query  = "SELECT COUNT(DISTINCT spotter_output.aircraft_icao) AS aircraft_count  
10872
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''";
10873
		$query_values = array();
10874
		if ($year != '') {
10875
			if ($globalDBdriver == 'mysql') {
10876
				$query .= " AND YEAR(spotter_output.date) = :year";
10877
				$query_values = array_merge($query_values,array(':year' => $year));
10878
			} else {
10879
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10880
				$query_values = array_merge($query_values,array(':year' => $year));
10881
			}
10882
		}
10883
		if ($month != '') {
10884
			if ($globalDBdriver == 'mysql') {
10885
				$query .= " AND MONTH(spotter_output.date) = :month";
10886
				$query_values = array_merge($query_values,array(':month' => $month));
10887
			} else {
10888
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10889
				$query_values = array_merge($query_values,array(':month' => $month));
10890
			}
10891
		}
10892
10893
		$sth = $this->db->prepare($query);
10894
		$sth->execute($query_values);
10895
		return $sth->fetchColumn();
10896
	}
10897
10898
	/**
10899
	* Counts all flight that really arrival
10900
	*
10901
	* @return Integer the number of aircrafts
10902
	*
10903
	*/
10904
	public function countOverallArrival($filters = array(),$year = '',$month = '')
10905
	{
10906
		global $globalDBdriver;
10907
		$filter_query = $this->getFilter($filters,true,true);
10908
		$query  = "SELECT COUNT(spotter_output.real_arrival_airport_icao) AS arrival_count  
10909
                    FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> ''";
10910
		$query_values = array();
10911
		if ($year != '') {
10912
			if ($globalDBdriver == 'mysql') {
10913
				$query .= " AND YEAR(spotter_output.date) = :year";
10914
				$query_values = array_merge($query_values,array(':year' => $year));
10915
			} else {
10916
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10917
				$query_values = array_merge($query_values,array(':year' => $year));
10918
			}
10919
		}
10920
		if ($month != '') {
10921
			if ($globalDBdriver == 'mysql') {
10922
				$query .= " AND MONTH(spotter_output.date) = :month";
10923
				$query_values = array_merge($query_values,array(':month' => $month));
10924
			} else {
10925
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10926
				$query_values = array_merge($query_values,array(':month' => $month));
10927
			}
10928
		}
10929
		
10930
		$sth = $this->db->prepare($query);
10931
		$sth->execute($query_values);
10932
		return $sth->fetchColumn();
10933
	}
10934
10935
	/**
10936
	* Counts all pilots that have flown over
10937
	*
10938
	* @return Integer the number of pilots
10939
	*
10940
	*/
10941
	public function countOverallPilots($filters = array(),$year = '',$month = '')
10942
	{
10943
		global $globalDBdriver;
10944
		$filter_query = $this->getFilter($filters,true,true);
10945
		$query  = "SELECT COUNT(DISTINCT spotter_output.pilot_id) AS pilot_count  
10946
                    FROM spotter_output".$filter_query." spotter_output.pilot_id <> ''";
10947
		$query_values = array();
10948
		if ($year != '') {
10949
			if ($globalDBdriver == 'mysql') {
10950
				$query .= " AND YEAR(spotter_output.date) = :year";
10951
				$query_values = array_merge($query_values,array(':year' => $year));
10952
			} else {
10953
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10954
				$query_values = array_merge($query_values,array(':year' => $year));
10955
			}
10956
		}
10957
		if ($month != '') {
10958
			if ($globalDBdriver == 'mysql') {
10959
				$query .= " AND MONTH(spotter_output.date) = :month";
10960
				$query_values = array_merge($query_values,array(':month' => $month));
10961
			} else {
10962
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10963
				$query_values = array_merge($query_values,array(':month' => $month));
10964
			}
10965
		}
10966
		$sth = $this->db->prepare($query);
10967
		$sth->execute($query_values);
10968
		return $sth->fetchColumn();
10969
	}
10970
10971
	/**
10972
	* Counts all owners that have flown over
10973
	*
10974
	* @return Integer the number of owners
10975
	*
10976
	*/
10977
	public function countOverallOwners($filters = array(),$year = '',$month = '')
10978
	{
10979
		global $globalDBdriver;
10980
		$filter_query = $this->getFilter($filters,true,true);
10981
		$query  = "SELECT COUNT(DISTINCT spotter_output.owner_name) AS owner_count  
10982
                    FROM spotter_output".$filter_query." spotter_output.owner_name <> ''";
10983
		$query_values = array();
10984
		if ($year != '') {
10985
			if ($globalDBdriver == 'mysql') {
10986
				$query .= " AND YEAR(spotter_output.date) = :year";
10987
				$query_values = array_merge($query_values,array(':year' => $year));
10988
			} else {
10989
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10990
				$query_values = array_merge($query_values,array(':year' => $year));
10991
			}
10992
		}
10993
		if ($month != '') {
10994
			if ($globalDBdriver == 'mysql') {
10995
				$query .= " AND MONTH(spotter_output.date) = :month";
10996
				$query_values = array_merge($query_values,array(':month' => $month));
10997
			} else {
10998
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10999
				$query_values = array_merge($query_values,array(':month' => $month));
11000
			}
11001
		}
11002
		$sth = $this->db->prepare($query);
11003
		$sth->execute($query_values);
11004
		return $sth->fetchColumn();
11005
	}
11006
	
11007
	
11008
	/**
11009
	* Counts all flights that have flown over
11010
	*
11011
	* @return Integer the number of flights
11012
	*
11013
	*/
11014
	public function countOverallFlights($filters = array(),$year = '',$month = '')
11015
	{
11016
		global $globalDBdriver;
11017
		$queryi  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count FROM spotter_output";
11018
		$query_values = array();
11019
		$query = '';
11020
		if ($year != '') {
11021
			if ($globalDBdriver == 'mysql') {
11022
				$query .= " AND YEAR(spotter_output.date) = :year";
11023
				$query_values = array_merge($query_values,array(':year' => $year));
11024
			} else {
11025
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
11026
				$query_values = array_merge($query_values,array(':year' => $year));
11027
			}
11028
		}
11029
		if ($month != '') {
11030
			if ($globalDBdriver == 'mysql') {
11031
				$query .= " AND MONTH(spotter_output.date) = :month";
11032
				$query_values = array_merge($query_values,array(':month' => $month));
11033
			} else {
11034
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
11035
				$query_values = array_merge($query_values,array(':month' => $month));
11036
			}
11037
		}
11038
		if (empty($query_values)) $queryi .= $this->getFilter($filters);
11039
		else $queryi .= $this->getFilter($filters,true,true).substr($query,4);
11040
		
11041
		$sth = $this->db->prepare($queryi);
11042
		$sth->execute($query_values);
11043
		return $sth->fetchColumn();
11044
	}
11045
	
11046
	/**
11047
	* Counts all military flights that have flown over
11048
	*
11049
	* @return Integer the number of flights
11050
	*
11051
	*/
11052
	public function countOverallMilitaryFlights($filters = array(),$year = '',$month = '')
11053
	{
11054
		global $globalDBdriver;
11055
		$filter_query = $this->getFilter($filters,true,true);
11056
		$query  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count  
11057
                    FROM airlines,spotter_output".$filter_query." spotter_output.airline_icao = airlines.icao AND airlines.type = 'military'";
11058
		$query_values = array();
11059
		if ($year != '') {
11060
			if ($globalDBdriver == 'mysql') {
11061
				$query .= " AND YEAR(spotter_output.date) = :year";
11062
				$query_values = array_merge($query_values,array(':year' => $year));
11063
			} else {
11064
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
11065
				$query_values = array_merge($query_values,array(':year' => $year));
11066
			}
11067
		}
11068
		if ($month != '') {
11069
			if ($globalDBdriver == 'mysql') {
11070
				$query .= " AND MONTH(spotter_output.date) = :month";
11071
				$query_values = array_merge($query_values,array(':month' => $month));
11072
			} else {
11073
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
11074
				$query_values = array_merge($query_values,array(':month' => $month));
11075
			}
11076
		}
11077
      
11078
		$sth = $this->db->prepare($query);
11079
		$sth->execute($query_values);
11080
		return $sth->fetchColumn();
11081
	}
11082
	
11083
	
11084
	
11085
	/**
11086
	* Counts all airlines that have flown over
11087
	*
11088
	* @return Integer the number of airlines
11089
	*
11090
	*/
11091
	public function countOverallAirlines($filters = array(),$year = '',$month = '')
11092
	{
11093
		global $globalDBdriver;
11094
		$queryi  = "SELECT COUNT(DISTINCT spotter_output.airline_name) AS airline_count 
11095
							FROM spotter_output";
11096
      
11097
		$query_values = array();
11098
		$query = '';
11099
		if ($year != '') {
11100
			if ($globalDBdriver == 'mysql') {
11101
				$query .= " AND YEAR(spotter_output.date) = :year";
11102
				$query_values = array_merge($query_values,array(':year' => $year));
11103
			} else {
11104
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
11105
				$query_values = array_merge($query_values,array(':year' => $year));
11106
			}
11107
		}
11108
		if ($month != '') {
11109
			if ($globalDBdriver == 'mysql') {
11110
				$query .= " AND MONTH(spotter_output.date) = :month";
11111
				$query_values = array_merge($query_values,array(':month' => $month));
11112
			} else {
11113
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
11114
				$query_values = array_merge($query_values,array(':month' => $month));
11115
			}
11116
		}
11117
                if ($query == '') $queryi .= $this->getFilter($filters);
11118
                else $queryi .= $this->getFilter($filters,true,true).substr($query,4);
11119
11120
11121
		$sth = $this->db->prepare($queryi);
11122
		$sth->execute($query_values);
11123
		return $sth->fetchColumn();
11124
	}
11125
11126
  
11127
	/**
11128
	* Counts all hours of today
11129
	*
11130
	* @return Array the hour list
11131
	*
11132
	*/
11133
	public function countAllHoursFromToday($filters = array())
11134
	{
11135
		global $globalTimezone, $globalDBdriver;
11136
		$filter_query = $this->getFilter($filters,true,true);
11137
		if ($globalTimezone != '') {
11138
			date_default_timezone_set($globalTimezone);
11139
			$datetime = new DateTime();
11140
			$offset = $datetime->format('P');
11141
		} else $offset = '+00:00';
11142
11143
		if ($globalDBdriver == 'mysql') {
11144
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
11145
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = CURDATE()
11146
								GROUP BY hour_name 
11147
								ORDER BY hour_name ASC";
11148
		} else {
11149
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
11150
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = CAST(NOW() AS date)
11151
								GROUP BY hour_name 
11152
								ORDER BY hour_name ASC";
11153
		}
11154
		
11155
		$sth = $this->db->prepare($query);
11156
		$sth->execute(array(':offset' => $offset));
11157
      
11158
		$hour_array = array();
11159
		$temp_array = array();
11160
        
11161
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11162
		{
11163
			$temp_array['hour_name'] = $row['hour_name'];
11164
			$temp_array['hour_count'] = $row['hour_count'];
11165
			$hour_array[] = $temp_array;
11166
		}
11167
11168
		return $hour_array;
11169
	}
11170
    
11171
	/**
11172
	* Gets all the spotter information based on calculated upcoming flights
11173
	*
11174
	* @return Array the spotter information
11175
	*
11176
	*/
11177
	public function getUpcomingFlights($limit = '', $sort = '', $filters = array())
11178
	{
11179
		global $global_query, $globalDBdriver, $globalTimezone;
11180
		$filter_query = $this->getFilter($filters,true,true);
11181
		date_default_timezone_set('UTC');
11182
		$limit_query = '';
11183
		if ($limit != "")
11184
		{
11185
			$limit_array = explode(",", $limit);
11186
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
11187
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
11188
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
11189
			{
11190
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
11191
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
11192
			}
11193
		}
11194
		$currentHour = date("G");
11195
		$next3Hours = date("G", strtotime("+3 hour"));
11196
		//if the next 3 hours is already equal to/past midnight, we limit it to stay there, otherwise the query will fail
11197
		if ($currentHour >= 21 && $next3Hours >= 00)
11198
		{
11199
			$next3Hours = 24;
11200
		}
11201
		$currentDayofWeek = date("l");
11202
		if ($globalDBdriver == 'mysql') {
11203
			if ($sort != "")
11204
			{
11205
				$search_orderby_array = $this->getOrderBy();
11206
				$orderby_query = $search_orderby_array[$sort]['sql'];
11207
			} else {
11208
				$orderby_query = " ORDER BY HOUR(spotter_output.date) ASC";
11209
			}
11210
/*
11211
			$query = "SELECT spotter_output.*, count(spotter_output.ident) as ident_count
11212
			    FROM spotter_output
11213
			    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'
11214
			    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";
11215
*/
11216
/*			$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
11217
			    FROM spotter_output
11218
			    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'
11219
			    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";
11220
*/
11221
			$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 
11222
			    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'
11223
			    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
11224
			    HAVING count(spotter_output.ident) > 5$orderby_query";
11225
11226
			$spotter_array = $this->getDataFromDB($query.$limit_query);
11227
		} else {
11228
			if ($sort != "")
11229
			{
11230
				$search_orderby_array = $this->getOrderBy();
11231
				$orderby_query = $search_orderby_array[$sort]['sql'];
11232
			} else {
11233
				$orderby_query = " ORDER BY to_char(spotter_output.date,'HH') ASC";
11234
			}
11235
			$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') 
11236
			    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 <> '' 
11237
			    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')
11238
			    HAVING count(spotter_output.ident) > 5$orderby_query";
11239
			//echo $query;
11240
			$spotter_array = $this->getDataFromDB($query.$limit_query,array(':timezone' => $globalTimezone));
11241
			/*
11242
			$sth = $this->db->prepare($query);
11243
			$sth->execute(array(':timezone' => $globalTimezone));
11244
			return $sth->fetchAll(PDO::FETCH_ASSOC);
11245
			*/
11246
		}
11247
		return $spotter_array;
11248
	}
11249
    
11250
    
11251
     /**
11252
	* Gets the Barrie Spotter ID based on the FlightAware ID
11253
	*
11254
	* @return Integer the Barrie Spotter ID
11255
q	*
11256
	*/
11257
	public function getSpotterIDBasedOnFlightAwareID($flightaware_id)
11258
	{
11259
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
11260
11261
		$query  = "SELECT spotter_output.spotter_id
11262
								FROM spotter_output 
11263
								WHERE spotter_output.flightaware_id = '".$flightaware_id."'";
11264
        
11265
		
11266
		$sth = $this->db->prepare($query);
11267
		$sth->execute();
11268
11269
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11270
		{
11271
			return $row['spotter_id'];
11272
		}
11273
	}
11274
  
11275
 
11276
	/**
11277
	* Parses a date string
11278
	*
11279
	* @param String $dateString the date string
11280
	* @param String $timezone the timezone of a user
11281
	* @return Array the time information
11282
	*
11283
	*/
11284
	public function parseDateString($dateString, $timezone = '')
11285
	{
11286
		$time_array = array();
11287
	
11288
		if ($timezone != "")
11289
		{
11290
			date_default_timezone_set($timezone);
11291
		}
11292
		
11293
		$current_date = date("Y-m-d H:i:s");
11294
		$date = date("Y-m-d H:i:s",strtotime($dateString." UTC"));
11295
		
11296
		$diff = abs(strtotime($current_date) - strtotime($date));
11297
11298
		$time_array['years'] = floor($diff / (365*60*60*24)); 
11299
		$years = $time_array['years'];
11300
		
11301
		$time_array['months'] = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
11302
		$months = $time_array['months'];
11303
		
11304
		$time_array['days'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
11305
		$days = $time_array['days'];
11306
		$time_array['hours'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24)/ (60*60));
11307
		$hours = $time_array['hours'];
11308
		$time_array['minutes'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60)/ 60);
11309
		$minutes = $time_array['minutes'];
11310
		$time_array['seconds'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60 - $minutes*60));  
11311
		
11312
		return $time_array;	
11313
	}	
11314
	
11315
	
11316
	
11317
	
11318
	/**
11319
	* Parses the direction degrees to working
11320
	*
11321
	* @param Float $direction the direction in degrees
11322
	* @return Array the direction information
11323
	*
11324
	*/
11325
	public function parseDirection($direction = 0)
11326
	{
11327
		if ($direction == '') $direction = 0;
11328
		$direction_array = array();
11329
		$temp_array = array();
11330
11331
		if ($direction == 360 || ($direction >= 0 && $direction < 22.5))
11332
		{
11333
			$temp_array['direction_degree'] = $direction;
11334
			$temp_array['direction_shortname'] = "N";
11335
			$temp_array['direction_fullname'] = "North";
11336
		} elseif ($direction >= 22.5 && $direction < 45){
11337
			$temp_array['direction_degree'] = $direction;
11338
			$temp_array['direction_shortname'] = "NNE";
11339
			$temp_array['direction_fullname'] = "North-Northeast";
11340
		} elseif ($direction >= 45 && $direction < 67.5){
11341
			$temp_array['direction_degree'] = $direction;
11342
			$temp_array['direction_shortname'] = "NE";
11343
			$temp_array['direction_fullname'] = "Northeast";
11344
		} elseif ($direction >= 67.5 && $direction < 90){
11345
			$temp_array['direction_degree'] = $direction;
11346
			$temp_array['direction_shortname'] = "ENE";
11347
			$temp_array['direction_fullname'] = "East-Northeast";
11348
		} elseif ($direction >= 90 && $direction < 112.5){
11349
			$temp_array['direction_degree'] = $direction;
11350
			$temp_array['direction_shortname'] = "E";
11351
			$temp_array['direction_fullname'] = "East";
11352
		} elseif ($direction >= 112.5 && $direction < 135){
11353
			$temp_array['direction_degree'] = $direction;
11354
			$temp_array['direction_shortname'] = "ESE";
11355
			$temp_array['direction_fullname'] = "East-Southeast";
11356
		} elseif ($direction >= 135 && $direction < 157.5){
11357
			$temp_array['direction_degree'] = $direction;
11358
			$temp_array['direction_shortname'] = "SE";
11359
			$temp_array['direction_fullname'] = "Southeast";
11360
		} elseif ($direction >= 157.5 && $direction < 180){
11361
			$temp_array['direction_degree'] = $direction;
11362
			$temp_array['direction_shortname'] = "SSE";
11363
			$temp_array['direction_fullname'] = "South-Southeast";
11364
		} elseif ($direction >= 180 && $direction < 202.5){
11365
			$temp_array['direction_degree'] = $direction;
11366
			$temp_array['direction_shortname'] = "S";
11367
			$temp_array['direction_fullname'] = "South";
11368
		} elseif ($direction >= 202.5 && $direction < 225){
11369
			$temp_array['direction_degree'] = $direction;
11370
			$temp_array['direction_shortname'] = "SSW";
11371
			$temp_array['direction_fullname'] = "South-Southwest";
11372
		} elseif ($direction >= 225 && $direction < 247.5){
11373
			$temp_array['direction_degree'] = $direction;
11374
			$temp_array['direction_shortname'] = "SW";
11375
			$temp_array['direction_fullname'] = "Southwest";
11376
		} elseif ($direction >= 247.5 && $direction < 270){
11377
			$temp_array['direction_degree'] = $direction;
11378
			$temp_array['direction_shortname'] = "WSW";
11379
			$temp_array['direction_fullname'] = "West-Southwest";
11380
		} elseif ($direction >= 270 && $direction < 292.5){
11381
			$temp_array['direction_degree'] = $direction;
11382
			$temp_array['direction_shortname'] = "W";
11383
			$temp_array['direction_fullname'] = "West";
11384
		} elseif ($direction >= 292.5 && $direction < 315){
11385
			$temp_array['direction_degree'] = $direction;
11386
			$temp_array['direction_shortname'] = "WNW";
11387
			$temp_array['direction_fullname'] = "West-Northwest";
11388
		} elseif ($direction >= 315 && $direction < 337.5){
11389
			$temp_array['direction_degree'] = $direction;
11390
			$temp_array['direction_shortname'] = "NW";
11391
			$temp_array['direction_fullname'] = "Northwest";
11392
		} elseif ($direction >= 337.5 && $direction < 360){
11393
			$temp_array['direction_degree'] = $direction;
11394
			$temp_array['direction_shortname'] = "NNW";
11395
			$temp_array['direction_fullname'] = "North-Northwest";
11396
		}
11397
		$direction_array[] = $temp_array;
11398
		return $direction_array;
11399
	}
11400
	
11401
	
11402
	/**
11403
	* Gets the aircraft registration
11404
	*
11405
	* @param String $flightaware_id the flight aware id
11406
	* @return String the aircraft registration
11407
	*
11408
	*/
11409
	
11410
	public function getAircraftRegistration($flightaware_id)
11411
	{
11412
		global $globalFlightAwareUsername, $globalFlightAwarePassword;
11413
        
11414
		$options = array(
11415
			'trace' => true,
11416
			'exceptions' => 0,
11417
			'login' => $globalFlightAwareUsername,
11418
			'password' => $globalFlightAwarePassword,
11419
		);
11420
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
11421
		
11422
		$params = array('faFlightID' => $flightaware_id);
11423
		$result = $client->AirlineFlightInfo($params);
11424
		
11425
		if (isset($result->AirlineFlightInfoResult))
11426
		{
11427
			$registration = $result->AirlineFlightInfoResult->tailnumber;
11428
		} else return '';
11429
		
11430
		$registration = $this->convertAircraftRegistration($registration);
11431
		
11432
		return $registration;
11433
	}
11434
11435
11436
	/**
11437
	* Gets the aircraft registration from ModeS
11438
	*
11439
	* @param String $aircraft_modes the flight ModeS in hex
11440
	* @return String the aircraft registration
11441
	*
11442
	*/
11443
	public function getAircraftRegistrationBymodeS($aircraft_modes, $source_type = '')
11444
	{
11445
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
11446
		$source_type = filter_var($source_type,FILTER_SANITIZE_STRING);
11447
		if ($source_type == '' || $source_type == 'modes') {
11448
			$query  = "SELECT aircraft_modes.Registration FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes AND aircraft_modes.source_type = 'modes' ORDER BY FirstCreated DESC LIMIT 1";
11449
		} else {
11450
			$query  = "SELECT aircraft_modes.Registration FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes AND aircraft_modes.source_type = 'flarm' ORDER BY FirstCreated DESC LIMIT 1";
11451
		}
11452
		$sth = $this->db->prepare($query);
11453
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
11454
    
11455
		$row = $sth->fetch(PDO::FETCH_ASSOC);
11456
		$sth->closeCursor();
11457
		if (count($row) > 0) {
11458
		    //return $row['Registration'];
11459
		    return $row['registration'];
11460
		} elseif ($source_type == 'flarm') {
11461
			return $this->getAircraftRegistrationBymodeS($aircraft_modes);
11462
		} else return '';
11463
	
11464
	}
11465
11466
	/**
11467
	* Gets the aircraft type from ModeS
11468
	*
11469
	* @param String $aircraft_modes the flight ModeS in hex
11470
	* @return String the aircraft type
11471
	*
11472
	*/
11473
	public function getAircraftTypeBymodeS($aircraft_modes,$source_type = '')
11474
	{
11475
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
11476
		$source_type = filter_var($source_type,FILTER_SANITIZE_STRING);
11477
		if ($source_type == '' || $source_type == 'modes') {
11478
			$query  = "SELECT aircraft_modes.type_flight FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes AND aircraft_modes.source_type = 'modes' ORDER BY FirstCreated DESC LIMIT 1";
11479
		} else {
11480
			$query  = "SELECT aircraft_modes.type_flight FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes AND aircraft_modes.source_type = 'flarm' ORDER BY FirstCreated DESC LIMIT 1";
11481
		}
11482
		
11483
		$sth = $this->db->prepare($query);
11484
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
11485
    
11486
		$row = $sth->fetch(PDO::FETCH_ASSOC);
11487
		$sth->closeCursor();
11488
		if (count($row) > 0) {
11489
			if ($row['type_flight'] == null) return '';
11490
			else return $row['type_flight'];
11491
		} elseif ($source_type == 'flarm') {
11492
			return $this->getAircraftTypeBymodeS($aircraft_modes);
11493
		} else return '';
11494
	
11495
	}
11496
11497
	/**
11498
	* Gets Country from latitude/longitude
11499
	*
11500
	* @param Float $latitude latitute of the flight
11501
	* @param Float $longitude longitute of the flight
11502
	* @return String the countrie
11503
	*/
11504
	public function getCountryFromLatitudeLongitude($latitude,$longitude)
11505
	{
11506
		global $globalDBdriver, $globalDebug;
11507
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
11508
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
11509
	
11510
		$Connection = new Connection($this->db);
11511
		if (!$Connection->tableExists('countries')) return '';
11512
	
11513
		try {
11514
			/*
11515
			if ($globalDBdriver == 'mysql') {
11516
				//$query  = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(:latitude :longitude)'), ogc_geom) LIMIT 1";
11517
				$query = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(".$longitude.' '.$latitude.")'), ogc_geom) LIMIT 1";
11518
			}
11519
			*/
11520
			// This query seems to work both for MariaDB and PostgreSQL
11521
			$query = "SELECT name,iso2,iso3 FROM countries WHERE ST_Within(ST_GeomFromText('POINT(".$longitude." ".$latitude.")',4326), ogc_geom) LIMIT 1";
11522
		
11523
			$sth = $this->db->prepare($query);
11524
			//$sth->execute(array(':latitude' => $latitude,':longitude' => $longitude));
11525
			$sth->execute();
11526
    
11527
			$row = $sth->fetch(PDO::FETCH_ASSOC);
11528
			$sth->closeCursor();
11529
			if (count($row) > 0) {
11530
				return $row;
11531
			} else return '';
11532
		} catch (PDOException $e) {
11533
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
11534
			return '';
11535
		}
11536
	
11537
	}
11538
11539
	/**
11540
	* Gets Country from iso2
11541
	*
11542
	* @param String $iso2 ISO2 country code
11543
	* @return String the countrie
11544
	*/
11545
	public function getCountryFromISO2($iso2)
11546
	{
11547
		global $globalDBdriver, $globalDebug;
11548
		$iso2 = filter_var($iso2,FILTER_SANITIZE_STRING);
11549
	
11550
		$Connection = new Connection($this->db);
11551
		if (!$Connection->tableExists('countries')) return '';
11552
	
11553
		try {
11554
			$query = "SELECT name,iso2,iso3 FROM countries WHERE iso2 = :iso2 LIMIT 1";
11555
		
11556
			$sth = $this->db->prepare($query);
11557
			$sth->execute(array(':iso2' => $iso2));
11558
    
11559
			$row = $sth->fetch(PDO::FETCH_ASSOC);
11560
			$sth->closeCursor();
11561
			if (count($row) > 0) {
11562
				return $row;
11563
			} else return '';
11564
		} catch (PDOException $e) {
11565
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
11566
			return '';
11567
		}
11568
	
11569
	}
11570
11571
	/**
11572
	* converts the registration code using the country prefix
11573
	*
11574
	* @param String $registration the aircraft registration
11575
	* @return String the aircraft registration
11576
	*
11577
	*/
11578
	public function convertAircraftRegistration($registration)
11579
	{
11580
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11581
		$registration_prefix = '';
11582
		$registration_1 = substr($registration, 0, 1);
11583
		$registration_2 = substr($registration, 0, 2);
11584
11585
		//first get the prefix based on two characters
11586
		$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_2";
11587
      
11588
		
11589
		$sth = $this->db->prepare($query);
11590
		$sth->execute(array(':registration_2' => $registration_2));
11591
        
11592
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11593
		{
11594
			$registration_prefix = $row['registration_prefix'];
11595
		}
11596
11597
		//if we didn't find a two chracter prefix lets just search the one with one character
11598
		if ($registration_prefix == '')
11599
		{
11600
			$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_1";
11601
			$sth = $this->db->prepare($query);
11602
			$sth->execute(array(':registration_1' => $registration_1));
11603
	        
11604
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11605
			{
11606
				$registration_prefix = $row['registration_prefix'];
11607
			}
11608
		}
11609
11610
		//determine which characters are being used and convert the registration code appropiately
11611
		if (strlen($registration_prefix) == 1)
11612
		{
11613
			if (0 === strpos($registration, 'N')) {
11614
				$registration = preg_replace("/^(.{1})/", "$1", $registration);
11615
			} else {
11616
				$registration = preg_replace("/^(.{1})/", "$1-", $registration);
11617
			}
11618
		} else if(strlen($registration_prefix) == 2){
11619
			if (0 === strpos($registration, 'N')) {
11620
				$registration = preg_replace("/^(.{2})/", "$1", $registration);
11621
			} else {
11622
				$registration = preg_replace("/^(.{2})/", "$1-", $registration);
11623
			}
11624
		}
11625
		return $registration;
11626
	}
11627
11628
	/**
11629
	* Country from the registration code
11630
	*
11631
	* @param String $registration the aircraft registration
11632
	* @return String the country
11633
	*
11634
	*/
11635
	public function countryFromAircraftRegistration($registration)
11636
	{
11637
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11638
		
11639
		$registration_prefix = '';
11640
		$registration_test = explode('-',$registration);
11641
		$country = '';
11642
		if ($registration_test[0] != $registration) {
11643
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11644
	      
11645
			$sth = $this->db->prepare($query);
11646
			$sth->execute(array(':registration_1' => $registration_test[0]));
11647
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11648
			{
11649
				//$registration_prefix = $row['registration_prefix'];
11650
				$country = $row['country'];
11651
			}
11652
		} else {
11653
    			$registration_1 = substr($registration, 0, 1);
11654
		        $registration_2 = substr($registration, 0, 2);
11655
11656
			$country = '';
11657
			//first get the prefix based on two characters
11658
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
11659
      
11660
			
11661
			$sth = $this->db->prepare($query);
11662
			$sth->execute(array(':registration_2' => $registration_2));
11663
        
11664
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11665
			{
11666
				$registration_prefix = $row['registration_prefix'];
11667
				$country = $row['country'];
11668
			}
11669
11670
			//if we didn't find a two chracter prefix lets just search the one with one character
11671
			if ($registration_prefix == "")
11672
			{
11673
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11674
	      
11675
				$sth = $this->db->prepare($query);
11676
				$sth->execute(array(':registration_1' => $registration_1));
11677
	        
11678
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
11679
				{
11680
					//$registration_prefix = $row['registration_prefix'];
11681
					$country = $row['country'];
11682
				}
11683
			}
11684
		}
11685
    
11686
		return $country;
11687
	}
11688
11689
	/**
11690
	* Registration prefix from the registration code
11691
	*
11692
	* @param String $registration the aircraft registration
11693
	* @return String the registration prefix
11694
	*
11695
	*/
11696
	public function registrationPrefixFromAircraftRegistration($registration)
11697
	{
11698
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11699
		
11700
		$registration_prefix = '';
11701
		$registration_test = explode('-',$registration);
11702
		//$country = '';
11703
		if ($registration_test[0] != $registration) {
11704
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11705
	      
11706
			$sth = $this->db->prepare($query);
11707
			$sth->execute(array(':registration_1' => $registration_test[0]));
11708
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11709
			{
11710
				$registration_prefix = $row['registration_prefix'];
11711
				//$country = $row['country'];
11712
			}
11713
		} else {
11714
    			$registration_1 = substr($registration, 0, 1);
11715
		        $registration_2 = substr($registration, 0, 2);
11716
11717
			//first get the prefix based on two characters
11718
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
11719
      
11720
			
11721
			$sth = $this->db->prepare($query);
11722
			$sth->execute(array(':registration_2' => $registration_2));
11723
        
11724
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11725
			{
11726
				$registration_prefix = $row['registration_prefix'];
11727
				//$country = $row['country'];
11728
			}
11729
11730
			//if we didn't find a two chracter prefix lets just search the one with one character
11731
			if ($registration_prefix == "")
11732
			{
11733
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11734
	      
11735
				$sth = $this->db->prepare($query);
11736
				$sth->execute(array(':registration_1' => $registration_1));
11737
	        
11738
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
11739
				{
11740
					$registration_prefix = $row['registration_prefix'];
11741
					//$country = $row['country'];
11742
				}
11743
			}
11744
		}
11745
    
11746
		return $registration_prefix;
11747
	}
11748
11749
11750
	/**
11751
	* Country from the registration code
11752
	*
11753
	* @param String $registration the aircraft registration
11754
	* @return String the country
11755
	*
11756
	*/
11757
	public function countryFromAircraftRegistrationCode($registration)
11758
	{
11759
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11760
		
11761
		$country = '';
11762
		$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration LIMIT 1";
11763
		$sth = $this->db->prepare($query);
11764
		$sth->execute(array(':registration' => $registration));
11765
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11766
		{
11767
			$country = $row['country'];
11768
		}
11769
		return $country;
11770
	}
11771
	
11772
	/**
11773
	* Set a new highlight value for a flight
11774
	*
11775
	* @param String $flightaware_id flightaware_id from spotter_output table
11776
	* @param String $highlight New highlight value
11777
	*/
11778
	public function setHighlightFlight($flightaware_id,$highlight) {
11779
		
11780
		$query  = "UPDATE spotter_output SET highlight = :highlight WHERE flightaware_id = :flightaware_id";
11781
		$sth = $this->db->prepare($query);
11782
		$sth->execute(array(':flightaware_id' => $flightaware_id, ':highlight' => $highlight));
11783
	}
11784
11785
	/**
11786
	* Set a new highlight value for a flight by Registration
11787
	*
11788
	* @param String $registration Registration of the aircraft
11789
	* @param String $date Date of spotted aircraft
11790
	* @param String $highlight New highlight value
11791
	*/
11792
	public function setHighlightFlightByRegistration($registration,$highlight, $date = '') {
11793
		if ($date == '') {
11794
			$query  = "UPDATE spotter_output SET highlight = :highlight WHERE spotter_id IN (SELECT MAX(spotter_id) FROM spotter_output WHERE registration = :registration)";
11795
			$query_values = array(':registration' => $registration, ':highlight' => $highlight);
11796
		} else {
11797
			$query  = "UPDATE spotter_output SET highlight = :highlight WHERE registration = :registration AND date(date) = :date";
11798
			$query_values = array(':registration' => $registration, ':highlight' => $highlight,':date' => $date);
11799
		}
11800
		$sth = $this->db->prepare($query);
11801
		$sth->execute($query_values);
11802
	}
11803
	
11804
	/**
11805
	* Gets the short url from bit.ly
11806
	*
11807
	* @param String $url the full url
11808
	* @return String the bit.ly url
11809
	*
11810
	*/
11811
	public function getBitlyURL($url)
11812
	{
11813
		global $globalBitlyAccessToken;
11814
		
11815
		if ($globalBitlyAccessToken == '') return $url;
11816
        
11817
		$google_url = 'https://api-ssl.bitly.com/v3/shorten?access_token='.$globalBitlyAccessToken.'&longUrl='.$url;
11818
		
11819
		$ch = curl_init();
11820
		curl_setopt($ch, CURLOPT_HEADER, 0);
11821
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
11822
		curl_setopt($ch, CURLOPT_URL, $google_url);
11823
		$bitly_data = curl_exec($ch);
11824
		curl_close($ch);
11825
		
11826
		$bitly_data = json_decode($bitly_data);
11827
		$bitly_url = '';
11828
		if ($bitly_data->status_txt = "OK"){
11829
			$bitly_url = $bitly_data->data->url;
11830
		}
11831
11832
		return $bitly_url;
11833
	}
11834
11835
11836
	public function getOrderBy()
11837
	{
11838
		$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"));
11839
		
11840
		return $orderby;
11841
		
11842
	}
11843
    
11844
/*
11845
	public function importFromFlightAware()
11846
	{
11847
		global $globalFlightAwareUsername, $globalFlightAwarePassword, $globalLatitudeMax, $globalLatitudeMin, $globalLongitudeMax, $globalLongitudeMin, $globalAirportIgnore;
11848
		$Spotter = new Spotter($this->db);
11849
		$SpotterLive = new SpotterLive($this->db);
11850
		$options = array(
11851
		            'trace' => true,
11852
		            'exceptions' => 0,
11853
		            'login' => $globalFlightAwareUsername,
11854
		            'password' => $globalFlightAwarePassword,
11855
		);
11856
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
11857
		$params = array('query' => '{range lat '.$globalLatitudeMin.' '.$globalLatitudeMax.'} {range lon '.$globalLongitudeMax.' '.$globalLongitudeMin.'} {true inAir}', 'howMany' => '15', 'offset' => '0');
11858
		$result = $client->SearchBirdseyeInFlight($params);
11859
		$dataFound = false;
11860
		$ignoreImport = false;
11861
		if (isset($result->SearchBirdseyeInFlightResult))
11862
		{
11863
			if (is_array($result->SearchBirdseyeInFlightResult->aircraft))
11864
			{
11865
				foreach($result->SearchBirdseyeInFlightResult->aircraft as $aircraft)
11866
				{
11867
					if (!strstr($aircraft->origin, 'L ') && !strstr($aircraft->destination, 'L '))
11868
					{
11869
						foreach($globalAirportIgnore as $airportIgnore)
11870
						{
11871
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
11872
							{
11873
								$ignoreImport = true; 
11874
							}
11875
						}
11876
						if ($ignoreImport == false)
11877
						{
11878
							$flightaware_id = $aircraft->faFlightID;
11879
							$ident = $aircraft->ident;
11880
							$aircraft_type = $aircraft->type;
11881
							$departure_airport = $aircraft->origin;
11882
							$arrival_airport = $aircraft->destination;
11883
							$latitude = $aircraft->latitude;
11884
							$longitude = $aircraft->longitude;
11885
							$waypoints = $aircraft->waypoints;
11886
							$altitude = $aircraft->altitude;
11887
							$heading = $aircraft->heading;
11888
							$groundspeed = $aircraft->groundspeed;
11889
							$dataFound = true;
11890
							//gets the callsign from the last hour
11891
							$last_hour_ident = $this->getIdentFromLastHour($ident);
11892
							//change the departure/arrival airport to NA if its not available
11893
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
11894
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
11895
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
11896
							if($last_hour_ident == "")
11897
							{
11898
								//adds the spotter data for the archive
11899
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11900
							}
11901
11902
							//adds the spotter LIVE data
11903
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11904
						}
11905
					}
11906
					$ignoreImport = false;
11907
				}
11908
			} else {
11909
				if (!strstr($result->SearchBirdseyeInFlightResult->aircraft->origin, 'L ') && !strstr($result->SearchBirdseyeInFlightResult->aircraft->destination, 'L '))
11910
				{
11911
					foreach($globalAirportIgnore as $airportIgnore)
11912
					{
11913
						foreach($globalAirportIgnore as $airportIgnore)
11914
						{
11915
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
11916
							{
11917
								$ignoreImport = true; 
11918
							}
11919
						}
11920
						if ($ignoreImport == false)
11921
						{
11922
							$flightaware_id = $result->SearchBirdseyeInFlightResult->aircraft->faFlightID;
11923
							$ident = $result->SearchBirdseyeInFlightResult->aircraft->ident;
11924
							$aircraft_type = $result->SearchBirdseyeInFlightResult->aircraft->type;
11925
							$departure_airport = $result->SearchBirdseyeInFlightResult->aircraft->origin;
11926
							$arrival_airport = $result->SearchBirdseyeInFlightResult->aircraft->destination;
11927
							$latitude = $result->SearchBirdseyeInFlightResult->aircraft->latitude;
11928
							$longitude = $result->SearchBirdseyeInFlightResult->aircraft->longitude;
11929
							$waypoints = $result->SearchBirdseyeInFlightResult->aircraft->waypoints;
11930
							$altitude = $result->SearchBirdseyeInFlightResult->aircraft->altitude;
11931
							$heading = $result->SearchBirdseyeInFlightResult->aircraft->heading;
11932
							$groundspeed = $result->SearchBirdseyeInFlightResult->aircraft->groundspeed;
11933
							$dataFound = true;
11934
							//gets the callsign from the last hour
11935
							$last_hour_ident = $this->getIdentFromLastHour($ident);
11936
							//change the departure/arrival airport to NA if its not available
11937
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
11938
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
11939
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
11940
							if($last_hour_ident == "")
11941
							{
11942
								//adds the spotter data for the archive
11943
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11944
							}
11945
							//adds the spotter LIVE data
11946
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11947
						}
11948
						$ignoreImport = false;
11949
					}
11950
				}
11951
			}
11952
		} 
11953
	}
11954
*/
11955
11956
	// Update flights data when new data in DB
11957
	public function updateFieldsFromOtherTables()
11958
	{
11959
		global $globalDebug, $globalDBdriver;
11960
		$Image = new Image($this->db);
11961
		
11962
11963
		// routes
11964
		if ($globalDebug) print "Routes...\n";
11965
		if ($globalDBdriver == 'mysql') {
11966
			$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)";
11967
		} else {
11968
			$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'";
11969
		}
11970
		$sth = $this->db->prepare($query);
11971
		$sth->execute();
11972
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11973
		{
11974
			$departure_airport_array = $this->getAllAirportInfo($row['fromairport_icao']);
11975
			$arrival_airport_array = $this->getAllAirportInfo($row['toairport_icao']);
11976
			if (count($departure_airport_array) > 0 && count($arrival_airport_array) > 0) {
11977
				$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";
11978
				$sthu = $this->db->prepare($update_query);
11979
				$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']));
11980
			}
11981
		}
11982
		
11983
		if ($globalDebug) print "Airlines...\n";
11984
		//airlines
11985
		if ($globalDBdriver == 'mysql') {
11986
			$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)";
11987
		} elseif ($globalDBdriver == 'pgsql') {
11988
			$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'";
11989
		}
11990
		$sth = $this->db->prepare($query);
11991
		$sth->execute();
11992
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11993
		{
11994
			if (is_numeric(substr($row['ident'], -1, 1)))
11995
			{
11996
				$fromsource = NULL;
11997
				if (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
11998
				elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
11999
				elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
12000
				elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
12001
				$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
12002
				if (isset($airline_array[0]['name'])) {
12003
					$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";
12004
					$sthu = $this->db->prepare($update_query);
12005
					$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']));
12006
				}
12007
			}
12008
		}
12009
12010
		if ($globalDebug) print "Remove Duplicate in aircraft_modes...\n";
12011
		//duplicate modes
12012
		$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";
12013
		$sth = $this->db->prepare($query);
12014
		$sth->execute();
12015
		
12016
		if ($globalDebug) print "Aircraft...\n";
12017
		//aircraft
12018
		if ($globalDBdriver == 'mysql') {
12019
			$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)";
12020
		} elseif ($globalDBdriver == 'pgsql') {
12021
			$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'";
12022
		}
12023
		$sth = $this->db->prepare($query);
12024
		$sth->execute();
12025
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
12026
		{
12027
			if ($row['aircraft_icao'] != '') {
12028
				$aircraft_name = $this->getAllAircraftInfo($row['aircraft_icao']);
12029
				if ($row['registration'] != ""){
12030
					$image_array = $Image->getSpotterImage($row['registration']);
12031
					if (!isset($image_array[0]['registration'])) {
12032
						$Image->addSpotterImage($row['registration']);
12033
					}
12034
				}
12035
				if (count($aircraft_name) > 0) {
12036
					$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";
12037
					$sthu = $this->db->prepare($update_query);
12038
					$sthu->execute(array(':aircraft_name' => $aircraft_name[0]['type'], ':aircraft_manufacturer' => $aircraft_name[0]['manufacturer'], ':spotter_id' => $row['spotter_id']));
12039
				}
12040
			}
12041
		}
12042
	}	
12043
12044
	// Update arrival airports for data already in DB
12045
	public function updateArrivalAirports()
12046
	{
12047
		global $globalDebug, $globalDBdriver, $globalClosestMinDist;
12048
		$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";
12049
		$sth = $this->db->prepare($query);
12050
		$sth->execute();
12051
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
12052
		{
12053
			if ($row['last_latitude'] != '' && $row['last_longitude'] != '') {
12054
				$closestAirports = $this->closestAirports($row['last_latitude'],$row['last_longitude'],$globalClosestMinDist);
12055
				$airport_icao = '';
12056
				 if (isset($closestAirports[0])) {
12057
					if ($row['arrival_airport_icao'] == $closestAirports[0]['icao']) {
12058
						$airport_icao = $closestAirports[0]['icao'];
12059
						if ($globalDebug) echo "\o/ 1st ---++ Find arrival airport. airport_icao : ".$airport_icao."\n";
12060
					} elseif (count($closestAirports > 1) && $row['arrival_airport_icao'] != '' && $row['arrival_airport_icao'] != 'NA') {
12061
						foreach ($closestAirports as $airport) {
12062
							if ($row['arrival_airport_icao'] == $airport['icao']) {
12063
								$airport_icao = $airport['icao'];
12064
								if ($globalDebug) echo "\o/ try --++ Find arrival airport. airport_icao : ".$airport_icao."\n";
12065
								break;
12066
							}
12067
						}
12068
					} elseif ($row['last_altitude'] == 0 || ($row['last_altitude'] != '' && ($closestAirports[0]['altitude'] <= $row['last_altitude']*100+1000 && $row['last_altitude']*100 < $closestAirports[0]['altitude']+5000))) {
12069
						$airport_icao = $closestAirports[0]['icao'];
12070
						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";
12071
					} else {
12072
						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";
12073
					}
12074
				} else {
12075
					if ($globalDebug) echo "----- No Airport near last coord. Latitude : ".$row['last_latitude'].' - Longitude : '.$row['last_longitude'].' - MinDist : '.$globalClosestMinDist."\n";
12076
				}
12077
				if ($row['real_arrival_airport_icao'] != $airport_icao) {
12078
					if ($globalDebug) echo "Updating airport to ".$airport_icao."...\n";
12079
					$update_query="UPDATE spotter_output SET real_arrival_airport_icao = :airport_icao WHERE spotter_id = :spotter_id";
12080
					$sthu = $this->db->prepare($update_query);
12081
					$sthu->execute(array(':airport_icao' => $airport_icao,':spotter_id' => $row['spotter_id']));
12082
				}
12083
			}
12084
		}
12085
	}
12086
	
12087
	public function closestAirports($origLat,$origLon,$dist = 10) {
12088
		global $globalDBdriver;
12089
		$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
12090
/*
12091
		$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 
12092
                      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)) 
12093
                      having distance < $dist ORDER BY distance limit 100;";
12094
*/
12095
		if ($globalDBdriver == 'mysql') {
12096
			$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 
12097
	                      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)) 
12098
	                      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;";
12099
                } else {
12100
			$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 
12101
	                      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)) 
12102
	                      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;";
12103
    		}
12104
		$sth = $this->db->prepare($query);
12105
		$sth->execute();
12106
		return $sth->fetchAll(PDO::FETCH_ASSOC);
12107
	}
12108
}
12109
/*
12110
$Spotter = new Spotter();
12111
print_r($Spotter->closestAirports('-19.9813','-47.8286',10));
12112
*/
12113
/*
12114
$Spotter = new Spotter();
12115
$da = $Spotter->countAllDetectedArrivalAirports(true,0,'',true);
12116
$aa = $Spotter->countAllArrivalAirports(true,0,'',true);
12117
print_r($da);
12118
print_r($aa);
12119
print_r(array_merge($da,$aa));
12120
*/
12121
?>