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

Spotter   D

Complexity

Total Complexity 1452

Size/Duplication

Total Lines 11725
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Importance

Changes 0
Metric Value
dl 0
loc 11725
rs 4.4102
c 0
b 0
f 0
wmc 1452
lcom 1
cbo 7

250 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
F getFilter() 0 68 40
F getDataFromDB() 0 360 146
F searchSpotterData() 0 343 59
B getLatestSpotterData() 0 36 5
C getLatestSpotterForLayar() 0 65 17
B getNewestSpotterDataSortedByAircraftType() 0 37 5
B getNewestSpotterDataSortedByAircraftRegistration() 0 36 5
B getNewestSpotterDataSortedByAirline() 0 36 5
B getNewestSpotterDataSortedByDepartureAirport() 0 38 5
B getNewestSpotterDataSortedByArrivalAirport() 0 35 5
A getSpotterDataByID() 0 16 2
C getSpotterDataByIdent() 0 48 7
C getSpotterDataByOwner() 0 48 7
B getSpotterDataByPilot() 0 43 6
C getSpotterDataByAircraft() 0 50 7
C getSpotterDataByRegistration() 0 51 7
C getSpotterDataByAirline() 0 49 7
C getSpotterDataByAirport() 0 49 7
C getSpotterDataByDate() 0 59 9
C getSpotterDataByCountry() 0 50 7
C getSpotterDataByManufacturer() 0 50 7
C getSpotterDataByRoute() 0 64 9
B getSpotterDataByHighlight() 0 36 5
A getHighlightByRegistration() 0 18 3
A getSquawkUsage() 0 18 2
A getAirportIcao() 0 17 2
A getAirportDistance() 0 18 2
B getAllAirportInfo() 0 43 3
B getAllAirportInfobyCountry() 0 35 4
B getAllAirportInfobyCoord() 0 28 4
B getAllWaypointsInfobyCoord() 0 30 3
C getAllAirlineInfo() 0 61 10
C getAllAirlineInfoByName() 0 23 7
B getAllAircraftInfo() 0 29 2
A getAircraftIcao() 0 22 3
A getAllAircraftType() 0 17 3
A getAllAircraftTypeByRegistration() 0 15 2
A getAllIDByRegistration() 0 16 2
A getOperator() 0 14 2
A getRouteInfo() 0 15 3
B getAircraftInfoByRegistration() 0 24 2
A getAircraftOwnerByRegistration() 0 13 2
B getAllFlightsforSitemap() 0 27 1
B getAllManufacturers() 0 25 2
B getAllAircraftTypes() 0 31 2
A getAllAircraftRegistrations() 0 22 2
B getAllSourceName() 0 26 4
C getAllAirlineNames() 0 46 11
C getAllAllianceNames() 0 22 8
A getAllAirlineCountries() 0 23 2
B getAllAirportNames() 0 45 3
A getAllOwnerNames() 0 12 1
A getAllPilotNames() 0 12 1
B getAllAirportCountries() 0 42 5
C getAllCountries() 0 71 9
A getAllIdents() 0 21 2
B getLast7DaysAirportsDeparture() 0 27 5
B getLast7DaysAirportsDepartureByAirlines() 0 26 5
B getLast7DaysDetectedAirportsDeparture() 0 34 5
B getLast7DaysDetectedAirportsDepartureByAirlines() 0 37 5
B getLast7DaysAirportsArrival() 0 28 5
B getLast7DaysDetectedAirportsArrival() 0 36 5
B getLast7DaysAirportsArrivalByAirlines() 0 27 5
B getLast7DaysDetectedAirportsArrivalByAirlines() 0 39 5
B getAllDates() 0 36 4
A getAllRoutes() 0 23 2
C updateIdentSpotterData() 0 39 8
A updateLatestSpotterData() 0 16 3
F addSpotterData() 0 306 103
B getIdentFromLastHour() 0 27 3
B getRealTimeData() 0 39 5
F countAllAirlines() 0 65 13
F countAllPilots() 0 67 13
C countAllPilotsByAirlines() 0 40 7
F countAllOwners() 0 63 13
C countAllOwnersByAirlines() 0 39 7
B countAllAirlinesByAircraft() 0 28 2
B countAllAirlineCountriesByAircraft() 0 26 2
B countAllAirlinesByAirport() 0 27 2
B countAllAirlineCountriesByAirport() 0 26 2
B countAllAirlinesByManufacturer() 0 26 2
B countAllAirlineCountriesByManufacturer() 0 25 2
B countAllAirlinesByDate() 0 40 4
B countAllAirlineCountriesByDate() 0 39 4
A countAllAirlinesByIdent() 0 14 1
A countAllAirlinesByOwner() 0 14 1
A countAllAirlinesByPilot() 0 14 1
B countAllAirlinesByRoute() 0 29 2
B countAllAirlineCountriesByRoute() 0 28 2
B countAllAirlinesByCountry() 0 26 2
B countAllAirlineCountriesByCountry() 0 25 2
C countAllAirlineCountries() 0 52 9
B countAllFlightOverCountries() 0 56 8
F countAllAircraftTypes() 0 67 13
F countAllAircraftTypesByAirlines() 0 68 13
C countAllAircraftTypesByMonths() 0 40 7
B countAllAircraftRegistrationByAircraft() 0 35 4
B countAllAircraftTypesByAirline() 0 25 2
B countAllAircraftRegistrationByAirline() 0 34 4
B countAllAircraftManufacturerByAirline() 0 24 2
B countAllAircraftTypesByAirport() 0 25 2
B countAllAircraftRegistrationByAirport() 0 33 4
A countAllAircraftManufacturerByAirport() 0 23 2
A countAllAircraftTypesByManufacturer() 0 23 2
B countAllAircraftRegistrationByManufacturer() 0 33 3
B countAllAircraftTypesByDate() 0 38 4
B countAllAircraftRegistrationByDate() 0 47 6
B countAllAircraftManufacturerByDate() 0 38 4
B countAllAircraftTypesByIdent() 0 25 2
A countAllAircraftTypesByPilot() 0 13 1
A countAllAircraftTypesByOwner() 0 13 1
B countAllAircraftRegistrationByIdent() 0 36 4
B countAllAircraftRegistrationByOwner() 0 37 4
B countAllAircraftRegistrationByPilot() 0 37 4
A countAllAircraftManufacturerByIdent() 0 22 2
A countAllAircraftManufacturerByOwner() 0 14 1
A countAllAircraftManufacturerByPilot() 0 14 1
B countAllAircraftTypesByRoute() 0 26 2
B countAllAircraftRegistrationByRoute() 0 38 4
B countAllAircraftManufacturerByRoute() 0 28 2
B countAllAircraftTypesByCountry() 0 27 2
B countAllAircraftRegistrationByCountry() 0 36 4
B countAllAircraftManufacturerByCountry() 0 26 2
B countAllAircraftManufacturers() 0 55 8
F countAllAircraftRegistrations() 0 77 15
C countAllAircraftRegistrationsByAirlines() 0 53 9
F countAllDepartureAirports() 0 69 13
C countAllDepartureAirportsByAirlines() 0 46 7
F countAllDetectedDepartureAirports() 0 70 13
C countAllDetectedDepartureAirportsByAirlines() 0 46 7
B countAllDepartureAirportsByAirline() 0 29 2
B countAllDepartureAirportCountriesByAirline() 0 26 2
B countAllDepartureAirportsByAircraft() 0 29 2
B countAllDepartureAirportCountriesByAircraft() 0 26 2
B countAllDepartureAirportsByRegistration() 0 29 2
B countAllDepartureAirportCountriesByRegistration() 0 26 2
B countAllDepartureAirportsByAirport() 0 29 2
B countAllDepartureAirportCountriesByAirport() 0 26 2
B countAllDepartureAirportsByManufacturer() 0 29 2
B countAllDepartureAirportCountriesByManufacturer() 0 26 2
B countAllDepartureAirportsByDate() 0 41 4
B countAllDepartureAirportCountriesByDate() 0 38 4
B countAllDepartureAirportsByIdent() 0 29 2
B countAllDepartureAirportsByOwner() 0 29 2
B countAllDepartureAirportsByPilot() 0 28 2
B countAllDepartureAirportCountriesByIdent() 0 26 2
A countAllDepartureAirportCountriesByOwner() 0 13 1
A countAllDepartureAirportCountriesByPilot() 0 13 1
B countAllDepartureAirportsByCountry() 0 30 2
B countAllDepartureAirportCountriesByCountry() 0 26 2
F countAllArrivalAirports() 0 75 14
C countAllArrivalAirportsByAirlines() 0 51 8
F countAllDetectedArrivalAirports() 0 74 14
C countAllDetectedArrivalAirportsByAirlines() 0 51 8
B countAllArrivalAirportsByAirline() 0 28 2
B countAllArrivalAirportCountriesByAirline() 0 27 2
B countAllArrivalAirportsByAircraft() 0 29 2
B countAllArrivalAirportCountriesByAircraft() 0 26 2
B countAllArrivalAirportsByRegistration() 0 30 2
B countAllArrivalAirportCountriesByRegistration() 0 26 2
B countAllArrivalAirportsByAirport() 0 29 2
B countAllArrivalAirportCountriesByAirport() 0 26 2
B countAllArrivalAirportsByManufacturer() 0 29 2
B countAllArrivalAirportCountriesByManufacturer() 0 26 2
B countAllArrivalAirportsByDate() 0 41 4
B countAllArrivalAirportCountriesByDate() 0 38 4
B countAllArrivalAirportsByIdent() 0 29 2
B countAllArrivalAirportsByOwner() 0 28 2
B countAllArrivalAirportsByPilot() 0 28 2
B countAllArrivalAirportCountriesByIdent() 0 26 2
A countAllArrivalAirportCountriesByOwner() 0 13 1
A countAllArrivalAirportCountriesByPilot() 0 13 1
B countAllArrivalAirportsByCountry() 0 29 2
B countAllArrivalAirportCountriesByCountry() 0 27 2
B countAllDepartureCountries() 0 55 8
C countAllArrivalCountries() 0 55 9
B countAllRoutes() 0 33 2
B countAllRoutesByAircraft() 0 32 2
B countAllRoutesByRegistration() 0 33 2
B countAllRoutesByAirline() 0 33 2
B countAllRoutesByAirport() 0 32 2
B countAllRoutesByCountry() 0 32 2
B countAllRoutesByDate() 0 46 4
B countAllRoutesByIdent() 0 33 2
B countAllRoutesByOwner() 0 33 2
B countAllRoutesByPilot() 0 33 2
B countAllRoutesByManufacturer() 0 33 2
B countAllRoutesWithWaypoints() 0 34 2
F countAllCallsigns() 0 63 13
C countAllCallsignsByAirlines() 0 35 7
B countAllDates() 0 42 4
B countAllDatesByAirlines() 0 42 4
B countAllDatesLast7Days() 0 39 4
B countAllDatesLastMonth() 0 39 4
B countAllDatesLastMonthByAirlines() 0 41 4
B countAllMonths() 0 39 4
B countAllMonthsByAirlines() 0 42 4
B countAllMilitaryMonths() 0 38 4
B countAllMonthsOwners() 0 39 4
B countAllMonthsOwnersByAirlines() 0 40 4
B countAllMonthsPilots() 0 39 4
B countAllMonthsPilotsByAirlines() 0 40 4
B countAllMonthsAirlines() 0 39 4
B countAllMonthsAircrafts() 0 39 4
B countAllMonthsAircraftsByAirlines() 0 40 4
B countAllMonthsRealArrivals() 0 39 4
B countAllMonthsRealArrivalsByAirlines() 0 40 4
B countAllMonthsLastYear() 0 40 4
B countAllHours() 0 58 6
B countAllHoursByAirlines() 0 58 6
B countAllHoursByAirline() 0 40 4
B countAllHoursByAircraft() 0 39 4
B countAllHoursByRegistration() 0 39 4
B countAllHoursByAirport() 0 39 4
B countAllHoursByManufacturer() 0 39 4
B countAllHoursByDate() 0 39 4
B countAllHoursByIdent() 0 40 4
B countAllHoursByOwner() 0 40 4
B countAllHoursByPilot() 0 40 4
B countAllHoursByRoute() 0 40 4
B countAllHoursByCountry() 0 39 4
B countOverallAircrafts() 0 30 5
B countOverallArrival() 0 30 5
B countOverallPilots() 0 29 5
B countOverallOwners() 0 29 5
B countOverallFlights() 0 32 6
B countOverallMilitaryFlights() 0 30 5
B countOverallAirlines() 0 34 6
B countAllHoursFromToday() 0 37 4
C getUpcomingFlights() 0 72 9
A getSpotterIDBasedOnFlightAwareID() 0 17 2
B parseDateString() 0 30 2
C parseDirection() 0 75 35
B getAircraftRegistration() 0 24 2
A getAircraftRegistrationBymodeS() 0 17 2
A getAircraftTypeBymodeS() 0 17 3
B getCountryFromLatitudeLongitude() 0 34 6
B getCountryFromISO2() 0 25 6
C convertAircraftRegistration() 0 49 8
B countryFromAircraftRegistration() 0 53 6
B registrationPrefixFromAircraftRegistration() 0 52 6
A countryFromAircraftRegistrationCode() 0 14 2
A setHighlightFlight() 0 6 1
A setHighlightFlightByRegistration() 0 11 2
A getBitlyURL() 0 23 3
A getOrderBy() 0 7 1
F updateFieldsFromOtherTables() 0 86 29
D updateArrivalAirports() 0 41 22
A closestAirports() 0 21 2

How to fix   Complexity   

Complex Class

Complex classes like Spotter often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use Spotter, and based on these observations, apply Extract Interface, too.

1
<?php
2
require_once(dirname(__FILE__).'/class.Scheduler.php');
3
require_once(dirname(__FILE__).'/class.ACARS.php');
4
require_once(dirname(__FILE__).'/class.Image.php');
5
$global_query = "SELECT spotter_output.* FROM spotter_output";
6
7
class Spotter{
8
	public $aircraft_correct_icaotype = array('CL64' => 'CL60',
9
					'F9LX' => 'F900',
10
					'K35T' => 'K35R',
11
					'F5EX' => 'FA50',
12
					'G102' => 'GLID',
13
					'LJ36' => 'LJ35',
14
					'G500' => 'EGRT',
15
					'A300' => 'A30B',
16
					'ROT' => 'B77W',
17
					'BPN' => 'B772',
18
					'0011' => 'B77W',
19
					'F9DX' => 'F900',
20
					'B757' => 'B752',
21
					'4/05' => 'A332',
22
					'F/A3' => 'A320',
23
					'F2EX' => 'F2TH',
24
					'EA55' => 'EA50',
25
					'B73B' => 'B737',
26
					'G450' => 'GLF4',
27
					'H25X' => 'H25B',
28
					'E175' => 'E75S',
29
					'B777' => 'B77W',
30
					'F2LX' => 'F2TH',
31
					'CL65' => 'CL60',
32
					'A380' => 'A388',
33
					'G550' => 'GLF5',
34
					'F9EX' => 'F900',
35
					'E195' => 'E190',
36
					'H750' => 'H25B',
37
					'B747' => 'B744',
38
					'B767' => 'B763',
39
					'PA39' => 'PA30',
40
					'H900' => 'H25B',
41
					'AN74' => 'AN72',
42
					'CL85' => 'CRJ2',
43
					'G400' => 'GLF4',
44
					'CL61' => 'CL60',
45
					'F2TS' => 'F2TH',
46
					'Z602' => 'CH60',
47
					'G100' => 'ASTR');
48
49
50
	public $db;
51
	
52
	public function __construct($dbc = null) {
53
		$Connection = new Connection($dbc);
54
		$this->db = $Connection->db();
55
	}
56
57
	/**
58
	* Get SQL query part for filter used
59
	* @param Array $filter the filter
60
	* @return Array the SQL part
61
	*/
62
	public function getFilter($filter = array(),$where = false,$and = false) {
63
		global $globalFilter, $globalStatsFilters, $globalFilterName;
64
		$filters = array();
65
		if (is_array($globalStatsFilters) && isset($globalStatsFilters[$globalFilterName])) {
66
			if (isset($globalStatsFilters[$globalFilterName][0]['source'])) {
67
				$filters = $globalStatsFilters[$globalFilterName];
68
			} else {
69
				$filter = array_merge($filter,$globalStatsFilters[$globalFilterName]);
70
			}
71
		}
72
		if (is_array($globalFilter)) $filter = array_merge($filter,$globalFilter);
73
		$filter_query_join = '';
74
		$filter_query_where = '';
75
		foreach($filters as $flt) {
76
			if (isset($flt['airlines']) && !empty($flt['airlines'])) {
77
				if ($flt['airlines'][0] != '') {
78
					if (isset($flt['source'])) {
79
						$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_icao IN ('".implode("','",$flt['airlines'])."') AND spotter_output.format_source IN ('".implode("','",$flt['source'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
80
					} else {
81
						$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_icao IN ('".implode("','",$flt['airlines'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
82
					}
83
				}
84
			}
85
			if (isset($flt['pilots_id']) && !empty($flt['pilots_id'])) {
86
				if (isset($flt['source'])) {
87
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.pilot_id IN ('".implode("','",$flt['pilots_id'])."') AND spotter_output.format_source IN ('".implode("','",$flt['source'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
88
				} else {
89
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.pilot_id IN ('".implode("','",$flt['pilots_id'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
90
				}
91
			}
92
			if ((isset($flt['airlines']) && empty($flt['airlines']) && isset($flt['pilots_id']) && empty($flt['pilots_id'])) || (!isset($flt['airlines']) && !isset($flt['pilots_id']))) {
93
				if (isset($flt['source'])) {
94
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.format_source IN ('".implode("','",$flt['source'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
95
				}
96
			}
97
		}
98
		if (isset($filter['airlines']) && !empty($filter['airlines'])) {
99
			if ($filter['airlines'][0] != '') {
100
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_icao IN ('".implode("','",$filter['airlines'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
101
			}
102
		}
103
		if (isset($filter['airlinestype']) && !empty($filter['airlinestype'])) {
104
			$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_type = '".$filter['airlinestype']."') sa ON sa.flightaware_id = spotter_output.flightaware_id ";
105
		}
106
		if (isset($filter['alliance']) && !empty($filter['alliance'])) {
107
			$filter_query_join .= " INNER JOIN (SELECT icao FROM airlines WHERE alliance = '".$filter['alliance']."') sal ON sal.icao = spotter_output.airline_icao ";
108
		}
109
		if (isset($filter['pilots_id']) && !empty($filter['pilots_id'])) {
110
				$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.pilot_id IN ('".implode("','",$filter['pilots_id'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
111
			}
112
		if (isset($filter['source']) && !empty($filter['source'])) {
113
			$filter_query_where = " WHERE format_source IN ('".implode("','",$filter['source'])."')";
114
		}
115
		if (isset($filter['ident']) && !empty($filter['ident'])) {
116
			$filter_query_where = " WHERE ident = '".$filter['ident']."'";
117
		}
118
		if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
119
			if ($filter_query_where == '') {
120
				$filter_query_where = " WHERE format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
121
			} else {
122
				$filter_query_where .= " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
123
			}
124
		}
125
		if ($filter_query_where == '' && $where) $filter_query_where = ' WHERE';
126
		elseif ($filter_query_where != '' && $and) $filter_query_where .= ' AND';
127
		$filter_query = $filter_query_join.$filter_query_where;
128
		return $filter_query;
129
	}
130
131
	/**
132
	* Executes the SQL statements to get the spotter information
133
	*
134
	* @param String $query the SQL query
135
	* @param Array $params parameter of the query
136
	* @param String $limitQuery the limit query
137
	* @return Array the spotter information
138
	*
139
	*/
140
	public function getDataFromDB($query, $params = array(), $limitQuery = '',$schedules = false)
141
	{
142
		global $globalSquawkCountry, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalAirlinesSource, $globalVAM;
143
		$Image = new Image($this->db);
144
		$Schedule = new Schedule($this->db);
145
		$ACARS = new ACARS($this->db);
146
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
147
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
148
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
149
		if (!isset($globalVAM)) $globalVAM = FALSE;
150
		date_default_timezone_set('UTC');
151
		
152
		if (!is_string($query))
153
		{
154
			return false;
155
		}
156
		
157
		if ($limitQuery != "")
158
		{
159
			if (!is_string($limitQuery))
160
			{
161
				return false;
162
			}
163
		}
164
165
		
166
		try {
167
			$sth = $this->db->prepare($query.$limitQuery);
168
			$sth->execute($params);
169
		} catch (PDOException $e) {
170
			printf("Invalid query : %s\nWhole query: %s\n",$e->getMessage(), $query.$limitQuery);
171
			exit();
172
		}
173
		
174
	//	$num_rows = count($sth->fetchAll());
175
		$num_rows = 0;
176
177
		$spotter_array = array();
178
		
179
180
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
181
		{
182
			$num_rows++;
183
			$temp_array = array();
184
			if (isset($row['spotter_live_id'])) {
185
				//$temp_array['spotter_id'] = $row['spotter_live_id'];
186
				$temp_array['spotter_id'] = $this->getSpotterIDBasedOnFlightAwareID($row['flightaware_id']);
187
			} elseif (isset($row['spotter_archive_id'])) {
188
				$temp_array['spotter_id'] = $row['spotter_archive_id'];
189
			} elseif (isset($row['spotter_archive_output_id'])) {
190
				$temp_array['spotter_id'] = $row['spotter_archive_output_id'];
191
			} elseif (isset($row['spotter_id'])) {
192
				$temp_array['spotter_id'] = $row['spotter_id'];
193
			} else {
194
				$temp_array['spotter_id'] = '';
195
			}
196
			if (isset($row['flightaware_id'])) $temp_array['flightaware_id'] = $row['flightaware_id'];
197
			if (isset($row['modes'])) $temp_array['modes'] = $row['modes'];
198
			$temp_array['ident'] = $row['ident'];
199
			if (isset($row['registration']) && $row['registration'] != '') {
200
				$temp_array['registration'] = $row['registration'];
201
			} elseif (isset($temp_array['modes'])) {
202
				$temp_array['registration'] = $this->getAircraftRegistrationBymodeS($temp_array['modes']);
203
			} else $temp_array['registration'] = '';
204
			if (isset($row['aircraft_icao'])) $temp_array['aircraft_type'] = $row['aircraft_icao'];
205
			
206
			$temp_array['departure_airport'] = $row['departure_airport_icao'];
207
			$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
208
			if (isset($row['real_arrival_airport_icao']) && $row['real_arrival_airport_icao'] != NULL) $temp_array['real_arrival_airport'] = $row['real_arrival_airport_icao'];
209
			if (isset($row['latitude'])) $temp_array['latitude'] = $row['latitude'];
210
			if (isset($row['longitude'])) $temp_array['longitude'] = $row['longitude'];
211
			/*
212
			if (Connection->tableExists('countries')) {
213
				$country_info = $this->getCountryFromLatitudeLongitude($temp_array['latitude'],$temp_array['longitude']);
214
				if (is_array($country_info) && isset($country_info['name']) && isset($country_info['iso2'])) {
215
				    $temp_array['country'] = $country_info['name'];
216
				    $temp_array['country_iso2'] = $country_info['iso2'];
217
				}
218
			}
219
			*/
220
			if (isset($row['waypoints'])) $temp_array['waypoints'] = $row['waypoints'];
221
			if (isset($row['format_source'])) $temp_array['format_source'] = $row['format_source'];
222
			if (isset($row['route_stop'])) {
223
				$temp_array['route_stop'] = $row['route_stop'];
224
				if ($row['route_stop'] != '') {
225
					$allroute = explode(' ',$row['route_stop']);
226
			
227
					foreach ($allroute as $route) {
228
						$route_airport_array = $this->getAllAirportInfo($route);
229
						if (isset($route_airport_array[0]['name'])) {
230
							$route_stop_details = array();
231
							$route_stop_details['airport_name'] = $route_airport_array[0]['name'];
232
							$route_stop_details['airport_city'] = $route_airport_array[0]['city'];
233
							$route_stop_details['airport_country'] = $route_airport_array[0]['country'];
234
							$route_stop_details['airport_icao'] = $route_airport_array[0]['icao'];
235
							$temp_array['route_stop_details'][] = $route_stop_details;
236
						}
237
					}
238
				}
239
			}
240
			if (isset($row['altitude'])) $temp_array['altitude'] = $row['altitude'];
241
			if (isset($row['heading'])) {
242
				$temp_array['heading'] = $row['heading'];
243
				$heading_direction = $this->parseDirection($row['heading']);
244
				if (isset($heading_direction[0]['direction_fullname'])) $temp_array['heading_name'] = $heading_direction[0]['direction_fullname'];
245
			}
246
			if (isset($row['ground_speed'])) $temp_array['ground_speed'] = $row['ground_speed'];
247
			$temp_array['image'] = "";
248
			$temp_array['image_thumbnail'] = "";
249
			$temp_array['image_source'] = "";
250
			$temp_array['image_copyright'] = "";
251
 
252
			if (isset($row['highlight'])) {
253
				$temp_array['highlight'] = $row['highlight'];
254
			} else $temp_array['highlight'] = '';
255
			
256
			if (isset($row['date'])) {
257
				$dateArray = $this->parseDateString($row['date']);
258
				if ($dateArray['seconds'] < 10)
259
				{
260
					$temp_array['date'] = "a few seconds ago";
261
				} elseif ($dateArray['seconds'] >= 5 && $dateArray['seconds'] < 30)
262
				{
263
					$temp_array['date'] = "half a minute ago";
264
				} elseif ($dateArray['seconds'] >= 30 && $dateArray['seconds'] < 60)
265
				{
266
					$temp_array['date'] = "about a minute ago";
267
				} elseif ($dateArray['minutes'] < 5)
268
				{
269
					$temp_array['date'] = "a few minutes ago";
270
				} elseif ($dateArray['minutes'] >= 5 && $dateArray['minutes'] < 60)
271
				{
272
					$temp_array['date'] = "about ".$dateArray['minutes']." minutes ago";
273
				} elseif ($dateArray['hours'] < 2)
274
				{
275
					$temp_array['date'] = "about an hour ago";
276
				} elseif ($dateArray['hours'] >= 2 && $dateArray['hours'] < 24)
277
				{
278
					$temp_array['date'] = "about ".$dateArray['hours']." hours ago";
279
				} else {
280
					$temp_array['date'] = date("M j Y, g:i a",strtotime($row['date']." UTC"));
281
				}
282
				$temp_array['date_minutes_past'] = $dateArray['minutes'];
283
				$temp_array['date_iso_8601'] = date("c",strtotime($row['date']." UTC"));
284
				$temp_array['date_rfc_2822'] = date("r",strtotime($row['date']." UTC"));
285
				$temp_array['date_unix'] = strtotime($row['date']." UTC");
286
			}
287
			
288
			if (isset($row['aircraft_name']) && $row['aircraft_name'] != '' && isset($row['aircraft_shadow']) && $row['aircraft_shadow'] != '') {
289
				$temp_array['aircraft_name'] = $row['aircraft_name'];
290
				$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
291
				if (isset($row['aircraft_shadow'])) {
292
					$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
293
				}
294
			} elseif (isset($row['aircraft_icao'])) {
295
				$aircraft_array = $this->getAllAircraftInfo($row['aircraft_icao']);
296
				if (count($aircraft_array) > 0) {
297
					$temp_array['aircraft_name'] = $aircraft_array[0]['type'];
298
					$temp_array['aircraft_manufacturer'] = $aircraft_array[0]['manufacturer'];
299
				
300
					if ($aircraft_array[0]['aircraft_shadow'] != NULL) {
301
						$temp_array['aircraft_shadow'] = $aircraft_array[0]['aircraft_shadow'];
302
					} else $temp_array['aircraft_shadow'] = 'default.png';
303
                                } else {
304
                            		$temp_array['aircraft_shadow'] = 'default.png';
305
					$temp_array['aircraft_name'] = 'N/A';
306
					$temp_array['aircraft_manufacturer'] = 'N/A';
307
                            	}
308
			}
309
			$fromsource = NULL;
310
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
311
			elseif (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
312
			elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
313
			elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
314
			elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
315
			if (!isset($row['airline_name']) || $row['airline_name'] == '') {
316
				if (!is_numeric(substr($row['ident'], 0, 3))) {
317
					if (is_numeric(substr($row['ident'], 2, 1))) {
318
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 2),$fromsource);
319
					} elseif (is_numeric(substr($row['ident'], 3, 1))) {
320
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
321
					} else {
322
						$airline_array = $this->getAllAirlineInfo('NA');
323
					}
324
				} else {
325
					$airline_array = $this->getAllAirlineInfo('NA');
326
				}
327
				if (count($airline_array) > 0) {
328
					$temp_array['airline_icao'] = $airline_array[0]['icao'];
329
					$temp_array['airline_iata'] = $airline_array[0]['iata'];
330
					$temp_array['airline_name'] = $airline_array[0]['name'];
331
					$temp_array['airline_country'] = $airline_array[0]['country'];
332
					$temp_array['airline_callsign'] = $airline_array[0]['callsign'];
333
					$temp_array['airline_type'] = $airline_array[0]['type'];
334
				}
335
			} else {
336
				$temp_array['airline_icao'] = $row['airline_icao'];
337
				if (isset($row['airline_iata'])) $temp_array['airline_iata'] = $row['airline_iata'];
338
				else $temp_array['airline_iata'] = 'N/A';
339
				$temp_array['airline_name'] = $row['airline_name'];
340
				$temp_array['airline_country'] = $row['airline_country'];
341
				if (isset($row['airline_callsign'])) $temp_array['airline_callsign'] = $row['airline_callsign'];
342
				else $temp_array['airline_callsign'] = 'N/A';
343
				$temp_array['airline_type'] = $row['airline_type'];
344
				if ($temp_array['airline_icao'] != '' && $temp_array['airline_iata'] == 'N/A') {
345
					$airline_array = $this->getAllAirlineInfo($temp_array['airline_icao']);
346
					if (count($airline_array) > 0) {
347
						$temp_array['airline_icao'] = $airline_array[0]['icao'];
348
						$temp_array['airline_iata'] = $airline_array[0]['iata'];
349
						$temp_array['airline_name'] = $airline_array[0]['name'];
350
						$temp_array['airline_country'] = $airline_array[0]['country'];
351
						$temp_array['airline_callsign'] = $airline_array[0]['callsign'];
352
						$temp_array['airline_type'] = $airline_array[0]['type'];
353
					}
354
				}
355
			}
356
			if (isset($temp_array['airline_iata']) && $temp_array['airline_iata'] != '') {
357
				$acars_array = $ACARS->getLiveAcarsData($temp_array['airline_iata'].substr($temp_array['ident'],3));
358
				//$acars_array = ACARS->getLiveAcarsData('BA40YL');
359
				if (count($acars_array) > 0) {
360
					$temp_array['acars'] = $acars_array;
361
					//print_r($acars_array);
362
				}
363
			}
364
			if (isset($row['owner_name']) && $row['owner_name'] != '' && $row['owner_name'] != NULL) {
365
				$temp_array['aircraft_owner'] = $row['owner_name'];
366
			}
367
			if ($temp_array['registration'] != "" && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM && !isset($temp_array['aircraft_owner'])) {
368
				$owner_info = $this->getAircraftOwnerByRegistration($temp_array['registration']);
369
				if ($owner_info['owner'] != '') $temp_array['aircraft_owner'] = ucwords(strtolower($owner_info['owner']));
370
				$temp_array['aircraft_base'] = $owner_info['base'];
371
				$temp_array['aircraft_date_first_reg'] = $owner_info['date_first_reg'];
372
			}
373
374
			if($temp_array['registration'] != "" || ($globalIVAO && isset($temp_array['aircraft_type']) && $temp_array['aircraft_type'] != ''))
375
			{
376
				if ($globalIVAO) {
377
					if (isset($temp_array['airline_icao']))	$image_array = $Image->getSpotterImage('',$temp_array['aircraft_type'],$temp_array['airline_icao']);
378
					else $image_array = $Image->getSpotterImage('',$temp_array['aircraft_type']);
379
				} else $image_array = $Image->getSpotterImage($temp_array['registration']);
380
				if (count($image_array) > 0) {
381
					$temp_array['image'] = $image_array[0]['image'];
382
					$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
383
					$temp_array['image_source'] = $image_array[0]['image_source'];
384
					$temp_array['image_source_website'] = $image_array[0]['image_source_website'];
385
					if ($temp_array['image_source_website'] == '' && $temp_array['image_source'] == 'planespotters') {
386
						$planespotter_url_array = explode("_", $temp_array['image']);
387
						$planespotter_id = str_replace(".jpg", "", $planespotter_url_array[1]);
388
						$temp_array['image_source_website'] = 'http://www.planespotters.net/Aviation_Photos/photo.show?id='.$planespotter_id;
389
					 }
390
					$temp_array['image_copyright'] = $image_array[0]['image_copyright'];
391
				}
392
			}
393
394
395
			if (isset($row['departure_airport_time']) && $row['departure_airport_time'] != '') {
396
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
397
			}
398
			if (isset($row['arrival_airport_time']) && $row['arrival_airport_time'] != '') {
399
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
400
			}
401
			
402
			if ((!isset($globalIVAO) || ! $globalIVAO) && (!isset($globalVATSIM) || !$globalVATSIM) && (!isset($globalphpVMS) || !$globalphpVMS) && (!isset($globalVAM) || !$globalVAM)) {
403
				if ($schedules === true) {
404
					$schedule_array = $Schedule->getSchedule($temp_array['ident']);
405
					//print_r($schedule_array);
406
					if (count($schedule_array) > 0) {
407
						if ($schedule_array['departure_airport_icao'] != '') {
408
							$row['departure_airport_icao'] = $schedule_array['departure_airport_icao'];
409
							$temp_array['departure_airport'] = $row['departure_airport_icao'];
410
						}
411
						if ($schedule_array['arrival_airport_icao'] != '') {
412
							$row['arrival_airport_icao'] = $schedule_array['arrival_airport_icao'];
413
							$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
414
						}
415
						$temp_array['departure_airport_time'] = $schedule_array['departure_airport_time'];
416
						$temp_array['arrival_airport_time'] = $schedule_array['arrival_airport_time'];
417
					}
418
				}
419
			} else {
420
				if (isset($row['real_departure_airport_time']) && $row['real_departure_airport_time'] != '') {
421
					$temp_array['departure_airport_time'] = $row['real_departure_airport_time'];
422
				}
423
				if (isset($row['real_arrival_airport_time']) && $row['real_arrival_airport_time'] != '') {
424
					$temp_array['real_arrival_airport_time'] = $row['real_arrival_airport_time'];
425
				}
426
			}
427
			
428
			//if ($row['departure_airport_icao'] != '' && $row['departure_airport_name'] == '') {
429
			if ($row['departure_airport_icao'] != '') {
430
				$departure_airport_array = $this->getAllAirportInfo($row['departure_airport_icao']);
431
				if (!isset($departure_airport_array[0]['name'])) $departure_airport_array = $this->getAllAirportInfo('NA');
432
			/*
433
			} elseif ($row['departure_airport_name'] != '') {
434
				$temp_array['departure_airport_name'] = $row['departure_airport_name'];
435
				$temp_array['departure_airport_city'] = $row['departure_airport_city'];
436
				$temp_array['departure_airport_country'] = $row['departure_airport_country'];
437
				$temp_array['departure_airport_icao'] = $row['departure_airport_icao'];
438
			*/
439
			} else $departure_airport_array = $this->getAllAirportInfo('NA');
440
			if (isset($departure_airport_array[0]['name'])) {
441
				$temp_array['departure_airport_name'] = $departure_airport_array[0]['name'];
442
				$temp_array['departure_airport_city'] = $departure_airport_array[0]['city'];
443
				$temp_array['departure_airport_country'] = $departure_airport_array[0]['country'];
444
				$temp_array['departure_airport_iata'] = $departure_airport_array[0]['iata'];
445
				$temp_array['departure_airport_icao'] = $departure_airport_array[0]['icao'];
446
				$temp_array['departure_airport_latitude'] = $departure_airport_array[0]['latitude'];
447
				$temp_array['departure_airport_longitude'] = $departure_airport_array[0]['longitude'];
448
				$temp_array['departure_airport_altitude'] = $departure_airport_array[0]['altitude'];
449
			}
450
451
			/*
452
			if (isset($row['departure_airport_time'])) {
453
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
454
			}
455
			*/
456
			
457
			if ($row['arrival_airport_icao'] != '') {
458
				$arrival_airport_array = $this->getAllAirportInfo($row['arrival_airport_icao']);
459
				if (count($arrival_airport_array) == 0) $arrival_airport_array = $this->getAllAirportInfo('NA');
460
			} else $arrival_airport_array = $this->getAllAirportInfo('NA');
461
			if (isset($arrival_airport_array[0]['name'])) {
462
				$temp_array['arrival_airport_name'] = $arrival_airport_array[0]['name'];
463
				$temp_array['arrival_airport_city'] = $arrival_airport_array[0]['city'];
464
				$temp_array['arrival_airport_country'] = $arrival_airport_array[0]['country'];
465
				$temp_array['arrival_airport_iata'] = $arrival_airport_array[0]['iata'];
466
				$temp_array['arrival_airport_icao'] = $arrival_airport_array[0]['icao'];
467
				$temp_array['arrival_airport_latitude'] = $arrival_airport_array[0]['latitude'];
468
				$temp_array['arrival_airport_longitude'] = $arrival_airport_array[0]['longitude'];
469
				$temp_array['arrival_airport_altitude'] = $arrival_airport_array[0]['altitude'];
470
			}
471
			/*
472
			if (isset($row['arrival_airport_time'])) {
473
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
474
			}
475
			*/
476
			if (isset($row['pilot_id']) && $row['pilot_id'] != '') $temp_array['pilot_id'] = $row['pilot_id'];
477
			if (isset($row['pilot_name']) && $row['pilot_name'] != '') $temp_array['pilot_name'] = $row['pilot_name'];
478
			if (isset($row['source_name']) && $row['source_name'] != '') $temp_array['source_name'] = $row['source_name'];
479
			if (isset($row['over_country']) && $row['over_country'] != '') $temp_array['over_country'] = $row['over_country'];
480
			if (isset($row['distance']) && $row['distance'] != '') $temp_array['distance'] = $row['distance'];
481
			if (isset($row['squawk'])) {
482
				$temp_array['squawk'] = $row['squawk'];
483
				if ($row['squawk'] != '' && isset($temp_array['country_iso2'])) {
484
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['country_iso2']);
485
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
486
				} elseif ($row['squawk'] != '' && isset($temp_array['over_country'])) {
487
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['over_country']);
488
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
489
				} elseif ($row['squawk'] != '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
490
			}
491
    			
492
			$temp_array['query_number_rows'] = $num_rows;
493
			
494
			$spotter_array[] = $temp_array;
495
		}
496
		if ($num_rows == 0) return array();
497
		$spotter_array[0]['query_number_rows'] = $num_rows;
498
		return $spotter_array;
499
	}	
500
	
501
	
502
	/**
503
	* Gets all the spotter information
504
	*
505
	* @return Array the spotter information
506
	*
507
	*/
508
	public function searchSpotterData($q = '', $registration = '', $aircraft_icao = '', $aircraft_manufacturer = '', $highlights = '', $airline_icao = '', $airline_country = '', $airline_type = '', $airport = '', $airport_country = '', $callsign = '', $departure_airport_route = '', $arrival_airport_route = '', $owner = '',$pilot_id = '',$pilot_name = '',$altitude = '', $date_posted = '', $limit = '', $sort = '', $includegeodata = '',$origLat = '',$origLon = '',$dist = '',$filters = array())
509
	{
510
		global $globalTimezone, $globalDBdriver;
511
		require_once(dirname(__FILE__).'/class.Translation.php');
512
		$Translation = new Translation();
513
514
		date_default_timezone_set('UTC');
515
516
		$query_values = array();
517
		$additional_query = '';
518
		$filter_query = $this->getFilter($filters,true,true);
519
		if ($q != "")
520
		{
521
			if (!is_string($q))
522
			{
523
				return false;
524
			} else {
525
				$q_array = explode(" ", $q);
526
				foreach ($q_array as $q_item){
527
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
528
					$additional_query .= " AND (";
529
					if (is_int($q_item)) $additional_query .= "(spotter_output.spotter_id like '%".$q_item."%') OR ";
530
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
531
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
532
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
533
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
534
					$additional_query .= "(spotter_output.airline_name like '%".$q_item."%') OR ";
535
					$additional_query .= "(spotter_output.airline_country like '%".$q_item."%') OR ";
536
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
537
					$additional_query .= "(spotter_output.departure_airport_name like '%".$q_item."%') OR ";
538
					$additional_query .= "(spotter_output.departure_airport_city like '%".$q_item."%') OR ";
539
					$additional_query .= "(spotter_output.departure_airport_country like '%".$q_item."%') OR ";
540
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
541
					$additional_query .= "(spotter_output.arrival_airport_name like '%".$q_item."%') OR ";
542
					$additional_query .= "(spotter_output.arrival_airport_city like '%".$q_item."%') OR ";
543
					$additional_query .= "(spotter_output.arrival_airport_country like '%".$q_item."%') OR ";
544
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
545
					$additional_query .= "(spotter_output.owner_name like '%".$q_item."%') OR ";
546
					$additional_query .= "(spotter_output.pilot_id like '%".$q_item."%') OR ";
547
					$additional_query .= "(spotter_output.pilot_name like '%".$q_item."%') OR ";
548
					$additional_query .= "(spotter_output.ident like '%".$q_item."%') OR ";
549
					$translate = $Translation->ident2icao($q_item);
550
					if ($translate != $q_item) $additional_query .= "(spotter_output.ident like '%".$translate."%') OR ";
551
					$additional_query .= "(spotter_output.highlight like '%".$q_item."%')";
552
					$additional_query .= ")";
553
				}
554
			}
555
		}
556
557
		if ($registration != "")
558
		{
559
			$registration = filter_var($registration,FILTER_SANITIZE_STRING);
560
			if (!is_string($registration))
561
			{
562
				return false;
563
			} else {
564
				$additional_query .= " AND spotter_output.registration = :registration";
565
				$query_values = array_merge($query_values,array(':registration' => $registration));
566
			}
567
		}
568
569
		if ($aircraft_icao != "")
570
		{
571
			$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
572
			if (!is_string($aircraft_icao))
573
			{
574
				return false;
575
			} else {
576
				$additional_query .= " AND spotter_output.aircraft_icao = :aircraft_icao";
577
				$query_values = array_merge($query_values,array(':aircraft_icao' => $aircraft_icao));
578
			}
579
		}
580
581
		if ($aircraft_manufacturer != "")
582
		{
583
			$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
584
			if (!is_string($aircraft_manufacturer))
585
			{
586
				return false;
587
			} else {
588
				$additional_query .= " AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer";
589
				$query_values = array_merge($query_values,array(':aircraft_manufacturer' => $aircraft_manufacturer));
590
			}
591
		}
592
593
		if ($highlights == "true")
594
		{
595
			if (!is_string($highlights))
596
			{
597
				return false;
598
			} else {
599
				$additional_query .= " AND (spotter_output.highlight <> '')";
600
			}
601
		}
602
603
		if ($airline_icao != "")
604
		{
605
			$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
606
			if (!is_string($airline_icao))
607
			{
608
				return false;
609
			} else {
610
				$additional_query .= " AND spotter_output.airline_icao = :airline_icao";
611
				$query_values = array_merge($query_values,array(':airline_icao' => $airline_icao));
612
			}
613
		}
614
615
		if ($airline_country != "")
616
		{
617
			$airline_country = filter_var($airline_country,FILTER_SANITIZE_STRING);
618
			if (!is_string($airline_country))
619
			{
620
				return false;
621
			} else {
622
				$additional_query .= " AND spotter_output.airline_country = :airline_country";
623
				$query_values = array_merge($query_values,array(':airline_country' => $airline_country));
624
			}
625
		}
626
627
		if ($airline_type != "")
628
		{
629
			if (!is_string($airline_type))
630
			{
631
				return false;
632
			} else {
633
				if ($airline_type == "passenger")
634
				{
635
					$additional_query .= " AND (spotter_output.airline_type = 'passenger')";
636
				}
637
				if ($airline_type == "cargo")
638
				{
639
					$additional_query .= " AND (spotter_output.airline_type = 'cargo')";
640
				}
641
				if ($airline_type == "military")
642
				{
643
					$additional_query .= " AND (spotter_output.airline_type = 'military')";
644
				}
645
			}
646
		}
647
648
		if ($airport != "")
649
		{
650
			$airport = filter_var($airport,FILTER_SANITIZE_STRING);
651
			if (!is_string($airport))
652
			{
653
				return false;
654
			} else {
655
				$additional_query .= " AND (spotter_output.departure_airport_icao = :airport OR spotter_output.arrival_airport_icao = :airport)";
656
				$query_values = array_merge($query_values,array(':airport' => $airport));
657
			}
658
		}
659
660
		if ($airport_country != "")
661
		{
662
			$airport_country = filter_var($airport_country,FILTER_SANITIZE_STRING);
663
			if (!is_string($airport_country))
664
			{
665
				return false;
666
			} else {
667
				$additional_query .= " AND (spotter_output.departure_airport_country = :airport_country OR spotter_output.arrival_airport_country = :airport_country)";
668
				$query_values = array_merge($query_values,array(':airport_country' => $airport_country));
669
			}
670
		}
671
    
672
		if ($callsign != "")
673
		{
674
			$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
675
			if (!is_string($callsign))
676
			{
677
				return false;
678
			} else {
679
				$translate = $Translation->ident2icao($callsign);
680
				if ($translate != $callsign) {
681
					$additional_query .= " AND (spotter_output.ident = :callsign OR spotter_output.ident = :translate)";
682
					$query_values = array_merge($query_values,array(':callsign' => $callsign,':translate' => $translate));
683
				} else {
684
					$additional_query .= " AND spotter_output.ident = :callsign";
685
					$query_values = array_merge($query_values,array(':callsign' => $callsign));
686
				}
687
			}
688
		}
689
690
		if ($owner != "")
691
		{
692
			$owner = filter_var($owner,FILTER_SANITIZE_STRING);
693
			if (!is_string($owner))
694
			{
695
				return false;
696
			} else {
697
				$additional_query .= " AND spotter_output.owner_name = :owner";
698
				$query_values = array_merge($query_values,array(':owner' => $owner));
699
			}
700
		}
701
702
		if ($pilot_name != "")
703
		{
704
			$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
705
			if (!is_string($pilot_name))
706
			{
707
				return false;
708
			} else {
709
				$additional_query .= " AND spotter_output.pilot_name = :pilot_name";
710
				$query_values = array_merge($query_values,array(':pilot_name' => $pilot_name));
711
			}
712
		}
713
714
		if ($pilot_id != "")
715
		{
716
			$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_NUMBER_INT);
717
			if (!is_string($pilot_id))
718
			{
719
				return false;
720
			} else {
721
				$additional_query .= " AND spotter_output.pilot_id = :pilot_id";
722
				$query_values = array_merge($query_values,array(':pilot_id' => $pilot_id));
723
			}
724
		}
725
726
		if ($departure_airport_route != "")
727
		{
728
			$departure_airport_route = filter_var($departure_airport_route,FILTER_SANITIZE_STRING);
729
			if (!is_string($departure_airport_route))
730
			{
731
				return false;
732
			} else {
733
				$additional_query .= " AND spotter_output.departure_airport_icao = :departure_airport_route";
734
				$query_values = array_merge($query_values,array(':departure_airport_route' => $departure_airport_route));
735
			}
736
		}
737
738
		if ($arrival_airport_route != "")
739
		{
740
			$arrival_airport_route = filter_var($arrival_airport_route,FILTER_SANITIZE_STRING);
741
			if (!is_string($arrival_airport_route))
742
			{
743
				return false;
744
			} else {
745
				$additional_query .= " AND spotter_output.arrival_airport_icao = :arrival_airport_route";
746
				$query_values = array_merge($query_values,array(':arrival_airport_route' => $arrival_airport_route));
747
			}
748
		}
749
750
		if ($altitude != "")
751
		{
752
			$altitude_array = explode(",", $altitude);
753
			$altitude_array[0] = filter_var($altitude_array[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
754
			$altitude_array[1] = filter_var($altitude_array[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
755
756
			if ($altitude_array[1] != "")
757
			{                
758
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
759
				$altitude_array[1] = substr($altitude_array[1], 0, -2);
760
				$additional_query .= " AND altitude BETWEEN '".$altitude_array[0]."' AND '".$altitude_array[1]."' ";
761
			} else {
762
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
763
				$additional_query .= " AND altitude <= '".$altitude_array[0]."' ";
764
			}
765
		}
766
767
		if ($date_posted != "")
768
		{
769
			$date_array = explode(",", $date_posted);
770
			$date_array[0] = filter_var($date_array[0],FILTER_SANITIZE_STRING);
771
			$date_array[1] = filter_var($date_array[1],FILTER_SANITIZE_STRING);
772
773
			if ($globalTimezone != '') {
774
				date_default_timezone_set($globalTimezone);
775
				$datetime = new DateTime();
776
				$offset = $datetime->format('P');
777
			} else $offset = '+00:00';
778
779
			if ($date_array[1] != "")
780
			{
781
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
782
				$date_array[1] = date("Y-m-d H:i:s", strtotime($date_array[1]));
783
				if ($globalDBdriver == 'mysql') {
784
					$additional_query .= " AND TIMESTAMP(CONVERT_TZ(spotter_output.date,'+00:00', '".$offset."')) >= '".$date_array[0]."' AND TIMESTAMP(CONVERT_TZ(spotter_output.date,'+00:00', '".$offset."')) <= '".$date_array[1]."' ";
785
				} else {
786
					$additional_query .= " AND CAST(spotter_output.date AT TIME ZONE INTERVAL ".$offset." AS TIMESTAMP) >= '".$date_array[0]."' AND CAST(spotter_output.date AT TIME ZONE INTERVAL ".$offset." AS TIMESTAMP) <= '".$date_array[1]."' ";
787
				}
788
			} else {
789
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
790
				if ($globalDBdriver == 'mysql') {
791
					$additional_query .= " AND TIMESTAMP(CONVERT_TZ(spotter_output.date,'+00:00', '".$offset."')) >= '".$date_array[0]."' ";
792
				} else {
793
					$additional_query .= " AND CAST(spotter_output.date AT TIME ZONE INTERVAL ".$offset." AS TIMESTAMP) >= '".$date_array[0]."' ";
794
				}
795
			}
796
		}
797
798
		if ($limit != "")
799
		{
800
			$limit_array = explode(",", $limit);
801
			
802
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
803
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
804
			
805
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
806
			{
807
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
808
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
809
			} else $limit_query = "";
810
		} else $limit_query = "";
811
812
813
		if ($sort != "")
814
		{
815
			$search_orderby_array = $this->getOrderBy();
816
			$orderby_query = $search_orderby_array[$sort]['sql'];
817
		} else {
818
			if ($origLat != "" && $origLon != "" && $dist != "") {
819
				$orderby_query = " ORDER BY distance ASC";
820
			} else {
821
				$orderby_query = " ORDER BY spotter_output.date DESC";
822
			}
823
		}
824
825
		if ($includegeodata == "true")
826
		{
827
			$additional_query .= " AND spotter_output.waypoints <> ''";
828
		}
829
830
831
		if ($origLat != "" && $origLon != "" && $dist != "") {
832
			$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
833
834
			if ($globalDBdriver == 'mysql') {
835
				$query="SELECT spotter_output.*, 1.60935*3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - spotter_archive.latitude)*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(spotter_archive.latitude*pi()/180)*POWER(SIN(($origLon-spotter_archive.longitude)*pi()/180/2),2))) as distance 
836
						FROM spotter_archive,spotter_output".$filter_query." spotter_output.flightaware_id = spotter_archive.flightaware_id AND spotter_output.ident <> '' ".$additional_query."AND spotter_archive.longitude between ($origLon-$dist/cos(radians($origLat))*69) and ($origLon+$dist/cos(radians($origLat)*69)) and spotter_archive.latitude between ($origLat-($dist/69)) and ($origLat+($dist/69)) 
837
						AND (3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - spotter_archive.latitude)*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(spotter_archive.latitude*pi()/180)*POWER(SIN(($origLon-spotter_archive.longitude)*pi()/180/2),2)))) < $dist".$orderby_query;
838
			} else {
839
				$query="SELECT spotter_output.*, 1.60935 * 3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - CAST(spotter_archive.latitude as double precision))*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(CAST(spotter_archive.latitude as double precision)*pi()/180)*POWER(SIN(($origLon-CAST(spotter_archive.longitude as double precision))*pi()/180/2),2))) as distance 
840
						FROM spotter_archive,spotter_output".$filter_query." spotter_output.flightaware_id = spotter_archive.flightaware_id AND spotter_output.ident <> '' ".$additional_query."AND CAST(spotter_archive.longitude as double precision) between ($origLon-$dist/cos(radians($origLat))*69) and ($origLon+$dist/cos(radians($origLat))*69) and CAST(spotter_archive.latitude as double precision) between ($origLat-($dist/69)) and ($origLat+($dist/69)) 
841
						AND (3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - CAST(spotter_archive.latitude as double precision))*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(CAST(spotter_archive.latitude as double precision)*pi()/180)*POWER(SIN(($origLon-CAST(spotter_archive.longitude as double precision))*pi()/180/2),2)))) < $dist".$filter_query.$orderby_query;
842
			}
843
		} else {		
844
			$query  = "SELECT spotter_output.* FROM spotter_output".$filter_query." spotter_output.ident <> '' 
845
					".$additional_query."
846
					".$orderby_query;
847
		}
848
		$spotter_array = $this->getDataFromDB($query, $query_values,$limit_query);
849
		return $spotter_array;
850
	}
851
	
852
	
853
	/**
854
	* Gets all the spotter information based on the latest data entry
855
	*
856
	* @return Array the spotter information
857
	*
858
	*/
859
	public function getLatestSpotterData($limit = '', $sort = '', $filter = array())
860
	{
861
		global $global_query;
862
		
863
		date_default_timezone_set('UTC');
864
865
		$filter_query = $this->getFilter($filter);
866
		
867
		if ($limit != "")
868
		{
869
			$limit_array = explode(",", $limit);
870
			
871
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
872
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
873
			
874
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
875
			{
876
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
877
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
878
			} else $limit_query = "";
879
		} else $limit_query = "";
880
		
881
		if ($sort != "")
882
		{
883
			$search_orderby_array = $this->getOrderBy();
884
			$orderby_query = $search_orderby_array[$sort]['sql'];
885
		} else {
886
			$orderby_query = " ORDER BY spotter_output.date DESC";
887
		}
888
889
		$query  = $global_query.$filter_query." ".$orderby_query;
890
891
		$spotter_array = $this->getDataFromDB($query, array(),$limit_query,true);
892
893
		return $spotter_array;
894
	}
895
    
896
    
897
    /**
898
	* Gets all the spotter information based on a user's latitude and longitude
899
	*
900
	* @return Array the spotter information
901
	*
902
	*/
903
	public function getLatestSpotterForLayar($lat, $lng, $radius, $interval)
904
	{
905
		date_default_timezone_set('UTC');
906
		$limit_query = '';
907
		if ($lat != "")
908
		{
909
			if (!is_numeric($lat))
910
			{
911
				return false;
912
			}
913
		}
914
        
915
		if ($lng != "")
916
		{
917
			if (!is_numeric($lng))
918
			{
919
				return false;
920
			}
921
		}
922
		
923
		if ($radius != "")
924
		{
925
			if (!is_numeric($radius))
926
			{
927
				return false;
928
			}
929
		}
930
    		$additional_query = '';
931
		if ($interval != "")
932
		{
933
			if (!is_string($interval))
934
			{
935
				return false;
936
			} else {
937
				if ($interval == "30m"){
938
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 MINUTE) <= $this_output.date ';
939
				} else if ($interval == "1h"){
940
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) <= $this_output.date ';
941
				} else if ($interval == "3h"){
942
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 3 HOUR) <= $this_output.date ';
943
				} else if ($interval == "6h"){
944
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 6 HOUR) <= $this_output.date ';
945
				} else if ($interval == "12h"){
946
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 12 HOUR) <= $this_output.date ';
947
				} else if ($interval == "24h"){
948
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 24 HOUR) <= $this_output.date ';
949
				} else if ($interval == "7d"){
950
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY) <= $this_output.date ';
951
				} else if ($interval == "30d"){
952
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 DAY) <= $this_output.date ';
953
				} 
954
			}
955
		}
956
957
		$query  = "SELECT spotter_output.*, ( 6371 * acos( cos( radians($lat) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians($lng) ) + sin( radians($lat) ) * sin( radians( latitude ) ) ) ) AS distance FROM spotter_output 
958
                   WHERE spotter_output.latitude <> '' 
959
				   AND spotter_output.longitude <> '' 
960
                   ".$additional_query."
961
                   HAVING distance < :radius  
962
				   ORDER BY distance";
963
964
		$spotter_array = $this->getDataFromDB($query, array(':radius' => $radius),$limit_query);
965
966
		return $spotter_array;
967
	}
968
    
969
    
970
    /**
971
	* Gets all the spotter information sorted by the newest aircraft type
972
	*
973
	* @return Array the spotter information
974
	*
975
	*/
976
	public function getNewestSpotterDataSortedByAircraftType($limit = '', $sort = '',$filter = array())
977
	{
978
		global $global_query;
979
		
980
		date_default_timezone_set('UTC');
981
982
		$filter_query = $this->getFilter($filter,true,true);
983
984
		$limit_query = '';
985
		if ($limit != "")
986
		{
987
			$limit_array = explode(",", $limit);
988
			
989
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
990
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
991
			
992
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
993
			{
994
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
995
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
996
			}
997
		}
998
		
999
		if ($sort != "")
1000
		{
1001
			$search_orderby_array = $this->getOrderBy();
1002
			$orderby_query = $search_orderby_array[$sort]['sql'];
1003
		} else {
1004
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1005
		}
1006
1007
		$query  = $global_query." ".$filter_query." spotter_output.aircraft_name <> '' GROUP BY spotter_output.aircraft_icao,spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time ".$orderby_query;
1008
1009
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1010
1011
		return $spotter_array;
1012
	}
1013
    
1014
    
1015
	/**
1016
	* Gets all the spotter information sorted by the newest aircraft registration
1017
	*
1018
	* @return Array the spotter information
1019
	*
1020
	*/
1021
	public function getNewestSpotterDataSortedByAircraftRegistration($limit = '', $sort = '', $filter = array())
1022
	{
1023
		global $global_query;
1024
		
1025
		date_default_timezone_set('UTC');
1026
		$filter_query = $this->getFilter($filter,true,true);
1027
1028
		$limit_query = '';
1029
		if ($limit != "")
1030
		{
1031
			$limit_array = explode(",", $limit);
1032
			
1033
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1034
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1035
			
1036
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1037
			{
1038
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1039
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1040
			}
1041
		}
1042
		
1043
		if ($sort != "")
1044
		{
1045
			$search_orderby_array = $this->getOrderBy();
1046
			$orderby_query = $search_orderby_array[$sort]['sql'];
1047
		} else {
1048
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1049
		}
1050
1051
		$query  = $global_query." ".$filter_query." spotter_output.registration <> '' GROUP BY spotter_output.registration,spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time ".$orderby_query;
1052
1053
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1054
1055
		return $spotter_array;
1056
	}
1057
1058
1059
	/**
1060
	* Gets all the spotter information sorted by the newest airline
1061
	*
1062
	* @return Array the spotter information
1063
	*
1064
	*/
1065
	public function getNewestSpotterDataSortedByAirline($limit = '', $sort = '',$filter = array())
1066
	{
1067
		global $global_query;
1068
		
1069
		date_default_timezone_set('UTC');
1070
		$filter_query = $this->getFilter($filter,true,true);
1071
		
1072
		$limit_query = '';
1073
		if ($limit != "")
1074
		{
1075
			$limit_array = explode(",", $limit);
1076
			
1077
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1078
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1079
			
1080
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1081
			{
1082
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1083
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1084
			}
1085
		}
1086
		
1087
		if ($sort != "")
1088
		{
1089
			$search_orderby_array = $this->getOrderBy();
1090
			$orderby_query = $search_orderby_array[$sort]['sql'];
1091
		} else {
1092
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1093
		}
1094
1095
		$query  = $global_query." ".$filter_query." spotter_output.airline_name <> '' GROUP BY spotter_output.airline_icao,spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time ".$orderby_query;
1096
1097
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1098
1099
		return $spotter_array;
1100
	}
1101
    
1102
    
1103
    /**
1104
	* Gets all the spotter information sorted by the newest departure airport
1105
	*
1106
	* @return Array the spotter information
1107
	*
1108
	*/
1109
	public function getNewestSpotterDataSortedByDepartureAirport($limit = '', $sort = '', $filter = array())
1110
	{
1111
		global $global_query;
1112
		
1113
		date_default_timezone_set('UTC');
1114
		
1115
		$filter_query = $this->getFilter($filter,true,true);
1116
		
1117
		$limit_query = '';
1118
		
1119
		if ($limit != "")
1120
		{
1121
			$limit_array = explode(",", $limit);
1122
			
1123
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1124
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1125
			
1126
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1127
			{
1128
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1129
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1130
			}
1131
		}
1132
		
1133
		if ($sort != "")
1134
		{
1135
			$search_orderby_array = $this->getOrderBy();
1136
			$orderby_query = $search_orderby_array[$sort]['sql'];
1137
		} else {
1138
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1139
		}
1140
1141
		$query  = $global_query." ".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' GROUP BY spotter_output.departure_airport_icao,spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time ".$orderby_query;
1142
1143
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1144
1145
		return $spotter_array;
1146
	}
1147
1148
1149
	/**
1150
	* Gets all the spotter information sorted by the newest arrival airport
1151
	*
1152
	* @return Array the spotter information
1153
	*
1154
	*/
1155
	public function getNewestSpotterDataSortedByArrivalAirport($limit = '', $sort = '', $filter = array())
1156
	{
1157
		global $global_query;
1158
		
1159
		date_default_timezone_set('UTC');
1160
		$filter_query = $this->getFilter($filter,true,true);
1161
		$limit_query = '';
1162
		if ($limit != "")
1163
		{
1164
			$limit_array = explode(",", $limit);
1165
			
1166
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1167
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1168
			
1169
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1170
			{
1171
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1172
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1173
			}
1174
		}
1175
		
1176
		if ($sort != "")
1177
		{
1178
			$search_orderby_array = $this->getOrderBy();
1179
			$orderby_query = $search_orderby_array[$sort]['sql'];
1180
		} else {
1181
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1182
		}
1183
1184
		$query  = $global_query.$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' GROUP BY spotter_output.arrival_airport_icao,spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time ".$orderby_query;
1185
1186
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1187
1188
		return $spotter_array;
1189
	}
1190
	
1191
1192
	/**
1193
	* Gets all the spotter information based on the spotter id
1194
	*
1195
	* @return Array the spotter information
1196
	*
1197
	*/
1198
	public function getSpotterDataByID($id = '')
1199
	{
1200
		global $global_query;
1201
		
1202
		date_default_timezone_set('UTC');
1203
		if ($id == '') return array();
1204
		$additional_query = "spotter_output.spotter_id = :id";
1205
		$query_values = array(':id' => $id);
1206
1207
		//$query  = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ";
1208
		$query  = $global_query." WHERE ".$additional_query." ";
1209
1210
		$spotter_array = $this->getDataFromDB($query,$query_values);
1211
1212
		return $spotter_array;
1213
	}
1214
1215
	
1216
	
1217
	
1218
	/**
1219
	* Gets all the spotter information based on the callsign
1220
	*
1221
	* @return Array the spotter information
1222
	*
1223
	*/
1224
	public function getSpotterDataByIdent($ident = '', $limit = '', $sort = '')
1225
	{
1226
		global $global_query;
1227
		
1228
		date_default_timezone_set('UTC');
1229
		
1230
		$query_values = array();
1231
		$limit_query = '';
1232
		$additional_query = '';
1233
		if ($ident != "")
1234
		{
1235
			if (!is_string($ident))
1236
			{
1237
				return false;
1238
			} else {
1239
				$additional_query = " AND (spotter_output.ident = :ident)";
1240
				$query_values = array(':ident' => $ident);
1241
			}
1242
		}
1243
		
1244
		if ($limit != "")
1245
		{
1246
			$limit_array = explode(",", $limit);
1247
			
1248
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1249
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1250
			
1251
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1252
			{
1253
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1254
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1255
			}
1256
		}
1257
1258
		if ($sort != "")
1259
		{
1260
			$search_orderby_array = $this->getOrderBy();
1261
			$orderby_query = $search_orderby_array[$sort]['sql'];
1262
		} else {
1263
			$orderby_query = " ORDER BY spotter_output.date DESC";
1264
		}
1265
1266
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1267
1268
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1269
1270
		return $spotter_array;
1271
	}
1272
	
1273
	/**
1274
	* Gets all the spotter information based on the owner
1275
	*
1276
	* @return Array the spotter information
1277
	*
1278
	*/
1279
	public function getSpotterDataByOwner($owner = '', $limit = '', $sort = '')
1280
	{
1281
		global $global_query;
1282
		
1283
		date_default_timezone_set('UTC');
1284
		
1285
		$query_values = array();
1286
		$limit_query = '';
1287
		$additional_query = '';
1288
		if ($owner != "")
1289
		{
1290
			if (!is_string($owner))
1291
			{
1292
				return false;
1293
			} else {
1294
				$additional_query = " AND (spotter_output.owner_name = :owner)";
1295
				$query_values = array(':owner' => $owner);
1296
			}
1297
		}
1298
		
1299
		if ($limit != "")
1300
		{
1301
			$limit_array = explode(",", $limit);
1302
			
1303
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1304
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1305
			
1306
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1307
			{
1308
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1309
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1310
			}
1311
		}
1312
1313
		if ($sort != "")
1314
		{
1315
			$search_orderby_array = $this->getOrderBy();
1316
			$orderby_query = $search_orderby_array[$sort]['sql'];
1317
		} else {
1318
			$orderby_query = " ORDER BY spotter_output.date DESC";
1319
		}
1320
1321
		$query = $global_query." WHERE spotter_output.owner_name <> '' ".$additional_query." ".$orderby_query;
1322
1323
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1324
1325
		return $spotter_array;
1326
	}
1327
	
1328
	/**
1329
	* Gets all the spotter information based on the pilot
1330
	*
1331
	* @return Array the spotter information
1332
	*
1333
	*/
1334
	public function getSpotterDataByPilot($pilot = '', $limit = '', $sort = '')
1335
	{
1336
		global $global_query;
1337
		
1338
		date_default_timezone_set('UTC');
1339
		
1340
		$query_values = array();
1341
		$limit_query = '';
1342
		$additional_query = '';
1343
		if ($pilot != "")
1344
		{
1345
			$additional_query = " AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot)";
1346
			$query_values = array(':pilot' => $pilot);
1347
		}
1348
		
1349
		if ($limit != "")
1350
		{
1351
			$limit_array = explode(",", $limit);
1352
			
1353
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1354
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1355
			
1356
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1357
			{
1358
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1359
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1360
			}
1361
		}
1362
1363
		if ($sort != "")
1364
		{
1365
			$search_orderby_array = $this->getOrderBy();
1366
			$orderby_query = $search_orderby_array[$sort]['sql'];
1367
		} else {
1368
			$orderby_query = " ORDER BY spotter_output.date DESC";
1369
		}
1370
1371
		$query = $global_query." WHERE spotter_output.pilot_name <> '' ".$additional_query." ".$orderby_query;
1372
1373
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1374
1375
		return $spotter_array;
1376
	}
1377
	
1378
	
1379
	
1380
	/**
1381
	* Gets all the spotter information based on the aircraft type
1382
	*
1383
	* @return Array the spotter information
1384
	*
1385
	*/
1386
	public function getSpotterDataByAircraft($aircraft_type = '', $limit = '', $sort = '', $filter = array())
1387
	{
1388
		global $global_query;
1389
		
1390
		date_default_timezone_set('UTC');
1391
		
1392
		$query_values = array();
1393
		$limit_query = '';
1394
		$additional_query = '';
1395
		$filter_query = $this->getFilter($filter,true,true);
1396
		
1397
		if ($aircraft_type != "")
1398
		{
1399
			if (!is_string($aircraft_type))
1400
			{
1401
				return false;
1402
			} else {
1403
				$additional_query = " AND (spotter_output.aircraft_icao = :aircraft_type)";
1404
				$query_values = array(':aircraft_type' => $aircraft_type);
1405
			}
1406
		}
1407
		
1408
		if ($limit != "")
1409
		{
1410
			$limit_array = explode(",", $limit);
1411
			
1412
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1413
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1414
			
1415
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1416
			{
1417
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1418
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1419
			}
1420
		}
1421
1422
		if ($sort != "")
1423
		{
1424
			$search_orderby_array = $this->getOrderBy();
1425
			$orderby_query = $search_orderby_array[$sort]['sql'];
1426
		} else {
1427
			$orderby_query = " ORDER BY spotter_output.date DESC";
1428
		}
1429
1430
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1431
1432
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1433
1434
		return $spotter_array;
1435
	}
1436
	
1437
	
1438
	/**
1439
	* Gets all the spotter information based on the aircraft registration
1440
	*
1441
	* @return Array the spotter information
1442
	*
1443
	*/
1444
	public function getSpotterDataByRegistration($registration = '', $limit = '', $sort = '', $filter = array())
1445
	{
1446
		global $global_query;
1447
		
1448
		date_default_timezone_set('UTC');
1449
		
1450
		$query_values = array();
1451
		$limit_query = '';
1452
		$additional_query = '';
1453
		
1454
		if ($registration != "")
1455
		{
1456
			if (!is_string($registration))
1457
			{
1458
				return false;
1459
			} else {
1460
				$additional_query = " (spotter_output.registration = :registration)";
1461
				$query_values = array(':registration' => $registration);
1462
			}
1463
		}
1464
		
1465
		if ($limit != "")
1466
		{
1467
			$limit_array = explode(",", $limit);
1468
			
1469
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1470
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1471
			
1472
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1473
			{
1474
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1475
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1476
			}
1477
		}
1478
1479
		if ($sort != "")
1480
		{
1481
			$search_orderby_array = $this->getOrderBy();
1482
			$orderby_query = $search_orderby_array[$sort]['sql'];
1483
		} else {
1484
			$orderby_query = " ORDER BY spotter_output.date DESC";
1485
		}
1486
		$filter_query = $this->getFilter($filter,true,true);
1487
1488
		//$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1489
		$query = $global_query.$filter_query." ".$additional_query." ".$orderby_query;
1490
1491
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1492
1493
		return $spotter_array;
1494
	}
1495
1496
	
1497
	
1498
	
1499
	/**
1500
	* Gets all the spotter information based on the airline
1501
	*
1502
	* @return Array the spotter information
1503
	*
1504
	*/
1505
	public function getSpotterDataByAirline($airline = '', $limit = '', $sort = '',$filters = array())
1506
	{
1507
		global $global_query;
1508
		
1509
		date_default_timezone_set('UTC');
1510
1511
		$query_values = array();
1512
		$limit_query = '';
1513
		$additional_query = '';
1514
		$filter_query = $this->getFilter($filters,true,true);
1515
		
1516
		if ($airline != "")
1517
		{
1518
			if (!is_string($airline))
1519
			{
1520
				return false;
1521
			} else {
1522
				$additional_query = " AND (spotter_output.airline_icao = :airline)";
1523
				$query_values = array(':airline' => $airline);
1524
			}
1525
		}
1526
		
1527
		if ($limit != "")
1528
		{
1529
			$limit_array = explode(",", $limit);
1530
			
1531
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1532
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1533
			
1534
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1535
			{
1536
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1537
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1538
			}
1539
		}
1540
		
1541
		if ($sort != "")
1542
		{
1543
			$search_orderby_array = $this->getOrderBy();
1544
			$orderby_query = $search_orderby_array[$sort]['sql'];
1545
		} else {
1546
			$orderby_query = " ORDER BY spotter_output.date DESC";
1547
		}
1548
1549
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1550
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1551
1552
		return $spotter_array;
1553
	}
1554
	
1555
	
1556
	/**
1557
	* Gets all the spotter information based on the airport
1558
	*
1559
	* @return Array the spotter information
1560
	*
1561
	*/
1562
	public function getSpotterDataByAirport($airport = '', $limit = '', $sort = '',$filters = array())
1563
	{
1564
		global $global_query;
1565
		
1566
		date_default_timezone_set('UTC');
1567
		$query_values = array();
1568
		$limit_query = '';
1569
		$additional_query = '';
1570
		$filter_query = $this->getFilter($filters,true,true);
1571
		
1572
		if ($airport != "")
1573
		{
1574
			if (!is_string($airport))
1575
			{
1576
				return false;
1577
			} else {
1578
				$additional_query .= " AND ((spotter_output.departure_airport_icao = :airport) OR (spotter_output.arrival_airport_icao = :airport))";
1579
				$query_values = array(':airport' => $airport);
1580
			}
1581
		}
1582
		
1583
		if ($limit != "")
1584
		{
1585
			$limit_array = explode(",", $limit);
1586
			
1587
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1588
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1589
			
1590
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1591
			{
1592
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1593
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1594
			}
1595
		}
1596
		
1597
		if ($sort != "")
1598
		{
1599
			$search_orderby_array = $this->getOrderBy();
1600
			$orderby_query = $search_orderby_array[$sort]['sql'];
1601
		} else {
1602
			$orderby_query = " ORDER BY spotter_output.date DESC";
1603
		}
1604
1605
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." AND ((spotter_output.departure_airport_icao <> 'NA') AND (spotter_output.arrival_airport_icao <> 'NA')) ".$orderby_query;
1606
1607
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1608
1609
		return $spotter_array;
1610
	}
1611
1612
1613
1614
	/**
1615
	* Gets all the spotter information based on the date
1616
	*
1617
	* @return Array the spotter information
1618
	*
1619
	*/
1620
	public function getSpotterDataByDate($date = '', $limit = '', $sort = '',$filter = array())
1621
	{
1622
		global $global_query, $globalTimezone, $globalDBdriver;
1623
		
1624
		$query_values = array();
1625
		$limit_query = '';
1626
		$additional_query = '';
1627
1628
		$filter_query = $this->getFilter($filter,true,true);
1629
		
1630
		if ($date != "")
1631
		{
1632
			if ($globalTimezone != '') {
1633
				date_default_timezone_set($globalTimezone);
1634
				$datetime = new DateTime($date);
1635
				$offset = $datetime->format('P');
1636
			} else {
1637
				date_default_timezone_set('UTC');
1638
				$datetime = new DateTime($date);
1639
				$offset = '+00:00';
1640
			}
1641
			if ($globalDBdriver == 'mysql') {
1642
				$additional_query = " AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date ";
1643
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':offset' => $offset);
1644
			} elseif ($globalDBdriver == 'pgsql') {
1645
				//$globalTimezone = 'UTC';
1646
				$additional_query = " AND to_char(spotter_output.date AT TIME ZONE :timezone,'YYYY-mm-dd') = :date ";
1647
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':timezone' => $globalTimezone);
1648
				//$additional_query = " AND to_char(spotter_output.date,'YYYY-mm-dd') = :date ";
1649
				//$query_values = array(':date' => $datetime->format('Y-m-d'));
1650
			}
1651
		}
1652
		
1653
		if ($limit != "")
1654
		{
1655
			$limit_array = explode(",", $limit);
1656
			
1657
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1658
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1659
			
1660
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1661
			{
1662
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1663
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1664
			}
1665
		}
1666
1667
		if ($sort != "")
1668
		{
1669
			$search_orderby_array = $this->getOrderBy();
1670
			$orderby_query = $search_orderby_array[$sort]['sql'];
1671
		} else {
1672
			$orderby_query = " ORDER BY spotter_output.date DESC";
1673
		}
1674
1675
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query.$orderby_query;
1676
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1677
		return $spotter_array;
1678
	}
1679
1680
1681
1682
	/**
1683
	* Gets all the spotter information based on the country name
1684
	*
1685
	* @return Array the spotter information
1686
	*
1687
	*/
1688
	public function getSpotterDataByCountry($country = '', $limit = '', $sort = '',$filters = array())
1689
	{
1690
		global $global_query;
1691
		
1692
		date_default_timezone_set('UTC');
1693
		
1694
		$query_values = array();
1695
		$limit_query = '';
1696
		$additional_query = '';
1697
		$filter_query = $this->getFilter($filters,true,true);
1698
		if ($country != "")
1699
		{
1700
			if (!is_string($country))
1701
			{
1702
				return false;
1703
			} else {
1704
				$additional_query .= " AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country))";
1705
				$additional_query .= " OR spotter_output.airline_country = :country";
1706
				$query_values = array(':country' => $country);
1707
			}
1708
		}
1709
		
1710
		if ($limit != "")
1711
		{
1712
			$limit_array = explode(",", $limit);
1713
			
1714
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1715
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1716
			
1717
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1718
			{
1719
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1720
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1721
			}
1722
		}
1723
					
1724
		if ($sort != "")
1725
		{
1726
			$search_orderby_array = $this->getOrderBy();
1727
			$orderby_query = $search_orderby_array[$sort]['sql'];
1728
		} else {
1729
			$orderby_query = " ORDER BY spotter_output.date DESC";
1730
		}
1731
1732
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1733
1734
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1735
1736
		return $spotter_array;
1737
	}	
1738
	
1739
	
1740
	/**
1741
	* Gets all the spotter information based on the manufacturer name
1742
	*
1743
	* @return Array the spotter information
1744
	*
1745
	*/
1746
	public function getSpotterDataByManufacturer($aircraft_manufacturer = '', $limit = '', $sort = '', $filters = array())
1747
	{
1748
		global $global_query;
1749
		
1750
		date_default_timezone_set('UTC');
1751
		
1752
		$query_values = array();
1753
		$additional_query = '';
1754
		$limit_query = '';
1755
		$filter_query = $this->getFilter($filters,true,true);
1756
		
1757
		if ($aircraft_manufacturer != "")
1758
		{
1759
			if (!is_string($aircraft_manufacturer))
1760
			{
1761
				return false;
1762
			} else {
1763
				$additional_query .= " AND (spotter_output.aircraft_manufacturer = :aircraft_manufacturer)";
1764
				$query_values = array(':aircraft_manufacturer' => $aircraft_manufacturer);
1765
			}
1766
		}
1767
		
1768
		if ($limit != "")
1769
		{
1770
			$limit_array = explode(",", $limit);
1771
			
1772
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1773
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1774
			
1775
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1776
			{
1777
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1778
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1779
			}
1780
		}
1781
1782
		if ($sort != "")
1783
		{
1784
			$search_orderby_array = $this->getOrderBy();
1785
			$orderby_query = $search_orderby_array[$sort]['sql'];
1786
		} else {
1787
			$orderby_query = " ORDER BY spotter_output.date DESC";
1788
		}
1789
1790
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1791
1792
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1793
1794
		return $spotter_array;
1795
	}
1796
1797
1798
  
1799
  
1800
	/**
1801
	* Gets a list of all aircraft that take a route
1802
	*
1803
	* @param String $departure_airport_icao ICAO code of departure airport
1804
	* @param String $arrival_airport_icao ICAO code of arrival airport
1805
	* @return Array the spotter information
1806
	*
1807
	*/
1808
	public function getSpotterDataByRoute($departure_airport_icao = '', $arrival_airport_icao = '', $limit = '', $sort = '', $filters = array())
1809
	{
1810
		global $global_query;
1811
		
1812
		$query_values = array();
1813
		$additional_query = '';
1814
		$limit_query = '';
1815
		$filter_query = $this->getFilter($filters,true,true);
1816
		if ($departure_airport_icao != "")
1817
		{
1818
			if (!is_string($departure_airport_icao))
1819
			{
1820
				return false;
1821
			} else {
1822
				$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
1823
				$additional_query .= " AND (spotter_output.departure_airport_icao = :departure_airport_icao)";
1824
				//$additional_query .= " AND (spotter_output.departure_airport_icao = :departure_airport_icao AND spotter_output.real_departure_airport_icao IS NULL) OR spotter_output.real_departure_airport_icao = :departure_airport_icao";
1825
				$query_values = array(':departure_airport_icao' => $departure_airport_icao);
1826
			}
1827
		}
1828
		
1829
		if ($arrival_airport_icao != "")
1830
		{
1831
			if (!is_string($arrival_airport_icao))
1832
			{
1833
				return false;
1834
			} else {
1835
				$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
1836
				$additional_query .= " AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)";
1837
				//$additional_query .= " AND ((spotter_output.arrival_airport_icao = :arrival_airport_icao AND spotter_output.real_arrival_airport_icao IS NULL) OR spotter_output.real_arrival_airport_icao = :arrival_airport_icao)";
1838
				$query_values = array_merge($query_values,array(':arrival_airport_icao' => $arrival_airport_icao));
1839
			}
1840
		}
1841
		
1842
		if ($limit != "")
1843
		{
1844
			$limit_array = explode(",", $limit);
1845
			
1846
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1847
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1848
			
1849
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1850
			{
1851
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1852
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1853
			}
1854
		}
1855
	
1856
		if ($sort != "")
1857
		{
1858
			$search_orderby_array = $this->getOrderBy();
1859
			$orderby_query = $search_orderby_array[$sort]['sql'];
1860
		} else {
1861
			$orderby_query = " ORDER BY spotter_output.date DESC";
1862
		}
1863
1864
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1865
          
1866
		//$result = mysqli_query($GLOBALS["___mysqli_ston"], $query);
1867
1868
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1869
1870
		return $spotter_array;
1871
	}
1872
	
1873
	
1874
	
1875
	/**
1876
	* Gets all the spotter information based on the special column in the table
1877
	*
1878
	* @return Array the spotter information
1879
	*
1880
	*/
1881
	public function getSpotterDataByHighlight($limit = '', $sort = '', $filter = array())
1882
	{
1883
		global $global_query;
1884
		
1885
		date_default_timezone_set('UTC');
1886
		$filter_query = $this->getFilter($filter,true,true);
1887
		$limit_query = '';
1888
		
1889
		if ($limit != "")
1890
		{
1891
			$limit_array = explode(",", $limit);
1892
			
1893
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1894
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1895
			
1896
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1897
			{
1898
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1899
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1900
			}
1901
		}
1902
		
1903
		if ($sort != "")
1904
		{
1905
			$search_orderby_array = $this->getOrderBy();
1906
			$orderby_query = $search_orderby_array[$sort]['sql'];
1907
		} else {
1908
			$orderby_query = " ORDER BY spotter_output.date DESC";
1909
		}
1910
1911
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' ".$orderby_query;
1912
1913
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1914
1915
		return $spotter_array;
1916
	}
1917
1918
	/**
1919
	* Gets all the highlight based on a aircraft registration
1920
	*
1921
	* @return String the highlight text
1922
	*
1923
	*/
1924
	public function getHighlightByRegistration($registration,$filter = array())
1925
	{
1926
		global $global_query;
1927
		
1928
		date_default_timezone_set('UTC');
1929
		$filter_query = $this->getFilter($filter,true,true);
1930
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
1931
		
1932
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' AND spotter_output.registration = :registration";
1933
		$sth = $this->db->prepare($query);
1934
		$sth->execute(array(':registration' => $registration));
1935
1936
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1937
		{
1938
			$highlight = $row['highlight'];
1939
		}
1940
		if (isset($highlight)) return $highlight;
1941
	}
1942
1943
	
1944
	/**
1945
	* Gets the squawk usage from squawk code
1946
	*
1947
	* @param String $squawk squawk code
1948
	* @param String $country country
1949
	* @return String usage
1950
	*
1951
	*/
1952
	public function getSquawkUsage($squawk = '',$country = 'FR')
1953
	{
1954
		
1955
		$squawk = filter_var($squawk,FILTER_SANITIZE_STRING);
1956
		$country = filter_var($country,FILTER_SANITIZE_STRING);
1957
1958
		$query  = "SELECT squawk.* FROM squawk WHERE squawk.code = :squawk AND squawk.country = :country LIMIT 1";
1959
		$query_values = array(':squawk' => ltrim($squawk,'0'), ':country' => $country);
1960
		
1961
		$sth = $this->db->prepare($query);
1962
		$sth->execute($query_values);
1963
    
1964
		$row = $sth->fetch(PDO::FETCH_ASSOC);
1965
		$sth->closeCursor();
1966
		if (count($row) > 0) {
1967
			return $row['usage'];
1968
		} else return '';
1969
	}
1970
1971
	/**
1972
	* Gets the airport icao from the iata
1973
	*
1974
	* @param String $airport_iata the iata code of the airport
1975
	* @return String airport iata
1976
	*
1977
	*/
1978
	public function getAirportIcao($airport_iata = '')
1979
	{
1980
		
1981
		$airport_iata = filter_var($airport_iata,FILTER_SANITIZE_STRING);
1982
1983
		$query  = "SELECT airport.* FROM airport WHERE airport.iata = :airport LIMIT 1";
1984
		$query_values = array(':airport' => $airport_iata);
1985
		
1986
		$sth = $this->db->prepare($query);
1987
		$sth->execute($query_values);
1988
		
1989
		$row = $sth->fetch(PDO::FETCH_ASSOC);
1990
		$sth->closeCursor();
1991
		if (count($row) > 0) {
1992
			return $row['icao'];
1993
		} else return '';
1994
	}
1995
1996
	/**
1997
	* Gets the airport distance
1998
	*
1999
	* @param String $airport_icao the icao code of the airport
2000
	* @param Float $latitude the latitude
2001
	* @param Float $longitude the longitude
2002
	* @return Float distance to the airport
2003
	*
2004
	*/
2005
	public function getAirportDistance($airport_icao,$latitude,$longitude)
2006
	{
2007
		
2008
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
2009
2010
		$query  = "SELECT airport.latitude, airport.longitude FROM airport WHERE airport.icao = :airport LIMIT 1";
2011
		$query_values = array(':airport' => $airport_icao);
2012
		$sth = $this->db->prepare($query);
2013
		$sth->execute($query_values);
2014
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2015
		$sth->closeCursor();
2016
		if (count($row) > 0) {
2017
			$airport_latitude = $row['latitude'];
2018
			$airport_longitude = $row['longitude'];
2019
			$Common = new Common();
2020
			return $Common->distance($latitude,$longitude,$airport_latitude,$airport_longitude);
2021
		} else return '';
2022
	}
2023
	
2024
	/**
2025
	* Gets the airport info based on the icao
2026
	*
2027
	* @param String $airport the icao code of the airport
2028
	* @return Array airport information
2029
	*
2030
	*/
2031
	public function getAllAirportInfo($airport = '')
2032
	{
2033
		
2034
		$airport = filter_var($airport,FILTER_SANITIZE_STRING);
2035
2036
		$query_values = array();
2037
		if ($airport == 'NA') {
2038
			return array(array('name' => 'Not available','city' => 'N/A', 'country' => 'N/A','iata' => 'NA','icao' => 'NA','altitude' => NULL,'latitude' => 0,'longitude' => 0,'type' => 'NA','home_link' => '','wikipedia_link' => '','image_thumb' => '', 'image' => ''));
2039
		} elseif ($airport == '') {
2040
			$query  = "SELECT airport.name, airport.city, airport.country, airport.iata, airport.icao, airport.latitude, airport.longitude, airport.altitude, airport.type, airport.home_link, airport.wikipedia_link, airport.image_thumb, airport.image FROM airport";
2041
		} else {
2042
			$query  = "SELECT airport.name, airport.city, airport.country, airport.iata, airport.icao, airport.latitude, airport.longitude, airport.altitude, airport.type, airport.home_link, airport.wikipedia_link, airport.image_thumb, airport.image FROM airport WHERE airport.icao = :airport LIMIT 1";
2043
			$query_values = array(':airport' => $airport);
2044
		}
2045
		
2046
		$sth = $this->db->prepare($query);
2047
		$sth->execute($query_values);
2048
		/*
2049
		$airport_array = array();
2050
		$temp_array = array();
2051
		
2052
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2053
		{
2054
			$temp_array['name'] = $row['name'];
2055
			$temp_array['city'] = $row['city'];
2056
			$temp_array['country'] = $row['country'];
2057
			$temp_array['iata'] = $row['iata'];
2058
			$temp_array['icao'] = $row['icao'];
2059
			$temp_array['latitude'] = $row['latitude'];
2060
			$temp_array['longitude'] = $row['longitude'];
2061
			$temp_array['altitude'] = $row['altitude'];
2062
			$temp_array['home_link'] = $row['home_link'];
2063
			$temp_array['wikipedia_link'] = $row['wikipedia_link'];
2064
			$temp_array['image'] = $row['image'];
2065
			$temp_array['image_thumb'] = $row['image_thumb'];
2066
2067
			$airport_array[] = $temp_array;
2068
		}
2069
2070
		return $airport_array;
2071
		*/
2072
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2073
	}
2074
	
2075
	/**
2076
	* Gets the airport info based on the country
2077
	*
2078
	* @param Array $countries Airports countries
2079
	* @return Array airport information
2080
	*
2081
	*/
2082
	public function getAllAirportInfobyCountry($countries)
2083
	{
2084
		$lst_countries = '';
2085
		foreach ($countries as $country) {
2086
			$country = filter_var($country,FILTER_SANITIZE_STRING);
2087
			if ($lst_countries == '') {
2088
				$lst_countries = "'".$country."'";
2089
			} else {
2090
				$lst_countries .= ",'".$country."'";
2091
			}
2092
		}
2093
		$query  = "SELECT airport.* FROM airport WHERE airport.country IN (".$lst_countries.")";
2094
		
2095
		$sth = $this->db->prepare($query);
2096
		$sth->execute();
2097
    
2098
		$airport_array = array();
2099
		$temp_array = array();
2100
		
2101
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2102
		{
2103
			$temp_array['name'] = $row['name'];
2104
			$temp_array['city'] = $row['city'];
2105
			$temp_array['country'] = $row['country'];
2106
			$temp_array['iata'] = $row['iata'];
2107
			$temp_array['icao'] = $row['icao'];
2108
			$temp_array['latitude'] = $row['latitude'];
2109
			$temp_array['longitude'] = $row['longitude'];
2110
			$temp_array['altitude'] = $row['altitude'];
2111
2112
			$airport_array[] = $temp_array;
2113
		}
2114
2115
		return $airport_array;
2116
	}
2117
	
2118
	/**
2119
	* Gets airports info based on the coord
2120
	*
2121
	* @param Array $coord Airports longitude min,latitude min, longitude max, latitude max
2122
	* @return Array airport information
2123
	*
2124
	*/
2125
	public function getAllAirportInfobyCoord($coord)
2126
	{
2127
		global $globalDBdriver;
2128
		if (is_array($coord)) {
2129
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2130
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2131
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2132
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2133
		} else return array();
2134
		if ($globalDBdriver == 'mysql') {
2135
			$query  = "SELECT airport.* FROM airport WHERE airport.latitude BETWEEN ".$minlat." AND ".$maxlat." AND airport.longitude BETWEEN ".$minlong." AND ".$maxlong." AND airport.type != 'closed'";
2136
		} else {
2137
			$query  = "SELECT airport.* FROM airport WHERE CAST(airport.latitude AS FLOAT) BETWEEN ".$minlat." AND ".$maxlat." AND CAST(airport.longitude AS FLOAT) BETWEEN ".$minlong." AND ".$maxlong." AND airport.type != 'closed'";
2138
		}
2139
		$sth = $this->db->prepare($query);
2140
		$sth->execute();
2141
    
2142
		$airport_array = array();
2143
		
2144
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2145
		{
2146
			$temp_array = $row;
2147
2148
			$airport_array[] = $temp_array;
2149
		}
2150
2151
		return $airport_array;
2152
	}
2153
2154
	/**
2155
	* Gets waypoints info based on the coord
2156
	*
2157
	* @param Array $coord waypoints coord
2158
	* @return Array airport information
2159
	*
2160
	*/
2161
	public function getAllWaypointsInfobyCoord($coord)
2162
	{
2163
		if (is_array($coord)) {
2164
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2165
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2166
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2167
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2168
		} else return array();
2169
		//$query  = "SELECT waypoints.* FROM waypoints WHERE waypoints.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_begin BETWEEN ".$minlong." AND ".$maxlong;
2170
		$query  = "SELECT waypoints.* FROM waypoints WHERE (waypoints.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_begin BETWEEN ".$minlong." AND ".$maxlong.") OR (waypoints.latitude_end BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_end BETWEEN ".$minlong." AND ".$maxlong.")";
2171
		//$query  = "SELECT waypoints.* FROM waypoints";
2172
		//$query  = "SELECT waypoints.* FROM waypoints INNER JOIN (SELECT waypoints.* FROM waypoints WHERE waypoints.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_begin BETWEEN ".$minlong." AND ".$maxlong.") w ON w.name_end = waypoints.name_begin OR w.name_begin = waypoints.name_begin OR w.name_begin = waypoints.name_end OR w.name_end = waypoints.name_end";
2173
		//$query = "SELECT * FROM waypoints LEFT JOIN waypoints w ON waypoints.name_end = w.name_begin WHERE waypoints.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_begin BETWEEN ".$minlong." AND ".$maxlong;
2174
		//$query = "SELECT z.name_begin as name_begin, z.name_end as name_end, z.latitude_begin as latitude_begin, z.longitude_begin as longitude_begin, z.latitude_end as latitude_end, z.longitude_end as longitude_end, z.segment_name as segment_name, w.name_end as name_end_seg2, w.latitude_end as latitude_end_seg2, w.longitude_end as longitude_end_seg2, w.segment_name as segment_name_seg2 FROM waypoints z INNER JOIN waypoints w ON z.name_end = w.name_begin WHERE z.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND z.longitude_begin BETWEEN ".$minlong." AND ".$maxlong;
2175
		//echo $query;
2176
		
2177
		$sth = $this->db->prepare($query);
2178
		$sth->execute();
2179
    
2180
		$waypoints_array = array();
2181
		
2182
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2183
		{
2184
			$temp_array = $row;
2185
2186
			$waypoints_array[] = $temp_array;
2187
		}
2188
2189
		return $waypoints_array;
2190
	}
2191
	
2192
	
2193
	/**
2194
	* Gets the airline info based on the icao code or iata code
2195
	*
2196
	* @param String $airline_icao the iata code of the airport
2197
	* @return Array airport information
2198
	*
2199
	*/
2200
	public function getAllAirlineInfo($airline_icao, $fromsource = NULL)
2201
	{
2202
		global $globalUseRealAirlines;
2203
		if (isset($globalUseRealAirlines) && $globalUseRealAirlines) $fromsource = NULL;
2204
		$airline_icao = strtoupper(filter_var($airline_icao,FILTER_SANITIZE_STRING));
2205
		if ($airline_icao == 'NA') {
2206
			$airline_array = array();
2207
			$airline_array[] = array('name' => 'Not Available','iata' => 'NA', 'icao' => 'NA', 'callsign' => '', 'country' => 'NA', 'type' =>'');
2208
			return $airline_array;
2209
		} else {
2210
			if (strlen($airline_icao) == 2) {
2211
				if ($fromsource === NULL) {
2212
					$query  = "SELECT airlines.name, airlines.iata, airlines.icao, airlines.callsign, airlines.country, airlines.type FROM airlines WHERE airlines.iata = :airline_icao AND airlines.active = 'Y' AND airlines.forsource IS NULL LIMIT 1";
2213
				} else {
2214
					$query  = "SELECT airlines.name, airlines.iata, airlines.icao, airlines.callsign, airlines.country, airlines.type FROM airlines WHERE airlines.iata = :airline_icao AND airlines.active = 'Y' AND airlines.forsource = :fromsource LIMIT 1";
2215
				}
2216
			} else {
2217
				if ($fromsource === NULL) {
2218
					$query  = "SELECT airlines.name, airlines.iata, airlines.icao, airlines.callsign, airlines.country, airlines.type FROM airlines WHERE airlines.icao = :airline_icao AND airlines.active = 'Y' AND airlines.forsource IS NULL LIMIT 1";
2219
				} else {
2220
					$query  = "SELECT airlines.name, airlines.iata, airlines.icao, airlines.callsign, airlines.country, airlines.type FROM airlines WHERE airlines.icao = :airline_icao AND airlines.active = 'Y' AND airlines.forsource = :fromsource LIMIT 1";
2221
				}
2222
			}
2223
			
2224
			$sth = $this->db->prepare($query);
2225
			if ($fromsource === NULL) {
2226
				$sth->execute(array(':airline_icao' => $airline_icao));
2227
			} else {
2228
				$sth->execute(array(':airline_icao' => $airline_icao,':fromsource' => $fromsource));
2229
			}
2230
                        /*
2231
			$airline_array = array();
2232
			$temp_array = array();
2233
		
2234
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2235
			{
2236
				$temp_array['name'] = $row['name'];
2237
				$temp_array['iata'] = $row['iata'];
2238
				$temp_array['icao'] = $row['icao'];
2239
				$temp_array['callsign'] = $row['callsign'];
2240
				$temp_array['country'] = $row['country'];
2241
				$temp_array['type'] = $row['type'];
2242
				$airline_array[] = $temp_array;
2243
			}
2244
			return $airline_array;
2245
			*/
2246
			$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2247
			if (empty($result) && $fromsource !== NULL) {
2248
				/*
2249
				$query = 'SELECT COUNT(*) AS nb FROM airlines WHERE forsource = :fromsource';
2250
				$sth = $this->db->prepare($query);
2251
				$sth->execute(array(':fromsource' => $fromsource));
2252
				$row = $sth->fetch(PDO::FETCH_ASSOC);
2253
				$sth->closeCursor();
2254
				if ($row['nb'] == 0) $result = $this->getAllAirlineInfo($airline_icao);
2255
				*/
2256
				$result = $this->getAllAirlineInfo($airline_icao);
2257
			}
2258
			return $result;
2259
		}
2260
	}
2261
	
2262
	/**
2263
	* Gets the airline info based on the airline name
2264
	*
2265
	* @param String $airline_name the name of the airline
2266
	* @return Array airline information
2267
	*
2268
	*/
2269
	public function getAllAirlineInfoByName($airline_name, $fromsource = NULL)
2270
	{
2271
		global $globalUseRealAirlines;
2272
		if (isset($globalUseRealAirlines) && $globalUseRealAirlines) $fromsource = NULL;
2273
		$airline_name = strtolower(filter_var($airline_name,FILTER_SANITIZE_STRING));
2274
		$query  = "SELECT airlines.name, airlines.iata, airlines.icao, airlines.callsign, airlines.country, airlines.type FROM airlines WHERE lower(airlines.name) = :airline_name AND airlines.active = 'Y' AND airlines.forsource IS NULL LIMIT 1";
2275
		$sth = $this->db->prepare($query);
2276
		if ($fromsource === NULL) {
2277
			$sth->execute(array(':airline_name' => $airline_name));
2278
		} else {
2279
			$sth->execute(array(':airline_name' => $airline_name,':fromsource' => $fromsource));
2280
		}
2281
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2282
		if (empty($result) && $fromsource !== NULL) {
2283
			$query = 'SELECT COUNT(*) AS nb FROM airlines WHERE forsource = :fromsource';
2284
			$sth = $this->db->prepare($query);
2285
			$sth->execute(array(':fromsource' => $fromsource));
2286
			$row = $sth->fetch(PDO::FETCH_ASSOC);
2287
			$sth->closeCursor();
2288
			if ($row['nb'] == 0) $result = $this->getAllAirlineInfoByName($airline_name);
2289
		}
2290
		return $result;
2291
	}
2292
	
2293
	
2294
	
2295
	/**
2296
	* Gets the aircraft info based on the aircraft type
2297
	*
2298
	* @param String $aircraft_type the aircraft type
2299
	* @return Array aircraft information
2300
	*
2301
	*/
2302
	public function getAllAircraftInfo($aircraft_type)
2303
	{
2304
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2305
2306
		if ($aircraft_type == 'NA') {
2307
			return array(array('icao' => 'NA','type' => 'Not Available', 'manufacturer' => 'Not Available', 'aircraft_shadow' => NULL));
2308
		}
2309
		$query  = "SELECT aircraft.icao, aircraft.type,aircraft.manufacturer,aircraft.aircraft_shadow, aircraft.official_page, aircraft.aircraft_description, aircraft.engine_type, aircraft.engine_count, aircraft.wake_category FROM aircraft WHERE aircraft.icao = :aircraft_type";
2310
		
2311
		$sth = $this->db->prepare($query);
2312
		$sth->execute(array(':aircraft_type' => $aircraft_type));
2313
		/*
2314
		$aircraft_array = array();
2315
		$temp_array = array();
2316
		
2317
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2318
		{
2319
			$temp_array = array();
2320
			$temp_array['icao'] = $row['icao'];
2321
			$temp_array['type'] = $row['type'];
2322
			$temp_array['manufacturer'] = $row['manufacturer'];
2323
			$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
2324
2325
			$aircraft_array[] = $temp_array;
2326
		}
2327
		return $aircraft_array;
2328
		*/
2329
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2330
	}
2331
2332
	/**
2333
	* Gets the aircraft icao based on the aircraft name/type
2334
	*
2335
	* @param String $aircraft_type the aircraft type
2336
	* @return String aircraft information
2337
	*
2338
	*/
2339
	public function getAircraftIcao($aircraft_type)
2340
	{
2341
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2342
		$all_aircraft = array('737-300' => 'B733',
2343
				'777-200' => 'B772',
2344
				'777-200ER' => 'B772',
2345
				'777-300ER' => 'B77W',
2346
				'c172p' => 'C172',
2347
				'aerostar' => 'AEST',
2348
				'A320-211' => 'A320',
2349
				'747-8i' => 'B748',
2350
				'A380' => 'A388');
2351
		if (isset($all_aircraft[$aircraft_type])) return $all_aircraft[$aircraft_type];
2352
2353
		$query  = "SELECT aircraft.icao FROM aircraft WHERE aircraft.type LIKE :saircraft_type OR aircraft.type = :aircraft_type OR aircraft.icao = :aircraft_type LIMIT 1";
2354
		$aircraft_type = strtoupper($aircraft_type);
2355
		$sth = $this->db->prepare($query);
2356
		$sth->execute(array(':saircraft_type' => '%'.$aircraft_type.'%',':aircraft_type' => $aircraft_type,));
2357
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2358
		if (isset($result[0]['icao'])) return $result[0]['icao'];
2359
		else return '';
2360
	}
2361
	
2362
	/**
2363
	* Gets the aircraft info based on the aircraft modes
2364
	*
2365
	* @param String $aircraft_modes the aircraft ident (hex)
2366
	* @return String aircraft type
2367
	*
2368
	*/
2369
	public function getAllAircraftType($aircraft_modes)
2370
	{
2371
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
2372
2373
		$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes ORDER BY FirstCreated DESC LIMIT 1";
2374
		
2375
		$sth = $this->db->prepare($query);
2376
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
2377
2378
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2379
		$sth->closeCursor();
2380
		if (isset($row['icaotypecode'])) {
2381
			$icao = $row['icaotypecode'];
2382
			if (isset($this->aircraft_correct_icaotype[$icao])) $icao = $this->aircraft_correct_icaotype[$icao];
2383
			return $icao;
2384
		} else return '';
2385
	}
2386
2387
	/**
2388
	* Gets the aircraft info based on the aircraft registration
2389
	*
2390
	* @param String $registration the aircraft registration
2391
	* @return String aircraft type
2392
	*
2393
	*/
2394
	public function getAllAircraftTypeByRegistration($registration)
2395
	{
2396
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2397
2398
		$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.registration = :registration ORDER BY FirstCreated DESC LIMIT 1";
2399
		
2400
		$sth = $this->db->prepare($query);
2401
		$sth->execute(array(':registration' => $registration));
2402
2403
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2404
		$sth->closeCursor();
2405
		if (isset($row['icaotypecode'])) {
2406
			return $row['icaotypecode'];
2407
		} else return '';
2408
	}
2409
2410
	/**
2411
	* Gets the spotter_id and flightaware_id based on the aircraft registration
2412
	*
2413
	* @param String $registration the aircraft registration
2414
	* @return Array spotter_id and flightaware_id
2415
	*
2416
	*/
2417
	public function getAllIDByRegistration($registration)
2418
	{
2419
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2420
2421
		$query  = "SELECT spotter_id,flightaware_id, date FROM spotter_output WHERE spotter_output.registration = :registration";
2422
		
2423
		$sth = $this->db->prepare($query);
2424
		$sth->execute(array(':registration' => $registration));
2425
2426
		$idarray = array();
2427
		while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
2428
			$date = $row['date'];
2429
			$idarray[$date] = array('flightaware_id' => $row['flightaware_id'],'spotter_id' => $row['spotter_id']);
2430
		}
2431
		return $idarray;
2432
	}
2433
2434
	/**
2435
	* Gets correct aircraft operator code
2436
	*
2437
	* @param String $operator the aircraft operator code (callsign)
2438
	* @return String aircraft operator code
2439
	*
2440
	*/
2441
	public function getOperator($operator)
2442
	{
2443
		$operator = filter_var($operator,FILTER_SANITIZE_STRING);
2444
		$query  = "SELECT translation.operator_correct FROM translation WHERE translation.operator = :operator LIMIT 1";
2445
		
2446
		$sth = $this->db->prepare($query);
2447
		$sth->execute(array(':operator' => $operator));
2448
2449
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2450
		$sth->closeCursor();
2451
		if (isset($row['operator_correct'])) {
2452
			return $row['operator_correct'];
2453
		} else return $operator;
2454
	}
2455
2456
	/**
2457
	* Gets the aircraft route based on the aircraft callsign
2458
	*
2459
	* @param String $callsign the aircraft callsign
2460
	* @return Array aircraft type
2461
	*
2462
	*/
2463
	public function getRouteInfo($callsign)
2464
	{
2465
		$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
2466
                if ($callsign == '') return array();
2467
		$query  = "SELECT routes.Operator_ICAO, routes.FromAirport_ICAO, routes.ToAirport_ICAO, routes.RouteStop, routes.FromAirport_Time, routes.ToAirport_Time FROM routes WHERE CallSign = :callsign LIMIT 1";
2468
		
2469
		$sth = $this->db->prepare($query);
2470
		$sth->execute(array(':callsign' => $callsign));
2471
2472
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2473
		$sth->closeCursor();
2474
		if (count($row) > 0) {
2475
			return $row;
2476
		} else return array();
2477
	}
2478
	
2479
	/**
2480
	* Gets the aircraft info based on the aircraft registration
2481
	*
2482
	* @param String $registration the aircraft registration
2483
	* @return Array aircraft information
2484
	*
2485
	*/
2486
	public function getAircraftInfoByRegistration($registration)
2487
	{
2488
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2489
2490
		$query  = "SELECT spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.airline_icao FROM spotter_output WHERE spotter_output.registration = :registration";
2491
		
2492
		$sth = $this->db->prepare($query);
2493
		$sth->execute(array(':registration' => $registration));
2494
2495
		$aircraft_array = array();
2496
		$temp_array = array();
2497
		
2498
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2499
		{
2500
			$temp_array['airline_icao'] = $row['airline_icao'];
2501
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2502
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2503
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2504
2505
			$aircraft_array[] = $temp_array;
2506
		}
2507
2508
		return $aircraft_array;
2509
	}
2510
	
2511
	/**
2512
	* Gets the aircraft owner & base based on the aircraft registration
2513
	*
2514
	* @param String $registration the aircraft registration
2515
	* @return Array aircraft information
2516
	*
2517
	*/
2518
	public function getAircraftOwnerByRegistration($registration)
2519
	{
2520
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2521
		$Connection = new Connection($this->db);
2522
		if ($Connection->tableExists('aircraft_owner')) {
2523
			$query  = "SELECT aircraft_owner.base, aircraft_owner.owner, aircraft_owner.date_first_reg FROM aircraft_owner WHERE registration = :registration LIMIT 1";
2524
			$sth = $this->db->prepare($query);
2525
			$sth->execute(array(':registration' => $registration));
2526
			$result = $sth->fetch(PDO::FETCH_ASSOC);
2527
			$sth->closeCursor();
2528
			return $result;
2529
		} else return array();
2530
	}
2531
	
2532
  
2533
  /**
2534
	* Gets all flights (but with only little info)
2535
	*
2536
	* @return Array basic flight information
2537
	*
2538
	*/
2539
	public function getAllFlightsforSitemap()
2540
	{
2541
		//$query  = "SELECT spotter_output.spotter_id, spotter_output.ident, spotter_output.airline_name, spotter_output.aircraft_name, spotter_output.aircraft_icao FROM spotter_output ORDER BY LIMIT ";
2542
		$query  = "SELECT spotter_output.spotter_id FROM spotter_output ORDER BY spotter_id DESC LIMIT 200 OFFSET 0";
2543
		
2544
		$sth = $this->db->prepare($query);
2545
		$sth->execute();
2546
                  /*
2547
		$flight_array = array();
2548
		$temp_array = array();
2549
		
2550
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2551
		{
2552
			$temp_array['spotter_id'] = $row['spotter_id'];
2553
//			$temp_array['ident'] = $row['ident'];
2554
//			$temp_array['airline_name'] = $row['airline_name'];
2555
//			$temp_array['aircraft_type'] = $row['aircraft_icao'];
2556
//			$temp_array['aircraft_name'] = $row['aircraft_name'];
2557
			//$temp_array['image'] = $row['image'];
2558
2559
			$flight_array[] = $temp_array;
2560
		}
2561
2562
		return $flight_array;
2563
		*/
2564
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2565
	}
2566
  
2567
	/**
2568
	* Gets a list of all aircraft manufacturers
2569
	*
2570
	* @return Array list of aircraft types
2571
	*
2572
	*/
2573
	public function getAllManufacturers()
2574
	{
2575
		/*
2576
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer AS aircraft_manufacturer
2577
								FROM spotter_output
2578
								WHERE spotter_output.aircraft_manufacturer <> '' 
2579
								ORDER BY spotter_output.aircraft_manufacturer ASC";
2580
		  */
2581
		
2582
		$query = "SELECT DISTINCT manufacturer AS aircraft_manufacturer FROM aircraft WHERE manufacturer <> '' ORDER BY manufacturer ASC";
2583
		$sth = $this->db->prepare($query);
2584
		$sth->execute();
2585
2586
		$manufacturer_array = array();
2587
		$temp_array = array();
2588
		
2589
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2590
		{
2591
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2592
2593
			$manufacturer_array[] = $temp_array;
2594
		}
2595
2596
		return $manufacturer_array;
2597
	}
2598
  
2599
  
2600
  /**
2601
	* Gets a list of all aircraft types
2602
	*
2603
	* @return Array list of aircraft types
2604
	*
2605
	*/
2606
	public function getAllAircraftTypes($filters = array())
0 ignored issues
show
Unused Code introduced by
The parameter $filters is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
2607
	{
2608
		/*
2609
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao AS aircraft_icao, spotter_output.aircraft_name AS aircraft_name
2610
								FROM spotter_output  
2611
								WHERE spotter_output.aircraft_icao <> '' 
2612
								ORDER BY spotter_output.aircraft_name ASC";
2613
								
2614
		*/
2615
		//$filter_query = $this->getFilter($filters,true,true);
2616
		//$query = "SELECT DISTINCT icao AS aircraft_icao, type AS aircraft_name, manufacturer AS aircraft_manufacturer FROM aircraft".$filter_query." icao <> '' ORDER BY aircraft_manufacturer ASC";
2617
2618
		$query = "SELECT DISTINCT icao AS aircraft_icao, type AS aircraft_name, manufacturer AS aircraft_manufacturer FROM aircraft WHERE icao <> '' ORDER BY aircraft_manufacturer ASC";
2619
		
2620
		$sth = $this->db->prepare($query);
2621
		$sth->execute();
2622
2623
		$aircraft_array = array();
2624
		$temp_array = array();
2625
		
2626
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2627
		{
2628
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2629
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2630
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2631
2632
			$aircraft_array[] = $temp_array;
2633
		}
2634
2635
		return $aircraft_array;
2636
	}
2637
	
2638
	
2639
	/**
2640
	* Gets a list of all aircraft registrations
2641
	*
2642
	* @return Array list of aircraft registrations
2643
	*
2644
	*/
2645
	public function getAllAircraftRegistrations($filters = array())
2646
	{
2647
		$filter_query = $this->getFilter($filters,true,true);
2648
		$query  = "SELECT DISTINCT spotter_output.registration 
2649
				FROM spotter_output".$filter_query." spotter_output.registration <> '' 
2650
				ORDER BY spotter_output.registration ASC";
2651
2652
		$sth = $this->db->prepare($query);
2653
		$sth->execute();
2654
2655
		$aircraft_array = array();
2656
		$temp_array = array();
2657
		
2658
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2659
		{
2660
			$temp_array['registration'] = $row['registration'];
2661
2662
			$aircraft_array[] = $temp_array;
2663
		}
2664
2665
		return $aircraft_array;
2666
	}
2667
2668
	/**
2669
	* Gets all source name
2670
	*
2671
	* @param String type format of source
2672
	* @return Array list of source name
2673
	*
2674
	*/
2675
	public function getAllSourceName($type = '',$filters = array())
2676
	{
2677
		$filter_query = $this->getFilter($filters,true,true);
2678
		$query_values = array();
2679
		$query  = "SELECT DISTINCT spotter_output.source_name 
2680
				FROM spotter_output".$filter_query." spotter_output.source_name <> ''";
2681
		if ($type != '') {
2682
			$query_values = array(':type' => $type);
2683
			$query .= " AND format_source = :type";
2684
		}
2685
		$query .= " ORDER BY spotter_output.source_name ASC";
2686
2687
		$sth = $this->db->prepare($query);
2688
		if (!empty($query_values)) $sth->execute($query_values);
2689
		else $sth->execute();
2690
2691
		$source_array = array();
2692
		$temp_array = array();
2693
		
2694
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2695
		{
2696
			$temp_array['source_name'] = $row['source_name'];
2697
			$source_array[] = $temp_array;
2698
		}
2699
		return $source_array;
2700
	}
2701
2702
2703
2704
	/**
2705
	* Gets a list of all airline names
2706
	*
2707
	* @return Array list of airline names
2708
	*
2709
	*/
2710
	public function getAllAirlineNames($airline_type = '',$forsource = NULL,$filters = array())
2711
	{
2712
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2713
		$filter_query = $this->getFilter($filters,true,true);
2714
		$airline_type = filter_var($airline_type,FILTER_SANITIZE_STRING);
2715
		if ($airline_type == '' || $airline_type == 'all') {
2716
			/*
2717
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2718
								FROM spotter_output
2719
								WHERE spotter_output.airline_icao <> '' 
2720
								ORDER BY spotter_output.airline_name ASC";
2721
			*/
2722
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2723
			elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2724
			elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2725
			if ($forsource === NULL) {
2726
				$query = "SELECT DISTINCT icao AS airline_icao, name AS airline_name, type AS airline_type FROM airlines WHERE forsource IS NULL ORDER BY name ASC";
2727
				$query_data = array();
2728
			} else {
2729
				$query = "SELECT DISTINCT icao AS airline_icao, name AS airline_name, type AS airline_type FROM airlines WHERE forsource = :forsource ORDER BY name ASC";
2730
				$query_data = array(':forsource' => $forsource);
2731
			}
2732
		} else {
2733
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2734
					FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
2735
					AND spotter_output.airline_type = :airline_type 
2736
					ORDER BY spotter_output.airline_icao ASC";
2737
			$query_data = array(':airline_type' => $airline_type);
2738
		}
2739
		
2740
		$sth = $this->db->prepare($query);
2741
		$sth->execute($query_data);
2742
    
2743
		$airline_array = array();
2744
		$temp_array = array();
2745
		
2746
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2747
		{
2748
			$temp_array['airline_icao'] = $row['airline_icao'];
2749
			$temp_array['airline_name'] = $row['airline_name'];
2750
			$temp_array['airline_type'] = $row['airline_type'];
2751
2752
			$airline_array[] = $temp_array;
2753
		}
2754
		return $airline_array;
2755
	}
2756
	
2757
	/**
2758
	* Gets a list of all alliance names
2759
	*
2760
	* @return Array list of alliance names
2761
	*
2762
	*/
2763
	public function getAllAllianceNames($forsource = NULL,$filters = array())
2764
	{
2765
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2766
		$filter_query = $this->getFilter($filters,true,true);
0 ignored issues
show
Unused Code introduced by
$filter_query is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
2767
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2768
		elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2769
		elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2770
		if ($forsource === NULL) {
2771
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND forsource IS NULL ORDER BY alliance ASC";
2772
			$query_data = array();
2773
		} else {
2774
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND  forsource = :forsource ORDER BY alliance ASC";
2775
			$query_data = array(':forsource' => $forsource);
2776
		}
2777
		
2778
		$sth = $this->db->prepare($query);
2779
		$sth->execute($query_data);
2780
    
2781
		$alliance_array = array();
0 ignored issues
show
Unused Code introduced by
$alliance_array is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
2782
		$alliance_array = $sth->fetchAll(PDO::FETCH_ASSOC);
2783
		return $alliance_array;
2784
	}
2785
	
2786
	/**
2787
	* Gets a list of all airline countries
2788
	*
2789
	* @return Array list of airline countries
2790
	*
2791
	*/
2792
	public function getAllAirlineCountries($filters = array())
2793
	{
2794
		$filter_query = $this->getFilter($filters,true,true);
2795
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
2796
				FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
2797
				ORDER BY spotter_output.airline_country ASC";
2798
		
2799
		//$query = "SELECT DISTINCT country AS airline_country FROM airlines WHERE country <> '' AND active = 'Y' ORDER BY country ASC";
2800
		$sth = $this->db->prepare($query);
2801
		$sth->execute();
2802
2803
		$airline_array = array();
2804
		$temp_array = array();
2805
		
2806
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2807
		{
2808
			$temp_array['airline_country'] = $row['airline_country'];
2809
2810
			$airline_array[] = $temp_array;
2811
		}
2812
2813
		return $airline_array;
2814
	}
2815
2816
	
2817
	
2818
	/**
2819
	* Gets a list of all departure & arrival names
2820
	*
2821
	* @return Array list of airport names
2822
	*
2823
	*/
2824
	public function getAllAirportNames($filters = array())
2825
	{
2826
		$filter_query = $this->getFilter($filters,true,true);
2827
		$airport_array = array();
2828
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao AS airport_icao, spotter_output.departure_airport_name AS airport_name, spotter_output.departure_airport_city AS airport_city, spotter_output.departure_airport_country AS airport_country
2829
				FROM spotter_output".$filter_query." spotter_output.departure_airport_icao <> '' AND spotter_output.departure_airport_icao <> 'NA' 
2830
				ORDER BY spotter_output.departure_airport_city ASC";
2831
		
2832
		//$query = "SELECT DISTINCT icao AS airport_icao, name AS airport_name, city AS airport_city, country AS airport_country FROM airport ORDER BY city ASC";
2833
		$sth = $this->db->prepare($query);
2834
		$sth->execute();
2835
2836
		$temp_array = array();
2837
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2838
		{
2839
			$temp_array['airport_icao'] = $row['airport_icao'];
2840
			$temp_array['airport_name'] = $row['airport_name'];
2841
			$temp_array['airport_city'] = $row['airport_city'];
2842
			$temp_array['airport_country'] = $row['airport_country'];
2843
2844
			$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2845
		}
2846
2847
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao AS airport_icao, spotter_output.arrival_airport_name AS airport_name, spotter_output.arrival_airport_city AS airport_city, spotter_output.arrival_airport_country AS airport_country
2848
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> '' AND spotter_output.arrival_airport_icao <> 'NA' 
2849
								ORDER BY spotter_output.arrival_airport_city ASC";
2850
					
2851
		$sth = $this->db->prepare($query);
2852
		$sth->execute();
2853
2854
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2855
			{
2856
		//	if ($airport_array[$row['airport_city'].",".$row['airport_name']]['airport_icao'] != $row['airport_icao'])
2857
		//	{
2858
				$temp_array['airport_icao'] = $row['airport_icao'];
2859
				$temp_array['airport_name'] = $row['airport_name'];
2860
				$temp_array['airport_city'] = $row['airport_city'];
2861
				$temp_array['airport_country'] = $row['airport_country'];
2862
				
2863
				$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2864
		//	}
2865
		}
2866
2867
		return $airport_array;
2868
	} 
2869
2870
	/**
2871
	* Gets a list of all owner names
2872
	*
2873
	* @return Array list of owner names
2874
	*
2875
	*/
2876
	public function getAllOwnerNames($filters = array())
2877
	{
2878
		$filter_query = $this->getFilter($filters,true,true);
2879
		$airport_array = array();
0 ignored issues
show
Unused Code introduced by
$airport_array is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
2880
		$query  = "SELECT DISTINCT spotter_output.owner_name
2881
				FROM spotter_output".$filter_query." spotter_output.owner_name <> '' 
2882
				ORDER BY spotter_output.owner_name ASC";
2883
		
2884
		$sth = $this->db->prepare($query);
2885
		$sth->execute();
2886
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2887
	} 
2888
2889
	/**
2890
	* Gets a list of all pilot names and pilot ids
2891
	*
2892
	* @return Array list of pilot names and pilot ids
2893
	*
2894
	*/
2895
	public function getAllPilotNames($filters = array())
2896
	{
2897
		$filter_query = $this->getFilter($filters,true,true);
2898
		$airport_array = array();
0 ignored issues
show
Unused Code introduced by
$airport_array is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
2899
		$query  = "SELECT DISTINCT spotter_output.pilot_name, spotter_output.pilot_id
2900
				FROM spotter_output".$filter_query." spotter_output.pilot_name <> '' 
2901
				ORDER BY spotter_output.pilot_name ASC";
2902
		
2903
		$sth = $this->db->prepare($query);
2904
		$sth->execute();
2905
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2906
	} 
2907
	
2908
	
2909
	/**
2910
	* Gets a list of all departure & arrival airport countries
2911
	*
2912
	* @return Array list of airport countries
2913
	*
2914
	*/
2915
	public function getAllAirportCountries($filters = array())
2916
	{
2917
		$airport_array = array();
2918
					
2919
		  /*
2920
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
2921
								FROM spotter_output
2922
								WHERE spotter_output.departure_airport_country <> '' 
2923
								ORDER BY spotter_output.departure_airport_country ASC";
2924
		*/
2925
		$query = "SELECT DISTINCT country AS airport_country FROM airport ORDER BY country ASC";
2926
		
2927
		$sth = $this->db->prepare($query);
2928
		$sth->execute();
2929
   
2930
		$temp_array = array();
2931
		
2932
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2933
		{
2934
			$temp_array['airport_country'] = $row['airport_country'];
2935
2936
			$airport_array[$row['airport_country']] = $temp_array;
2937
		}
2938
		$filter_query = $this->getFilter($filters,true,true);
2939
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
2940
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
2941
								ORDER BY spotter_output.arrival_airport_country ASC";
2942
					
2943
		$sth = $this->db->prepare($query);
2944
		$sth->execute();
2945
		
2946
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2947
		{
2948
			if (isset($airport_array[$row['airport_country']]['airport_country']) && $airport_array[$row['airport_country']]['airport_country'] != $row['airport_country'])
2949
			{
2950
				$temp_array['airport_country'] = $row['airport_country'];
2951
				$airport_array[$row['airport_country']] = $temp_array;
2952
			}
2953
		}
2954
2955
		return $airport_array;
2956
	} 
2957
	
2958
	
2959
	
2960
	
2961
	/**
2962
	* Gets a list of all countries (airline, departure airport & arrival airport)
2963
	*
2964
	* @return Array list of countries
2965
	*
2966
	*/
2967
	public function getAllCountries($filters = array())
2968
	{
2969
		$Connection= new Connection($this->db);
2970
		if ($Connection->tableExists('countries')) {
2971
			$query  = "SELECT countries.name AS airport_country
2972
				FROM countries
2973
				ORDER BY countries.name ASC";
2974
			$sth = $this->db->prepare($query);
2975
			$sth->execute();
2976
   
2977
			$temp_array = array();
2978
			$country_array = array();
2979
		
2980
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2981
			{
2982
				$temp_array['country'] = $row['airport_country'];
2983
				$country_array[$row['airport_country']] = $temp_array;
2984
			}
2985
		} else {
2986
			$filter_query = $this->getFilter($filters,true,true);
2987
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
2988
								FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' 
2989
								ORDER BY spotter_output.departure_airport_country ASC";
2990
2991
			$sth = $this->db->prepare($query);
2992
			$sth->execute();
2993
   
2994
			$temp_array = array();
2995
			$country_array = array();
2996
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2997
			{
2998
				$temp_array['country'] = $row['airport_country'];
2999
				$country_array[$row['airport_country']] = $temp_array;
3000
			}
3001
3002
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
3003
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
3004
								ORDER BY spotter_output.arrival_airport_country ASC";
3005
					
3006
		$sth = $this->db->prepare($query);
3007
		$sth->execute();
3008
		
3009
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3010
		{
3011
			if ($country_array[$row['airport_country']]['country'] != $row['airport_country'])
3012
			{
3013
				$temp_array['country'] = $row['airport_country'];
3014
				
3015
				$country_array[$row['country']] = $temp_array;
3016
			}
3017
		}
3018
		
3019
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
3020
								FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
3021
								ORDER BY spotter_output.airline_country ASC";
3022
					
3023
		$sth = $this->db->prepare($query);
3024
		$sth->execute();
3025
		
3026
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3027
		{
3028
			if (isset($country_array[$row['airline_country']]['country']) && $country_array[$row['airline_country']]['country'] != $row['airline_country'])
3029
			{
3030
				$temp_array['country'] = $row['airline_country'];
3031
				
3032
				$country_array[$row['country']] = $temp_array;
3033
			}
3034
		}
3035
		}  
3036
		return $country_array;
3037
	} 
3038
	
3039
	
3040
	
3041
	
3042
	/**
3043
	* Gets a list of all idents/callsigns
3044
	*
3045
	* @return Array list of ident/callsign names
3046
	*
3047
	*/
3048
	public function getAllIdents($filters = array())
3049
	{
3050
		$filter_query = $this->getFilter($filters,true,true);
3051
		$query  = "SELECT DISTINCT spotter_output.ident
3052
								FROM spotter_output".$filter_query." spotter_output.ident <> '' 
3053
								ORDER BY spotter_output.date ASC LIMIT 700 OFFSET 0";
3054
3055
		$sth = $this->db->prepare($query);
3056
		$sth->execute();
3057
    
3058
		$ident_array = array();
3059
		$temp_array = array();
3060
		
3061
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3062
		{
3063
			$temp_array['ident'] = $row['ident'];
3064
			$ident_array[] = $temp_array;
3065
		}
3066
3067
		return $ident_array;
3068
	}
3069
3070
	/**
3071
	* Get a list of flights from airport since 7 days
3072
	* @return Array number, icao, name and city of airports
3073
	*/
3074
3075
	public function getLast7DaysAirportsDeparture($airport_icao = '',$filters = array()) {
3076
		global $globalTimezone, $globalDBdriver;
3077
		$filter_query = $this->getFilter($filters,true,true);
3078
		if ($globalTimezone != '') {
3079
			date_default_timezone_set($globalTimezone);
3080
			$datetime = new DateTime();
3081
			$offset = $datetime->format('P');
3082
		} else $offset = '+00:00';
3083
		if ($airport_icao == '') {
3084
			if ($globalDBdriver == 'mysql') {
3085
				$query = "SELECT COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output`".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND departure_airport_icao <> 'NA' AND departure_airport_icao <> '' GROUP BY departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
3086
			} else {
3087
				$query = "SELECT COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND departure_airport_icao <> 'NA' AND departure_airport_icao <> '' GROUP BY departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
3088
			}
3089
			$sth = $this->db->prepare($query);
3090
			$sth->execute(array(':offset' => $offset));
3091
		} else {
3092
			if ($globalDBdriver == 'mysql') {
3093
				$query = "SELECT COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output`".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND departure_airport_icao = :airport_icao GROUP BY departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
3094
			} else {
3095
				$query = "SELECT COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND departure_airport_icao = :airport_icao GROUP BY departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
3096
			}
3097
			$sth = $this->db->prepare($query);
3098
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3099
		}
3100
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3101
	}
3102
3103
	/**
3104
	* Get a list of flights from airport since 7 days
3105
	* @return Array number, icao, name and city of airports
3106
	*/
3107
3108
	public function getLast7DaysAirportsDepartureByAirlines($airport_icao = '') {
3109
		global $globalTimezone, $globalDBdriver;
3110
		if ($globalTimezone != '') {
3111
			date_default_timezone_set($globalTimezone);
3112
			$datetime = new DateTime();
3113
			$offset = $datetime->format('P');
3114
		} else $offset = '+00:00';
3115
		if ($airport_icao == '') {
3116
			if ($globalDBdriver == 'mysql') {
3117
				$query = "SELECT spotter_output.airline_icao, COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output` WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND departure_airport_icao <> 'NA' AND departure_airport_icao <> '' AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
3118
			} else {
3119
				$query = "SELECT spotter_output.airline_icao, COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output WHERE spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND departure_airport_icao <> 'NA' AND departure_airport_icao <> '' AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
3120
			}
3121
			$sth = $this->db->prepare($query);
3122
			$sth->execute(array(':offset' => $offset));
3123
		} else {
3124
			if ($globalDBdriver == 'mysql') {
3125
				$query = "SELECT spotter_output.airline_icao, COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output` WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND departure_airport_icao = :airport_icao AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
3126
			} else {
3127
				$query = "SELECT spotter_output.airline_icao, COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output WHERE spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND departure_airport_icao = :airport_icao AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
3128
			}
3129
			$sth = $this->db->prepare($query);
3130
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3131
		}
3132
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3133
	}
3134
3135
	/**
3136
	* Get a list of flights from detected airport since 7 days
3137
	* @return Array number, icao, name and city of airports
3138
	*/
3139
3140
	public function getLast7DaysDetectedAirportsDeparture($airport_icao = '', $filters = array()) {
3141
		global $globalTimezone, $globalDBdriver;
3142
		$filter_query = $this->getFilter($filters,true,true);
3143
		if ($globalTimezone != '') {
3144
			date_default_timezone_set($globalTimezone);
3145
			$datetime = new DateTime();
3146
			$offset = $datetime->format('P');
3147
		} else $offset = '+00:00';
3148
		if ($airport_icao == '') {
3149
			if ($globalDBdriver == 'mysql') {
3150
				$query = "SELECT COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
3151
				FROM airport, spotter_output".$filter_query." airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND real_departure_airport_icao <> 'NA' AND real_departure_airport_icao <> '' 
3152
				GROUP BY real_departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
3153
			} else {
3154
				$query = "SELECT COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
3155
				FROM airport, spotter_output".$filter_query." airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND real_departure_airport_icao <> 'NA' AND real_departure_airport_icao <> '' 
3156
				GROUP BY real_departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
3157
			}
3158
			$sth = $this->db->prepare($query);
3159
			$sth->execute(array(':offset' => $offset));
3160
		} else {
3161
			if ($globalDBdriver == 'mysql') {
3162
				$query = "SELECT COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
3163
				FROM airport,spotter_output".$filter_query." airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND real_departure_airport_icao = :airport_icao 
3164
				GROUP BY departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
3165
			} else {
3166
				$query = "SELECT COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
3167
				FROM airport,spotter_output".$filter_query." airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND real_departure_airport_icao = :airport_icao GROUP BY departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
3168
			}
3169
			$sth = $this->db->prepare($query);
3170
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3171
		}
3172
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3173
	}
3174
3175
	/**
3176
	* Get a list of flights from detected airport since 7 days
3177
	* @return Array number, icao, name and city of airports
3178
	*/
3179
3180
	public function getLast7DaysDetectedAirportsDepartureByAirlines($airport_icao = '') {
3181
		global $globalTimezone, $globalDBdriver;
3182
		if ($globalTimezone != '') {
3183
			date_default_timezone_set($globalTimezone);
3184
			$datetime = new DateTime();
3185
			$offset = $datetime->format('P');
3186
		} else $offset = '+00:00';
3187
		if ($airport_icao == '') {
3188
			if ($globalDBdriver == 'mysql') {
3189
				$query = "SELECT spotter_output.airline_icao, COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
3190
				FROM `spotter_output`, airport 
3191
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND real_departure_airport_icao <> 'NA' AND real_departure_airport_icao <> '' 
3192
				GROUP BY spotter_output.airline_icao, real_departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
3193
			} else {
3194
				$query = "SELECT spotter_output.airline_icao, COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
3195
				FROM spotter_output, airport 
3196
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND real_departure_airport_icao <> 'NA' AND real_departure_airport_icao <> '' 
3197
				GROUP BY spotter_output.airline_icao, real_departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
3198
			}
3199
			$sth = $this->db->prepare($query);
3200
			$sth->execute(array(':offset' => $offset));
3201
		} else {
3202
			if ($globalDBdriver == 'mysql') {
3203
				$query = "SELECT spotter_output.airline_icao, COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
3204
				FROM `spotter_output`, airport 
3205
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND real_departure_airport_icao = :airport_icao 
3206
				GROUP BY spotter_output.airline_icao, departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
3207
			} else {
3208
				$query = "SELECT spotter_output.airline_icao, COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
3209
				FROM spotter_output, airport 
3210
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND real_departure_airport_icao = :airport_icao GROUP BY spotter_output.airline_icao, departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
3211
			}
3212
			$sth = $this->db->prepare($query);
3213
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3214
		}
3215
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3216
	}
3217
3218
3219
	/**
3220
	* Get a list of flights to airport since 7 days
3221
	* @return Array number, icao, name and city of airports
3222
	*/
3223
3224
	public function getLast7DaysAirportsArrival($airport_icao = '', $filters = array()) {
3225
		global $globalTimezone, $globalDBdriver;
3226
		$filter_query = $this->getFilter($filters,true,true);
3227
		if ($globalTimezone != '') {
3228
			date_default_timezone_set($globalTimezone);
3229
			$datetime = new DateTime();
3230
			$offset = $datetime->format('P');
3231
		} else $offset = '+00:00';
3232
		if ($airport_icao == '') {
3233
			if ($globalDBdriver == 'mysql') {
3234
				$query = "SELECT COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output`".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao <> 'NA' AND arrival_airport_icao <> '' GROUP BY arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
3235
			} else {
3236
				$query = "SELECT COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao <> 'NA' AND arrival_airport_icao <> '' GROUP BY arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
3237
			}
3238
			$sth = $this->db->prepare($query);
3239
			$sth->execute(array(':offset' => $offset));
3240
		} else {
3241
			if ($globalDBdriver == 'mysql') {
3242
				$query = "SELECT COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output`".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao = :airport_icao GROUP BY arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'),arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
3243
			} else {
3244
				$query = "SELECT COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao = :airport_icao GROUP BY arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
3245
			}
3246
			$sth = $this->db->prepare($query);
3247
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3248
		}
3249
		
3250
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3251
	}
3252
3253
3254
	/**
3255
	* Get a list of flights detected to airport since 7 days
3256
	* @return Array number, icao, name and city of airports
3257
	*/
3258
3259
	public function getLast7DaysDetectedAirportsArrival($airport_icao = '',$filters = array()) {
3260
		global $globalTimezone, $globalDBdriver;
3261
		$filter_query = $this->getFilter($filters,true,true);
3262
		if ($globalTimezone != '') {
3263
			date_default_timezone_set($globalTimezone);
3264
			$datetime = new DateTime();
3265
			$offset = $datetime->format('P');
3266
		} else $offset = '+00:00';
3267
		if ($airport_icao == '') {
3268
			if ($globalDBdriver == 'mysql') {
3269
				$query = "SELECT COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
3270
				FROM airport,spotter_output".$filter_query." airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao <> 'NA' AND arrival_airport_icao <> '' 
3271
				GROUP BY real_arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
3272
			} else {
3273
				$query = "SELECT COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
3274
				FROM airport,spotter_output".$filter_query." airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao <> 'NA' AND arrival_airport_icao <> '' 
3275
				GROUP BY real_arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
3276
			}
3277
			$sth = $this->db->prepare($query);
3278
			$sth->execute(array(':offset' => $offset));
3279
		} else {
3280
			if ($globalDBdriver == 'mysql') {
3281
				$query = "SELECT COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
3282
				FROM airport,spotter_output".$filter_query." airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao = :airport_icao 
3283
				GROUP BY real_arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'),airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
3284
			} else {
3285
				$query = "SELECT COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
3286
				FROM airport, spotter_output".$filter_query." airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao = :airport_icao 
3287
				GROUP BY real_arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
3288
			}
3289
			$sth = $this->db->prepare($query);
3290
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3291
		}
3292
		
3293
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3294
	}
3295
3296
3297
	/**
3298
	* Get a list of flights to airport since 7 days
3299
	* @return Array number, icao, name and city of airports
3300
	*/
3301
3302
	public function getLast7DaysAirportsArrivalByAirlines($airport_icao = '') {
3303
		global $globalTimezone, $globalDBdriver;
3304
		if ($globalTimezone != '') {
3305
			date_default_timezone_set($globalTimezone);
3306
			$datetime = new DateTime();
3307
			$offset = $datetime->format('P');
3308
		} else $offset = '+00:00';
3309
		if ($airport_icao == '') {
3310
			if ($globalDBdriver == 'mysql') {
3311
				$query = "SELECT spotter_output.airline_icao, COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output` WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao <> 'NA' AND arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
3312
			} else {
3313
				$query = "SELECT spotter_output.airline_icao, COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output WHERE spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao <> 'NA' AND arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
3314
			}
3315
			$sth = $this->db->prepare($query);
3316
			$sth->execute(array(':offset' => $offset));
3317
		} else {
3318
			if ($globalDBdriver == 'mysql') {
3319
				$query = "SELECT spotter_output.airline_icao, COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output` WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao = :airport_icao AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'),arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
3320
			} else {
3321
				$query = "SELECT spotter_output.airline_icao, COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output WHERE spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao = :airport_icao AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
3322
			}
3323
			$sth = $this->db->prepare($query);
3324
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3325
		}
3326
		
3327
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3328
	}
3329
3330
3331
	/**
3332
	* Get a list of flights detected to airport since 7 days
3333
	* @return Array number, icao, name and city of airports
3334
	*/
3335
3336
	public function getLast7DaysDetectedAirportsArrivalByAirlines($airport_icao = '') {
3337
		global $globalTimezone, $globalDBdriver;
3338
		if ($globalTimezone != '') {
3339
			date_default_timezone_set($globalTimezone);
3340
			$datetime = new DateTime();
3341
			$offset = $datetime->format('P');
3342
		} else $offset = '+00:00';
3343
		if ($airport_icao == '') {
3344
			if ($globalDBdriver == 'mysql') {
3345
				$query = "SELECT spotter_output.airline_icao, COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
3346
				FROM `spotter_output`, airport 
3347
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao <> 'NA' AND arrival_airport_icao <> '' 
3348
				GROUP BY spotter_output.airline_icao, real_arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
3349
			} else {
3350
				$query = "SELECT spotter_output.airline_icao, COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
3351
				FROM spotter_output, airport 
3352
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao <> 'NA' AND arrival_airport_icao <> '' 
3353
				GROUP BY spotter_output.airline_icao, real_arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
3354
			}
3355
			$sth = $this->db->prepare($query);
3356
			$sth->execute(array(':offset' => $offset));
3357
		} else {
3358
			if ($globalDBdriver == 'mysql') {
3359
				$query = "SELECT spotter_output.airline_icao, COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
3360
				FROM `spotter_output`, airport 
3361
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao = :airport_icao 
3362
				GROUP BY spotter_output.airline_icao, real_arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'),airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
3363
			} else {
3364
				$query = "SELECT spotter_output.airline_icao, COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
3365
				FROM spotter_output, airport 
3366
				WHERE spotter_output.airline_icao <> '' AND  airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao = :airport_icao 
3367
				GROUP BY spotter_output.airline_icao,real_arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
3368
			}
3369
			$sth = $this->db->prepare($query);
3370
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3371
		}
3372
		
3373
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3374
	}
3375
3376
3377
	/**
3378
	* Gets a list of all dates
3379
	*
3380
	* @return Array list of date names
3381
	*
3382
	*/
3383
	public function getAllDates()
3384
	{
3385
		global $globalTimezone, $globalDBdriver;
3386
		if ($globalTimezone != '') {
3387
			date_default_timezone_set($globalTimezone);
3388
			$datetime = new DateTime();
3389
			$offset = $datetime->format('P');
3390
		} else $offset = '+00:00';
3391
3392
		if ($globalDBdriver == 'mysql') {
3393
			$query  = "SELECT DISTINCT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) as date
3394
								FROM spotter_output
3395
								WHERE spotter_output.date <> '' 
3396
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3397
		} else {
3398
			$query  = "SELECT DISTINCT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date
3399
								FROM spotter_output
3400
								WHERE spotter_output.date <> '' 
3401
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3402
		}
3403
		
3404
		$sth = $this->db->prepare($query);
3405
		$sth->execute(array(':offset' => $offset));
3406
    
3407
		$date_array = array();
3408
		$temp_array = array();
3409
		
3410
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3411
		{
3412
			$temp_array['date'] = $row['date'];
3413
3414
			$date_array[] = $temp_array;
3415
		}
3416
3417
		return $date_array;
3418
	}
3419
	
3420
	
3421
	
3422
	/**
3423
	* Gets all route combinations
3424
	*
3425
	* @return Array the route list
3426
	*
3427
	*/
3428
	public function getAllRoutes()
3429
	{
3430
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route,  spotter_output.departure_airport_icao, spotter_output.arrival_airport_icao 
3431
				FROM spotter_output
3432
				WHERE spotter_output.ident <> '' 
3433
				GROUP BY route
3434
				ORDER BY route ASC";
3435
3436
		$sth = $this->db->prepare($query);
3437
		$sth->execute();
3438
3439
		$routes_array = array();
3440
		$temp_array = array();
3441
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3442
		{
3443
			$temp_array['route'] = $row['route'];
3444
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
3445
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
3446
3447
			$routes_array[] = $temp_array;
3448
		}
3449
		return $routes_array;
3450
	}
3451
3452
	/**
3453
	* Update ident spotter data
3454
	*
3455
	* @param String $flightaware_id the ID from flightaware
3456
	* @param String $ident the flight ident
3457
	* @return String success or false
3458
	*
3459
	*/	
3460
	public function updateIdentSpotterData($flightaware_id = '', $ident = '',$fromsource = NULL)
3461
	{
3462
		if (!is_numeric(substr($ident, 0, 3)))
3463
		{
3464
			if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3465
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3466
			} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3467
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3468
			} else {
3469
				$airline_array = $this->getAllAirlineInfo("NA");
3470
			}
3471
			if (count($airline_array) == 0) {
3472
				$airline_array = $this->getAllAirlineInfo("NA");
3473
			}
3474
			if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3475
				$airline_array = $this->getAllAirlineInfo("NA");
3476
			}
3477
		} else {
3478
			$airline_array = $this->getAllAirlineInfo("NA");
3479
		}
3480
                $airline_name = $airline_array[0]['name'];
3481
                $airline_icao = $airline_array[0]['icao'];
3482
                $airline_country = $airline_array[0]['country'];
3483
                $airline_type = $airline_array[0]['type'];
3484
3485
3486
		$query = 'UPDATE spotter_output SET ident = :ident, airline_name = :airline_name, airline_icao = :airline_icao, airline_country = :airline_country, airline_type = :airline_type WHERE flightaware_id = :flightaware_id';
3487
                $query_values = array(':flightaware_id' => $flightaware_id,':ident' => $ident,':airline_name' => $airline_name,':airline_icao' => $airline_icao,':airline_country' => $airline_country,':airline_type' => $airline_type);
3488
3489
		try {
3490
			$sth = $this->db->prepare($query);
3491
			$sth->execute($query_values);
3492
		} catch (PDOException $e) {
3493
			return "error : ".$e->getMessage();
3494
		}
3495
		
3496
		return "success";
3497
3498
	}
3499
	/**
3500
	* Update latest spotter data
3501
	*
3502
	* @param String $flightaware_id the ID from flightaware
3503
	* @param String $ident the flight ident
3504
	* @param String $arrival_airport_icao the arrival airport
3505
	* @return String success or false
3506
	*
3507
	*/	
3508
	public function updateLatestSpotterData($flightaware_id = '', $ident = '', $latitude = '', $longitude = '', $altitude = '', $ground = false, $groundspeed = NULL, $date = '', $arrival_airport_icao = '',$arrival_airport_time = '')
3509
	{
3510
		if ($groundspeed == '') $groundspeed = NULL;
3511
		$query = 'UPDATE spotter_output SET ident = :ident, last_latitude = :last_latitude, last_longitude = :last_longitude, last_altitude = :last_altitude, last_ground = :last_ground, last_seen = :last_seen, real_arrival_airport_icao = :real_arrival_airport_icao, real_arrival_airport_time = :real_arrival_airport_time, last_ground_speed = :last_ground_speed WHERE flightaware_id = :flightaware_id';
3512
                $query_values = array(':flightaware_id' => $flightaware_id,':real_arrival_airport_icao' => $arrival_airport_icao,':last_latitude' => $latitude,':last_longitude' => $longitude, ':last_altitude' => $altitude,':last_ground_speed' => $groundspeed,':last_seen' => $date,':real_arrival_airport_time' => $arrival_airport_time, ':last_ground' => $ground, ':ident' => $ident);
3513
3514
		try {
3515
			$sth = $this->db->prepare($query);
3516
			$sth->execute($query_values);
3517
		} catch (PDOException $e) {
3518
			return "error : ".$e->getMessage();
3519
		}
3520
		
3521
		return "success";
3522
3523
	}
3524
3525
	/**
3526
	* Adds a new spotter data
3527
	*
3528
	* @param String $flightaware_id the ID from flightaware
3529
	* @param String $ident the flight ident
3530
	* @param String $aircraft_icao the aircraft type
3531
	* @param String $departure_airport_icao the departure airport
3532
	* @param String $arrival_airport_icao the arrival airport
3533
	* @param String $latitude latitude of flight
3534
	* @param String $longitude latitude of flight
3535
	* @param String $waypoints waypoints of flight
3536
	* @param String $altitude altitude of flight
3537
	* @param String $heading heading of flight
3538
	* @param String $groundspeed speed of flight
3539
	* @param String $date date of flight
3540
	* @param String $departure_airport_time departure time of flight
3541
	* @param String $arrival_airport_time arrival time of flight
3542
	* @param String $squawk squawk code of flight
3543
	* @param String $route_stop route stop of flight
3544
	* @param String $highlight highlight or not
3545
	* @param String $ModeS ModesS code of flight
3546
	* @param String $registration registration code of flight
3547
	* @param String $pilot_id pilot id of flight (for virtual airlines)
3548
	* @param String $pilot_name pilot name of flight (for virtual airlines)
3549
	* @param String $verticalrate vertival rate of flight
3550
	* @return String success or false
3551
	*/
3552
	public function addSpotterData($flightaware_id = '', $ident = '', $aircraft_icao = '', $departure_airport_icao = '', $arrival_airport_icao = '', $latitude = '', $longitude = '', $waypoints = '', $altitude = '', $heading = '', $groundspeed = '', $date = '', $departure_airport_time = '', $arrival_airport_time = '',$squawk = '', $route_stop = '', $highlight = '', $ModeS = '', $registration = '',$pilot_id = '', $pilot_name = '', $verticalrate = '', $ground = false,$format_source = '', $source_name = '')
3553
	{
3554
		global $globalURL, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalDebugTimeElapsed, $globalAirlinesSource, $globalVAM;
3555
		
3556
		//if (isset($globalDebugTimeElapsed) || $globalDebugTimeElapsed == '') $globalDebugTimeElapsed = FALSE;
3557
		$Image = new Image($this->db);
3558
		$Common = new Common();
3559
		
3560
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
3561
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
3562
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
3563
		if (!isset($globalVAM)) $globalVAM = FALSE;
3564
		date_default_timezone_set('UTC');
3565
		
3566
		//getting the registration
3567
		if ($flightaware_id != "" && $registration == '')
3568
		{
3569
			if (!is_string($flightaware_id))
3570
			{
3571
				return false;
3572
			} else {
3573
				if ($ModeS != '') {
3574
					$timeelapsed = microtime(true);
3575
					$registration = $this->getAircraftRegistrationBymodeS($ModeS);
3576
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3577
				} else {
3578
					$myhex = explode('-',$flightaware_id);
3579
					if (count($myhex) > 0) {
3580
						$timeelapsed = microtime(true);
3581
						$registration = $this->getAircraftRegistrationBymodeS($myhex[0]);
3582
						if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3583
					}
3584
				}
3585
			}
3586
		}
3587
		$fromsource = NULL;
3588
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
3589
		elseif ($format_source == 'vatsimtxt') $fromsource = 'vatsim';
3590
		elseif ($format_source == 'whazzup') $fromsource = 'ivao';
3591
		elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
3592
		elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
3593
		//getting the airline information
3594
		if ($ident != "")
3595
		{
3596
			if (!is_string($ident))
3597
			{
3598
				return false;
3599
			} else {
3600
				if (!is_numeric(substr($ident, 0, 3)) && !((substr($ident, 0, 3) == 'OGN' || substr($ident, 0, 3) == 'FLR' || substr($ident, 0, 3) == 'ICA') && $format_source == 'aprs'))
3601
				{
3602
					$timeelapsed = microtime(true);
3603
					if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3604
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3605
					} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3606
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3607
					} else {
3608
						$airline_array = $this->getAllAirlineInfo("NA");
3609
					}
3610
					if (count($airline_array) == 0) {
3611
						$airline_array = $this->getAllAirlineInfo("NA");
3612
					}
3613
					if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3614
						$airline_array = $this->getAllAirlineInfo("NA");
3615
					}
3616
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3617
3618
				} else {
3619
					$timeelapsed = microtime(true);
3620
					$airline_array = $this->getAllAirlineInfo("NA");
3621
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3622
				}
3623
			}
3624
		} else $airline_array = array();
3625
		
3626
		//getting the aircraft information
3627
		$aircraft_array = array();
3628
		if ($aircraft_icao != '')
3629
		{
3630
			if (!is_string($aircraft_icao))
3631
			{
3632
				return false;
3633
			} else {
3634
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3635
				{
3636
					$timeelapsed = microtime(true);
3637
					$aircraft_array = $this->getAllAircraftInfo("NA");
3638
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3639
				} else {
3640
					$timeelapsed = microtime(true);
3641
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3642
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3643
				}
3644
			}
3645
		} else {
3646
			if ($ModeS != '') {
3647
				$timeelapsed = microtime(true);
3648
				$aircraft_icao = $this->getAllAircraftType($ModeS);
3649
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAircraftType : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3650
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3651
				{
3652
					$timeelapsed = microtime(true);
3653
					$aircraft_array = $this->getAllAircraftInfo("NA");
3654
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3655
				} else {
3656
					$timeelapsed = microtime(true);
3657
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3658
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3659
				}
3660
			}
3661
		}
3662
		
3663
		//getting the departure airport information
3664
		$departure_airport_array = array();
3665
		$departure_airport_icao = trim($departure_airport_icao);
3666
		if ($departure_airport_icao != '')
3667
		{
3668
			if (!is_string($departure_airport_icao))
3669
			{
3670
				return false;
3671
			} else {
3672
				$timeelapsed = microtime(true);
3673
				$departure_airport_array = $this->getAllAirportInfo($departure_airport_icao);
3674
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3675
			}
3676
		}
3677
		
3678
		//getting the arrival airport information
3679
		$arrival_airport_array = array();
3680
		$arrival_airport_icao = trim($arrival_airport_icao);
3681
		if ($arrival_airport_icao != '')
3682
		{
3683
			if (!is_string($arrival_airport_icao))
3684
			{
3685
				return false;
3686
			} else {
3687
				$timeelapsed = microtime(true);
3688
				$arrival_airport_array = $this->getAllAirportInfo($arrival_airport_icao);
3689
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3690
			}
3691
		}
3692
3693
		if ($latitude != "")
3694
		{
3695
			if (!is_numeric($latitude))
3696
			{
3697
				return false;
3698
			}
3699
		}
3700
		
3701
		if ($longitude != "")
3702
		{
3703
			if (!is_numeric($longitude))
3704
			{
3705
				return false;
3706
			}
3707
		}
3708
		
3709
		if ($waypoints != "")
3710
		{
3711
			if (!is_string($waypoints))
3712
			{
3713
				return false;
3714
			}
3715
		}
3716
		
3717
		if ($altitude != "")
3718
		{
3719
			if (!is_numeric($altitude))
3720
			{
3721
				return false;
3722
			}
3723
		} else $altitude = 0;
3724
		
3725
		if ($heading != "")
3726
		{
3727
			if (!is_numeric($heading))
3728
			{
3729
				return false;
3730
			}
3731
		}
3732
		
3733
		if ($groundspeed != "")
3734
		{
3735
			if (!is_numeric($groundspeed))
3736
			{
3737
				return false;
3738
			}
3739
		}
3740
3741
    
3742
		if ($date == "")
3743
		{
3744
			$date = date("Y-m-d H:i:s", time());
3745
		}
3746
3747
		//getting the aircraft image
3748
		if (($registration != "" || $registration != 'NA') && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM)
3749
		{
3750
			$timeelapsed = microtime(true);
3751
			$image_array = $Image->getSpotterImage($registration);
3752
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getSpotterImage : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3753
			if (!isset($image_array[0]['registration']))
3754
			{
3755
				//echo "Add image !!!! \n";
3756
				$Image->addSpotterImage($registration);
3757
			}
3758
			$timeelapsed = microtime(true);
3759
			$owner_info = $this->getAircraftOwnerByRegistration($registration);
3760
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftOwnerByRegistration : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3761
			if ($owner_info['owner'] != '') $aircraft_owner = ucwords(strtolower($owner_info['owner']));
3762
		}
3763
    
3764
		if ($globalIVAO && $aircraft_icao != '')
3765
		{
3766
            		if (isset($airline_array[0]['icao'])) $airline_icao = $airline_array[0]['icao'];
3767
            		else $airline_icao = '';
3768
			$image_array = $Image->getSpotterImage('',$aircraft_icao,$airline_icao);
3769
			if (!isset($image_array[0]['registration']))
3770
			{
3771
				//echo "Add image !!!! \n";
3772
				$Image->addSpotterImage('',$aircraft_icao,$airline_icao);
3773
			}
3774
		}
3775
    
3776
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
3777
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
3778
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
3779
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
3780
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
3781
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
3782
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3783
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3784
		$waypoints = filter_var($waypoints,FILTER_SANITIZE_STRING);
3785
		$altitude = filter_var($altitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3786
		$heading = filter_var($heading,FILTER_SANITIZE_NUMBER_INT);
3787
		$groundspeed = filter_var($groundspeed,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3788
		$squawk = filter_var($squawk,FILTER_SANITIZE_NUMBER_INT);
3789
		$route_stop = filter_var($route_stop,FILTER_SANITIZE_STRING);
3790
		$ModeS = filter_var($ModeS,FILTER_SANITIZE_STRING);
3791
		$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_STRING);
3792
		$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
3793
		$format_source = filter_var($format_source,FILTER_SANITIZE_STRING);
3794
		$verticalrate = filter_var($verticalrate,FILTER_SANITIZE_NUMBER_INT);
3795
	
3796
		if (count($airline_array) == 0) 
3797
		{
3798
                        $airline_array = $this->getAllAirlineInfo('NA');
3799
                }
3800
                if (count($aircraft_array) == 0) 
3801
                {
3802
                        $aircraft_array = $this->getAllAircraftInfo('NA');
3803
                }
3804
                if (count($departure_airport_array) == 0 || $departure_airport_array[0]['icao'] == '' || $departure_airport_icao == '') 
3805
                {
3806
                        $departure_airport_array = $this->getAllAirportInfo('NA');
3807
                }
3808
                if (count($arrival_airport_array) == 0 || $arrival_airport_array[0]['icao'] == '' || $arrival_airport_icao == '') 
3809
                {
3810
                        $arrival_airport_array = $this->getAllAirportInfo('NA');
3811
                }
3812
                if ($registration == '') $registration = 'NA';
3813
                if ($latitude == '' && $longitude == '') {
3814
            		$latitude = 0;
3815
            		$longitude = 0;
3816
            	}
3817
                if ($squawk == '' || $Common->isInteger($squawk) === false) $squawk = NULL;
3818
                if ($verticalrate == '' || $Common->isInteger($verticalrate) === false) $verticalrate = NULL;
3819
                if ($heading == '' || $Common->isInteger($heading) === false) $heading = 0;
3820
                if ($groundspeed == '' || $Common->isInteger($groundspeed) === false) $groundspeed = 0;
3821
                if (!isset($aircraft_owner)) $aircraft_owner = NULL;
3822
                $query  = "INSERT INTO spotter_output (flightaware_id, ident, registration, airline_name, airline_icao, airline_country, airline_type, aircraft_icao, aircraft_name, aircraft_manufacturer, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, latitude, longitude, waypoints, altitude, heading, ground_speed, date, departure_airport_time, arrival_airport_time, squawk, route_stop,highlight,ModeS, pilot_id, pilot_name, verticalrate, owner_name, ground, format_source, source_name) 
3823
                VALUES (:flightaware_id,:ident,:registration,:airline_name,:airline_icao,:airline_country,:airline_type,:aircraft_icao,:aircraft_type,:aircraft_manufacturer,:departure_airport_icao,:departure_airport_name,:departure_airport_city,:departure_airport_country, :arrival_airport_icao, :arrival_airport_name, :arrival_airport_city, :arrival_airport_country, :latitude,:longitude,:waypoints,:altitude,:heading,:groundspeed,:date, :departure_airport_time, :arrival_airport_time, :squawk, :route_stop, :highlight, :ModeS, :pilot_id, :pilot_name, :verticalrate, :owner_name,:ground, :format_source, :source_name)";
3824
3825
                $airline_name = $airline_array[0]['name'];
3826
                $airline_icao = $airline_array[0]['icao'];
3827
                $airline_country = $airline_array[0]['country'];
3828
                $airline_type = $airline_array[0]['type'];
3829
		if ($airline_type == '') {
3830
			$timeelapsed = microtime(true);
3831
			$airline_type = $this->getAircraftTypeBymodeS($ModeS);
3832
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftTypeBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3833
		}
3834
		if ($airline_type == null) $airline_type = '';
3835
                $aircraft_type = $aircraft_array[0]['type'];
3836
                $aircraft_manufacturer = $aircraft_array[0]['manufacturer'];
3837
                $departure_airport_name = $departure_airport_array[0]['name'];
3838
	        $departure_airport_city = $departure_airport_array[0]['city'];
3839
            	$departure_airport_country = $departure_airport_array[0]['country'];
3840
                
3841
                $arrival_airport_name = $arrival_airport_array[0]['name'];
3842
                $arrival_airport_city = $arrival_airport_array[0]['city'];
3843
                $arrival_airport_country = $arrival_airport_array[0]['country'];
3844
                $query_values = array(':flightaware_id' => $flightaware_id,':ident' => $ident, ':registration' => $registration,':airline_name' => $airline_name,':airline_icao' => $airline_icao,':airline_country' => $airline_country,':airline_type' => $airline_type,':aircraft_icao' => $aircraft_icao,':aircraft_type' => $aircraft_type,':aircraft_manufacturer' => $aircraft_manufacturer,':departure_airport_icao' => $departure_airport_icao,':departure_airport_name' => $departure_airport_name,':departure_airport_city' => $departure_airport_city,':departure_airport_country' => $departure_airport_country,':arrival_airport_icao' => $arrival_airport_icao,':arrival_airport_name' => $arrival_airport_name,':arrival_airport_city' => $arrival_airport_city,':arrival_airport_country' => $arrival_airport_country,':latitude' => $latitude,':longitude' => $longitude, ':waypoints' => $waypoints,':altitude' => $altitude,':heading' => $heading,':groundspeed' => $groundspeed,':date' => $date,':departure_airport_time' => $departure_airport_time,':arrival_airport_time' => $arrival_airport_time, ':squawk' => $squawk, ':route_stop' => $route_stop, ':highlight' => $highlight, ':ModeS' => $ModeS, ':pilot_id' => $pilot_id, ':pilot_name' => $pilot_name, ':verticalrate' => $verticalrate, ':owner_name' => $aircraft_owner, ':format_source' => $format_source, ':ground' => $ground, ':source_name' => $source_name);
3845
3846
		try {
3847
		        
3848
			$sth = $this->db->prepare($query);
3849
			$sth->execute($query_values);
3850
			$this->db = null;
3851
		} catch (PDOException $e) {
3852
		    return "error : ".$e->getMessage();
3853
		}
3854
		
3855
		return "success";
3856
3857
	}
3858
	
3859
  
3860
	/**
3861
	* Gets the aircraft ident within the last hour
3862
	*
3863
	* @return String the ident
3864
	*
3865
	*/
3866
	public function getIdentFromLastHour($ident)
3867
	{
3868
		global $globalDBdriver, $globalTimezone;
3869
		if ($globalDBdriver == 'mysql') {
3870
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3871
								WHERE spotter_output.ident = :ident 
3872
								AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) 
3873
								AND spotter_output.date < UTC_TIMESTAMP()";
3874
			$query_data = array(':ident' => $ident);
3875
		} else {
3876
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3877
								WHERE spotter_output.ident = :ident 
3878
								AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INTERVAL '1 HOURS'
3879
								AND spotter_output.date < now() AT TIME ZONE 'UTC'";
3880
			$query_data = array(':ident' => $ident);
3881
    		}
3882
		
3883
		$sth = $this->db->prepare($query);
3884
		$sth->execute($query_data);
3885
    		$ident_result='';
3886
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3887
		{
3888
			$ident_result = $row['ident'];
3889
		}
3890
3891
		return $ident_result;
3892
	}
3893
	
3894
	
3895
	/**
3896
	* Gets the aircraft data from the last 20 seconds
3897
	*
3898
	* @return Array the spotter data
3899
	*
3900
	*/
3901
	public function getRealTimeData($q = '')
3902
	{
3903
		global $globalDBdriver;
3904
		$additional_query = '';
3905
		if ($q != "")
3906
		{
3907
			if (!is_string($q))
3908
			{
3909
				return false;
3910
			} else {
3911
				$q_array = explode(" ", $q);
3912
				foreach ($q_array as $q_item){
3913
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
3914
					$additional_query .= " AND (";
3915
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
3916
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
3917
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
3918
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
3919
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
3920
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
3921
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
3922
					$additional_query .= "(spotter_output.ident like '%".$q_item."%')";
3923
					$additional_query .= ")";
3924
				}
3925
			}
3926
		}
3927
		if ($globalDBdriver == 'mysql') {
3928
			$query  = "SELECT spotter_output.* FROM spotter_output 
3929
				WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 20 SECOND) ".$additional_query." 
3930
				AND spotter_output.date < UTC_TIMESTAMP()";
3931
		} else {
3932
			$query  = "SELECT spotter_output.* FROM spotter_output 
3933
				WHERE spotter_output.date::timestamp >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '20 SECONDS' ".$additional_query." 
3934
				AND spotter_output.date::timestamp < CURRENT_TIMESTAMP AT TIME ZONE 'UTC'";
3935
		}
3936
		$spotter_array = $this->getDataFromDB($query, array());
3937
3938
		return $spotter_array;
3939
	}
3940
	
3941
	
3942
	
3943
	 /**
3944
	* Gets all airlines that have flown over
3945
	*
3946
	* @return Array the airline list
3947
	*
3948
	*/
3949
	public function countAllAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(), $year = '', $month = '', $day = '')
3950
	{
3951
		global $globalDBdriver;
3952
		$filter_query = $this->getFilter($filters,true,true);
3953
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3954
		 			FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.airline_icao <> 'NA'";
3955
		if ($olderthanmonths > 0) {
3956
			if ($globalDBdriver == 'mysql') {
3957
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
3958
			} else {
3959
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
3960
			}
3961
		}
3962
                if ($sincedate != '') {
3963
			if ($globalDBdriver == 'mysql') {
3964
				$query .= " AND spotter_output.date > '".$sincedate."'";
3965
			} else {
3966
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3967
			}
3968
		}
3969
		$query_values = array();
3970
		if ($year != '') {
3971
			if ($globalDBdriver == 'mysql') {
3972
				$query .= " AND YEAR(spotter_output.date) = :year";
3973
				$query_values = array_merge($query_values,array(':year' => $year));
3974
			} else {
3975
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
3976
				$query_values = array_merge($query_values,array(':year' => $year));
3977
			}
3978
		}
3979
		if ($month != '') {
3980
			if ($globalDBdriver == 'mysql') {
3981
				$query .= " AND MONTH(spotter_output.date) = :month";
3982
				$query_values = array_merge($query_values,array(':month' => $month));
3983
			} else {
3984
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
3985
				$query_values = array_merge($query_values,array(':month' => $month));
3986
			}
3987
		}
3988
		if ($day != '') {
3989
			if ($globalDBdriver == 'mysql') {
3990
				$query .= " AND DAY(spotter_output.date) = :day";
3991
				$query_values = array_merge($query_values,array(':day' => $day));
3992
			} else {
3993
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
3994
				$query_values = array_merge($query_values,array(':day' => $day));
3995
			}
3996
		}
3997
		$query .= " GROUP BY spotter_output.airline_name,spotter_output.airline_icao, spotter_output.airline_country ORDER BY airline_count DESC";
3998
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3999
4000
		$sth = $this->db->prepare($query);
4001
		$sth->execute($query_values);
4002
		$airline_array = array();
4003
		$temp_array = array();
4004
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4005
		{
4006
			$temp_array['airline_name'] = $row['airline_name'];
4007
			$temp_array['airline_icao'] = $row['airline_icao'];
4008
			$temp_array['airline_count'] = $row['airline_count'];
4009
			$temp_array['airline_country'] = $row['airline_country'];
4010
			$airline_array[] = $temp_array;
4011
		}
4012
		return $airline_array;
4013
	}
4014
4015
	 /**
4016
	* Gets all pilots that have flown over
4017
	*
4018
	* @return Array the pilots list
4019
	*
4020
	*/
4021
	public function countAllPilots($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '', $month = '',$day = '')
4022
	{
4023
		global $globalDBdriver;
4024
		$filter_query = $this->getFilter($filters,true,true);
4025
		$query  = "SELECT DISTINCT spotter_output.pilot_id, spotter_output.pilot_name, COUNT(spotter_output.pilot_id) AS pilot_count, spotter_output.format_source
4026
		 			FROM spotter_output".$filter_query." spotter_output.pilot_id <> '' ";
4027
                if ($olderthanmonths > 0) {
4028
            		if ($globalDBdriver == 'mysql') {
4029
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4030
			} else {
4031
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4032
			}
4033
		}
4034
                if ($sincedate != '') {
4035
            		if ($globalDBdriver == 'mysql') {
4036
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4037
			} else {
4038
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4039
			}
4040
		}
4041
		$query_values = array();
4042
		if ($year != '') {
4043
			if ($globalDBdriver == 'mysql') {
4044
				$query .= " AND YEAR(spotter_output.date) = :year";
4045
				$query_values = array_merge($query_values,array(':year' => $year));
4046
			} else {
4047
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4048
				$query_values = array_merge($query_values,array(':year' => $year));
4049
			}
4050
		}
4051
		if ($month != '') {
4052
			if ($globalDBdriver == 'mysql') {
4053
				$query .= " AND MONTH(spotter_output.date) = :month";
4054
				$query_values = array_merge($query_values,array(':month' => $month));
4055
			} else {
4056
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4057
				$query_values = array_merge($query_values,array(':month' => $month));
4058
			}
4059
		}
4060
		if ($day != '') {
4061
			if ($globalDBdriver == 'mysql') {
4062
				$query .= " AND DAY(spotter_output.date) = :day";
4063
				$query_values = array_merge($query_values,array(':day' => $day));
4064
			} else {
4065
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4066
				$query_values = array_merge($query_values,array(':day' => $day));
4067
			}
4068
		}
4069
		
4070
		$query .= "GROUP BY spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
4071
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4072
      
4073
		
4074
		$sth = $this->db->prepare($query);
4075
		$sth->execute($query_values);
4076
		$airline_array = array();
4077
		$temp_array = array();
4078
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4079
		{
4080
			$temp_array['pilot_name'] = $row['pilot_name'];
4081
			$temp_array['pilot_id'] = $row['pilot_id'];
4082
			$temp_array['pilot_count'] = $row['pilot_count'];
4083
			$temp_array['format_source'] = $row['format_source'];
4084
			$airline_array[] = $temp_array;
4085
		}
4086
		return $airline_array;
4087
	}
4088
	
4089
	/**
4090
	* Gets all pilots that have flown over
4091
	*
4092
	* @return Array the pilots list
4093
	*
4094
	*/
4095
	public function countAllPilotsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '')
4096
	{
4097
		global $globalDBdriver;
4098
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.pilot_id, spotter_output.pilot_name, COUNT(spotter_output.pilot_id) AS pilot_count, spotter_output.format_source
4099
		 			FROM spotter_output WHERE spotter_output.pilot_id <> '' ";
4100
                if ($olderthanmonths > 0) {
4101
            		if ($globalDBdriver == 'mysql') {
4102
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4103
			} else {
4104
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4105
			}
4106
		}
4107
                if ($sincedate != '') {
4108
            		if ($globalDBdriver == 'mysql') {
4109
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4110
			} else {
4111
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4112
			}
4113
		}
4114
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
4115
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4116
      
4117
		
4118
		$sth = $this->db->prepare($query);
4119
		$sth->execute();
4120
      
4121
		$airline_array = array();
4122
		$temp_array = array();
4123
        
4124
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4125
		{
4126
			$temp_array['pilot_name'] = $row['pilot_name'];
4127
			$temp_array['pilot_id'] = $row['pilot_id'];
4128
			$temp_array['pilot_count'] = $row['pilot_count'];
4129
			$temp_array['airline_icao'] = $row['airline_icao'];
4130
			$temp_array['format_source'] = $row['format_source'];
4131
			$airline_array[] = $temp_array;
4132
		}
4133
		return $airline_array;
4134
	}
4135
	
4136
	 /**
4137
	* Gets all owner that have flown over
4138
	*
4139
	* @return Array the pilots list
4140
	*
4141
	*/
4142
	public function countAllOwners($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
4143
	{
4144
		global $globalDBdriver;
4145
		$filter_query = $this->getFilter($filters,true,true);
4146
		$query  = "SELECT DISTINCT spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
4147
					FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL";
4148
                if ($olderthanmonths > 0) {
4149
            		if ($globalDBdriver == 'mysql') {
4150
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4151
			} else {
4152
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4153
			}
4154
		}
4155
                if ($sincedate != '') {
4156
            		if ($globalDBdriver == 'mysql') {
4157
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4158
			} else {
4159
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4160
			}
4161
		}
4162
		$query_values = array();
4163
		if ($year != '') {
4164
			if ($globalDBdriver == 'mysql') {
4165
				$query .= " AND YEAR(spotter_output.date) = :year";
4166
				$query_values = array_merge($query_values,array(':year' => $year));
4167
			} else {
4168
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4169
				$query_values = array_merge($query_values,array(':year' => $year));
4170
			}
4171
		}
4172
		if ($month != '') {
4173
			if ($globalDBdriver == 'mysql') {
4174
				$query .= " AND MONTH(spotter_output.date) = :month";
4175
				$query_values = array_merge($query_values,array(':month' => $month));
4176
			} else {
4177
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4178
				$query_values = array_merge($query_values,array(':month' => $month));
4179
			}
4180
		}
4181
		if ($day != '') {
4182
			if ($globalDBdriver == 'mysql') {
4183
				$query .= " AND DAY(spotter_output.date) = :day";
4184
				$query_values = array_merge($query_values,array(':day' => $day));
4185
			} else {
4186
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4187
				$query_values = array_merge($query_values,array(':day' => $day));
4188
			}
4189
		}
4190
		$query .= " GROUP BY spotter_output.owner_name ORDER BY owner_count DESC";
4191
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4192
		
4193
		$sth = $this->db->prepare($query);
4194
		$sth->execute($query_values);
4195
		$airline_array = array();
4196
		$temp_array = array();
4197
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4198
		{
4199
			$temp_array['owner_name'] = $row['owner_name'];
4200
			$temp_array['owner_count'] = $row['owner_count'];
4201
			$airline_array[] = $temp_array;
4202
		}
4203
		return $airline_array;
4204
	}
4205
	
4206
	 /**
4207
	* Gets all owner that have flown over
4208
	*
4209
	* @return Array the pilots list
4210
	*
4211
	*/
4212
	public function countAllOwnersByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
4213
	{
4214
		global $globalDBdriver;
4215
		$filter_query = $this->getFilter($filters,true,true);
4216
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
4217
		 			FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL ";
4218
                if ($olderthanmonths > 0) {
4219
            		if ($globalDBdriver == 'mysql') {
4220
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4221
			} else {
4222
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4223
			}
4224
		}
4225
                if ($sincedate != '') {
4226
            		if ($globalDBdriver == 'mysql') {
4227
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4228
			} else {
4229
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4230
			}
4231
		}
4232
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.owner_name ORDER BY owner_count DESC";
4233
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4234
      
4235
		
4236
		$sth = $this->db->prepare($query);
4237
		$sth->execute();
4238
      
4239
		$airline_array = array();
4240
		$temp_array = array();
4241
        
4242
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4243
		{
4244
			$temp_array['owner_name'] = $row['owner_name'];
4245
			$temp_array['owner_count'] = $row['owner_count'];
4246
			$temp_array['airline_icao'] = $row['airline_icao'];
4247
			$airline_array[] = $temp_array;
4248
		}
4249
		return $airline_array;
4250
	}
4251
4252
	/**
4253
	* Gets all airlines that have flown over by aircraft
4254
	*
4255
	* @return Array the airline list
4256
	*
4257
	*/
4258
	public function countAllAirlinesByAircraft($aircraft_icao,$filters = array())
4259
	{
4260
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4261
		$filter_query = $this->getFilter($filters,true,true);
4262
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4263
		 	    FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
4264
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
4265
			    ORDER BY airline_count DESC";
4266
      
4267
		
4268
		$sth = $this->db->prepare($query);
4269
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4270
      
4271
		$airline_array = array();
4272
		$temp_array = array();
4273
        
4274
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4275
		{
4276
			$temp_array['airline_name'] = $row['airline_name'];
4277
			$temp_array['airline_icao'] = $row['airline_icao'];
4278
			$temp_array['airline_count'] = $row['airline_count'];
4279
			$temp_array['airline_country'] = $row['airline_country'];
4280
4281
			$airline_array[] = $temp_array;
4282
		}
4283
4284
		return $airline_array;
4285
	}
4286
4287
4288
	/**
4289
	* Gets all airline countries that have flown over by aircraft
4290
	*
4291
	* @return Array the airline country list
4292
	*
4293
	*/
4294
	public function countAllAirlineCountriesByAircraft($aircraft_icao,$filters = array())
4295
	{
4296
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4297
		$filter_query = $this->getFilter($filters,true,true);
4298
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4299
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
4300
                    GROUP BY spotter_output.airline_country
4301
					ORDER BY airline_country_count DESC
4302
					LIMIT 10 OFFSET 0";
4303
      
4304
		
4305
		$sth = $this->db->prepare($query);
4306
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4307
      
4308
		$airline_country_array = array();
4309
		$temp_array = array();
4310
        
4311
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4312
		{
4313
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4314
			$temp_array['airline_country'] = $row['airline_country'];
4315
 
4316
			$airline_country_array[] = $temp_array;
4317
		}
4318
		return $airline_country_array;
4319
	}
4320
4321
4322
	
4323
	
4324
	/**
4325
	* Gets all airlines that have flown over by airport
4326
	*
4327
	* @return Array the airline list
4328
	*
4329
	*/
4330
	public function countAllAirlinesByAirport($airport_icao,$filters = array())
4331
	{
4332
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4333
		$filter_query = $this->getFilter($filters,true,true);
4334
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4335
		    FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao ) 
4336
                    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country
4337
		    ORDER BY airline_count DESC";
4338
      
4339
		
4340
		$sth = $this->db->prepare($query);
4341
		$sth->execute(array(':airport_icao' => $airport_icao));
4342
      
4343
		$airline_array = array();
4344
		$temp_array = array();
4345
        
4346
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4347
		{
4348
			$temp_array['airline_name'] = $row['airline_name'];
4349
			$temp_array['airline_icao'] = $row['airline_icao'];
4350
			$temp_array['airline_count'] = $row['airline_count'];
4351
			$temp_array['airline_country'] = $row['airline_country'];
4352
4353
			$airline_array[] = $temp_array;
4354
		}
4355
		return $airline_array;
4356
	}
4357
4358
4359
	/**
4360
	* Gets all airline countries that have flown over by airport icao
4361
	*
4362
	* @return Array the airline country list
4363
	*
4364
	*/
4365
	public function countAllAirlineCountriesByAirport($airport_icao,$filters = array())
4366
	{
4367
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4368
		$filter_query = $this->getFilter($filters,true,true);
4369
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4370
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao )
4371
					GROUP BY spotter_output.airline_country
4372
					ORDER BY airline_country_count DESC
4373
					LIMIT 10 OFFSET 0";
4374
4375
		
4376
		$sth = $this->db->prepare($query);
4377
		$sth->execute(array(':airport_icao' => $airport_icao));
4378
4379
		$airline_country_array = array();
4380
		$temp_array = array();
4381
        
4382
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4383
		{
4384
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4385
			$temp_array['airline_country'] = $row['airline_country'];
4386
 
4387
			$airline_country_array[] = $temp_array;
4388
		}
4389
		return $airline_country_array;
4390
	}
4391
4392
4393
	/**
4394
	* Gets all airlines that have flown over by aircraft manufacturer
4395
	*
4396
	* @return Array the airline list
4397
	*
4398
	*/
4399
	public function countAllAirlinesByManufacturer($aircraft_manufacturer,$filters = array())
4400
	{
4401
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4402
		$filter_query = $this->getFilter($filters,true,true);
4403
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4404
		 			FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4405
					GROUP BY spotter_output.airline_name
4406
					ORDER BY airline_count DESC";
4407
 
4408
		$sth = $this->db->prepare($query);
4409
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4410
 
4411
		$airline_array = array();
4412
		$temp_array = array();
4413
        
4414
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4415
		{
4416
			$temp_array['airline_name'] = $row['airline_name'];
4417
			$temp_array['airline_icao'] = $row['airline_icao'];
4418
			$temp_array['airline_count'] = $row['airline_count'];
4419
			$temp_array['airline_country'] = $row['airline_country'];
4420
4421
			$airline_array[] = $temp_array;
4422
		}
4423
		return $airline_array;
4424
	}
4425
4426
4427
4428
	/**
4429
	* Gets all airline countries that have flown over by aircraft manufacturer
4430
	*
4431
	* @return Array the airline country list
4432
	*
4433
	*/
4434
	public function countAllAirlineCountriesByManufacturer($aircraft_manufacturer,$filters = array())
4435
	{
4436
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4437
		$filter_query = $this->getFilter($filters,true,true);
4438
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4439
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4440
					GROUP BY spotter_output.airline_country
4441
					ORDER BY airline_country_count DESC
4442
					LIMIT 10 OFFSET 0";
4443
      
4444
		
4445
		$sth = $this->db->prepare($query);
4446
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4447
4448
		$airline_country_array = array();
4449
		$temp_array = array();
4450
        
4451
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4452
		{
4453
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4454
			$temp_array['airline_country'] = $row['airline_country'];
4455
			$airline_country_array[] = $temp_array;
4456
		}
4457
		return $airline_country_array;
4458
	}
4459
4460
4461
	/**
4462
	* Gets all airlines that have flown over by date
4463
	*
4464
	* @return Array the airline list
4465
	*
4466
	*/
4467
	public function countAllAirlinesByDate($date,$filters = array())
4468
	{
4469
		global $globalTimezone, $globalDBdriver;
4470
		$filter_query = $this->getFilter($filters,true,true);
4471
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4472
		if ($globalTimezone != '') {
4473
			date_default_timezone_set($globalTimezone);
4474
			$datetime = new DateTime($date);
4475
			$offset = $datetime->format('P');
4476
		} else $offset = '+00:00';
4477
4478
		if ($globalDBdriver == 'mysql') {
4479
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4480
		 			FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4481
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country 
4482
					ORDER BY airline_count DESC";
4483
		} else {
4484
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4485
		 			FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4486
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country
4487
					ORDER BY airline_count DESC";
4488
		}
4489
		
4490
		$sth = $this->db->prepare($query);
4491
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4492
4493
		$airline_array = array();
4494
		$temp_array = array();
4495
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4496
		{
4497
			$temp_array['airline_name'] = $row['airline_name'];
4498
			$temp_array['airline_icao'] = $row['airline_icao'];
4499
			$temp_array['airline_count'] = $row['airline_count'];
4500
			$temp_array['airline_country'] = $row['airline_country'];
4501
 
4502
			$airline_array[] = $temp_array;
4503
		}
4504
4505
		return $airline_array;
4506
	}	
4507
	
4508
	
4509
	/**
4510
	* Gets all airline countries that have flown over by date
4511
	*
4512
	* @return Array the airline country list
4513
	*
4514
	*/
4515
	public function countAllAirlineCountriesByDate($date,$filters = array())
4516
	{
4517
		global $globalTimezone, $globalDBdriver;
4518
		$filter_query = $this->getFilter($filters,true,true);
4519
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4520
		if ($globalTimezone != '') {
4521
			date_default_timezone_set($globalTimezone);
4522
			$datetime = new DateTime($date);
4523
			$offset = $datetime->format('P');
4524
		} else $offset = '+00:00';
4525
		
4526
		if ($globalDBdriver == 'mysql') {
4527
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4528
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4529
					GROUP BY spotter_output.airline_country
4530
					ORDER BY airline_country_count DESC
4531
					LIMIT 10 OFFSET 0";
4532
		} else {
4533
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4534
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4535
					GROUP BY spotter_output.airline_country
4536
					ORDER BY airline_country_count DESC
4537
					LIMIT 10 OFFSET 0";
4538
		}
4539
4540
		$sth = $this->db->prepare($query);
4541
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4542
 
4543
		$airline_country_array = array();
4544
		$temp_array = array();
4545
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4546
		{
4547
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4548
			$temp_array['airline_country'] = $row['airline_country'];
4549
4550
			$airline_country_array[] = $temp_array;
4551
		}
4552
		return $airline_country_array;
4553
	}
4554
4555
4556
	/**
4557
	* Gets all airlines that have flown over by ident/callsign
4558
	*
4559
	* @return Array the airline list
4560
	*
4561
	*/
4562
	public function countAllAirlinesByIdent($ident,$filters = array())
4563
	{
4564
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
4565
		$filter_query = $this->getFilter($filters,true,true);
4566
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4567
		 		FROM spotter_output".$filter_query." spotter_output.ident = :ident  
4568
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4569
				ORDER BY airline_count DESC";
4570
      
4571
		
4572
		$sth = $this->db->prepare($query);
4573
		$sth->execute(array(':ident' => $ident));
4574
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4575
	}
4576
4577
	/**
4578
	* Gets all airlines by owner
4579
	*
4580
	* @return Array the airline list
4581
	*
4582
	*/
4583
	public function countAllAirlinesByOwner($owner,$filters = array())
4584
	{
4585
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
4586
		$filter_query = $this->getFilter($filters,true,true);
4587
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4588
		 		FROM spotter_output".$filter_query." spotter_output.owner_name = :owner  
4589
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4590
				ORDER BY airline_count DESC";
4591
      
4592
		
4593
		$sth = $this->db->prepare($query);
4594
		$sth->execute(array(':owner' => $owner));
4595
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4596
	}
4597
4598
	/**
4599
	* Gets all airlines used by pilot
4600
	*
4601
	* @return Array the airline list
4602
	*
4603
	*/
4604
	public function countAllAirlinesByPilot($pilot,$filters = array())
4605
	{
4606
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
4607
		$filter_query = $this->getFilter($filters,true,true);
4608
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4609
		 		FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
4610
				GROUP BY spotter_output.airline_icao, spotter_output.airline_name, spotter_output.airline_country
4611
				ORDER BY airline_count DESC";
4612
      
4613
		
4614
		$sth = $this->db->prepare($query);
4615
		$sth->execute(array(':pilot' => $pilot));
4616
		return $sth->fetchAll(PDO::FETCH_ASSOC);
4617
	}
4618
4619
	/**
4620
	* Gets all airlines that have flown over by route
4621
	*
4622
	* @return Array the airline list
4623
	*
4624
	*/
4625
	public function countAllAirlinesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
4626
	{
4627
		$filter_query = $this->getFilter($filters,true,true);
4628
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4629
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4630
4631
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4632
		 			FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
4633
					GROUP BY spotter_output.airline_name
4634
					ORDER BY airline_count DESC";
4635
      
4636
		
4637
		$sth = $this->db->prepare($query);
4638
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4639
      
4640
		$airline_array = array();
4641
		$temp_array = array();
4642
        
4643
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4644
		{
4645
			$temp_array['airline_name'] = $row['airline_name'];
4646
			$temp_array['airline_icao'] = $row['airline_icao'];
4647
			$temp_array['airline_count'] = $row['airline_count'];
4648
			$temp_array['airline_country'] = $row['airline_country'];
4649
4650
			$airline_array[] = $temp_array;
4651
		}
4652
		return $airline_array;
4653
	}
4654
4655
	/**
4656
	* Gets all airline countries that have flown over by route
4657
	*
4658
	* @return Array the airline country list
4659
	*
4660
	*/
4661
	public function countAllAirlineCountriesByRoute($departure_airport_icao, $arrival_airport_icao,$filters= array())
4662
	{
4663
		$filter_query = $this->getFilter($filters,true,true);
4664
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4665
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4666
      
4667
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4668
		 		FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
4669
				GROUP BY spotter_output.airline_country
4670
				ORDER BY airline_country_count DESC
4671
				LIMIT 10 OFFSET 0";
4672
      
4673
		
4674
		$sth = $this->db->prepare($query);
4675
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4676
      
4677
		$airline_country_array = array();
4678
		$temp_array = array();
4679
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4680
		{
4681
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4682
			$temp_array['airline_country'] = $row['airline_country'];
4683
4684
			$airline_country_array[] = $temp_array;
4685
		}
4686
4687
		return $airline_country_array;
4688
	}
4689
4690
4691
	/**
4692
	* Gets all airlines that have flown over by country
4693
	*
4694
	* @return Array the airline list
4695
	*
4696
	*/
4697
	public function countAllAirlinesByCountry($country,$filters = array())
4698
	{
4699
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4700
		$filter_query = $this->getFilter($filters,true,true);
4701
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4702
		 	    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
4703
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
4704
			    ORDER BY airline_count DESC";
4705
      
4706
		
4707
		$sth = $this->db->prepare($query);
4708
		$sth->execute(array(':country' => $country));
4709
4710
		$airline_array = array();
4711
		$temp_array = array();
4712
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4713
		{
4714
			$temp_array['airline_name'] = $row['airline_name'];
4715
			$temp_array['airline_icao'] = $row['airline_icao'];
4716
			$temp_array['airline_count'] = $row['airline_count'];
4717
			$temp_array['airline_country'] = $row['airline_country'];
4718
 
4719
			$airline_array[] = $temp_array;
4720
		}
4721
		return $airline_array;
4722
	}
4723
4724
4725
	/**
4726
	* Gets all airline countries that have flown over by country
4727
	*
4728
	* @return Array the airline country list
4729
	*
4730
	*/
4731
	public function countAllAirlineCountriesByCountry($country,$filters = array())
4732
	{
4733
		$filter_query = $this->getFilter($filters,true,true);
4734
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4735
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4736
		 		FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
4737
				GROUP BY spotter_output.airline_country
4738
				ORDER BY airline_country_count DESC
4739
				LIMIT 10 OFFSET 0";
4740
      
4741
		
4742
		$sth = $this->db->prepare($query);
4743
		$sth->execute(array(':country' => $country));
4744
4745
		$airline_country_array = array();
4746
		$temp_array = array();
4747
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4748
		{
4749
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4750
			$temp_array['airline_country'] = $row['airline_country'];
4751
4752
			$airline_country_array[] = $temp_array;
4753
		}
4754
		return $airline_country_array;
4755
	}
4756
4757
4758
	/**
4759
	* Gets all airlines countries
4760
	*
4761
	* @return Array the airline country list
4762
	*
4763
	*/
4764
	public function countAllAirlineCountries($limit = true, $filters = array(), $year = '', $month = '', $day = '')
4765
	{
4766
		global $globalDBdriver;
4767
		$filter_query = $this->getFilter($filters,true,true);
4768
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4769
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.airline_country <> 'NA'";
4770
		$query_values = array();
4771
		if ($year != '') {
4772
			if ($globalDBdriver == 'mysql') {
4773
				$query .= " AND YEAR(spotter_output.date) = :year";
4774
				$query_values = array_merge($query_values,array(':year' => $year));
4775
			} else {
4776
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4777
				$query_values = array_merge($query_values,array(':year' => $year));
4778
			}
4779
		}
4780
		if ($month != '') {
4781
			if ($globalDBdriver == 'mysql') {
4782
				$query .= " AND MONTH(spotter_output.date) = :month";
4783
				$query_values = array_merge($query_values,array(':month' => $month));
4784
			} else {
4785
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4786
				$query_values = array_merge($query_values,array(':month' => $month));
4787
			}
4788
		}
4789
		if ($day != '') {
4790
			if ($globalDBdriver == 'mysql') {
4791
				$query .= " AND DAY(spotter_output.date) = :day";
4792
				$query_values = array_merge($query_values,array(':day' => $day));
4793
			} else {
4794
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4795
				$query_values = array_merge($query_values,array(':day' => $day));
4796
			}
4797
		}
4798
		$query .= " GROUP BY spotter_output.airline_country
4799
					ORDER BY airline_country_count DESC";
4800
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4801
      
4802
		$sth = $this->db->prepare($query);
4803
		$sth->execute($query_values);
4804
4805
		$airline_array = array();
4806
		$temp_array = array();
4807
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4808
		{
4809
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4810
			$temp_array['airline_country'] = $row['airline_country'];
4811
4812
			$airline_array[] = $temp_array;
4813
		}
4814
		return $airline_array;
4815
	}
4816
4817
	/**
4818
	* Gets all number of flight over countries
4819
	*
4820
	* @return Array the airline country list
4821
	*
4822
	*/
4823
	public function countAllFlightOverCountries($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
4824
	{
4825
		global $globalDBdriver;
4826
		//$filter_query = $this->getFilter($filters,true,true);
4827
		$Connection= new Connection($this->db);
4828
		if (!$Connection->tableExists('countries')) return array();
4829
		/*
4830
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
4831
					FROM countries c, spotter_output s
4832
					WHERE Within(GeomFromText(CONCAT('POINT(',s.longitude,' ',s.latitude,')')), ogc_geom) ";
4833
		*/
4834
/*
4835
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
4836
					FROM countries c, spotter_live s
4837
					WHERE c.iso2 = s.over_country ";
4838
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb FROM countries c INNER JOIN (SELECT DISTINCT flightaware_id,over_country FROM spottrer_live) l ON c.iso2 = l.over_country ";
4839
*/
4840
		require_once('class.SpotterLive.php');
4841
		$SpotterLive = new SpotterLive();
4842
		$filter_query = $SpotterLive->getFilter($filters,true,true);
4843
		$filter_query .= ' over_country IS NOT NULL';
4844
                if ($olderthanmonths > 0) {
4845
			if ($globalDBdriver == 'mysql') {
4846
				$filter_query .= ' AND spotter_live.date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
4847
			} else {
4848
				$filter_query .= " AND spotter_live.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4849
			}
4850
		}
4851
                if ($sincedate != '') {
4852
            		if ($globalDBdriver == 'mysql') {
4853
				$filter_query .= " AND spotter_live.date > '".$sincedate."' ";
4854
			} else {
4855
				$filter_query .= " AND spotter_live.date > CAST('".$sincedate."' AS TIMESTAMP)";
4856
			}
4857
		}
4858
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb FROM countries c INNER JOIN (SELECT DISTINCT flightaware_id,over_country FROM spotter_live".$filter_query.") l ON c.iso2 = l.over_country ";
4859
		$query .= "GROUP BY c.name,c.iso3,c.iso2 ORDER BY nb DESC";
4860
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4861
      
4862
		
4863
		$sth = $this->db->prepare($query);
4864
		$sth->execute();
4865
 
4866
		$flight_array = array();
4867
		$temp_array = array();
4868
        
4869
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4870
		{
4871
			$temp_array['flight_count'] = $row['nb'];
4872
			$temp_array['flight_country'] = $row['name'];
4873
			$temp_array['flight_country_iso3'] = $row['iso3'];
4874
			$temp_array['flight_country_iso2'] = $row['iso2'];
4875
			$flight_array[] = $temp_array;
4876
		}
4877
		return $flight_array;
4878
	}
4879
	
4880
	
4881
	/**
4882
	* Gets all aircraft types that have flown over
4883
	*
4884
	* @return Array the aircraft list
4885
	*
4886
	*/
4887
	public function countAllAircraftTypes($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
4888
	{
4889
		global $globalDBdriver;
4890
		$filter_query = $this->getFilter($filters,true,true);
4891
		$query  = "SELECT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
4892
		    FROM spotter_output ".$filter_query." spotter_output.aircraft_name  <> '' AND spotter_output.aircraft_icao  <> ''";
4893
		if ($olderthanmonths > 0) {
4894
			if ($globalDBdriver == 'mysql') {
4895
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4896
			} else {
4897
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4898
			}
4899
		}
4900
		if ($sincedate != '') {
4901
			if ($globalDBdriver == 'mysql') {
4902
				$query .= " AND spotter_output.date > '".$sincedate."'";
4903
			} else {
4904
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4905
			}
4906
		}
4907
		$query_values = array();
4908
		if ($year != '') {
4909
			if ($globalDBdriver == 'mysql') {
4910
				$query .= " AND YEAR(spotter_output.date) = :year";
4911
				$query_values = array_merge($query_values,array(':year' => $year));
4912
			} else {
4913
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4914
				$query_values = array_merge($query_values,array(':year' => $year));
4915
			}
4916
		}
4917
		if ($month != '') {
4918
			if ($globalDBdriver == 'mysql') {
4919
				$query .= " AND MONTH(spotter_output.date) = :month";
4920
				$query_values = array_merge($query_values,array(':month' => $month));
4921
			} else {
4922
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4923
				$query_values = array_merge($query_values,array(':month' => $month));
4924
			}
4925
		}
4926
		if ($day != '') {
4927
			if ($globalDBdriver == 'mysql') {
4928
				$query .= " AND DAY(spotter_output.date) = :day";
4929
				$query_values = array_merge($query_values,array(':day' => $day));
4930
			} else {
4931
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4932
				$query_values = array_merge($query_values,array(':day' => $day));
4933
			}
4934
		}
4935
4936
		$query .= " GROUP BY spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer ORDER BY aircraft_icao_count DESC";
4937
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4938
 
4939
		$sth = $this->db->prepare($query);
4940
		$sth->execute($query_values);
4941
4942
		$aircraft_array = array();
4943
		$temp_array = array();
4944
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4945
		{
4946
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4947
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4948
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4949
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4950
			$aircraft_array[] = $temp_array;
4951
		}
4952
		return $aircraft_array;
4953
	}
4954
4955
	/**
4956
	* Gets all aircraft types that have flown over by airline
4957
	*
4958
	* @return Array the aircraft list
4959
	*
4960
	*/
4961
	public function countAllAircraftTypesByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '',$month = '', $day = '')
4962
	{
4963
		global $globalDBdriver;
4964
		$filter_query = $this->getFilter($filters,true,true);
4965
		$query  = "SELECT spotter_output.airline_icao, spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
4966
		    FROM spotter_output".$filter_query." spotter_output.aircraft_name  <> '' AND spotter_output.aircraft_icao  <> '' AND spotter_output.airline_icao <>'' AND spotter_output.airline_icao <> 'NA' ";
4967
		if ($olderthanmonths > 0) {
4968
			if ($globalDBdriver == 'mysql') {
4969
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4970
			} else {
4971
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4972
			}
4973
		}
4974
		if ($sincedate != '') {
4975
			if ($globalDBdriver == 'mysql') {
4976
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4977
			} else {
4978
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4979
			}
4980
		}
4981
		$query_values = array();
4982
		if ($year != '') {
4983
			if ($globalDBdriver == 'mysql') {
4984
				$query .= " AND YEAR(spotter_output.date) = :year";
4985
				$query_values = array_merge($query_values,array(':year' => $year));
4986
			} else {
4987
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4988
				$query_values = array_merge($query_values,array(':year' => $year));
4989
			}
4990
		}
4991
		if ($month != '') {
4992
			if ($globalDBdriver == 'mysql') {
4993
				$query .= " AND MONTH(spotter_output.date) = :month";
4994
				$query_values = array_merge($query_values,array(':month' => $month));
4995
			} else {
4996
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4997
				$query_values = array_merge($query_values,array(':month' => $month));
4998
			}
4999
		}
5000
		if ($day != '') {
5001
			if ($globalDBdriver == 'mysql') {
5002
				$query .= " AND DAY(spotter_output.date) = :day";
5003
				$query_values = array_merge($query_values,array(':day' => $day));
5004
			} else {
5005
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5006
				$query_values = array_merge($query_values,array(':day' => $day));
5007
			}
5008
		}
5009
5010
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer ORDER BY aircraft_icao_count DESC";
5011
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5012
 
5013
		$sth = $this->db->prepare($query);
5014
		$sth->execute($query_values);
5015
5016
		$aircraft_array = array();
5017
		$temp_array = array();
5018
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5019
		{
5020
			$temp_array['airline_icao'] = $row['airline_icao'];
5021
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5022
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5023
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5024
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5025
			$aircraft_array[] = $temp_array;
5026
		}
5027
		return $aircraft_array;
5028
	}
5029
5030
	/**
5031
	* Gets all aircraft types that have flown over by months
5032
	*
5033
	* @return Array the aircraft list
5034
	*
5035
	*/
5036
	public function countAllAircraftTypesByMonths($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
5037
	{
5038
		global $globalDBdriver;
5039
		$filter_query = $this->getFilter($filters,true,true);
5040
		$query  = "SELECT EXTRACT(month from spotter_output.date) as month, EXTRACT(year from spotter_output.date) as year,spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
5041
		    FROM spotter_output".$filter_query." spotter_output.aircraft_name  <> '' AND spotter_output.aircraft_icao  <> '' AND spotter_output.airline_icao <>'' AND spotter_output.airline_icao <> 'NA' ";
5042
		if ($olderthanmonths > 0) {
5043
			if ($globalDBdriver == 'mysql') {
5044
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5045
			} else {
5046
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5047
			}
5048
		}
5049
		if ($sincedate != '') {
5050
			if ($globalDBdriver == 'mysql') {
5051
				$query .= "AND spotter_output.date > '".$sincedate."' ";
5052
			} else {
5053
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5054
			}
5055
		}
5056
5057
		$query .= "GROUP BY EXTRACT(month from spotter_output.date), EXTRACT(year from spotter_output.date), spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer ORDER BY aircraft_icao_count DESC";
5058
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5059
 
5060
		$sth = $this->db->prepare($query);
5061
		$sth->execute();
5062
5063
		$aircraft_array = array();
5064
		$temp_array = array();
5065
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5066
		{
5067
			//$temp_array['airline_icao'] = $row['airline_icao'];
5068
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5069
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5070
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5071
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5072
			$aircraft_array[] = $temp_array;
5073
		}
5074
		return $aircraft_array;
5075
	}
5076
5077
5078
	/**
5079
	* Gets all aircraft registration that have flown over by aircaft icao
5080
	*
5081
	* @return Array the aircraft list
5082
	*
5083
	*/
5084
	public function countAllAircraftRegistrationByAircraft($aircraft_icao,$filters = array())
5085
	{
5086
		$Image = new Image($this->db);
5087
		$filter_query = $this->getFilter($filters,true,true);
5088
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
5089
5090
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name  
5091
				FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_icao = :aircraft_icao  
5092
				GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name  
5093
				ORDER BY registration_count DESC";
5094
5095
		$sth = $this->db->prepare($query);
5096
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
5097
5098
		$aircraft_array = array();
5099
		$temp_array = array();
5100
        
5101
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5102
		{
5103
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5104
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5105
			$temp_array['registration'] = $row['registration'];
5106
			$temp_array['airline_name'] = $row['airline_name'];
5107
			$temp_array['image_thumbnail'] = "";
5108
			if($row['registration'] != "")
5109
			{
5110
				$image_array = $Image->getSpotterImage($row['registration']);
5111
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5112
			}
5113
			$temp_array['registration_count'] = $row['registration_count'];
5114
5115
			$aircraft_array[] = $temp_array;
5116
		}
5117
		return $aircraft_array;
5118
	}
5119
5120
5121
	/**
5122
	* Gets all aircraft types that have flown over by airline icao
5123
	*
5124
	* @return Array the aircraft list
5125
	*
5126
	*/
5127
	public function countAllAircraftTypesByAirline($airline_icao,$filters = array())
5128
	{
5129
		$filter_query = $this->getFilter($filters,true,true);
5130
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5131
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5132
			    FROM spotter_output".$filter_query." spotter_output.aircraft_icao <> '' AND spotter_output.airline_icao = :airline_icao 
5133
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5134
			    ORDER BY aircraft_icao_count DESC";
5135
5136
		$sth = $this->db->prepare($query);
5137
		$sth->execute(array(':airline_icao' => $airline_icao));
5138
5139
		$aircraft_array = array();
5140
		$temp_array = array();
5141
5142
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5143
		{
5144
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5145
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5146
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5147
5148
			$aircraft_array[] = $temp_array;
5149
		}
5150
		return $aircraft_array;
5151
	}
5152
5153
5154
	/**
5155
	* Gets all aircraft registration that have flown over by airline icao
5156
	*
5157
	* @return Array the aircraft list
5158
	*
5159
	*/
5160
	public function countAllAircraftRegistrationByAirline($airline_icao,$filters = array())
5161
	{
5162
		$filter_query = $this->getFilter($filters,true,true);
5163
		$Image = new Image($this->db);
5164
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5165
5166
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name 
5167
			    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.airline_icao = :airline_icao 
5168
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
5169
			    ORDER BY registration_count DESC";
5170
5171
		$sth = $this->db->prepare($query);
5172
		$sth->execute(array(':airline_icao' => $airline_icao));
5173
5174
		$aircraft_array = array();
5175
		$temp_array = array();
5176
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5177
		{
5178
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5179
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5180
			$temp_array['registration'] = $row['registration'];
5181
			$temp_array['airline_name'] = $row['airline_name'];
5182
			$temp_array['image_thumbnail'] = "";
5183
			if($row['registration'] != "")
5184
			{
5185
				$image_array = $Image->getSpotterImage($row['registration']);
5186
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5187
			}
5188
			$temp_array['registration_count'] = $row['registration_count'];
5189
5190
			$aircraft_array[] = $temp_array;
5191
		}
5192
		return $aircraft_array;
5193
	}
5194
5195
5196
	/**
5197
	* Gets all aircraft manufacturer that have flown over by airline icao
5198
	*
5199
	* @return Array the aircraft list
5200
	*
5201
	*/
5202
	public function countAllAircraftManufacturerByAirline($airline_icao,$filters = array())
5203
	{
5204
		$filter_query = $this->getFilter($filters,true,true);
5205
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5206
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5207
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.airline_icao = :airline_icao 
5208
				GROUP BY spotter_output.aircraft_manufacturer 
5209
				ORDER BY aircraft_manufacturer_count DESC";
5210
5211
		$sth = $this->db->prepare($query);
5212
		$sth->execute(array(':airline_icao' => $airline_icao));
5213
5214
		$aircraft_array = array();
5215
		$temp_array = array();
5216
5217
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5218
		{
5219
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5220
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5221
5222
			$aircraft_array[] = $temp_array;
5223
		}
5224
		return $aircraft_array;
5225
	}
5226
5227
5228
	/**
5229
	* Gets all aircraft types that have flown over by airline icao
5230
	*
5231
	* @return Array the aircraft list
5232
	*
5233
	*/
5234
	public function countAllAircraftTypesByAirport($airport_icao,$filters = array())
5235
	{
5236
		$filter_query = $this->getFilter($filters,true,true);
5237
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5238
5239
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5240
				FROM spotter_output".$filter_query." spotter_output.aircraft_icao <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao) 
5241
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5242
				ORDER BY aircraft_icao_count DESC";
5243
 
5244
		$sth = $this->db->prepare($query);
5245
		$sth->execute(array(':airport_icao' => $airport_icao));
5246
5247
		$aircraft_array = array();
5248
		$temp_array = array();
5249
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5250
		{
5251
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5252
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5253
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5254
5255
			$aircraft_array[] = $temp_array;
5256
		}
5257
		return $aircraft_array;
5258
	}
5259
5260
5261
	/**
5262
	* Gets all aircraft registration that have flown over by airport icao
5263
	*
5264
	* @return Array the aircraft list
5265
	*
5266
	*/
5267
	public function countAllAircraftRegistrationByAirport($airport_icao,$filters = array())
5268
	{
5269
		$filter_query = $this->getFilter($filters,true,true);
5270
		$Image = new Image($this->db);
5271
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5272
5273
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name  
5274
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)   
5275
                    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5276
		    ORDER BY registration_count DESC";
5277
5278
		$sth = $this->db->prepare($query);
5279
		$sth->execute(array(':airport_icao' => $airport_icao));
5280
5281
		$aircraft_array = array();
5282
		$temp_array = array();
5283
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5284
		{
5285
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5286
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5287
			$temp_array['registration'] = $row['registration'];
5288
			$temp_array['airline_name'] = $row['airline_name'];
5289
			$temp_array['image_thumbnail'] = "";
5290
			if($row['registration'] != "")
5291
			{
5292
				$image_array = $Image->getSpotterImage($row['registration']);
5293
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5294
			}
5295
			$temp_array['registration_count'] = $row['registration_count'];
5296
			$aircraft_array[] = $temp_array;
5297
		}
5298
		return $aircraft_array;
5299
	}
5300
	
5301
	
5302
	/**
5303
	* Gets all aircraft manufacturer that have flown over by airport icao
5304
	*
5305
	* @return Array the aircraft list
5306
	*
5307
	*/
5308
	public function countAllAircraftManufacturerByAirport($airport_icao,$filters = array())
5309
	{
5310
		$filter_query = $this->getFilter($filters,true,true);
5311
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5312
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5313
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)  
5314
                    GROUP BY spotter_output.aircraft_manufacturer 
5315
					ORDER BY aircraft_manufacturer_count DESC";
5316
5317
		
5318
		$sth = $this->db->prepare($query);
5319
		$sth->execute(array(':airport_icao' => $airport_icao));
5320
5321
		$aircraft_array = array();
5322
		$temp_array = array();
5323
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5324
		{
5325
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5326
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5327
			$aircraft_array[] = $temp_array;
5328
		}
5329
		return $aircraft_array;
5330
	}
5331
5332
	/**
5333
	* Gets all aircraft types that have flown over by aircraft manufacturer
5334
	*
5335
	* @return Array the aircraft list
5336
	*
5337
	*/
5338
	public function countAllAircraftTypesByManufacturer($aircraft_manufacturer,$filters = array())
5339
	{
5340
		$filter_query = $this->getFilter($filters,true,true);
5341
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5342
5343
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5344
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
5345
                    GROUP BY spotter_output.aircraft_name 
5346
					ORDER BY aircraft_icao_count DESC";
5347
5348
		$sth = $this->db->prepare($query);
5349
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5350
		$aircraft_array = array();
5351
		$temp_array = array();
5352
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5353
		{
5354
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5355
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5356
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5357
			$aircraft_array[] = $temp_array;
5358
		}
5359
		return $aircraft_array;
5360
	}
5361
5362
5363
	/**
5364
	* Gets all aircraft registration that have flown over by aircaft manufacturer
5365
	*
5366
	* @return Array the aircraft list
5367
	*
5368
	*/
5369
	public function countAllAircraftRegistrationByManufacturer($aircraft_manufacturer, $filters = array())
5370
	{
5371
		$filter_query = $this->getFilter($filters,true,true);
5372
		$Image = new Image($this->db);
5373
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5374
5375
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name   
5376
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
5377
                    GROUP BY spotter_output.registration 
5378
					ORDER BY registration_count DESC";
5379
5380
		
5381
		$sth = $this->db->prepare($query);
5382
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5383
		$aircraft_array = array();
5384
		$temp_array = array();
5385
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5386
		{
5387
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5388
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5389
			$temp_array['registration'] = $row['registration'];
5390
			$temp_array['airline_name'] = $row['airline_name'];
5391
			$temp_array['image_thumbnail'] = "";
5392
			if($row['registration'] != "")
5393
			{
5394
				$image_array = $Image->getSpotterImage($row['registration']);
5395
				$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5396
			}
5397
			$temp_array['registration_count'] = $row['registration_count'];
5398
			$aircraft_array[] = $temp_array;
5399
		}
5400
		return $aircraft_array;
5401
	}
5402
5403
	/**
5404
	* Gets all aircraft types that have flown over by date
5405
	*
5406
	* @return Array the aircraft list
5407
	*
5408
	*/
5409
	public function countAllAircraftTypesByDate($date,$filters = array())
5410
	{
5411
		global $globalTimezone, $globalDBdriver;
5412
		$filter_query = $this->getFilter($filters,true,true);
5413
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5414
		if ($globalTimezone != '') {
5415
			date_default_timezone_set($globalTimezone);
5416
			$datetime = new DateTime($date);
5417
			$offset = $datetime->format('P');
5418
		} else $offset = '+00:00';
5419
5420
		if ($globalDBdriver == 'mysql') {
5421
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5422
					FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
5423
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5424
					ORDER BY aircraft_icao_count DESC";
5425
		} else {
5426
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5427
					FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date
5428
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5429
					ORDER BY aircraft_icao_count DESC";
5430
		}
5431
		
5432
		$sth = $this->db->prepare($query);
5433
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5434
5435
		$aircraft_array = array();
5436
		$temp_array = array();
5437
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5438
		{
5439
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5440
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5441
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5442
5443
			$aircraft_array[] = $temp_array;
5444
		}
5445
		return $aircraft_array;
5446
	}
5447
5448
5449
	/**
5450
	* Gets all aircraft registration that have flown over by date
5451
	*
5452
	* @return Array the aircraft list
5453
	*
5454
	*/
5455
	public function countAllAircraftRegistrationByDate($date,$filters = array())
5456
	{
5457
		global $globalTimezone, $globalDBdriver;
5458
		$filter_query = $this->getFilter($filters,true,true);
5459
		$Image = new Image($this->db);
5460
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5461
		if ($globalTimezone != '') {
5462
			date_default_timezone_set($globalTimezone);
5463
			$datetime = new DateTime($date);
5464
			$offset = $datetime->format('P');
5465
		} else $offset = '+00:00';
5466
5467
		if ($globalDBdriver == 'mysql') {
5468
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name 
5469
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5470
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5471
					ORDER BY registration_count DESC";
5472
		} else {
5473
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name    
5474
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5475
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5476
					ORDER BY registration_count DESC";
5477
		}
5478
		
5479
		$sth = $this->db->prepare($query);
5480
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5481
5482
		$aircraft_array = array();
5483
		$temp_array = array();
5484
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5485
		{
5486
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5487
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5488
			$temp_array['registration'] = $row['registration'];
5489
			$temp_array['airline_name'] = $row['airline_name'];
5490
			$temp_array['image_thumbnail'] = "";
5491
			if($row['registration'] != "")
5492
			{
5493
				$image_array = $Image->getSpotterImage($row['registration']);
5494
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5495
			}
5496
			$temp_array['registration_count'] = $row['registration_count'];
5497
 
5498
			$aircraft_array[] = $temp_array;
5499
		}
5500
		return $aircraft_array;
5501
	}
5502
5503
5504
	/**
5505
	* Gets all aircraft manufacturer that have flown over by date
5506
	*
5507
	* @return Array the aircraft manufacturer list
5508
	*
5509
	*/
5510
	public function countAllAircraftManufacturerByDate($date,$filters = array())
5511
	{
5512
		global $globalTimezone, $globalDBdriver;
5513
		$filter_query = $this->getFilter($filters,true,true);
5514
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5515
		if ($globalTimezone != '') {
5516
			date_default_timezone_set($globalTimezone);
5517
			$datetime = new DateTime($date);
5518
			$offset = $datetime->format('P');
5519
		} else $offset = '+00:00';
5520
5521
		if ($globalDBdriver == 'mysql') {
5522
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5523
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5524
				GROUP BY spotter_output.aircraft_manufacturer 
5525
				ORDER BY aircraft_manufacturer_count DESC";
5526
		} else {
5527
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5528
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5529
				GROUP BY spotter_output.aircraft_manufacturer 
5530
				ORDER BY aircraft_manufacturer_count DESC";
5531
		}
5532
		
5533
		$sth = $this->db->prepare($query);
5534
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5535
5536
		$aircraft_array = array();
5537
		$temp_array = array();
5538
5539
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5540
		{
5541
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5542
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5543
5544
			$aircraft_array[] = $temp_array;
5545
		}
5546
		return $aircraft_array;
5547
	}
5548
5549
5550
	/**
5551
	* Gets all aircraft types that have flown over by ident/callsign
5552
	*
5553
	* @return Array the aircraft list
5554
	*
5555
	*/
5556
	public function countAllAircraftTypesByIdent($ident,$filters = array())
5557
	{
5558
		$filter_query = $this->getFilter($filters,true,true);
5559
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5560
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5561
				FROM spotter_output".$filter_query." spotter_output.ident = :ident 
5562
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao
5563
				ORDER BY aircraft_icao_count DESC";
5564
5565
		$sth = $this->db->prepare($query);
5566
		$sth->execute(array(':ident' => $ident));
5567
      
5568
		$aircraft_array = array();
5569
		$temp_array = array();
5570
5571
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5572
		{
5573
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5574
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5575
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5576
5577
			$aircraft_array[] = $temp_array;
5578
		}
5579
		return $aircraft_array;
5580
	}
5581
5582
	/**
5583
	* Gets all aircraft types that have flown over by pilot
5584
	*
5585
	* @return Array the aircraft list
5586
	*
5587
	*/
5588
	public function countAllAircraftTypesByPilot($pilot,$filters = array())
5589
	{
5590
		$filter_query = $this->getFilter($filters,true,true);
5591
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
5592
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5593
				FROM spotter_output".$filter_query." (spotter_output.pilot_id = :pilot OR spotter_output.pilot_name = :pilot) 
5594
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao
5595
				ORDER BY aircraft_icao_count DESC";
5596
5597
		$sth = $this->db->prepare($query);
5598
		$sth->execute(array(':pilot' => $pilot));
5599
		return $sth->fetchAll(PDO::FETCH_ASSOC);
5600
	}
5601
5602
	/**
5603
	* Gets all aircraft types that have flown over by owner
5604
	*
5605
	* @return Array the aircraft list
5606
	*
5607
	*/
5608
	public function countAllAircraftTypesByOwner($owner,$filters = array())
5609
	{
5610
		$filter_query = $this->getFilter($filters,true,true);
5611
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
5612
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
5613
				FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
5614
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.aircraft_icao
5615
				ORDER BY aircraft_icao_count DESC";
5616
5617
		$sth = $this->db->prepare($query);
5618
		$sth->execute(array(':owner' => $owner));
5619
		return $sth->fetchAll(PDO::FETCH_ASSOC);
5620
	}
5621
5622
5623
	/**
5624
	* Gets all aircraft registration that have flown over by ident/callsign
5625
	*
5626
	* @return Array the aircraft list
5627
	*
5628
	*/
5629
	public function countAllAircraftRegistrationByIdent($ident,$filters = array())
5630
	{
5631
		$filter_query = $this->getFilter($filters,true,true);
5632
		$Image = new Image($this->db);
5633
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5634
5635
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name  
5636
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.ident = :ident   
5637
                    GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
5638
		    ORDER BY registration_count DESC";
5639
5640
		
5641
		$sth = $this->db->prepare($query);
5642
		$sth->execute(array(':ident' => $ident));
5643
      
5644
		$aircraft_array = array();
5645
		$temp_array = array();
5646
        
5647
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5648
		{
5649
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5650
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5651
			$temp_array['registration'] = $row['registration'];
5652
			$temp_array['airline_name'] = $row['airline_name'];
5653
			$temp_array['image_thumbnail'] = "";
5654
			if($row['registration'] != "")
5655
			{
5656
				$image_array = $Image->getSpotterImage($row['registration']);
5657
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5658
				else $temp_array['image_thumbnail'] = '';
5659
			}
5660
			$temp_array['registration_count'] = $row['registration_count'];
5661
			$aircraft_array[] = $temp_array;
5662
		}
5663
		return $aircraft_array;
5664
	}
5665
5666
	/**
5667
	* Gets all aircraft registration that have flown over by owner
5668
	*
5669
	* @return Array the aircraft list
5670
	*
5671
	*/
5672
	public function countAllAircraftRegistrationByOwner($owner,$filters = array())
5673
	{
5674
		$filter_query = $this->getFilter($filters,true,true);
5675
		$Image = new Image($this->db);
5676
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
5677
5678
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.registration, spotter_output.airline_name  
5679
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.owner_name = :owner 
5680
                    GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.airline_name
5681
		    ORDER BY registration_count DESC";
5682
5683
		
5684
		$sth = $this->db->prepare($query);
5685
		$sth->execute(array(':owner' => $owner));
5686
      
5687
		$aircraft_array = array();
5688
		$temp_array = array();
5689
        
5690
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5691
		{
5692
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5693
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5694
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5695
			$temp_array['registration'] = $row['registration'];
5696
			$temp_array['airline_name'] = $row['airline_name'];
5697
			$temp_array['image_thumbnail'] = "";
5698
			if($row['registration'] != "")
5699
			{
5700
				$image_array = $Image->getSpotterImage($row['registration']);
5701
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5702
				else $temp_array['image_thumbnail'] = '';
5703
			}
5704
			$temp_array['registration_count'] = $row['registration_count'];
5705
			$aircraft_array[] = $temp_array;
5706
		}
5707
		return $aircraft_array;
5708
	}
5709
5710
	/**
5711
	* Gets all aircraft registration that have flown over by pilot
5712
	*
5713
	* @return Array the aircraft list
5714
	*
5715
	*/
5716
	public function countAllAircraftRegistrationByPilot($pilot,$filters = array())
5717
	{
5718
		$filter_query = $this->getFilter($filters,true,true);
5719
		$Image = new Image($this->db);
5720
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
5721
5722
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.registration, spotter_output.airline_name  
5723
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
5724
                    GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.airline_name
5725
		    ORDER BY registration_count DESC";
5726
5727
		
5728
		$sth = $this->db->prepare($query);
5729
		$sth->execute(array(':pilot' => $pilot));
5730
      
5731
		$aircraft_array = array();
5732
		$temp_array = array();
5733
        
5734
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5735
		{
5736
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5737
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5738
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5739
			$temp_array['registration'] = $row['registration'];
5740
			$temp_array['airline_name'] = $row['airline_name'];
5741
			$temp_array['image_thumbnail'] = "";
5742
			if($row['registration'] != "")
5743
			{
5744
				$image_array = $Image->getSpotterImage($row['registration']);
5745
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5746
				else $temp_array['image_thumbnail'] = '';
5747
			}
5748
			$temp_array['registration_count'] = $row['registration_count'];
5749
			$aircraft_array[] = $temp_array;
5750
		}
5751
		return $aircraft_array;
5752
	}
5753
5754
5755
	/**
5756
	* Gets all aircraft manufacturer that have flown over by ident/callsign
5757
	*
5758
	* @return Array the aircraft manufacturer list
5759
	*
5760
	*/
5761
	public function countAllAircraftManufacturerByIdent($ident,$filters = array())
5762
	{
5763
		$filter_query = $this->getFilter($filters,true,true);
5764
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5765
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5766
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.ident = :ident  
5767
                    GROUP BY spotter_output.aircraft_manufacturer 
5768
					ORDER BY aircraft_manufacturer_count DESC";
5769
5770
		
5771
		$sth = $this->db->prepare($query);
5772
		$sth->execute(array(':ident' => $ident));
5773
		$aircraft_array = array();
5774
		$temp_array = array();
5775
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5776
		{
5777
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5778
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5779
			$aircraft_array[] = $temp_array;
5780
		}
5781
		return $aircraft_array;
5782
	}
5783
5784
	/**
5785
	* Gets all aircraft manufacturer that have flown over by owner
5786
	*
5787
	* @return Array the aircraft manufacturer list
5788
	*
5789
	*/
5790
	public function countAllAircraftManufacturerByOwner($owner,$filters = array())
5791
	{
5792
		$filter_query = $this->getFilter($filters,true,true);
5793
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
5794
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5795
		    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.owner_name = :owner 
5796
		    GROUP BY spotter_output.aircraft_manufacturer 
5797
		    ORDER BY aircraft_manufacturer_count DESC";
5798
5799
		
5800
		$sth = $this->db->prepare($query);
5801
		$sth->execute(array(':owner' => $owner));
5802
		return $sth->fetchAll(PDO::FETCH_ASSOC);
5803
	}
5804
5805
	/**
5806
	* Gets all aircraft manufacturer that have flown over by pilot
5807
	*
5808
	* @return Array the aircraft manufacturer list
5809
	*
5810
	*/
5811
	public function countAllAircraftManufacturerByPilot($pilot,$filters = array())
5812
	{
5813
		$filter_query = $this->getFilter($filters,true,true);
5814
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
5815
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5816
		    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
5817
		    GROUP BY spotter_output.aircraft_manufacturer 
5818
		    ORDER BY aircraft_manufacturer_count DESC";
5819
5820
		
5821
		$sth = $this->db->prepare($query);
5822
		$sth->execute(array(':pilot' => $pilot));
5823
		return $sth->fetchAll(PDO::FETCH_ASSOC);
5824
	}
5825
5826
5827
	/**
5828
	* Gets all aircraft types that have flown over by route
5829
	*
5830
	* @return Array the aircraft list
5831
	*
5832
	*/
5833
	public function countAllAircraftTypesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
5834
	{
5835
		$filter_query = $this->getFilter($filters,true,true);
5836
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
5837
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
5838
		
5839
5840
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5841
                    FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
5842
                    GROUP BY spotter_output.aircraft_name 
5843
					ORDER BY aircraft_icao_count DESC";
5844
 
5845
		
5846
		$sth = $this->db->prepare($query);
5847
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
5848
		$aircraft_array = array();
5849
		$temp_array = array();
5850
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5851
		{
5852
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5853
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5854
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5855
			$aircraft_array[] = $temp_array;
5856
		}
5857
		return $aircraft_array;
5858
	}
5859
5860
	/**
5861
	* Gets all aircraft registration that have flown over by route
5862
	*
5863
	* @return Array the aircraft list
5864
	*
5865
	*/
5866
	public function countAllAircraftRegistrationByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
5867
	{
5868
		$filter_query = $this->getFilter($filters,true,true);
5869
		$Image = new Image($this->db);
5870
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
5871
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
5872
5873
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name   
5874
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)   
5875
                    GROUP BY spotter_output.registration 
5876
					ORDER BY registration_count DESC";
5877
5878
		
5879
		$sth = $this->db->prepare($query);
5880
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
5881
      
5882
		$aircraft_array = array();
5883
		$temp_array = array();
5884
        
5885
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5886
		{
5887
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5888
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5889
			$temp_array['registration'] = $row['registration'];
5890
			$temp_array['airline_name'] = $row['airline_name'];
5891
			$temp_array['image_thumbnail'] = "";
5892
			if($row['registration'] != "")
5893
			{
5894
				$image_array = $Image->getSpotterImage($row['registration']);
5895
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5896
			}
5897
			$temp_array['registration_count'] = $row['registration_count'];
5898
          
5899
			$aircraft_array[] = $temp_array;
5900
		}
5901
5902
		return $aircraft_array;
5903
	}
5904
	
5905
	
5906
	/**
5907
	* Gets all aircraft manufacturer that have flown over by route
5908
	*
5909
	* @return Array the aircraft manufacturer list
5910
	*
5911
	*/
5912
	public function countAllAircraftManufacturerByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
5913
	{
5914
		$filter_query = $this->getFilter($filters,true,true);
5915
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
5916
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
5917
5918
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5919
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
5920
                    GROUP BY spotter_output.aircraft_manufacturer 
5921
					ORDER BY aircraft_manufacturer_count DESC";
5922
5923
		
5924
		$sth = $this->db->prepare($query);
5925
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
5926
      
5927
		$aircraft_array = array();
5928
		$temp_array = array();
5929
        
5930
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5931
		{
5932
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5933
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5934
          
5935
			$aircraft_array[] = $temp_array;
5936
		}
5937
5938
		return $aircraft_array;
5939
	}	
5940
5941
	
5942
	
5943
	
5944
	/**
5945
	* Gets all aircraft types that have flown over by country
5946
	*
5947
	* @return Array the aircraft list
5948
	*
5949
	*/
5950
	public function countAllAircraftTypesByCountry($country,$filters = array())
5951
	{
5952
		$filter_query = $this->getFilter($filters,true,true);
5953
		$country = filter_var($country,FILTER_SANITIZE_STRING);
5954
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5955
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
5956
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5957
			    ORDER BY aircraft_icao_count DESC";
5958
 
5959
		
5960
		$sth = $this->db->prepare($query);
5961
		$sth->execute(array(':country' => $country));
5962
      
5963
		$aircraft_array = array();
5964
		$temp_array = array();
5965
        
5966
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5967
		{
5968
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5969
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5970
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5971
          
5972
			$aircraft_array[] = $temp_array;
5973
		}
5974
5975
		return $aircraft_array;
5976
	}
5977
5978
5979
	/**
5980
	* Gets all aircraft registration that have flown over by country
5981
	*
5982
	* @return Array the aircraft list
5983
	*
5984
	*/
5985
	public function countAllAircraftRegistrationByCountry($country,$filters = array())
5986
	{
5987
		$filter_query = $this->getFilter($filters,true,true);
5988
		$Image = new Image($this->db);
5989
		$country = filter_var($country,FILTER_SANITIZE_STRING);
5990
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name 
5991
			    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country)    
5992
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5993
			    ORDER BY registration_count DESC";
5994
5995
		
5996
		$sth = $this->db->prepare($query);
5997
		$sth->execute(array(':country' => $country));
5998
      
5999
		$aircraft_array = array();
6000
		$temp_array = array();
6001
        
6002
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6003
		{
6004
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6005
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6006
			$temp_array['registration'] = $row['registration'];
6007
			$temp_array['airline_name'] = $row['airline_name'];
6008
			$temp_array['image_thumbnail'] = "";
6009
			if($row['registration'] != "")
6010
			{
6011
				$image_array = $Image->getSpotterImage($row['registration']);
6012
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6013
			}
6014
			$temp_array['registration_count'] = $row['registration_count'];
6015
          
6016
			$aircraft_array[] = $temp_array;
6017
		}
6018
6019
		return $aircraft_array;
6020
	}
6021
	
6022
	
6023
	/**
6024
	* Gets all aircraft manufacturer that have flown over by country
6025
	*
6026
	* @return Array the aircraft manufacturer list
6027
	*
6028
	*/
6029
	public function countAllAircraftManufacturerByCountry($country,$filters = array())
6030
	{
6031
		$filter_query = $this->getFilter($filters,true,true);
6032
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6033
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6034
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND (((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country) 
6035
                    GROUP BY spotter_output.aircraft_manufacturer 
6036
					ORDER BY aircraft_manufacturer_count DESC";
6037
6038
		
6039
		$sth = $this->db->prepare($query);
6040
		$sth->execute(array(':country' => $country));
6041
      
6042
		$aircraft_array = array();
6043
		$temp_array = array();
6044
        
6045
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6046
		{
6047
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6048
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6049
          
6050
			$aircraft_array[] = $temp_array;
6051
		}
6052
6053
		return $aircraft_array;
6054
	}	
6055
	
6056
	
6057
	
6058
	/**
6059
	* Gets all aircraft manufacturers that have flown over
6060
	*
6061
	* @return Array the aircraft list
6062
	*
6063
	*/
6064
	public function countAllAircraftManufacturers($filters = array(),$year = '',$month = '',$day = '')
6065
	{
6066
		global $globalDBdriver;
6067
		$filter_query = $this->getFilter($filters,true,true);
6068
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
6069
                    FROM spotter_output ".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.aircraft_manufacturer <> 'Not Available'";
6070
                $query_values = array();
6071
		if ($year != '') {
6072
			if ($globalDBdriver == 'mysql') {
6073
				$query .= " AND YEAR(spotter_output.date) = :year";
6074
				$query_values = array_merge($query_values,array(':year' => $year));
6075
			} else {
6076
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6077
				$query_values = array_merge($query_values,array(':year' => $year));
6078
			}
6079
		}
6080
		if ($month != '') {
6081
			if ($globalDBdriver == 'mysql') {
6082
				$query .= " AND MONTH(spotter_output.date) = :month";
6083
				$query_values = array_merge($query_values,array(':month' => $month));
6084
			} else {
6085
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6086
				$query_values = array_merge($query_values,array(':month' => $month));
6087
			}
6088
		}
6089
		if ($day != '') {
6090
			if ($globalDBdriver == 'mysql') {
6091
				$query .= " AND DAY(spotter_output.date) = :day";
6092
				$query_values = array_merge($query_values,array(':day' => $day));
6093
			} else {
6094
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6095
				$query_values = array_merge($query_values,array(':day' => $day));
6096
			}
6097
		}
6098
		$query .= " GROUP BY spotter_output.aircraft_manufacturer
6099
					ORDER BY aircraft_manufacturer_count DESC
6100
					LIMIT 10";
6101
      
6102
		
6103
		$sth = $this->db->prepare($query);
6104
		$sth->execute($query_values);
6105
      
6106
		$manufacturer_array = array();
6107
		$temp_array = array();
6108
        
6109
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6110
		{
6111
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
6112
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
6113
          
6114
			$manufacturer_array[] = $temp_array;
6115
		}
6116
6117
		return $manufacturer_array;
6118
	}
6119
	
6120
	
6121
	
6122
	/**
6123
	* Gets all aircraft registrations that have flown over
6124
	*
6125
	* @return Array the aircraft list
6126
	*
6127
	*/
6128
	public function countAllAircraftRegistrations($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '', $month = '', $day = '')
6129
	{
6130
		global $globalDBdriver;
6131
		$Image = new Image($this->db);
6132
		$filter_query = $this->getFilter($filters,true,true);
6133
		$query  = "SELECT DISTINCT spotter_output.registration, COUNT(spotter_output.registration) AS aircraft_registration_count, spotter_output.aircraft_icao,  spotter_output.aircraft_name, spotter_output.airline_name    
6134
                    FROM spotter_output ".$filter_query." spotter_output.registration <> '' AND spotter_output.registration <> 'NA'";
6135
                if ($olderthanmonths > 0) {
6136
            		if ($globalDBdriver == 'mysql') {
6137
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6138
			} else {
6139
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6140
			}
6141
		}
6142
                if ($sincedate != '') {
6143
            		if ($globalDBdriver == 'mysql') {
6144
				$query .= " AND spotter_output.date > '".$sincedate."'";
6145
			} else {
6146
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6147
			}
6148
		}
6149
		$query_values = array();
6150
		if ($year != '') {
6151
			if ($globalDBdriver == 'mysql') {
6152
				$query .= " AND YEAR(spotter_output.date) = :year";
6153
				$query_values = array_merge($query_values,array(':year' => $year));
6154
			} else {
6155
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6156
				$query_values = array_merge($query_values,array(':year' => $year));
6157
			}
6158
		}
6159
		if ($month != '') {
6160
			if ($globalDBdriver == 'mysql') {
6161
				$query .= " AND MONTH(spotter_output.date) = :month";
6162
				$query_values = array_merge($query_values,array(':month' => $month));
6163
			} else {
6164
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6165
				$query_values = array_merge($query_values,array(':month' => $month));
6166
			}
6167
		}
6168
		if ($day != '') {
6169
			if ($globalDBdriver == 'mysql') {
6170
				$query .= " AND DAY(spotter_output.date) = :day";
6171
				$query_values = array_merge($query_values,array(':day' => $day));
6172
			} else {
6173
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6174
				$query_values = array_merge($query_values,array(':day' => $day));
6175
			}
6176
		}
6177
		$query .= " GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name ORDER BY aircraft_registration_count DESC";
6178
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6179
		
6180
		$sth = $this->db->prepare($query);
6181
		$sth->execute($query_values);
6182
      
6183
		$aircraft_array = array();
6184
		$temp_array = array();
6185
        
6186
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6187
		{
6188
			$temp_array['registration'] = $row['registration'];
6189
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
6190
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6191
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6192
			$temp_array['airline_name'] = $row['airline_name'];
6193
			$temp_array['image_thumbnail'] = "";
6194
			if($row['registration'] != "")
6195
			{
6196
				$image_array = $Image->getSpotterImage($row['registration']);
6197
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6198
			}
6199
          
6200
			$aircraft_array[] = $temp_array;
6201
		}
6202
6203
		return $aircraft_array;
6204
	}
6205
6206
6207
	/**
6208
	* Gets all aircraft registrations that have flown over
6209
	*
6210
	* @return Array the aircraft list
6211
	*
6212
	*/
6213
	public function countAllAircraftRegistrationsByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
6214
	{
6215
		global $globalDBdriver;
6216
		$filter_query = $this->getFilter($filters,true,true);
6217
		$Image = new Image($this->db);
6218
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.registration, COUNT(spotter_output.registration) AS aircraft_registration_count, spotter_output.aircraft_icao,  spotter_output.aircraft_name, spotter_output.airline_name    
6219
                    FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.registration <> '' AND spotter_output.registration <> 'NA' ";
6220
                if ($olderthanmonths > 0) {
6221
            		if ($globalDBdriver == 'mysql') {
6222
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6223
			} else {
6224
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6225
			}
6226
		}
6227
                if ($sincedate != '') {
6228
            		if ($globalDBdriver == 'mysql') {
6229
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6230
			} else {
6231
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6232
			}
6233
		}
6234
6235
		// if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6236
		//if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6237
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name ORDER BY aircraft_registration_count DESC";
6238
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6239
		
6240
		$sth = $this->db->prepare($query);
6241
		$sth->execute();
6242
      
6243
		$aircraft_array = array();
6244
		$temp_array = array();
6245
        
6246
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6247
		{
6248
			$temp_array['registration'] = $row['registration'];
6249
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
6250
			$temp_array['airline_icao'] = $row['airline_icao'];
6251
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6252
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6253
			$temp_array['airline_name'] = $row['airline_name'];
6254
			$temp_array['image_thumbnail'] = "";
6255
			if($row['registration'] != "")
6256
			{
6257
				$image_array = $Image->getSpotterImage($row['registration']);
6258
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6259
			}
6260
          
6261
			$aircraft_array[] = $temp_array;
6262
		}
6263
6264
		return $aircraft_array;
6265
	}
6266
	
6267
	
6268
	/**
6269
	* Gets all departure airports of the airplanes that have flown over
6270
	*
6271
	* @return Array the airport list
6272
	*
6273
	*/
6274
	public function countAllDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
6275
	{
6276
		global $globalDBdriver;
6277
		$filter_query = $this->getFilter($filters,true,true);
6278
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6279
				FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> ''";
6280
                if ($olderthanmonths > 0) {
6281
            		if ($globalDBdriver == 'mysql') {
6282
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6283
			} else {
6284
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6285
			}
6286
                }
6287
                if ($sincedate != '') {
6288
            		if ($globalDBdriver == 'mysql') {
6289
				$query .= " AND spotter_output.date > '".$sincedate."'";
6290
			} else {
6291
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6292
			}
6293
		}
6294
		$query_values = array();
6295
		if ($year != '') {
6296
			if ($globalDBdriver == 'mysql') {
6297
				$query .= " AND YEAR(spotter_output.date) = :year";
6298
				$query_values = array_merge($query_values,array(':year' => $year));
6299
			} else {
6300
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6301
				$query_values = array_merge($query_values,array(':year' => $year));
6302
			}
6303
		}
6304
		if ($month != '') {
6305
			if ($globalDBdriver == 'mysql') {
6306
				$query .= " AND MONTH(spotter_output.date) = :month";
6307
				$query_values = array_merge($query_values,array(':month' => $month));
6308
			} else {
6309
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6310
				$query_values = array_merge($query_values,array(':month' => $month));
6311
			}
6312
		}
6313
		if ($day != '') {
6314
			if ($globalDBdriver == 'mysql') {
6315
				$query .= " AND DAY(spotter_output.date) = :day";
6316
				$query_values = array_merge($query_values,array(':day' => $day));
6317
			} else {
6318
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6319
				$query_values = array_merge($query_values,array(':day' => $day));
6320
			}
6321
		}
6322
                $query .= " GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6323
				ORDER BY airport_departure_icao_count DESC";
6324
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6325
6326
		$sth = $this->db->prepare($query);
6327
		$sth->execute($query_values);
6328
6329
		$airport_array = array();
6330
		$temp_array = array();
6331
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6332
		{
6333
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6334
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6335
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6336
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6337
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6338
          
6339
			$airport_array[] = $temp_array;
6340
		}
6341
		return $airport_array;
6342
	}
6343
6344
	/**
6345
	* Gets all departure airports of the airplanes that have flown over
6346
	*
6347
	* @return Array the airport list
6348
	*
6349
	*/
6350
	public function countAllDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
6351
	{
6352
		global $globalDBdriver;
6353
		$filter_query = $this->getFilter($filters,true,true);
6354
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6355
			FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> '' ";
6356
                if ($olderthanmonths > 0) {
6357
            		if ($globalDBdriver == 'mysql') {
6358
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6359
			} else {
6360
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6361
			}
6362
                }
6363
                if ($sincedate != '') {
6364
            		if ($globalDBdriver == 'mysql') {
6365
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6366
			} else {
6367
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6368
			}
6369
		}
6370
6371
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6372
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6373
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6374
				ORDER BY airport_departure_icao_count DESC";
6375
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6376
      
6377
		$sth = $this->db->prepare($query);
6378
		$sth->execute();
6379
      
6380
		$airport_array = array();
6381
		$temp_array = array();
6382
        
6383
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6384
		{
6385
			$temp_array['airline_icao'] = $row['airline_icao'];
6386
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6387
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6388
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6389
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6390
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6391
          
6392
			$airport_array[] = $temp_array;
6393
		}
6394
		return $airport_array;
6395
	}
6396
6397
	/**
6398
	* Gets all detected departure airports of the airplanes that have flown over
6399
	*
6400
	* @return Array the airport list
6401
	*
6402
	*/
6403
	public function countAllDetectedDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
6404
	{
6405
		global $globalDBdriver;
6406
		$filter_query = $this->getFilter($filters,true,true);
6407
		$query  = "SELECT DISTINCT spotter_output.real_departure_airport_icao AS departure_airport_icao, COUNT(spotter_output.real_departure_airport_icao) AS airport_departure_icao_count, airport.name as departure_airport_name, airport.city as departure_airport_city, airport.country as departure_airport_country
6408
				FROM airport, spotter_output".$filter_query." spotter_output.real_departure_airport_icao <> '' AND spotter_output.real_departure_airport_icao <> 'NA' AND airport.icao = spotter_output.real_departure_airport_icao";
6409
                if ($olderthanmonths > 0) {
6410
            		if ($globalDBdriver == 'mysql') {
6411
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6412
			} else {
6413
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6414
			}
6415
                }
6416
                if ($sincedate != '') {
6417
            		if ($globalDBdriver == 'mysql') {
6418
				$query .= " AND spotter_output.date > '".$sincedate."'";
6419
			} else {
6420
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6421
			}
6422
		}
6423
		$query_values = array();
6424
		if ($year != '') {
6425
			if ($globalDBdriver == 'mysql') {
6426
				$query .= " AND YEAR(spotter_output.date) = :year";
6427
				$query_values = array_merge($query_values,array(':year' => $year));
6428
			} else {
6429
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6430
				$query_values = array_merge($query_values,array(':year' => $year));
6431
			}
6432
		}
6433
		if ($month != '') {
6434
			if ($globalDBdriver == 'mysql') {
6435
				$query .= " AND MONTH(spotter_output.date) = :month";
6436
				$query_values = array_merge($query_values,array(':month' => $month));
6437
			} else {
6438
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6439
				$query_values = array_merge($query_values,array(':month' => $month));
6440
			}
6441
		}
6442
		if ($day != '') {
6443
			if ($globalDBdriver == 'mysql') {
6444
				$query .= " AND DAY(spotter_output.date) = :day";
6445
				$query_values = array_merge($query_values,array(':day' => $day));
6446
			} else {
6447
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6448
				$query_values = array_merge($query_values,array(':day' => $day));
6449
			}
6450
		}
6451
                $query .= " GROUP BY spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
6452
				ORDER BY airport_departure_icao_count DESC";
6453
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6454
    		//echo $query;
6455
		$sth = $this->db->prepare($query);
6456
		$sth->execute($query_values);
6457
      
6458
		$airport_array = array();
6459
		$temp_array = array();
6460
        
6461
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6462
		{
6463
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6464
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6465
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6466
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6467
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6468
          
6469
			$airport_array[] = $temp_array;
6470
		}
6471
		return $airport_array;
6472
	}
6473
	
6474
	/**
6475
	* Gets all detected departure airports of the airplanes that have flown over
6476
	*
6477
	* @return Array the airport list
6478
	*
6479
	*/
6480
	public function countAllDetectedDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
6481
	{
6482
		global $globalDBdriver;
6483
		$filter_query = $this->getFilter($filters,true,true);
6484
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.real_departure_airport_icao AS departure_airport_icao, COUNT(spotter_output.real_departure_airport_icao) AS airport_departure_icao_count, airport.name as departure_airport_name, airport.city as departure_airport_city, airport.country as departure_airport_country
6485
				FROM airport, spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.real_departure_airport_icao <> '' AND spotter_output.real_departure_airport_icao <> 'NA' AND airport.icao = spotter_output.real_departure_airport_icao ";
6486
                if ($olderthanmonths > 0) {
6487
            		if ($globalDBdriver == 'mysql') {
6488
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6489
			} else {
6490
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6491
			}
6492
                }
6493
                if ($sincedate != '') {
6494
            		if ($globalDBdriver == 'mysql') {
6495
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6496
			} else {
6497
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
6498
			}
6499
		}
6500
6501
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6502
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6503
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
6504
				ORDER BY airport_departure_icao_count DESC";
6505
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6506
      
6507
		$sth = $this->db->prepare($query);
6508
		$sth->execute();
6509
      
6510
		$airport_array = array();
6511
		$temp_array = array();
6512
        
6513
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6514
		{
6515
			$temp_array['airline_icao'] = $row['airline_icao'];
6516
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6517
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6518
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6519
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6520
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6521
          
6522
			$airport_array[] = $temp_array;
6523
		}
6524
		return $airport_array;
6525
	}	
6526
	
6527
	/**
6528
	* Gets all departure airports of the airplanes that have flown over based on an airline icao
6529
	*
6530
	* @return Array the airport list
6531
	*
6532
	*/
6533
	public function countAllDepartureAirportsByAirline($airline_icao,$filters = array())
6534
	{
6535
		$filter_query = $this->getFilter($filters,true,true);
6536
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6537
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6538
			    FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.airline_icao = :airline_icao AND spotter_output.departure_airport_icao <> '' 
6539
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6540
			    ORDER BY airport_departure_icao_count DESC";
6541
      
6542
		
6543
		$sth = $this->db->prepare($query);
6544
		$sth->execute(array(':airline_icao' => $airline_icao));
6545
      
6546
		$airport_array = array();
6547
		$temp_array = array();
6548
        
6549
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6550
		{
6551
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6552
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6553
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6554
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6555
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6556
          
6557
			$airport_array[] = $temp_array;
6558
		}
6559
6560
		return $airport_array;
6561
	}
6562
	
6563
	
6564
	
6565
	/**
6566
	* Gets all departure airports by country of the airplanes that have flown over based on an airline icao
6567
	*
6568
	* @return Array the airport list
6569
	*
6570
	*/
6571
	public function countAllDepartureAirportCountriesByAirline($airline_icao,$filters = array())
6572
	{
6573
		$filter_query = $this->getFilter($filters,true,true);
6574
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6575
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6576
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
6577
                    GROUP BY spotter_output.departure_airport_country
6578
					ORDER BY airport_departure_country_count DESC";
6579
      
6580
		
6581
		$sth = $this->db->prepare($query);
6582
		$sth->execute(array(':airline_icao' => $airline_icao));
6583
      
6584
		$airport_array = array();
6585
		$temp_array = array();
6586
        
6587
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6588
		{
6589
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6590
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6591
          
6592
			$airport_array[] = $temp_array;
6593
		}
6594
6595
		return $airport_array;
6596
	}
6597
	
6598
	
6599
	
6600
	/**
6601
	* Gets all departure airports of the airplanes that have flown over based on an aircraft icao
6602
	*
6603
	* @return Array the airport list
6604
	*
6605
	*/
6606
	public function countAllDepartureAirportsByAircraft($aircraft_icao,$filters = array())
6607
	{
6608
		$filter_query = $this->getFilter($filters,true,true);
6609
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
6610
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6611
			    FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.aircraft_icao = :aircraft_icao AND spotter_output.departure_airport_icao <> '' 
6612
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6613
			    ORDER BY airport_departure_icao_count DESC";
6614
      
6615
		
6616
		$sth = $this->db->prepare($query);
6617
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
6618
      
6619
		$airport_array = array();
6620
		$temp_array = array();
6621
        
6622
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6623
		{
6624
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6625
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6626
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6627
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6628
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6629
          
6630
			$airport_array[] = $temp_array;
6631
		}
6632
6633
		return $airport_array;
6634
	}
6635
	
6636
	
6637
	/**
6638
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
6639
	*
6640
	* @return Array the airport list
6641
	*
6642
	*/
6643
	public function countAllDepartureAirportCountriesByAircraft($aircraft_icao,$filters = array())
6644
	{
6645
		$filter_query = $this->getFilter($filters,true,true);
6646
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
6647
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6648
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
6649
                    GROUP BY spotter_output.departure_airport_country
6650
					ORDER BY airport_departure_country_count DESC";
6651
      
6652
		
6653
		$sth = $this->db->prepare($query);
6654
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
6655
      
6656
		$airport_array = array();
6657
		$temp_array = array();
6658
        
6659
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6660
		{
6661
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6662
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6663
          
6664
			$airport_array[] = $temp_array;
6665
		}
6666
6667
		return $airport_array;
6668
	}
6669
	
6670
	
6671
	/**
6672
	* Gets all departure airports of the airplanes that have flown over based on an aircraft registration
6673
	*
6674
	* @return Array the airport list
6675
	*
6676
	*/
6677
	public function countAllDepartureAirportsByRegistration($registration,$filters = array())
6678
	{
6679
		$filter_query = $this->getFilter($filters,true,true);
6680
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
6681
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6682
			FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.registration = :registration AND spotter_output.departure_airport_icao <> '' 
6683
                    GROUP BY spotter_output.departure_airport_icao
6684
					ORDER BY airport_departure_icao_count DESC";
6685
      
6686
		
6687
		$sth = $this->db->prepare($query);
6688
		$sth->execute(array(':registration' => $registration));
6689
      
6690
		$airport_array = array();
6691
		$temp_array = array();
6692
        
6693
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6694
		{
6695
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6696
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6697
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6698
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6699
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6700
          
6701
			$airport_array[] = $temp_array;
6702
		}
6703
6704
		return $airport_array;
6705
	}
6706
	
6707
	
6708
	/**
6709
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft registration
6710
	*
6711
	* @return Array the airport list
6712
	*
6713
	*/
6714
	public function countAllDepartureAirportCountriesByRegistration($registration,$filters = array())
6715
	{
6716
		$filter_query = $this->getFilter($filters,true,true);
6717
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
6718
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6719
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.registration = :registration 
6720
                    GROUP BY spotter_output.departure_airport_country
6721
					ORDER BY airport_departure_country_count DESC";
6722
      
6723
		
6724
		$sth = $this->db->prepare($query);
6725
		$sth->execute(array(':registration' => $registration));
6726
      
6727
		$airport_array = array();
6728
		$temp_array = array();
6729
        
6730
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6731
		{
6732
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6733
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6734
          
6735
			$airport_array[] = $temp_array;
6736
		}
6737
6738
		return $airport_array;
6739
	}
6740
	
6741
	
6742
	/**
6743
	* Gets all departure airports of the airplanes that have flown over based on an arrivl airport icao
6744
	*
6745
	* @return Array the airport list
6746
	*
6747
	*/
6748
	public function countAllDepartureAirportsByAirport($airport_icao,$filters = array())
6749
	{
6750
		$filter_query = $this->getFilter($filters,true,true);
6751
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
6752
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6753
			    FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao = :airport_icao AND spotter_output.departure_airport_icao <> '' 
6754
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6755
			    ORDER BY airport_departure_icao_count DESC";
6756
      
6757
		
6758
		$sth = $this->db->prepare($query);
6759
		$sth->execute(array(':airport_icao' => $airport_icao));
6760
      
6761
		$airport_array = array();
6762
		$temp_array = array();
6763
        
6764
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6765
		{
6766
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6767
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6768
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6769
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6770
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6771
          
6772
			$airport_array[] = $temp_array;
6773
		}
6774
6775
		return $airport_array;
6776
	}
6777
	
6778
	
6779
	/**
6780
	* Gets all departure airports by country of the airplanes that have flown over based on an airport icao
6781
	*
6782
	* @return Array the airport list
6783
	*
6784
	*/
6785
	public function countAllDepartureAirportCountriesByAirport($airport_icao,$filters = array())
6786
	{
6787
		$filter_query = $this->getFilter($filters,true,true);
6788
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
6789
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6790
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.arrival_airport_icao = :airport_icao 
6791
                    GROUP BY spotter_output.departure_airport_country
6792
					ORDER BY airport_departure_country_count DESC";
6793
      
6794
		
6795
		$sth = $this->db->prepare($query);
6796
		$sth->execute(array(':airport_icao' => $airport_icao));
6797
      
6798
		$airport_array = array();
6799
		$temp_array = array();
6800
        
6801
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6802
		{
6803
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6804
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6805
          
6806
			$airport_array[] = $temp_array;
6807
		}
6808
6809
		return $airport_array;
6810
	}
6811
	
6812
	
6813
	
6814
	/**
6815
	* Gets all departure airports of the airplanes that have flown over based on an aircraft manufacturer
6816
	*
6817
	* @return Array the airport list
6818
	*
6819
	*/
6820
	public function countAllDepartureAirportsByManufacturer($aircraft_manufacturer,$filters = array())
6821
	{
6822
		$filter_query = $this->getFilter($filters,true,true);
6823
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
6824
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6825
			FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer AND spotter_output.departure_airport_icao <> '' 
6826
                    GROUP BY spotter_output.departure_airport_icao
6827
					ORDER BY airport_departure_icao_count DESC";
6828
      
6829
		
6830
		$sth = $this->db->prepare($query);
6831
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
6832
      
6833
		$airport_array = array();
6834
		$temp_array = array();
6835
        
6836
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6837
		{
6838
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6839
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6840
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6841
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6842
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6843
          
6844
			$airport_array[] = $temp_array;
6845
		}
6846
6847
		return $airport_array;
6848
	}
6849
	
6850
	
6851
	/**
6852
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft manufacturer
6853
	*
6854
	* @return Array the airport list
6855
	*
6856
	*/
6857
	public function countAllDepartureAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
6858
	{
6859
		$filter_query = $this->getFilter($filters,true,true);
6860
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
6861
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6862
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
6863
                    GROUP BY spotter_output.departure_airport_country
6864
					ORDER BY airport_departure_country_count DESC";
6865
      
6866
		
6867
		$sth = $this->db->prepare($query);
6868
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
6869
      
6870
		$airport_array = array();
6871
		$temp_array = array();
6872
        
6873
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6874
		{
6875
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6876
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6877
          
6878
			$airport_array[] = $temp_array;
6879
		}
6880
6881
		return $airport_array;
6882
	}
6883
	
6884
	
6885
	/**
6886
	* Gets all departure airports of the airplanes that have flown over based on a date
6887
	*
6888
	* @return Array the airport list
6889
	*
6890
	*/
6891
	public function countAllDepartureAirportsByDate($date,$filters = array())
6892
	{
6893
		global $globalTimezone, $globalDBdriver;
6894
		$filter_query = $this->getFilter($filters,true,true);
6895
		$date = filter_var($date,FILTER_SANITIZE_STRING);
6896
		if ($globalTimezone != '') {
6897
			date_default_timezone_set($globalTimezone);
6898
			$datetime = new DateTime($date);
6899
			$offset = $datetime->format('P');
6900
		} else $offset = '+00:00';
6901
6902
		if ($globalDBdriver == 'mysql') {
6903
			$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6904
					FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
6905
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6906
					ORDER BY airport_departure_icao_count DESC";
6907
		} else {
6908
			$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6909
					FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date
6910
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6911
					ORDER BY airport_departure_icao_count DESC";
6912
		}
6913
6914
		$sth = $this->db->prepare($query);
6915
		$sth->execute(array(':date' => $date, ':offset' => $offset));
6916
      
6917
		$airport_array = array();
6918
		$temp_array = array();
6919
        
6920
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6921
		{
6922
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6923
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6924
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6925
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6926
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6927
          
6928
			$airport_array[] = $temp_array;
6929
		}
6930
		return $airport_array;
6931
	}
6932
	
6933
	
6934
	
6935
	/**
6936
	* Gets all departure airports by country of the airplanes that have flown over based on a date
6937
	*
6938
	* @return Array the airport list
6939
	*
6940
	*/
6941
	public function countAllDepartureAirportCountriesByDate($date,$filters = array())
6942
	{
6943
		global $globalTimezone, $globalDBdriver;
6944
		$filter_query = $this->getFilter($filters,true,true);
6945
		$date = filter_var($date,FILTER_SANITIZE_STRING);
6946
		if ($globalTimezone != '') {
6947
			date_default_timezone_set($globalTimezone);
6948
			$datetime = new DateTime($date);
6949
			$offset = $datetime->format('P');
6950
		} else $offset = '+00:00';
6951
6952
		if ($globalDBdriver == 'mysql') {
6953
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6954
					FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
6955
					GROUP BY spotter_output.departure_airport_country
6956
					ORDER BY airport_departure_country_count DESC";
6957
		} else {
6958
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6959
					FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
6960
					GROUP BY spotter_output.departure_airport_country
6961
					ORDER BY airport_departure_country_count DESC";
6962
		}
6963
		
6964
		$sth = $this->db->prepare($query);
6965
		$sth->execute(array(':date' => $date, ':offset' => $offset));
6966
      
6967
		$airport_array = array();
6968
		$temp_array = array();
6969
        
6970
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6971
		{
6972
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6973
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6974
          
6975
			$airport_array[] = $temp_array;
6976
		}
6977
		return $airport_array;
6978
	}
6979
	
6980
	
6981
	
6982
	/**
6983
	* Gets all departure airports of the airplanes that have flown over based on a ident/callsign
6984
	*
6985
	* @return Array the airport list
6986
	*
6987
	*/
6988
	public function countAllDepartureAirportsByIdent($ident,$filters = array())
6989
	{
6990
		$filter_query = $this->getFilter($filters,true,true);
6991
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
6992
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6993
		    FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> '' AND spotter_output.ident = :ident 
6994
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6995
		    ORDER BY airport_departure_icao_count DESC";
6996
      
6997
		
6998
		$sth = $this->db->prepare($query);
6999
		$sth->execute(array(':ident' => $ident));
7000
      
7001
		$airport_array = array();
7002
		$temp_array = array();
7003
        
7004
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7005
		{
7006
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7007
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7008
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7009
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7010
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7011
          
7012
			$airport_array[] = $temp_array;
7013
		}
7014
7015
		return $airport_array;
7016
	}
7017
	
7018
	/**
7019
	* Gets all departure airports of the airplanes that have flown over based on a owner
7020
	*
7021
	* @return Array the airport list
7022
	*
7023
	*/
7024
	public function countAllDepartureAirportsByOwner($owner,$filters = array())
7025
	{
7026
		$filter_query = $this->getFilter($filters,true,true);
7027
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
7028
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7029
		    FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> '' AND spotter_output.owner_name = :owner 
7030
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7031
		    ORDER BY airport_departure_icao_count DESC";
7032
      
7033
		
7034
		$sth = $this->db->prepare($query);
7035
		$sth->execute(array(':owner' => $owner));
7036
      
7037
		$airport_array = array();
7038
		$temp_array = array();
7039
        
7040
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7041
		{
7042
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7043
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7044
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7045
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7046
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7047
          
7048
			$airport_array[] = $temp_array;
7049
		}
7050
7051
		return $airport_array;
7052
	}
7053
	
7054
	/**
7055
	* Gets all departure airports of the airplanes that have flown over based on a pilot
7056
	*
7057
	* @return Array the airport list
7058
	*
7059
	*/
7060
	public function countAllDepartureAirportsByPilot($pilot,$filters = array())
7061
	{
7062
		$filter_query = $this->getFilter($filters,true,true);
7063
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
7064
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7065
		    FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
7066
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7067
		    ORDER BY airport_departure_icao_count DESC";
7068
		
7069
		$sth = $this->db->prepare($query);
7070
		$sth->execute(array(':pilot' => $pilot));
7071
      
7072
		$airport_array = array();
7073
		$temp_array = array();
7074
        
7075
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7076
		{
7077
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7078
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7079
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7080
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7081
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7082
          
7083
			$airport_array[] = $temp_array;
7084
		}
7085
7086
		return $airport_array;
7087
	}
7088
	
7089
	
7090
	
7091
	/**
7092
	* Gets all departure airports by country of the airplanes that have flown over based on a callsign/ident
7093
	*
7094
	* @return Array the airport list
7095
	*
7096
	*/
7097
	public function countAllDepartureAirportCountriesByIdent($ident,$filters = array())
7098
	{
7099
		$filter_query = $this->getFilter($filters,true,true);
7100
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7101
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7102
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.ident = :ident 
7103
                    GROUP BY spotter_output.departure_airport_country
7104
					ORDER BY airport_departure_country_count DESC";
7105
      
7106
		
7107
		$sth = $this->db->prepare($query);
7108
		$sth->execute(array(':ident' => $ident));
7109
      
7110
		$airport_array = array();
7111
		$temp_array = array();
7112
        
7113
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7114
		{
7115
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7116
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7117
          
7118
			$airport_array[] = $temp_array;
7119
		}
7120
7121
		return $airport_array;
7122
	}
7123
	
7124
	/**
7125
	* Gets all departure airports by country of the airplanes that have flown over based on owner
7126
	*
7127
	* @return Array the airport list
7128
	*
7129
	*/
7130
	public function countAllDepartureAirportCountriesByOwner($owner,$filters = array())
7131
	{
7132
		$filter_query = $this->getFilter($filters,true,true);
7133
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
7134
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7135
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.owner_name = :owner 
7136
			GROUP BY spotter_output.departure_airport_country
7137
			ORDER BY airport_departure_country_count DESC";
7138
		
7139
		$sth = $this->db->prepare($query);
7140
		$sth->execute(array(':owner' => $owner));
7141
		return $sth->fetchAll(PDO::FETCH_ASSOC);
7142
	}
7143
	
7144
	/**
7145
	* Gets all departure airports by country of the airplanes that have flown over based on pilot
7146
	*
7147
	* @return Array the airport list
7148
	*
7149
	*/
7150
	public function countAllDepartureAirportCountriesByPilot($pilot,$filters = array())
7151
	{
7152
		$filter_query = $this->getFilter($filters,true,true);
7153
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
7154
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7155
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
7156
			GROUP BY spotter_output.departure_airport_country
7157
			ORDER BY airport_departure_country_count DESC";
7158
		
7159
		$sth = $this->db->prepare($query);
7160
		$sth->execute(array(':pilot' => $pilot));
7161
		return $sth->fetchAll(PDO::FETCH_ASSOC);
7162
	}
7163
	
7164
	
7165
	
7166
	/**
7167
	* Gets all departure airports of the airplanes that have flown over based on a country
7168
	*
7169
	* @return Array the airport list
7170
	*
7171
	*/
7172
	public function countAllDepartureAirportsByCountry($country,$filters = array())
7173
	{
7174
		$filter_query = $this->getFilter($filters,true,true);
7175
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7176
7177
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7178
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
7179
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
7180
			    ORDER BY airport_departure_icao_count DESC";
7181
      
7182
		
7183
		$sth = $this->db->prepare($query);
7184
		$sth->execute(array(':country' => $country));
7185
      
7186
		$airport_array = array();
7187
		$temp_array = array();
7188
        
7189
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7190
		{
7191
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7192
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
7193
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
7194
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
7195
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7196
          
7197
			$airport_array[] = $temp_array;
7198
		}
7199
7200
		return $airport_array;
7201
	}
7202
7203
7204
	/**
7205
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
7206
	*
7207
	* @return Array the airport list
7208
	*
7209
	*/
7210
	public function countAllDepartureAirportCountriesByCountry($country,$filters = array())
7211
	{
7212
		$filter_query = $this->getFilter($filters,true,true);
7213
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7214
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7215
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
7216
                    GROUP BY spotter_output.departure_airport_country
7217
					ORDER BY airport_departure_country_count DESC";
7218
      
7219
		
7220
		$sth = $this->db->prepare($query);
7221
		$sth->execute(array(':country' => $country));
7222
      
7223
		$airport_array = array();
7224
		$temp_array = array();
7225
        
7226
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7227
		{
7228
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
7229
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7230
          
7231
			$airport_array[] = $temp_array;
7232
		}
7233
7234
		return $airport_array;
7235
	}
7236
	
7237
7238
	/**
7239
	* Gets all arrival airports of the airplanes that have flown over
7240
	*
7241
	* @param Boolean $limit Limit result to 10 or not
7242
	* @param Integer $olderthanmonths Only show result older than x months
7243
	* @param String $sincedate Only show result since x date
7244
	* @param Boolean $icaoaskey Show result by ICAO
7245
	* @param Array $filters Filter used here
7246
	* @return Array the airport list
7247
	*
7248
	*/
7249
	public function countAllArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array(),$year = '',$month = '',$day = '')
7250
	{
7251
		global $globalDBdriver;
7252
		$filter_query = $this->getFilter($filters,true,true);
7253
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7254
				FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''";
7255
                if ($olderthanmonths > 0) {
7256
            		if ($globalDBdriver == 'mysql') {
7257
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
7258
			} else {
7259
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
7260
			}
7261
		}
7262
                if ($sincedate != '') {
7263
            		if ($globalDBdriver == 'mysql') {
7264
				$query .= " AND spotter_output.date > '".$sincedate."'";
7265
			} else {
7266
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7267
			}
7268
		}
7269
		$query_values = array();
7270
		if ($year != '') {
7271
			if ($globalDBdriver == 'mysql') {
7272
				$query .= " AND YEAR(spotter_output.date) = :year";
7273
				$query_values = array_merge($query_values,array(':year' => $year));
7274
			} else {
7275
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
7276
				$query_values = array_merge($query_values,array(':year' => $year));
7277
			}
7278
		}
7279
		if ($month != '') {
7280
			if ($globalDBdriver == 'mysql') {
7281
				$query .= " AND MONTH(spotter_output.date) = :month";
7282
				$query_values = array_merge($query_values,array(':month' => $month));
7283
			} else {
7284
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
7285
				$query_values = array_merge($query_values,array(':month' => $month));
7286
			}
7287
		}
7288
		if ($day != '') {
7289
			if ($globalDBdriver == 'mysql') {
7290
				$query .= " AND DAY(spotter_output.date) = :day";
7291
				$query_values = array_merge($query_values,array(':day' => $day));
7292
			} else {
7293
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
7294
				$query_values = array_merge($query_values,array(':day' => $day));
7295
			}
7296
		}
7297
                $query .= " GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7298
					ORDER BY airport_arrival_icao_count DESC";
7299
		if ($limit) $query .= " LIMIT 10";
7300
      
7301
		
7302
		$sth = $this->db->prepare($query);
7303
		$sth->execute($query_values);
7304
      
7305
		$airport_array = array();
7306
		$temp_array = array();
7307
        
7308
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7309
		{
7310
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7311
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7312
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7313
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7314
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7315
          
7316
			if ($icaoaskey) {
7317
				$icao = $row['arrival_airport_icao'];
7318
				$airport_array[$icao] = $temp_array;
7319
			} else $airport_array[] = $temp_array;
7320
		}
7321
7322
		return $airport_array;
7323
	}
7324
7325
	/**
7326
	* Gets all arrival airports of the airplanes that have flown over
7327
	*
7328
	* @return Array the airport list
7329
	*
7330
	*/
7331
	public function countAllArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array())
7332
	{
7333
		global $globalDBdriver;
7334
		$filter_query = $this->getFilter($filters,true,true);
7335
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7336
			FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' ";
7337
                if ($olderthanmonths > 0) {
7338
            		if ($globalDBdriver == 'mysql') {
7339
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
7340
			} else {
7341
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
7342
			}
7343
		}
7344
                if ($sincedate != '') {
7345
            		if ($globalDBdriver == 'mysql') {
7346
				$query .= "AND spotter_output.date > '".$sincedate."' ";
7347
			} else {
7348
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7349
			}
7350
		}
7351
7352
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
7353
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
7354
                $query .= "GROUP BY spotter_output.airline_icao,spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7355
					ORDER BY airport_arrival_icao_count DESC";
7356
		if ($limit) $query .= " LIMIT 10";
7357
      
7358
		
7359
		$sth = $this->db->prepare($query);
7360
		$sth->execute();
7361
      
7362
		$airport_array = array();
7363
		$temp_array = array();
7364
        
7365
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7366
		{
7367
			$temp_array['airline_icao'] = $row['airline_icao'];
7368
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7369
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7370
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7371
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7372
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7373
          
7374
			if ($icaoaskey) {
7375
				$icao = $row['arrival_airport_icao'];
7376
				$airport_array[$icao] = $temp_array;
7377
			} else $airport_array[] = $temp_array;
7378
		}
7379
7380
		return $airport_array;
7381
	}
7382
7383
7384
	/**
7385
	* Gets all detected arrival airports of the airplanes that have flown over
7386
	*
7387
	* @return Array the airport list
7388
	*
7389
	*/
7390
	public function countAllDetectedArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array(),$year = '',$month = '',$day = '')
7391
	{
7392
		global $globalDBdriver;
7393
		$filter_query = $this->getFilter($filters,true,true);
7394
		$query  = "SELECT DISTINCT spotter_output.real_arrival_airport_icao as arrival_airport_icao, COUNT(spotter_output.real_arrival_airport_icao) AS airport_arrival_icao_count, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country 
7395
			FROM airport,spotter_output".$filter_query." spotter_output.real_arrival_airport_icao <> '' AND spotter_output.real_arrival_airport_icao <> 'NA' AND airport.icao = spotter_output.real_arrival_airport_icao";
7396
                if ($olderthanmonths > 0) {
7397
            		if ($globalDBdriver == 'mysql') {
7398
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
7399
			} else {
7400
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
7401
			}
7402
		}
7403
                if ($sincedate != '') {
7404
            		if ($globalDBdriver == 'mysql') {
7405
				$query .= " AND spotter_output.date > '".$sincedate."'";
7406
			} else {
7407
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7408
			}
7409
		}
7410
		$query_values = array();
7411
		if ($year != '') {
7412
			if ($globalDBdriver == 'mysql') {
7413
				$query .= " AND YEAR(spotter_output.date) = :year";
7414
				$query_values = array_merge($query_values,array(':year' => $year));
7415
			} else {
7416
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
7417
				$query_values = array_merge($query_values,array(':year' => $year));
7418
			}
7419
		}
7420
		if ($month != '') {
7421
			if ($globalDBdriver == 'mysql') {
7422
				$query .= " AND MONTH(spotter_output.date) = :month";
7423
				$query_values = array_merge($query_values,array(':month' => $month));
7424
			} else {
7425
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
7426
				$query_values = array_merge($query_values,array(':month' => $month));
7427
			}
7428
		}
7429
		if ($day != '') {
7430
			if ($globalDBdriver == 'mysql') {
7431
				$query .= " AND DAY(spotter_output.date) = :day";
7432
				$query_values = array_merge($query_values,array(':day' => $day));
7433
			} else {
7434
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
7435
				$query_values = array_merge($query_values,array(':day' => $day));
7436
			}
7437
		}
7438
                $query .= " GROUP BY spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
7439
					ORDER BY airport_arrival_icao_count DESC";
7440
		if ($limit) $query .= " LIMIT 10";
7441
      
7442
		
7443
		$sth = $this->db->prepare($query);
7444
		$sth->execute($query_values);
7445
      
7446
		$airport_array = array();
7447
		$temp_array = array();
7448
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7449
		{
7450
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7451
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7452
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7453
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7454
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7455
          
7456
			if ($icaoaskey) {
7457
				$icao = $row['arrival_airport_icao'];
7458
				$airport_array[$icao] = $temp_array;
7459
			} else $airport_array[] = $temp_array;
7460
		}
7461
7462
		return $airport_array;
7463
	}
7464
	
7465
	/**
7466
	* Gets all detected arrival airports of the airplanes that have flown over
7467
	*
7468
	* @return Array the airport list
7469
	*
7470
	*/
7471
	public function countAllDetectedArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array())
7472
	{
7473
		global $globalDBdriver;
7474
		$filter_query = $this->getFilter($filters,true,true);
7475
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.real_arrival_airport_icao as arrival_airport_icao, COUNT(spotter_output.real_arrival_airport_icao) AS airport_arrival_icao_count, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country 
7476
			FROM airport,spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.real_arrival_airport_icao <> '' AND spotter_output.real_arrival_airport_icao <> 'NA' AND airport.icao = spotter_output.real_arrival_airport_icao ";
7477
                if ($olderthanmonths > 0) {
7478
            		if ($globalDBdriver == 'mysql') {
7479
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
7480
			} else {
7481
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
7482
			}
7483
		}
7484
                if ($sincedate != '') {
7485
            		if ($globalDBdriver == 'mysql') {
7486
				$query .= "AND spotter_output.date > '".$sincedate."' ";
7487
			} else {
7488
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7489
			}
7490
		}
7491
7492
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
7493
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
7494
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
7495
					ORDER BY airport_arrival_icao_count DESC";
7496
		if ($limit) $query .= " LIMIT 10";
7497
      
7498
		
7499
		$sth = $this->db->prepare($query);
7500
		$sth->execute();
7501
      
7502
		$airport_array = array();
7503
		$temp_array = array();
7504
        
7505
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7506
		{
7507
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7508
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7509
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7510
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7511
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7512
			$temp_array['airline_icao'] = $row['airline_icao'];
7513
          
7514
			if ($icaoaskey) {
7515
				$icao = $row['arrival_airport_icao'];
7516
				$airport_array[$icao] = $temp_array;
7517
			} else $airport_array[] = $temp_array;
7518
		}
7519
7520
		return $airport_array;
7521
	}	
7522
	
7523
	/**
7524
	* Gets all arrival airports of the airplanes that have flown over based on an airline icao
7525
	*
7526
	* @return Array the airport list
7527
	*
7528
	*/
7529
	public function countAllArrivalAirportsByAirline($airline_icao, $filters = array())
7530
	{
7531
		$filter_query = $this->getFilter($filters,true,true);
7532
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7533
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7534
			    FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.airline_icao = :airline_icao 
7535
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7536
			    ORDER BY airport_arrival_icao_count DESC";
7537
		
7538
		$sth = $this->db->prepare($query);
7539
		$sth->execute(array(':airline_icao' => $airline_icao));
7540
      
7541
		$airport_array = array();
7542
		$temp_array = array();
7543
        
7544
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7545
		{
7546
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7547
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7548
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7549
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7550
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7551
          
7552
			$airport_array[] = $temp_array;
7553
		}
7554
7555
		return $airport_array;
7556
	}
7557
	
7558
	
7559
	/**
7560
	* Gets all arrival airports by country of the airplanes that have flown over based on an airline icao
7561
	*
7562
	* @return Array the airport list
7563
	*
7564
	*/
7565
	public function countAllArrivalAirportCountriesByAirline($airline_icao,$filters = array())
7566
	{
7567
		$filter_query = $this->getFilter($filters,true,true);
7568
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7569
					
7570
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7571
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
7572
                    GROUP BY spotter_output.arrival_airport_country
7573
					ORDER BY airport_arrival_country_count DESC";
7574
      
7575
		
7576
		$sth = $this->db->prepare($query);
7577
		$sth->execute(array(':airline_icao' => $airline_icao));
7578
      
7579
		$airport_array = array();
7580
		$temp_array = array();
7581
        
7582
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7583
		{
7584
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7585
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7586
          
7587
			$airport_array[] = $temp_array;
7588
		}
7589
7590
		return $airport_array;
7591
	}
7592
	
7593
	
7594
	/**
7595
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft icao
7596
	*
7597
	* @return Array the airport list
7598
	*
7599
	*/
7600
	public function countAllArrivalAirportsByAircraft($aircraft_icao,$filters = array())
7601
	{
7602
		$filter_query = $this->getFilter($filters,true,true);
7603
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7604
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7605
			    FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
7606
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7607
			    ORDER BY airport_arrival_icao_count DESC";
7608
      
7609
		
7610
		$sth = $this->db->prepare($query);
7611
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7612
      
7613
		$airport_array = array();
7614
		$temp_array = array();
7615
        
7616
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7617
		{
7618
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7619
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7620
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7621
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7622
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7623
          
7624
			$airport_array[] = $temp_array;
7625
		}
7626
7627
		return $airport_array;
7628
	}
7629
	
7630
	
7631
	
7632
	/**
7633
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft icao
7634
	*
7635
	* @return Array the airport list
7636
	*
7637
	*/
7638
	public function countAllArrivalAirportCountriesByAircraft($aircraft_icao,$filters = array())
7639
	{
7640
		$filter_query = $this->getFilter($filters,true,true);
7641
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7642
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7643
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
7644
                    GROUP BY spotter_output.arrival_airport_country
7645
					ORDER BY airport_arrival_country_count DESC";
7646
      
7647
		
7648
		$sth = $this->db->prepare($query);
7649
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7650
      
7651
		$airport_array = array();
7652
		$temp_array = array();
7653
        
7654
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7655
		{
7656
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7657
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7658
          
7659
			$airport_array[] = $temp_array;
7660
		}
7661
7662
		return $airport_array;
7663
	}
7664
	
7665
	
7666
	/**
7667
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft registration
7668
	*
7669
	* @return Array the airport list
7670
	*
7671
	*/
7672
	public function countAllArrivalAirportsByRegistration($registration,$filters = array())
7673
	{
7674
		$filter_query = $this->getFilter($filters,true,true);
7675
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
7676
7677
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7678
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.registration = :registration 
7679
                    GROUP BY spotter_output.arrival_airport_icao
7680
					ORDER BY airport_arrival_icao_count DESC";
7681
      
7682
		
7683
		$sth = $this->db->prepare($query);
7684
		$sth->execute(array(':registration' => $registration));
7685
      
7686
		$airport_array = array();
7687
		$temp_array = array();
7688
        
7689
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7690
		{
7691
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7692
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7693
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7694
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7695
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7696
          
7697
			$airport_array[] = $temp_array;
7698
		}
7699
7700
		return $airport_array;
7701
	}
7702
	
7703
	
7704
	/**
7705
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft registration
7706
	*
7707
	* @return Array the airport list
7708
	*
7709
	*/
7710
	public function countAllArrivalAirportCountriesByRegistration($registration,$filters = array())
7711
	{
7712
		$filter_query = $this->getFilter($filters,true,true);
7713
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
7714
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7715
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.registration = :registration 
7716
                    GROUP BY spotter_output.arrival_airport_country
7717
					ORDER BY airport_arrival_country_count DESC";
7718
      
7719
		
7720
		$sth = $this->db->prepare($query);
7721
		$sth->execute(array(':registration' => $registration));
7722
      
7723
		$airport_array = array();
7724
		$temp_array = array();
7725
        
7726
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7727
		{
7728
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7729
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7730
          
7731
			$airport_array[] = $temp_array;
7732
		}
7733
7734
		return $airport_array;
7735
	}
7736
	
7737
	
7738
	
7739
	/**
7740
	* Gets all arrival airports of the airplanes that have flown over based on an departure airport
7741
	*
7742
	* @return Array the airport list
7743
	*
7744
	*/
7745
	public function countAllArrivalAirportsByAirport($airport_icao,$filters = array())
7746
	{
7747
		$filter_query = $this->getFilter($filters,true,true);
7748
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7749
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7750
			    FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.departure_airport_icao = :airport_icao 
7751
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7752
			    ORDER BY airport_arrival_icao_count DESC";
7753
      
7754
		
7755
		$sth = $this->db->prepare($query);
7756
		$sth->execute(array(':airport_icao' => $airport_icao));
7757
      
7758
		$airport_array = array();
7759
		$temp_array = array();
7760
        
7761
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7762
		{
7763
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7764
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7765
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7766
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7767
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7768
          
7769
			$airport_array[] = $temp_array;
7770
		}
7771
7772
		return $airport_array;
7773
	}
7774
	
7775
	
7776
	/**
7777
	* Gets all arrival airports by country of the airplanes that have flown over based on an airport icao
7778
	*
7779
	* @return Array the airport list
7780
	*
7781
	*/
7782
	public function countAllArrivalAirportCountriesByAirport($airport_icao,$filters = array())
7783
	{
7784
		$filter_query = $this->getFilter($filters,true,true);
7785
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7786
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7787
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.departure_airport_icao = :airport_icao 
7788
                    GROUP BY spotter_output.arrival_airport_country
7789
					ORDER BY airport_arrival_country_count DESC";
7790
      
7791
		
7792
		$sth = $this->db->prepare($query);
7793
		$sth->execute(array(':airport_icao' => $airport_icao));
7794
      
7795
		$airport_array = array();
7796
		$temp_array = array();
7797
        
7798
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7799
		{
7800
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7801
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7802
          
7803
			$airport_array[] = $temp_array;
7804
		}
7805
7806
		return $airport_array;
7807
	}
7808
	
7809
	
7810
	/**
7811
	* Gets all arrival airports of the airplanes that have flown over based on a aircraft manufacturer
7812
	*
7813
	* @return Array the airport list
7814
	*
7815
	*/
7816
	public function countAllArrivalAirportsByManufacturer($aircraft_manufacturer,$filters = array())
7817
	{
7818
		$filter_query = $this->getFilter($filters,true,true);
7819
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7820
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7821
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
7822
                    GROUP BY spotter_output.arrival_airport_icao
7823
					ORDER BY airport_arrival_icao_count DESC";
7824
      
7825
		
7826
		$sth = $this->db->prepare($query);
7827
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7828
      
7829
		$airport_array = array();
7830
		$temp_array = array();
7831
        
7832
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7833
		{
7834
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7835
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7836
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7837
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7838
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7839
          
7840
			$airport_array[] = $temp_array;
7841
		}
7842
7843
		return $airport_array;
7844
	}
7845
	
7846
	
7847
	
7848
	/**
7849
	* Gets all arrival airports by country of the airplanes that have flown over based on a aircraft manufacturer
7850
	*
7851
	* @return Array the airport list
7852
	*
7853
	*/
7854
	public function countAllArrivalAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
7855
	{
7856
		$filter_query = $this->getFilter($filters,true,true);
7857
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7858
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7859
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
7860
                    GROUP BY spotter_output.arrival_airport_country
7861
					ORDER BY airport_arrival_country_count DESC";
7862
      
7863
		
7864
		$sth = $this->db->prepare($query);
7865
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7866
      
7867
		$airport_array = array();
7868
		$temp_array = array();
7869
        
7870
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7871
		{
7872
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7873
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7874
          
7875
			$airport_array[] = $temp_array;
7876
		}
7877
7878
		return $airport_array;
7879
	}
7880
	
7881
	
7882
	
7883
	/**
7884
	* Gets all arrival airports of the airplanes that have flown over based on a date
7885
	*
7886
	* @return Array the airport list
7887
	*
7888
	*/
7889
	public function countAllArrivalAirportsByDate($date,$filters = array())
7890
	{
7891
		global $globalTimezone, $globalDBdriver;
7892
		$filter_query = $this->getFilter($filters,true,true);
7893
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7894
		if ($globalTimezone != '') {
7895
			date_default_timezone_set($globalTimezone);
7896
			$datetime = new DateTime($date);
7897
			$offset = $datetime->format('P');
7898
		} else $offset = '+00:00';
7899
7900
		if ($globalDBdriver == 'mysql') {
7901
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7902
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date  
7903
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7904
					ORDER BY airport_arrival_icao_count DESC";
7905
		} else {
7906
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7907
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date  
7908
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7909
					ORDER BY airport_arrival_icao_count DESC";
7910
		}
7911
		
7912
		$sth = $this->db->prepare($query);
7913
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7914
      
7915
		$airport_array = array();
7916
		$temp_array = array();
7917
        
7918
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7919
		{
7920
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7921
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7922
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7923
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7924
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7925
          
7926
			$airport_array[] = $temp_array;
7927
		}
7928
		return $airport_array;
7929
	}
7930
	
7931
	
7932
	
7933
	/**
7934
	* Gets all arrival airports by country of the airplanes that have flown over based on a date
7935
	*
7936
	* @return Array the airport list
7937
	*
7938
	*/
7939
	public function countAllArrivalAirportCountriesByDate($date, $filters = array())
7940
	{
7941
		global $globalTimezone, $globalDBdriver;
7942
		$filter_query = $this->getFilter($filters,true,true);
7943
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7944
		if ($globalTimezone != '') {
7945
			date_default_timezone_set($globalTimezone);
7946
			$datetime = new DateTime($date);
7947
			$offset = $datetime->format('P');
7948
		} else $offset = '+00:00';
7949
7950
		if ($globalDBdriver == 'mysql') {
7951
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7952
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
7953
					GROUP BY spotter_output.arrival_airport_country
7954
					ORDER BY airport_arrival_country_count DESC";
7955
		} else {
7956
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7957
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
7958
					GROUP BY spotter_output.arrival_airport_country
7959
					ORDER BY airport_arrival_country_count DESC";
7960
		}
7961
		
7962
		$sth = $this->db->prepare($query);
7963
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7964
      
7965
		$airport_array = array();
7966
		$temp_array = array();
7967
        
7968
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7969
		{
7970
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7971
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7972
          
7973
			$airport_array[] = $temp_array;
7974
		}
7975
		return $airport_array;
7976
	}
7977
	
7978
	
7979
	
7980
	/**
7981
	* Gets all arrival airports of the airplanes that have flown over based on a ident/callsign
7982
	*
7983
	* @return Array the airport list
7984
	*
7985
	*/
7986
	public function countAllArrivalAirportsByIdent($ident,$filters = array())
7987
	{
7988
		$filter_query = $this->getFilter($filters,true,true);
7989
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7990
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7991
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.ident = :ident  
7992
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7993
		    ORDER BY airport_arrival_icao_count DESC";
7994
      
7995
		
7996
		$sth = $this->db->prepare($query);
7997
		$sth->execute(array(':ident' => $ident));
7998
      
7999
		$airport_array = array();
8000
		$temp_array = array();
8001
        
8002
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8003
		{
8004
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8005
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8006
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8007
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8008
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8009
          
8010
			$airport_array[] = $temp_array;
8011
		}
8012
8013
		return $airport_array;
8014
	}
8015
	
8016
	/**
8017
	* Gets all arrival airports of the airplanes that have flown over based on a owner
8018
	*
8019
	* @return Array the airport list
8020
	*
8021
	*/
8022
	public function countAllArrivalAirportsByOwner($owner,$filters = array())
8023
	{
8024
		$filter_query = $this->getFilter($filters,true,true);
8025
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
8026
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8027
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.owner_name = :owner 
8028
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8029
		    ORDER BY airport_arrival_icao_count DESC";
8030
      
8031
		
8032
		$sth = $this->db->prepare($query);
8033
		$sth->execute(array(':owner' => $owner));
8034
		$airport_array = array();
8035
		$temp_array = array();
8036
        
8037
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8038
		{
8039
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8040
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8041
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8042
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8043
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8044
          
8045
			$airport_array[] = $temp_array;
8046
		}
8047
8048
		return $airport_array;
8049
	}
8050
8051
	/**
8052
	* Gets all arrival airports of the airplanes that have flown over based on a pilot
8053
	*
8054
	* @return Array the airport list
8055
	*
8056
	*/
8057
	public function countAllArrivalAirportsByPilot($pilot,$filters = array())
8058
	{
8059
		$filter_query = $this->getFilter($filters,true,true);
8060
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
8061
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8062
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
8063
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8064
		    ORDER BY airport_arrival_icao_count DESC";
8065
      
8066
		
8067
		$sth = $this->db->prepare($query);
8068
		$sth->execute(array(':pilot' => $pilot));
8069
		$airport_array = array();
8070
		$temp_array = array();
8071
        
8072
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8073
		{
8074
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8075
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8076
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8077
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8078
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8079
          
8080
			$airport_array[] = $temp_array;
8081
		}
8082
8083
		return $airport_array;
8084
	}
8085
	
8086
	/**
8087
	* Gets all arrival airports by country of the airplanes that have flown over based on a callsign/ident
8088
	*
8089
	* @return Array the airport list
8090
	*
8091
	*/
8092
	public function countAllArrivalAirportCountriesByIdent($ident, $filters = array())
8093
	{
8094
		$filter_query = $this->getFilter($filters,true,true);
8095
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
8096
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8097
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.ident = :ident 
8098
                    GROUP BY spotter_output.arrival_airport_country
8099
					ORDER BY airport_arrival_country_count DESC";
8100
      
8101
		
8102
		$sth = $this->db->prepare($query);
8103
		$sth->execute(array(':ident' => $ident));
8104
      
8105
		$airport_array = array();
8106
		$temp_array = array();
8107
        
8108
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8109
		{
8110
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8111
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8112
          
8113
			$airport_array[] = $temp_array;
8114
		}
8115
8116
		return $airport_array;
8117
	}
8118
	
8119
	/**
8120
	* Gets all arrival airports by country of the airplanes that have flown over based on a owner
8121
	*
8122
	* @return Array the airport list
8123
	*
8124
	*/
8125
	public function countAllArrivalAirportCountriesByOwner($owner, $filters = array())
8126
	{
8127
		$filter_query = $this->getFilter($filters,true,true);
8128
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
8129
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8130
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.owner_name = :owner 
8131
                    GROUP BY spotter_output.arrival_airport_country
8132
		    ORDER BY airport_arrival_country_count DESC";
8133
8134
		$sth = $this->db->prepare($query);
8135
		$sth->execute(array(':owner' => $owner));
8136
		return $sth->fetchAll(PDO::FETCH_ASSOC);
8137
	}
8138
	
8139
	/**
8140
	* Gets all arrival airports by country of the airplanes that have flown over based on a pilot
8141
	*
8142
	* @return Array the airport list
8143
	*
8144
	*/
8145
	public function countAllArrivalAirportCountriesByPilot($pilot, $filters = array())
8146
	{
8147
		$filter_query = $this->getFilter($filters,true,true);
8148
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
8149
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8150
		    FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
8151
                    GROUP BY spotter_output.arrival_airport_country
8152
		    ORDER BY airport_arrival_country_count DESC";
8153
8154
		$sth = $this->db->prepare($query);
8155
		$sth->execute(array(':pilot' => $pilot));
8156
		return $sth->fetchAll(PDO::FETCH_ASSOC);
8157
	}
8158
	
8159
	
8160
	
8161
	/**
8162
	* Gets all arrival airports of the airplanes that have flown over based on a country
8163
	*
8164
	* @return Array the airport list
8165
	*
8166
	*/
8167
	public function countAllArrivalAirportsByCountry($country,$filters = array())
8168
	{
8169
		$filter_query = $this->getFilter($filters,true,true);
8170
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8171
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8172
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
8173
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8174
			    ORDER BY airport_arrival_icao_count DESC";
8175
      
8176
		
8177
		$sth = $this->db->prepare($query);
8178
		$sth->execute(array(':country' => $country));
8179
      
8180
		$airport_array = array();
8181
		$temp_array = array();
8182
        
8183
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8184
		{
8185
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8186
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
8187
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
8188
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
8189
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8190
          
8191
			$airport_array[] = $temp_array;
8192
		}
8193
8194
		return $airport_array;
8195
	}
8196
	
8197
	
8198
	/**
8199
	* Gets all arrival airports by country of the airplanes that have flown over based on a country
8200
	*
8201
	* @return Array the airport list
8202
	*
8203
	*/
8204
	public function countAllArrivalAirportCountriesByCountry($country,$filters = array())
8205
	{
8206
		global $globalDBdriver;
8207
		$filter_query = $this->getFilter($filters,true,true);
8208
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8209
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8210
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
8211
                    GROUP BY spotter_output.arrival_airport_country
8212
					ORDER BY airport_arrival_country_count DESC";
8213
      
8214
		
8215
		$sth = $this->db->prepare($query);
8216
		$sth->execute(array(':country' => $country));
8217
      
8218
		$airport_array = array();
8219
		$temp_array = array();
8220
        
8221
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8222
		{
8223
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
8224
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8225
          
8226
			$airport_array[] = $temp_array;
8227
		}
8228
8229
		return $airport_array;
8230
	}
8231
8232
8233
8234
	/**
8235
	* Counts all airport departure countries
8236
	*
8237
	* @return Array the airport departure list
8238
	*
8239
	*/
8240
	public function countAllDepartureCountries($filters = array(),$year = '',$month = '', $day = '')
8241
	{
8242
		global $globalDBdriver;
8243
		$filter_query = $this->getFilter($filters,true,true);
8244
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
8245
				FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> ''";
8246
		$query_values = array();
8247
		if ($year != '') {
8248
			if ($globalDBdriver == 'mysql') {
8249
				$query .= " AND YEAR(spotter_output.date) = :year";
8250
				$query_values = array_merge($query_values,array(':year' => $year));
8251
			} else {
8252
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
8253
				$query_values = array_merge($query_values,array(':year' => $year));
8254
			}
8255
		}
8256
		if ($month != '') {
8257
			if ($globalDBdriver == 'mysql') {
8258
				$query .= " AND MONTH(spotter_output.date) = :month";
8259
				$query_values = array_merge($query_values,array(':month' => $month));
8260
			} else {
8261
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
8262
				$query_values = array_merge($query_values,array(':month' => $month));
8263
			}
8264
		}
8265
		if ($day != '') {
8266
			if ($globalDBdriver == 'mysql') {
8267
				$query .= " AND DAY(spotter_output.date) = :day";
8268
				$query_values = array_merge($query_values,array(':day' => $day));
8269
			} else {
8270
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
8271
				$query_values = array_merge($query_values,array(':day' => $day));
8272
			}
8273
		}
8274
		$query .= " GROUP BY spotter_output.departure_airport_country
8275
					ORDER BY airport_departure_country_count DESC
8276
					LIMIT 10 OFFSET 0";
8277
      
8278
		
8279
		$sth = $this->db->prepare($query);
8280
		$sth->execute($query_values);
8281
      
8282
		$airport_array = array();
8283
		$temp_array = array();
8284
        
8285
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8286
		{
8287
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
8288
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
8289
          
8290
			$airport_array[] = $temp_array;
8291
		}
8292
8293
		return $airport_array;
8294
	}
8295
	
8296
	
8297
	/**
8298
	* Counts all airport arrival countries
8299
	*
8300
	* @return Array the airport arrival list
8301
	*
8302
	*/
8303
	public function countAllArrivalCountries($limit = true,$filters = array(),$year = '',$month = '',$day = '')
8304
	{
8305
		global $globalDBdriver;
8306
		$filter_query = $this->getFilter($filters,true,true);
8307
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
8308
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''";
8309
		$query_values = array();
8310
		if ($year != '') {
8311
			if ($globalDBdriver == 'mysql') {
8312
				$query .= " AND YEAR(spotter_output.date) = :year";
8313
				$query_values = array_merge($query_values,array(':year' => $year));
8314
			} else {
8315
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
8316
				$query_values = array_merge($query_values,array(':year' => $year));
8317
			}
8318
		}
8319
		if ($month != '') {
8320
			if ($globalDBdriver == 'mysql') {
8321
				$query .= " AND MONTH(spotter_output.date) = :month";
8322
				$query_values = array_merge($query_values,array(':month' => $month));
8323
			} else {
8324
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
8325
				$query_values = array_merge($query_values,array(':month' => $month));
8326
			}
8327
		}
8328
		if ($day != '') {
8329
			if ($globalDBdriver == 'mysql') {
8330
				$query .= " AND DAY(spotter_output.date) = :day";
8331
				$query_values = array_merge($query_values,array(':day' => $day));
8332
			} else {
8333
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
8334
				$query_values = array_merge($query_values,array(':day' => $day));
8335
			}
8336
		}
8337
		$query .= " GROUP BY spotter_output.arrival_airport_country
8338
					ORDER BY airport_arrival_country_count DESC";
8339
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
8340
      
8341
		
8342
		$sth = $this->db->prepare($query);
8343
		$sth->execute($query_values);
8344
      
8345
		$airport_array = array();
8346
		$temp_array = array();
8347
        
8348
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8349
		{
8350
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
8351
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
8352
          
8353
			$airport_array[] = $temp_array;
8354
		}
8355
8356
		return $airport_array;
8357
	}
8358
8359
8360
8361
8362
8363
	/**
8364
	* Gets all route combinations
8365
	*
8366
	* @return Array the route list
8367
	*
8368
	*/
8369
	public function countAllRoutes($filters = array())
8370
	{
8371
		$filter_query = $this->getFilter($filters,true,true);
8372
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
8373
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''
8374
                    GROUP BY route,spotter_output.departure_airport_icao, spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
8375
                    ORDER BY route_count DESC
8376
		    LIMIT 10 OFFSET 0";
8377
      
8378
		
8379
		$sth = $this->db->prepare($query);
8380
		$sth->execute();
8381
      
8382
		$routes_array = array();
8383
		$temp_array = array();
8384
        
8385
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8386
		{
8387
			$temp_array['route_count'] = $row['route_count'];
8388
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8389
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8390
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8391
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8392
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8393
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8394
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8395
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8396
          
8397
			$routes_array[] = $temp_array;
8398
		}
8399
8400
		return $routes_array;
8401
	}
8402
	
8403
	
8404
	
8405
	
8406
	/**
8407
	* Gets all route combinations based on an aircraft
8408
	*
8409
	* @return Array the route list
8410
	*
8411
	*/
8412
	public function countAllRoutesByAircraft($aircraft_icao,$filters = array())
8413
	{
8414
		$filter_query = $this->getFilter($filters,true,true);
8415
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
8416
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
8417
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
8418
			    GROUP BY route, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8419
			    ORDER BY route_count DESC";
8420
		
8421
		$sth = $this->db->prepare($query);
8422
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
8423
      
8424
		$routes_array = array();
8425
		$temp_array = array();
8426
        
8427
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8428
		{
8429
			$temp_array['route_count'] = $row['route_count'];
8430
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8431
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8432
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8433
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8434
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8435
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8436
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8437
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8438
          
8439
			$routes_array[] = $temp_array;
8440
		}
8441
8442
		return $routes_array;
8443
	}
8444
	
8445
	
8446
	/**
8447
	* Gets all route combinations based on an aircraft registration
8448
	*
8449
	* @return Array the route list
8450
	*
8451
	*/
8452
	public function countAllRoutesByRegistration($registration, $filters = array())
8453
	{
8454
		$filter_query = $this->getFilter($filters,true,true);
8455
		$registration = filter_var($registration, FILTER_SANITIZE_STRING);
8456
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
8457
			FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.registration = :registration 
8458
                    GROUP BY route
8459
                    ORDER BY route_count DESC";
8460
      
8461
		
8462
		$sth = $this->db->prepare($query);
8463
		$sth->execute(array(':registration' => $registration));
8464
      
8465
		$routes_array = array();
8466
		$temp_array = array();
8467
        
8468
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8469
		{
8470
			$temp_array['route_count'] = $row['route_count'];
8471
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8472
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8473
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8474
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8475
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8476
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8477
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8478
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8479
          
8480
			$routes_array[] = $temp_array;
8481
		}
8482
8483
		return $routes_array;
8484
	}
8485
	
8486
	
8487
	
8488
	/**
8489
	* Gets all route combinations based on an airline
8490
	*
8491
	* @return Array the route list
8492
	*
8493
	*/
8494
	public function countAllRoutesByAirline($airline_icao, $filters = array())
8495
	{
8496
		$filter_query = $this->getFilter($filters,true,true);
8497
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
8498
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
8499
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.airline_icao = :airline_icao 
8500
			    GROUP BY route, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8501
			    ORDER BY route_count DESC";
8502
      
8503
		
8504
		$sth = $this->db->prepare($query);
8505
		$sth->execute(array(':airline_icao' => $airline_icao));
8506
      
8507
		$routes_array = array();
8508
		$temp_array = array();
8509
        
8510
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8511
		{
8512
			$temp_array['route_count'] = $row['route_count'];
8513
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8514
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8515
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8516
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8517
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8518
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8519
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8520
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8521
          
8522
			$routes_array[] = $temp_array;
8523
		}
8524
8525
		return $routes_array;
8526
	}
8527
	
8528
	
8529
	
8530
	/**
8531
	* Gets all route combinations based on an airport
8532
	*
8533
	* @return Array the route list
8534
	*
8535
	*/
8536
	public function countAllRoutesByAirport($airport_icao, $filters = array())
8537
	{
8538
		$filter_query = $this->getFilter($filters,true,true);
8539
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8540
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
8541
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
8542
			    GROUP BY route, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8543
			    ORDER BY route_count DESC";
8544
		
8545
		$sth = $this->db->prepare($query);
8546
		$sth->execute(array(':airport_icao' => $airport_icao));
8547
      
8548
		$routes_array = array();
8549
		$temp_array = array();
8550
        
8551
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8552
		{
8553
			$temp_array['route_count'] = $row['route_count'];
8554
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8555
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8556
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8557
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8558
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8559
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8560
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8561
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8562
          
8563
			$routes_array[] = $temp_array;
8564
		}
8565
8566
		return $routes_array;
8567
	}
8568
	
8569
	
8570
	
8571
	/**
8572
	* Gets all route combinations based on an country
8573
	*
8574
	* @return Array the route list
8575
	*
8576
	*/
8577
	public function countAllRoutesByCountry($country, $filters = array())
8578
	{
8579
		$filter_query = $this->getFilter($filters,true,true);
8580
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8581
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
8582
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
8583
			    GROUP BY route, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
8584
			    ORDER BY route_count DESC";
8585
		
8586
		$sth = $this->db->prepare($query);
8587
		$sth->execute(array(':country' => $country));
8588
      
8589
		$routes_array = array();
8590
		$temp_array = array();
8591
        
8592
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8593
		{
8594
			$temp_array['route_count'] = $row['route_count'];
8595
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8596
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8597
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8598
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8599
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8600
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8601
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8602
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8603
          
8604
			$routes_array[] = $temp_array;
8605
		}
8606
8607
		return $routes_array;
8608
	}
8609
8610
8611
	/**
8612
	* Gets all route combinations based on an date
8613
	*
8614
	* @return Array the route list
8615
	*
8616
	*/
8617
	public function countAllRoutesByDate($date, $filters = array())
8618
	{
8619
		global $globalTimezone, $globalDBdriver;
8620
		$filter_query = $this->getFilter($filters,true,true);
8621
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8622
		if ($globalTimezone != '') {
8623
			date_default_timezone_set($globalTimezone);
8624
			$datetime = new DateTime($date);
8625
			$offset = $datetime->format('P');
8626
		} else $offset = '+00:00';
8627
		
8628
		if ($globalDBdriver == 'mysql') {
8629
			$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
8630
				    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date  
8631
				    GROUP BY route, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8632
				    ORDER BY route_count DESC";
8633
		} else {
8634
			$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
8635
				    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date  
8636
				    GROUP BY route, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8637
				    ORDER BY route_count DESC";
8638
		}
8639
		
8640
		$sth = $this->db->prepare($query);
8641
		$sth->execute(array(':date' => $date, ':offset' => $offset));
8642
      
8643
		$routes_array = array();
8644
		$temp_array = array();
8645
        
8646
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8647
		{
8648
			$temp_array['route_count'] = $row['route_count'];
8649
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8650
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8651
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8652
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8653
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8654
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8655
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8656
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8657
          
8658
			$routes_array[] = $temp_array;
8659
		}
8660
8661
		return $routes_array;
8662
	}
8663
	
8664
	
8665
	/**
8666
	* Gets all route combinations based on an ident/callsign
8667
	*
8668
	* @return Array the route list
8669
	*
8670
	*/
8671
	public function countAllRoutesByIdent($ident, $filters = array())
8672
	{
8673
		$filter_query = $this->getFilter($filters,true,true);
8674
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
8675
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
8676
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.ident = :ident   
8677
                    GROUP BY route, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8678
                    ORDER BY route_count DESC";
8679
      
8680
		
8681
		$sth = $this->db->prepare($query);
8682
		$sth->execute(array(':ident' => $ident));
8683
      
8684
		$routes_array = array();
8685
		$temp_array = array();
8686
        
8687
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8688
		{
8689
			$temp_array['route_count'] = $row['route_count'];
8690
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8691
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8692
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8693
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8694
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8695
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8696
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8697
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8698
          
8699
			$routes_array[] = $temp_array;
8700
		}
8701
8702
		return $routes_array;
8703
	}
8704
	
8705
	/**
8706
	* Gets all route combinations based on an owner
8707
	*
8708
	* @return Array the route list
8709
	*
8710
	*/
8711
	public function countAllRoutesByOwner($owner,$filters = array())
8712
	{
8713
		$filter_query = $this->getFilter($filters,true,true);
8714
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
8715
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
8716
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.owner_name = :owner 
8717
                    GROUP BY route, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8718
                    ORDER BY route_count DESC";
8719
      
8720
		
8721
		$sth = $this->db->prepare($query);
8722
		$sth->execute(array(':owner' => $owner));
8723
      
8724
		$routes_array = array();
8725
		$temp_array = array();
8726
        
8727
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8728
		{
8729
			$temp_array['route_count'] = $row['route_count'];
8730
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8731
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8732
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8733
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8734
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8735
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8736
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8737
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8738
          
8739
			$routes_array[] = $temp_array;
8740
		}
8741
8742
		return $routes_array;
8743
	}
8744
	
8745
	/**
8746
	* Gets all route combinations based on a pilot
8747
	*
8748
	* @return Array the route list
8749
	*
8750
	*/
8751
	public function countAllRoutesByPilot($pilot,$filters = array())
8752
	{
8753
		$filter_query = $this->getFilter($filters,true,true);
8754
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
8755
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
8756
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
8757
                    GROUP BY route, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8758
                    ORDER BY route_count DESC";
8759
      
8760
		
8761
		$sth = $this->db->prepare($query);
8762
		$sth->execute(array(':pilot' => $pilot));
8763
      
8764
		$routes_array = array();
8765
		$temp_array = array();
8766
        
8767
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8768
		{
8769
			$temp_array['route_count'] = $row['route_count'];
8770
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8771
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8772
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8773
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8774
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8775
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8776
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8777
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8778
          
8779
			$routes_array[] = $temp_array;
8780
		}
8781
8782
		return $routes_array;
8783
	}
8784
	
8785
	
8786
	/**
8787
	* Gets all route combinations based on an manufacturer
8788
	*
8789
	* @return Array the route list
8790
	*
8791
	*/
8792
	public function countAllRoutesByManufacturer($aircraft_manufacturer, $filters = array())
8793
	{
8794
		$filter_query = $this->getFilter($filters,true,true);
8795
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
8796
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
8797
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
8798
                    GROUP BY route
8799
                    ORDER BY route_count DESC";
8800
      
8801
		
8802
		$sth = $this->db->prepare($query);
8803
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
8804
      
8805
		$routes_array = array();
8806
		$temp_array = array();
8807
        
8808
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8809
		{
8810
			$temp_array['route_count'] = $row['route_count'];
8811
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8812
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8813
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8814
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8815
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8816
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8817
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8818
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8819
          
8820
			$routes_array[] = $temp_array;
8821
		}
8822
8823
		return $routes_array;
8824
	}
8825
8826
	
8827
	
8828
	/**
8829
	* Gets all route combinations with waypoints
8830
	*
8831
	* @return Array the route list
8832
	*
8833
	*/
8834
	public function countAllRoutesWithWaypoints($filters = array())
8835
	{
8836
		$filter_query = $this->getFilter($filters,true,true);
8837
		$query  = "SELECT DISTINCT spotter_output.waypoints AS route, count(spotter_output.waypoints) AS route_count, spotter_output.spotter_id, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
8838
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.waypoints <> '' 
8839
                    GROUP BY route, spotter_output.spotter_id, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
8840
                    ORDER BY route_count DESC
8841
		    LIMIT 10 OFFSET 0";
8842
      
8843
		
8844
		$sth = $this->db->prepare($query);
8845
		$sth->execute();
8846
      
8847
		$routes_array = array();
8848
		$temp_array = array();
8849
        
8850
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8851
		{
8852
			$temp_array['spotter_id'] = $row['spotter_id'];
8853
			$temp_array['route_count'] = $row['route_count'];
8854
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8855
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8856
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8857
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8858
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8859
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8860
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8861
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8862
          
8863
			$routes_array[] = $temp_array;
8864
		}
8865
8866
		return $routes_array;
8867
	}
8868
	
8869
	/**
8870
	* Gets all callsigns that have flown over
8871
	*
8872
	* @return Array the callsign list
8873
	*
8874
	*/
8875
	public function countAllCallsigns($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '', $month = '', $day = '')
8876
	{
8877
		global $globalDBdriver;
8878
		$filter_query = $this->getFilter($filters,true,true);
8879
		$query  = "SELECT DISTINCT spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name, spotter_output.airline_icao  
8880
                    FROM spotter_output".$filter_query." spotter_output.ident <> '' ";
8881
		 if ($olderthanmonths > 0) {
8882
			if ($globalDBdriver == 'mysql') $query .= ' AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH)';
8883
			else $query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
8884
		}
8885
		if ($sincedate != '') {
8886
			if ($globalDBdriver == 'mysql') $query .= " AND spotter_output.date > '".$sincedate."'";
8887
			else $query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
8888
		}
8889
		$query_values = array();
8890
		if ($year != '') {
8891
			if ($globalDBdriver == 'mysql') {
8892
				$query .= " AND YEAR(spotter_output.date) = :year";
8893
				$query_values = array_merge($query_values,array(':year' => $year));
8894
			} else {
8895
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
8896
				$query_values = array_merge($query_values,array(':year' => $year));
8897
			}
8898
		}
8899
		if ($month != '') {
8900
			if ($globalDBdriver == 'mysql') {
8901
				$query .= " AND MONTH(spotter_output.date) = :month";
8902
				$query_values = array_merge($query_values,array(':month' => $month));
8903
			} else {
8904
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
8905
				$query_values = array_merge($query_values,array(':month' => $month));
8906
			}
8907
		}
8908
		if ($day != '') {
8909
			if ($globalDBdriver == 'mysql') {
8910
				$query .= " AND DAY(spotter_output.date) = :day";
8911
				$query_values = array_merge($query_values,array(':day' => $day));
8912
			} else {
8913
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
8914
				$query_values = array_merge($query_values,array(':day' => $day));
8915
			}
8916
		}
8917
		$query .= " GROUP BY spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
8918
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
8919
      		
8920
		$sth = $this->db->prepare($query);
8921
		$sth->execute($query_values);
8922
      
8923
		$callsign_array = array();
8924
		$temp_array = array();
8925
        
8926
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8927
		{
8928
			$temp_array['callsign_icao'] = $row['ident'];
8929
			$temp_array['airline_name'] = $row['airline_name'];
8930
			$temp_array['airline_icao'] = $row['airline_icao'];
8931
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
8932
          
8933
			$callsign_array[] = $temp_array;
8934
		}
8935
8936
		return $callsign_array;
8937
	}
8938
8939
	/**
8940
	* Gets all callsigns that have flown over
8941
	*
8942
	* @return Array the callsign list
8943
	*
8944
	*/
8945
	public function countAllCallsignsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $filters = array())
8946
	{
8947
		global $globalDBdriver;
8948
		$filter_query = $this->getFilter($filters,true,true);
8949
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name  
8950
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''  AND spotter_output.airline_icao <> '' ";
8951
		 if ($olderthanmonths > 0) {
8952
			if ($globalDBdriver == 'mysql') $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
8953
			else $query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
8954
		}
8955
		if ($sincedate != '') {
8956
			if ($globalDBdriver == 'mysql') $query .= "AND spotter_output.date > '".$sincedate."' ";
8957
			else $query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
8958
		}
8959
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
8960
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
8961
      		
8962
		$sth = $this->db->prepare($query);
8963
		$sth->execute();
8964
      
8965
		$callsign_array = array();
8966
		$temp_array = array();
8967
        
8968
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8969
		{
8970
			$temp_array['callsign_icao'] = $row['ident'];
8971
			$temp_array['airline_name'] = $row['airline_name'];
8972
			$temp_array['airline_icao'] = $row['airline_icao'];
8973
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
8974
          
8975
			$callsign_array[] = $temp_array;
8976
		}
8977
8978
		return $callsign_array;
8979
	}
8980
8981
8982
8983
8984
	/**
8985
	* Counts all dates
8986
	*
8987
	* @return Array the date list
8988
	*
8989
	*/
8990
	public function countAllDates($filters = array())
8991
	{
8992
		global $globalTimezone, $globalDBdriver;
8993
		if ($globalTimezone != '') {
8994
			date_default_timezone_set($globalTimezone);
8995
			$datetime = new DateTime();
8996
			$offset = $datetime->format('P');
8997
		} else $offset = '+00:00';
8998
8999
		if ($globalDBdriver == 'mysql') {
9000
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9001
								FROM spotter_output";
9002
			$query .= $this->getFilter($filters);
9003
			$query .= " GROUP BY date_name 
9004
								ORDER BY date_count DESC
9005
								LIMIT 10 OFFSET 0";
9006
		} else {
9007
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9008
								FROM spotter_output";
9009
			$query .= $this->getFilter($filters);
9010
			$query .= " GROUP BY date_name 
9011
								ORDER BY date_count DESC
9012
								LIMIT 10 OFFSET 0";
9013
		}
9014
      
9015
		
9016
		$sth = $this->db->prepare($query);
9017
		$sth->execute(array(':offset' => $offset));
9018
      
9019
		$date_array = array();
9020
		$temp_array = array();
9021
        
9022
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9023
		{
9024
			$temp_array['date_name'] = $row['date_name'];
9025
			$temp_array['date_count'] = $row['date_count'];
9026
9027
			$date_array[] = $temp_array;
9028
		}
9029
9030
		return $date_array;
9031
	}
9032
	
9033
	/**
9034
	* Counts all dates
9035
	*
9036
	* @return Array the date list
9037
	*
9038
	*/
9039
	public function countAllDatesByAirlines($filters = array())
9040
	{
9041
		global $globalTimezone, $globalDBdriver;
9042
		if ($globalTimezone != '') {
9043
			date_default_timezone_set($globalTimezone);
9044
			$datetime = new DateTime();
9045
			$offset = $datetime->format('P');
9046
		} else $offset = '+00:00';
9047
		$filter_query = $this->getFilter($filters,true,true);
9048
		if ($globalDBdriver == 'mysql') {
9049
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9050
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9051
								GROUP BY spotter_output.airline_icao, date_name 
9052
								ORDER BY date_count DESC
9053
								LIMIT 10 OFFSET 0";
9054
		} else {
9055
			$query  = "SELECT spotter_output.airline_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9056
								FROM spotter_output 
9057
								WHERE spotter_output.airline_icao <> '' 
9058
								GROUP BY spotter_output.airline_icao, date_name 
9059
								ORDER BY date_count DESC
9060
								LIMIT 10 OFFSET 0";
9061
		}
9062
      
9063
		
9064
		$sth = $this->db->prepare($query);
9065
		$sth->execute(array(':offset' => $offset));
9066
      
9067
		$date_array = array();
9068
		$temp_array = array();
9069
        
9070
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9071
		{
9072
			$temp_array['date_name'] = $row['date_name'];
9073
			$temp_array['date_count'] = $row['date_count'];
9074
			$temp_array['airline_icao'] = $row['airline_icao'];
9075
9076
			$date_array[] = $temp_array;
9077
		}
9078
9079
		return $date_array;
9080
	}	
9081
	
9082
	/**
9083
	* Counts all dates during the last 7 days
9084
	*
9085
	* @return Array the date list
9086
	*
9087
	*/
9088
	public function countAllDatesLast7Days($filters = array())
9089
	{
9090
		global $globalTimezone, $globalDBdriver;
9091
		if ($globalTimezone != '') {
9092
			date_default_timezone_set($globalTimezone);
9093
			$datetime = new DateTime();
9094
			$offset = $datetime->format('P');
9095
		} else $offset = '+00:00';
9096
		$filter_query = $this->getFilter($filters,true,true);
9097
		if ($globalDBdriver == 'mysql') {
9098
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9099
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY)";
9100
			$query .= " GROUP BY date_name 
9101
								ORDER BY spotter_output.date ASC";
9102
			$query_data = array(':offset' => $offset);
9103
		} else {
9104
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9105
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '7 DAYS'";
9106
			$query .= " GROUP BY date_name 
9107
								ORDER BY date_name ASC";
9108
			$query_data = array(':offset' => $offset);
9109
    		}
9110
		
9111
		$sth = $this->db->prepare($query);
9112
		$sth->execute($query_data);
9113
      
9114
		$date_array = array();
9115
		$temp_array = array();
9116
        
9117
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9118
		{
9119
			$temp_array['date_name'] = $row['date_name'];
9120
			$temp_array['date_count'] = $row['date_count'];
9121
          
9122
			$date_array[] = $temp_array;
9123
		}
9124
9125
		return $date_array;
9126
	}
9127
9128
	/**
9129
	* Counts all dates during the last month
9130
	*
9131
	* @return Array the date list
9132
	*
9133
	*/
9134
	public function countAllDatesLastMonth($filters = array())
9135
	{
9136
		global $globalTimezone, $globalDBdriver;
9137
		if ($globalTimezone != '') {
9138
			date_default_timezone_set($globalTimezone);
9139
			$datetime = new DateTime();
9140
			$offset = $datetime->format('P');
9141
		} else $offset = '+00:00';
9142
		$filter_query = $this->getFilter($filters,true,true);
9143
		if ($globalDBdriver == 'mysql') {
9144
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9145
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)";
9146
			$query .= " GROUP BY date_name 
9147
								ORDER BY spotter_output.date ASC";
9148
			$query_data = array(':offset' => $offset);
9149
		} else {
9150
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9151
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'";
9152
			$query .= " GROUP BY date_name 
9153
								ORDER BY date_name ASC";
9154
			$query_data = array(':offset' => $offset);
9155
    		}
9156
		
9157
		$sth = $this->db->prepare($query);
9158
		$sth->execute($query_data);
9159
      
9160
		$date_array = array();
9161
		$temp_array = array();
9162
        
9163
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9164
		{
9165
			$temp_array['date_name'] = $row['date_name'];
9166
			$temp_array['date_count'] = $row['date_count'];
9167
          
9168
			$date_array[] = $temp_array;
9169
		}
9170
9171
		return $date_array;
9172
	}
9173
9174
9175
	/**
9176
	* Counts all dates during the last month
9177
	*
9178
	* @return Array the date list
9179
	*
9180
	*/
9181
	public function countAllDatesLastMonthByAirlines($filters = array())
9182
	{
9183
		global $globalTimezone, $globalDBdriver;
9184
		$filter_query = $this->getFilter($filters,true,true);
9185
		if ($globalTimezone != '') {
9186
			date_default_timezone_set($globalTimezone);
9187
			$datetime = new DateTime();
9188
			$offset = $datetime->format('P');
9189
		} else $offset = '+00:00';
9190
		
9191
		if ($globalDBdriver == 'mysql') {
9192
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
9193
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)
9194
								GROUP BY spotter_output.airline_icao, date_name 
9195
								ORDER BY spotter_output.date ASC";
9196
			$query_data = array(':offset' => $offset);
9197
		} else {
9198
			$query  = "SELECT spotter_output.airline_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
9199
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'
9200
								GROUP BY spotter_output.airline_icao, date_name 
9201
								ORDER BY date_name ASC";
9202
			$query_data = array(':offset' => $offset);
9203
    		}
9204
		
9205
		$sth = $this->db->prepare($query);
9206
		$sth->execute($query_data);
9207
      
9208
		$date_array = array();
9209
		$temp_array = array();
9210
        
9211
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9212
		{
9213
			$temp_array['date_name'] = $row['date_name'];
9214
			$temp_array['date_count'] = $row['date_count'];
9215
			$temp_array['airline_icao'] = $row['airline_icao'];
9216
          
9217
			$date_array[] = $temp_array;
9218
		}
9219
9220
		return $date_array;
9221
	}
9222
	
9223
9224
	/**
9225
	* Counts all month
9226
	*
9227
	* @return Array the month list
9228
	*
9229
	*/
9230
	public function countAllMonths($filters = array())
9231
	{
9232
		global $globalTimezone, $globalDBdriver;
9233
		if ($globalTimezone != '') {
9234
			date_default_timezone_set($globalTimezone);
9235
			$datetime = new DateTime();
9236
			$offset = $datetime->format('P');
9237
		} else $offset = '+00:00';
9238
9239
		if ($globalDBdriver == 'mysql') {
9240
			$query  = "SELECT YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(*) as date_count
9241
								FROM spotter_output";
9242
			$query .= $this->getFilter($filters);
9243
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
9244
		} else {
9245
			$query  = "SELECT EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(*) as date_count
9246
								FROM spotter_output";
9247
			$query .= $this->getFilter($filters);
9248
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
9249
		}
9250
      
9251
		
9252
		$sth = $this->db->prepare($query);
9253
		$sth->execute(array(':offset' => $offset));
9254
      
9255
		$date_array = array();
9256
		$temp_array = array();
9257
        
9258
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9259
		{
9260
			$temp_array['month_name'] = $row['month_name'];
9261
			$temp_array['year_name'] = $row['year_name'];
9262
			$temp_array['date_count'] = $row['date_count'];
9263
9264
			$date_array[] = $temp_array;
9265
		}
9266
9267
		return $date_array;
9268
	}
9269
9270
	/**
9271
	* Counts all month
9272
	*
9273
	* @return Array the month list
9274
	*
9275
	*/
9276
	public function countAllMonthsByAirlines($filters = array())
9277
	{
9278
		global $globalTimezone, $globalDBdriver;
9279
		$filter_query = $this->getFilter($filters,true,true);
9280
		if ($globalTimezone != '') {
9281
			date_default_timezone_set($globalTimezone);
9282
			$datetime = new DateTime();
9283
			$offset = $datetime->format('P');
9284
		} else $offset = '+00:00';
9285
9286
		if ($globalDBdriver == 'mysql') {
9287
			$query  = "SELECT spotter_output.airline_icao, YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(*) as date_count
9288
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9289
								GROUP BY spotter_output.airline_icao, year_name, month_name 
9290
								ORDER BY date_count DESC";
9291
		} else {
9292
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(*) as date_count
9293
								FROM spotter_output 
9294
								WHERE spotter_output.airline_icao <> '' 
9295
								GROUP BY spotter_output.airline_icao, year_name, month_name 
9296
								ORDER BY date_count DESC";
9297
		}
9298
      
9299
		
9300
		$sth = $this->db->prepare($query);
9301
		$sth->execute(array(':offset' => $offset));
9302
      
9303
		$date_array = array();
9304
		$temp_array = array();
9305
        
9306
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9307
		{
9308
			$temp_array['month_name'] = $row['month_name'];
9309
			$temp_array['year_name'] = $row['year_name'];
9310
			$temp_array['date_count'] = $row['date_count'];
9311
			$temp_array['airline_icao'] = $row['airline_icao'];
9312
9313
			$date_array[] = $temp_array;
9314
		}
9315
9316
		return $date_array;
9317
	}
9318
9319
	/**
9320
	* Counts all military month
9321
	*
9322
	* @return Array the month list
9323
	*
9324
	*/
9325
	public function countAllMilitaryMonths($filters = array())
9326
	{
9327
		global $globalTimezone, $globalDBdriver;
9328
		if ($globalTimezone != '') {
9329
			date_default_timezone_set($globalTimezone);
9330
			$datetime = new DateTime();
9331
			$offset = $datetime->format('P');
9332
		} else $offset = '+00:00';
9333
		$filter_query = $this->getFilter($filters,true,true);
9334
		if ($globalDBdriver == 'mysql') {
9335
			$query  = "SELECT YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(*) as date_count
9336
								FROM spotter_output".$filter_query." spotter_output.airline_type = 'military'
9337
								GROUP BY year_name, month_name 
9338
								ORDER BY date_count DESC";
9339
		} else {
9340
			$query  = "SELECT EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(*) as date_count
9341
								FROM spotter_output".$filter_query." spotter_output.airline_type = 'military'
9342
								GROUP BY year_name, month_name 
9343
								ORDER BY date_count DESC";
9344
		}
9345
		
9346
		$sth = $this->db->prepare($query);
9347
		$sth->execute(array(':offset' => $offset));
9348
      
9349
		$date_array = array();
9350
		$temp_array = array();
9351
        
9352
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9353
		{
9354
			$temp_array['month_name'] = $row['month_name'];
9355
			$temp_array['year_name'] = $row['year_name'];
9356
			$temp_array['date_count'] = $row['date_count'];
9357
9358
			$date_array[] = $temp_array;
9359
		}
9360
9361
		return $date_array;
9362
	}
9363
	
9364
	/**
9365
	* Counts all month owners
9366
	*
9367
	* @return Array the month list
9368
	*
9369
	*/
9370
	public function countAllMonthsOwners($filters = array())
9371
	{
9372
		global $globalTimezone, $globalDBdriver;
9373
		if ($globalTimezone != '') {
9374
			date_default_timezone_set($globalTimezone);
9375
			$datetime = new DateTime();
9376
			$offset = $datetime->format('P');
9377
		} else $offset = '+00:00';
9378
		$filter_query = $this->getFilter($filters,true,true);
9379
9380
		if ($globalDBdriver == 'mysql') {
9381
			$query  = "SELECT YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct owner_name) as date_count
9382
								FROM spotter_output".$filter_query." owner_name <> ''
9383
								GROUP BY year_name, month_name
9384
								ORDER BY date_count DESC";
9385
		} else {
9386
			$query  = "SELECT EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct owner_name) as date_count
9387
								FROM spotter_output".$filter_query." owner_name <> ''
9388
								GROUP BY year_name, month_name
9389
								ORDER BY date_count DESC";
9390
		}
9391
		
9392
		$sth = $this->db->prepare($query);
9393
		$sth->execute(array(':offset' => $offset));
9394
      
9395
		$date_array = array();
9396
		$temp_array = array();
9397
        
9398
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9399
		{
9400
			$temp_array['month_name'] = $row['month_name'];
9401
			$temp_array['year_name'] = $row['year_name'];
9402
			$temp_array['date_count'] = $row['date_count'];
9403
9404
			$date_array[] = $temp_array;
9405
		}
9406
9407
		return $date_array;
9408
	}
9409
	
9410
	/**
9411
	* Counts all month owners
9412
	*
9413
	* @return Array the month list
9414
	*
9415
	*/
9416
	public function countAllMonthsOwnersByAirlines($filters = array())
9417
	{
9418
		global $globalTimezone, $globalDBdriver;
9419
		$filter_query = $this->getFilter($filters,true,true);
9420
		if ($globalTimezone != '') {
9421
			date_default_timezone_set($globalTimezone);
9422
			$datetime = new DateTime();
9423
			$offset = $datetime->format('P');
9424
		} else $offset = '+00:00';
9425
9426
		if ($globalDBdriver == 'mysql') {
9427
			$query  = "SELECT spotter_output.airline_icao, YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct owner_name) as date_count
9428
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
9429
								GROUP BY spotter_output.airline_icao, year_name, month_name
9430
								ORDER BY date_count DESC";
9431
		} else {
9432
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct owner_name) as date_count
9433
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
9434
								GROUP BY spotter_output.airline_icao, year_name, month_name
9435
								ORDER BY date_count DESC";
9436
		}
9437
		
9438
		$sth = $this->db->prepare($query);
9439
		$sth->execute(array(':offset' => $offset));
9440
      
9441
		$date_array = array();
9442
		$temp_array = array();
9443
        
9444
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9445
		{
9446
			$temp_array['month_name'] = $row['month_name'];
9447
			$temp_array['year_name'] = $row['year_name'];
9448
			$temp_array['date_count'] = $row['date_count'];
9449
			$temp_array['airline_icao'] = $row['airline_icao'];
9450
9451
			$date_array[] = $temp_array;
9452
		}
9453
9454
		return $date_array;
9455
	}
9456
9457
	/**
9458
	* Counts all month pilot
9459
	*
9460
	* @return Array the month list
9461
	*
9462
	*/
9463
	public function countAllMonthsPilots($filters = array())
9464
	{
9465
		global $globalTimezone, $globalDBdriver;
9466
		if ($globalTimezone != '') {
9467
			date_default_timezone_set($globalTimezone);
9468
			$datetime = new DateTime();
9469
			$offset = $datetime->format('P');
9470
		} else $offset = '+00:00';
9471
		$filter_query = $this->getFilter($filters,true,true);
9472
9473
		if ($globalDBdriver == 'mysql') {
9474
			$query  = "SELECT YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct pilot_id) as date_count
9475
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
9476
								GROUP BY year_name, month_name
9477
								ORDER BY date_count DESC";
9478
		} else {
9479
			$query  = "SELECT EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct pilot_id) as date_count
9480
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
9481
								GROUP BY year_name, month_name
9482
								ORDER BY date_count DESC";
9483
		}
9484
		
9485
		$sth = $this->db->prepare($query);
9486
		$sth->execute(array(':offset' => $offset));
9487
      
9488
		$date_array = array();
9489
		$temp_array = array();
9490
        
9491
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9492
		{
9493
			$temp_array['month_name'] = $row['month_name'];
9494
			$temp_array['year_name'] = $row['year_name'];
9495
			$temp_array['date_count'] = $row['date_count'];
9496
9497
			$date_array[] = $temp_array;
9498
		}
9499
9500
		return $date_array;
9501
	}
9502
	
9503
	/**
9504
	* Counts all month pilot
9505
	*
9506
	* @return Array the month list
9507
	*
9508
	*/
9509
	public function countAllMonthsPilotsByAirlines($filters = array())
9510
	{
9511
		global $globalTimezone, $globalDBdriver;
9512
		$filter_query = $this->getFilter($filters,true,true);
9513
		if ($globalTimezone != '') {
9514
			date_default_timezone_set($globalTimezone);
9515
			$datetime = new DateTime();
9516
			$offset = $datetime->format('P');
9517
		} else $offset = '+00:00';
9518
9519
		if ($globalDBdriver == 'mysql') {
9520
			$query  = "SELECT spotter_output.airline_icao, YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct pilot_id) as date_count
9521
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
9522
								GROUP BY spotter_output.airline_icao,year_name, month_name
9523
								ORDER BY date_count DESC";
9524
		} else {
9525
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct pilot_id) as date_count
9526
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
9527
								GROUP BY spotter_output.airline_icao, year_name, month_name
9528
								ORDER BY date_count DESC";
9529
		}
9530
		
9531
		$sth = $this->db->prepare($query);
9532
		$sth->execute(array(':offset' => $offset));
9533
      
9534
		$date_array = array();
9535
		$temp_array = array();
9536
        
9537
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9538
		{
9539
			$temp_array['month_name'] = $row['month_name'];
9540
			$temp_array['year_name'] = $row['year_name'];
9541
			$temp_array['date_count'] = $row['date_count'];
9542
			$temp_array['airline_icao'] = $row['airline_icao'];
9543
9544
			$date_array[] = $temp_array;
9545
		}
9546
9547
		return $date_array;
9548
	}
9549
9550
	/**
9551
	* Counts all month airline
9552
	*
9553
	* @return Array the month list
9554
	*
9555
	*/
9556
	public function countAllMonthsAirlines($filters = array())
9557
	{
9558
		global $globalTimezone, $globalDBdriver;
9559
		$filter_query = $this->getFilter($filters,true,true);
9560
		if ($globalTimezone != '') {
9561
			date_default_timezone_set($globalTimezone);
9562
			$datetime = new DateTime();
9563
			$offset = $datetime->format('P');
9564
		} else $offset = '+00:00';
9565
9566
		if ($globalDBdriver == 'mysql') {
9567
			$query  = "SELECT YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct airline_icao) as date_count
9568
								FROM spotter_output".$filter_query." airline_icao <> '' 
9569
								GROUP BY year_name, month_name
9570
								ORDER BY date_count DESC";
9571
		} else {
9572
			$query  = "SELECT EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct airline_icao) as date_count
9573
								FROM spotter_output".$filter_query." airline_icao <> '' 
9574
								GROUP BY year_name, month_name
9575
								ORDER BY date_count DESC";
9576
		}
9577
		
9578
		$sth = $this->db->prepare($query);
9579
		$sth->execute(array(':offset' => $offset));
9580
      
9581
		$date_array = array();
9582
		$temp_array = array();
9583
        
9584
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9585
		{
9586
			$temp_array['month_name'] = $row['month_name'];
9587
			$temp_array['year_name'] = $row['year_name'];
9588
			$temp_array['date_count'] = $row['date_count'];
9589
9590
			$date_array[] = $temp_array;
9591
		}
9592
9593
		return $date_array;
9594
	}
9595
	
9596
	/**
9597
	* Counts all month aircraft
9598
	*
9599
	* @return Array the month list
9600
	*
9601
	*/
9602
	public function countAllMonthsAircrafts($filters = array())
9603
	{
9604
		global $globalTimezone, $globalDBdriver;
9605
		if ($globalTimezone != '') {
9606
			date_default_timezone_set($globalTimezone);
9607
			$datetime = new DateTime();
9608
			$offset = $datetime->format('P');
9609
		} else $offset = '+00:00';
9610
		$filter_query = $this->getFilter($filters,true,true);
9611
9612
		if ($globalDBdriver == 'mysql') {
9613
			$query  = "SELECT YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct aircraft_icao) as date_count
9614
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
9615
								GROUP BY year_name, month_name
9616
								ORDER BY date_count DESC";
9617
		} else {
9618
			$query  = "SELECT EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct aircraft_icao) as date_count
9619
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
9620
								GROUP BY year_name, month_name
9621
								ORDER BY date_count DESC";
9622
		}
9623
		
9624
		$sth = $this->db->prepare($query);
9625
		$sth->execute(array(':offset' => $offset));
9626
      
9627
		$date_array = array();
9628
		$temp_array = array();
9629
        
9630
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9631
		{
9632
			$temp_array['month_name'] = $row['month_name'];
9633
			$temp_array['year_name'] = $row['year_name'];
9634
			$temp_array['date_count'] = $row['date_count'];
9635
9636
			$date_array[] = $temp_array;
9637
		}
9638
9639
		return $date_array;
9640
	}
9641
	
9642
9643
	/**
9644
	* Counts all month aircraft
9645
	*
9646
	* @return Array the month list
9647
	*
9648
	*/
9649
	public function countAllMonthsAircraftsByAirlines($filters = array())
9650
	{
9651
		global $globalTimezone, $globalDBdriver;
9652
		$filter_query = $this->getFilter($filters,true,true);
9653
		if ($globalTimezone != '') {
9654
			date_default_timezone_set($globalTimezone);
9655
			$datetime = new DateTime();
9656
			$offset = $datetime->format('P');
9657
		} else $offset = '+00:00';
9658
9659
		if ($globalDBdriver == 'mysql') {
9660
			$query  = "SELECT spotter_output.airline_icao,YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct aircraft_icao) as date_count
9661
								FROM spotter_output".$filter_query." aircraft_icao <> ''  AND spotter_output.airline_icao <> '' 
9662
								GROUP BY spotter_output.airline_icao, year_name, month_name
9663
								ORDER BY date_count DESC";
9664
		} else {
9665
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct aircraft_icao) as date_count
9666
								FROM spotter_output".$filter_query." aircraft_icao <> '' AND spotter_output.airline_icao <> '' 
9667
								GROUP BY spotter_output.airline_icao, year_name, month_name
9668
								ORDER BY date_count DESC";
9669
		}
9670
		
9671
		$sth = $this->db->prepare($query);
9672
		$sth->execute(array(':offset' => $offset));
9673
      
9674
		$date_array = array();
9675
		$temp_array = array();
9676
        
9677
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9678
		{
9679
			$temp_array['month_name'] = $row['month_name'];
9680
			$temp_array['year_name'] = $row['year_name'];
9681
			$temp_array['date_count'] = $row['date_count'];
9682
			$temp_array['airline_icao'] = $row['airline_icao'];
9683
9684
			$date_array[] = $temp_array;
9685
		}
9686
9687
		return $date_array;
9688
	}
9689
9690
	/**
9691
	* Counts all month real arrival
9692
	*
9693
	* @return Array the month list
9694
	*
9695
	*/
9696
	public function countAllMonthsRealArrivals($filters = array())
9697
	{
9698
		global $globalTimezone, $globalDBdriver;
9699
		if ($globalTimezone != '') {
9700
			date_default_timezone_set($globalTimezone);
9701
			$datetime = new DateTime();
9702
			$offset = $datetime->format('P');
9703
		} else $offset = '+00:00';
9704
		$filter_query = $this->getFilter($filters,true,true);
9705
9706
		if ($globalDBdriver == 'mysql') {
9707
			$query  = "SELECT YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(real_arrival_airport_icao) as date_count
9708
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
9709
								GROUP BY year_name, month_name
9710
								ORDER BY date_count DESC";
9711
		} else {
9712
			$query  = "SELECT EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(real_arrival_airport_icao) as date_count
9713
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
9714
								GROUP BY year_name, month_name
9715
								ORDER BY date_count DESC";
9716
		}
9717
		
9718
		$sth = $this->db->prepare($query);
9719
		$sth->execute(array(':offset' => $offset));
9720
      
9721
		$date_array = array();
9722
		$temp_array = array();
9723
        
9724
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9725
		{
9726
			$temp_array['month_name'] = $row['month_name'];
9727
			$temp_array['year_name'] = $row['year_name'];
9728
			$temp_array['date_count'] = $row['date_count'];
9729
9730
			$date_array[] = $temp_array;
9731
		}
9732
9733
		return $date_array;
9734
	}
9735
	
9736
9737
	/**
9738
	* Counts all month real arrival
9739
	*
9740
	* @return Array the month list
9741
	*
9742
	*/
9743
	public function countAllMonthsRealArrivalsByAirlines($filters = array())
9744
	{
9745
		global $globalTimezone, $globalDBdriver;
9746
		$filter_query = $this->getFilter($filters,true,true);
9747
		if ($globalTimezone != '') {
9748
			date_default_timezone_set($globalTimezone);
9749
			$datetime = new DateTime();
9750
			$offset = $datetime->format('P');
9751
		} else $offset = '+00:00';
9752
9753
		if ($globalDBdriver == 'mysql') {
9754
			$query  = "SELECT spotter_output.airline_icao, YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(real_arrival_airport_icao) as date_count
9755
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
9756
								GROUP BY spotter_output.airline_icao, year_name, month_name
9757
								ORDER BY date_count DESC";
9758
		} else {
9759
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(real_arrival_airport_icao) as date_count
9760
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
9761
								GROUP BY spotter_output.airline_icao, year_name, month_name
9762
								ORDER BY date_count DESC";
9763
		}
9764
		
9765
		$sth = $this->db->prepare($query);
9766
		$sth->execute(array(':offset' => $offset));
9767
      
9768
		$date_array = array();
9769
		$temp_array = array();
9770
        
9771
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9772
		{
9773
			$temp_array['month_name'] = $row['month_name'];
9774
			$temp_array['year_name'] = $row['year_name'];
9775
			$temp_array['date_count'] = $row['date_count'];
9776
			$temp_array['airline_icao'] = $row['airline_icao'];
9777
9778
			$date_array[] = $temp_array;
9779
		}
9780
9781
		return $date_array;
9782
	}
9783
	
9784
9785
	/**
9786
	* Counts all dates during the last year
9787
	*
9788
	* @return Array the date list
9789
	*
9790
	*/
9791
	public function countAllMonthsLastYear($filters)
9792
	{
9793
		global $globalTimezone, $globalDBdriver;
9794
		if ($globalTimezone != '') {
9795
			date_default_timezone_set($globalTimezone);
9796
			$datetime = new DateTime();
9797
			$offset = $datetime->format('P');
9798
		} else $offset = '+00:00';
9799
		$filter_query = $this->getFilter($filters,true,true);
9800
		if ($globalDBdriver == 'mysql') {
9801
			$query  = "SELECT MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name, count(*) as date_count
9802
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 YEAR)";
9803
			$query .= " GROUP BY year_name, month_name
9804
								ORDER BY year_name, month_name ASC";
9805
			$query_data = array(':offset' => $offset);
9806
		} else {
9807
			$query  = "SELECT EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name, count(*) as date_count
9808
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 YEARS'";
9809
			$query .= " GROUP BY year_name, month_name
9810
								ORDER BY year_name, month_name ASC";
9811
			$query_data = array(':offset' => $offset);
9812
    		}
9813
		
9814
		$sth = $this->db->prepare($query);
9815
		$sth->execute($query_data);
9816
      
9817
		$date_array = array();
9818
		$temp_array = array();
9819
        
9820
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9821
		{
9822
			$temp_array['year_name'] = $row['year_name'];
9823
			$temp_array['month_name'] = $row['month_name'];
9824
			$temp_array['date_count'] = $row['date_count'];
9825
          
9826
			$date_array[] = $temp_array;
9827
		}
9828
9829
		return $date_array;
9830
	}
9831
	
9832
	
9833
	
9834
	/**
9835
	* Counts all hours
9836
	*
9837
	* @return Array the hour list
9838
	*
9839
	*/
9840
	public function countAllHours($orderby,$filters = array())
9841
	{
9842
		global $globalTimezone, $globalDBdriver;
9843
		if ($globalTimezone != '') {
9844
			date_default_timezone_set($globalTimezone);
9845
			$datetime = new DateTime();
9846
			$offset = $datetime->format('P');
9847
		} else $offset = '+00:00';
9848
9849
		$orderby_sql = '';
9850
		if ($orderby == "hour")
9851
		{
9852
			$orderby_sql = "ORDER BY hour_name ASC";
9853
		}
9854
		if ($orderby == "count")
9855
		{
9856
			$orderby_sql = "ORDER BY hour_count DESC";
9857
		}
9858
		
9859
		if ($globalDBdriver == 'mysql') {
9860
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9861
								FROM spotter_output";
9862
			$query .= $this->getFilter($filters);
9863
			$query .= " GROUP BY hour_name 
9864
								".$orderby_sql;
9865
9866
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
9867
								FROM spotter_output 
9868
								GROUP BY hour_name 
9869
								".$orderby_sql."
9870
								LIMIT 10 OFFSET 00";
9871
  */    
9872
		$query_data = array(':offset' => $offset);
9873
		} else {
9874
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9875
								FROM spotter_output";
9876
			$query .= $this->getFilter($filters);
9877
			$query .= " GROUP BY hour_name 
9878
								".$orderby_sql;
9879
			$query_data = array(':offset' => $offset);
9880
		}
9881
		
9882
		$sth = $this->db->prepare($query);
9883
		$sth->execute($query_data);
9884
      
9885
		$hour_array = array();
9886
		$temp_array = array();
9887
        
9888
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9889
		{
9890
			$temp_array['hour_name'] = $row['hour_name'];
9891
			$temp_array['hour_count'] = $row['hour_count'];
9892
          
9893
			$hour_array[] = $temp_array;
9894
		}
9895
9896
		return $hour_array;
9897
	}
9898
	
9899
	/**
9900
	* Counts all hours
9901
	*
9902
	* @return Array the hour list
9903
	*
9904
	*/
9905
	public function countAllHoursByAirlines($orderby, $filters = array())
9906
	{
9907
		global $globalTimezone, $globalDBdriver;
9908
		$filter_query = $this->getFilter($filters,true,true);
9909
		if ($globalTimezone != '') {
9910
			date_default_timezone_set($globalTimezone);
9911
			$datetime = new DateTime();
9912
			$offset = $datetime->format('P');
9913
		} else $offset = '+00:00';
9914
9915
		$orderby_sql = '';
9916
		if ($orderby == "hour")
9917
		{
9918
			$orderby_sql = "ORDER BY hour_name ASC";
9919
		}
9920
		if ($orderby == "count")
9921
		{
9922
			$orderby_sql = "ORDER BY hour_count DESC";
9923
		}
9924
		
9925
		if ($globalDBdriver == 'mysql') {
9926
			$query  = "SELECT spotter_output.airline_icao, HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9927
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9928
								GROUP BY spotter_output.airline_icao, hour_name 
9929
								".$orderby_sql;
9930
9931
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
9932
								FROM spotter_output 
9933
								GROUP BY hour_name 
9934
								".$orderby_sql."
9935
								LIMIT 10 OFFSET 00";
9936
  */    
9937
		$query_data = array(':offset' => $offset);
9938
		} else {
9939
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9940
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9941
								GROUP BY spotter_output.airline_icao, hour_name 
9942
								".$orderby_sql;
9943
			$query_data = array(':offset' => $offset);
9944
		}
9945
		
9946
		$sth = $this->db->prepare($query);
9947
		$sth->execute($query_data);
9948
      
9949
		$hour_array = array();
9950
		$temp_array = array();
9951
        
9952
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9953
		{
9954
			$temp_array['hour_name'] = $row['hour_name'];
9955
			$temp_array['hour_count'] = $row['hour_count'];
9956
			$temp_array['airline_icao'] = $row['airline_icao'];
9957
          
9958
			$hour_array[] = $temp_array;
9959
		}
9960
9961
		return $hour_array;
9962
	}
9963
9964
9965
9966
	/**
9967
	* Counts all hours by airline
9968
	*
9969
	* @return Array the hour list
9970
	*
9971
	*/
9972
	public function countAllHoursByAirline($airline_icao, $filters = array())
9973
	{
9974
		global $globalTimezone, $globalDBdriver;
9975
		$filter_query = $this->getFilter($filters,true,true);
9976
		if ($globalTimezone != '') {
9977
			date_default_timezone_set($globalTimezone);
9978
			$datetime = new DateTime();
9979
			$offset = $datetime->format('P');
9980
		} else $offset = '+00:00';
9981
9982
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
9983
9984
		if ($globalDBdriver == 'mysql') {
9985
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9986
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
9987
								GROUP BY hour_name 
9988
								ORDER BY hour_name ASC";
9989
		} else {
9990
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9991
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
9992
								GROUP BY hour_name 
9993
								ORDER BY hour_name ASC";
9994
		}
9995
		
9996
		$sth = $this->db->prepare($query);
9997
		$sth->execute(array(':airline_icao' => $airline_icao,':offset' => $offset));
9998
      
9999
		$hour_array = array();
10000
		$temp_array = array();
10001
        
10002
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10003
		{
10004
			$temp_array['hour_name'] = $row['hour_name'];
10005
			$temp_array['hour_count'] = $row['hour_count'];
10006
          
10007
			$hour_array[] = $temp_array;
10008
		}
10009
10010
		return $hour_array;
10011
	}
10012
	
10013
	
10014
	
10015
	
10016
	/**
10017
	* Counts all hours by aircraft
10018
	*
10019
	* @return Array the hour list
10020
	*
10021
	*/
10022
	public function countAllHoursByAircraft($aircraft_icao, $filters = array())
10023
	{
10024
		global $globalTimezone, $globalDBdriver;
10025
		$filter_query = $this->getFilter($filters,true,true);
10026
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
10027
		if ($globalTimezone != '') {
10028
			date_default_timezone_set($globalTimezone);
10029
			$datetime = new DateTime();
10030
			$offset = $datetime->format('P');
10031
		} else $offset = '+00:00';
10032
10033
		if ($globalDBdriver == 'mysql') {
10034
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10035
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
10036
								GROUP BY hour_name 
10037
								ORDER BY hour_name ASC";
10038
		} else {
10039
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10040
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
10041
								GROUP BY hour_name 
10042
								ORDER BY hour_name ASC";
10043
		}
10044
		
10045
		$sth = $this->db->prepare($query);
10046
		$sth->execute(array(':aircraft_icao' => $aircraft_icao,':offset' => $offset));
10047
      
10048
		$hour_array = array();
10049
		$temp_array = array();
10050
        
10051
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10052
		{
10053
			$temp_array['hour_name'] = $row['hour_name'];
10054
			$temp_array['hour_count'] = $row['hour_count'];
10055
          
10056
			$hour_array[] = $temp_array;
10057
		}
10058
10059
		return $hour_array;
10060
	}
10061
	
10062
	
10063
	/**
10064
	* Counts all hours by aircraft registration
10065
	*
10066
	* @return Array the hour list
10067
	*
10068
	*/
10069
	public function countAllHoursByRegistration($registration, $filters = array())
10070
	{
10071
		global $globalTimezone, $globalDBdriver;
10072
		$filter_query = $this->getFilter($filters,true,true);
10073
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
10074
		if ($globalTimezone != '') {
10075
			date_default_timezone_set($globalTimezone);
10076
			$datetime = new DateTime();
10077
			$offset = $datetime->format('P');
10078
		} else $offset = '+00:00';
10079
10080
		if ($globalDBdriver == 'mysql') {
10081
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10082
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
10083
								GROUP BY hour_name 
10084
								ORDER BY hour_name ASC";
10085
		} else {
10086
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10087
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
10088
								GROUP BY hour_name 
10089
								ORDER BY hour_name ASC";
10090
		}
10091
		
10092
		$sth = $this->db->prepare($query);
10093
		$sth->execute(array(':registration' => $registration,':offset' => $offset));
10094
      
10095
		$hour_array = array();
10096
		$temp_array = array();
10097
        
10098
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10099
		{
10100
			$temp_array['hour_name'] = $row['hour_name'];
10101
			$temp_array['hour_count'] = $row['hour_count'];
10102
          
10103
			$hour_array[] = $temp_array;
10104
		}
10105
10106
		return $hour_array;
10107
	}
10108
	
10109
	
10110
	/**
10111
	* Counts all hours by airport
10112
	*
10113
	* @return Array the hour list
10114
	*
10115
	*/
10116
	public function countAllHoursByAirport($airport_icao, $filters = array())
10117
	{
10118
		global $globalTimezone, $globalDBdriver;
10119
		$filter_query = $this->getFilter($filters,true,true);
10120
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
10121
		if ($globalTimezone != '') {
10122
			date_default_timezone_set($globalTimezone);
10123
			$datetime = new DateTime();
10124
			$offset = $datetime->format('P');
10125
		} else $offset = '+00:00';
10126
10127
		if ($globalDBdriver == 'mysql') {
10128
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10129
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
10130
								GROUP BY hour_name 
10131
								ORDER BY hour_name ASC";
10132
		} else {
10133
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10134
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
10135
								GROUP BY hour_name 
10136
								ORDER BY hour_name ASC";
10137
		}
10138
		
10139
		$sth = $this->db->prepare($query);
10140
		$sth->execute(array(':airport_icao' => $airport_icao,':offset' => $offset));
10141
      
10142
		$hour_array = array();
10143
		$temp_array = array();
10144
        
10145
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10146
		{
10147
			$temp_array['hour_name'] = $row['hour_name'];
10148
			$temp_array['hour_count'] = $row['hour_count'];
10149
          
10150
			$hour_array[] = $temp_array;
10151
		}
10152
10153
		return $hour_array;
10154
	}
10155
	
10156
	
10157
	
10158
	/**
10159
	* Counts all hours by manufacturer
10160
	*
10161
	* @return Array the hour list
10162
	*
10163
	*/
10164
	public function countAllHoursByManufacturer($aircraft_manufacturer,$filters =array())
10165
	{
10166
		global $globalTimezone, $globalDBdriver;
10167
		$filter_query = $this->getFilter($filters,true,true);
10168
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
10169
		if ($globalTimezone != '') {
10170
			date_default_timezone_set($globalTimezone);
10171
			$datetime = new DateTime();
10172
			$offset = $datetime->format('P');
10173
		} else $offset = '+00:00';
10174
10175
		if ($globalDBdriver == 'mysql') {
10176
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10177
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
10178
								GROUP BY hour_name 
10179
								ORDER BY hour_name ASC";
10180
		} else {
10181
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10182
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
10183
								GROUP BY hour_name 
10184
								ORDER BY hour_name ASC";
10185
		}
10186
		
10187
		$sth = $this->db->prepare($query);
10188
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer,':offset' => $offset));
10189
      
10190
		$hour_array = array();
10191
		$temp_array = array();
10192
        
10193
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10194
		{
10195
			$temp_array['hour_name'] = $row['hour_name'];
10196
			$temp_array['hour_count'] = $row['hour_count'];
10197
          
10198
			$hour_array[] = $temp_array;
10199
		}
10200
10201
		return $hour_array;
10202
	}
10203
	
10204
	
10205
	
10206
	/**
10207
	* Counts all hours by date
10208
	*
10209
	* @return Array the hour list
10210
	*
10211
	*/
10212
	public function countAllHoursByDate($date, $filters = array())
10213
	{
10214
		global $globalTimezone, $globalDBdriver;
10215
		$filter_query = $this->getFilter($filters,true,true);
10216
		$date = filter_var($date,FILTER_SANITIZE_STRING);
10217
		if ($globalTimezone != '') {
10218
			date_default_timezone_set($globalTimezone);
10219
			$datetime = new DateTime($date);
10220
			$offset = $datetime->format('P');
10221
		} else $offset = '+00:00';
10222
10223
		if ($globalDBdriver == 'mysql') {
10224
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10225
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
10226
								GROUP BY hour_name 
10227
								ORDER BY hour_name ASC";
10228
		} else {
10229
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10230
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset, 'YYYY-mm-dd') = :date
10231
								GROUP BY hour_name 
10232
								ORDER BY hour_name ASC";
10233
		}
10234
		
10235
		$sth = $this->db->prepare($query);
10236
		$sth->execute(array(':date' => $date, ':offset' => $offset));
10237
      
10238
		$hour_array = array();
10239
		$temp_array = array();
10240
        
10241
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10242
		{
10243
			$temp_array['hour_name'] = $row['hour_name'];
10244
			$temp_array['hour_count'] = $row['hour_count'];
10245
          
10246
			$hour_array[] = $temp_array;
10247
		}
10248
10249
		return $hour_array;
10250
	}
10251
	
10252
	
10253
	
10254
	/**
10255
	* Counts all hours by a ident/callsign
10256
	*
10257
	* @return Array the hour list
10258
	*
10259
	*/
10260
	public function countAllHoursByIdent($ident, $filters = array())
10261
	{
10262
		global $globalTimezone, $globalDBdriver;
10263
		$filter_query = $this->getFilter($filters,true,true);
10264
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
10265
		if ($globalTimezone != '') {
10266
			date_default_timezone_set($globalTimezone);
10267
			$datetime = new DateTime();
10268
			$offset = $datetime->format('P');
10269
		} else $offset = '+00:00';
10270
10271
		if ($globalDBdriver == 'mysql') {
10272
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10273
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
10274
								GROUP BY hour_name 
10275
								ORDER BY hour_name ASC";
10276
		} else {
10277
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10278
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
10279
								GROUP BY hour_name 
10280
								ORDER BY hour_name ASC";
10281
		}
10282
      
10283
		
10284
		$sth = $this->db->prepare($query);
10285
		$sth->execute(array(':ident' => $ident,':offset' => $offset));
10286
      
10287
		$hour_array = array();
10288
		$temp_array = array();
10289
        
10290
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10291
		{
10292
			$temp_array['hour_name'] = $row['hour_name'];
10293
			$temp_array['hour_count'] = $row['hour_count'];
10294
          
10295
			$hour_array[] = $temp_array;
10296
		}
10297
10298
		return $hour_array;
10299
	}
10300
	
10301
	/**
10302
	* Counts all hours by a owner
10303
	*
10304
	* @return Array the hour list
10305
	*
10306
	*/
10307
	public function countAllHoursByOwner($owner, $filters = array())
10308
	{
10309
		global $globalTimezone, $globalDBdriver;
10310
		$filter_query = $this->getFilter($filters,true,true);
10311
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
10312
		if ($globalTimezone != '') {
10313
			date_default_timezone_set($globalTimezone);
10314
			$datetime = new DateTime();
10315
			$offset = $datetime->format('P');
10316
		} else $offset = '+00:00';
10317
10318
		if ($globalDBdriver == 'mysql') {
10319
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10320
								FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
10321
								GROUP BY hour_name 
10322
								ORDER BY hour_name ASC";
10323
		} else {
10324
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10325
								FROM spotter_output".$filter_query." spotter_output.owner_name = :owner 
10326
								GROUP BY hour_name 
10327
								ORDER BY hour_name ASC";
10328
		}
10329
      
10330
		
10331
		$sth = $this->db->prepare($query);
10332
		$sth->execute(array(':owner' => $owner,':offset' => $offset));
10333
      
10334
		$hour_array = array();
10335
		$temp_array = array();
10336
        
10337
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10338
		{
10339
			$temp_array['hour_name'] = $row['hour_name'];
10340
			$temp_array['hour_count'] = $row['hour_count'];
10341
          
10342
			$hour_array[] = $temp_array;
10343
		}
10344
10345
		return $hour_array;
10346
	}
10347
	
10348
	/**
10349
	* Counts all hours by a pilot
10350
	*
10351
	* @return Array the hour list
10352
	*
10353
	*/
10354
	public function countAllHoursByPilot($pilot, $filters = array())
10355
	{
10356
		global $globalTimezone, $globalDBdriver;
10357
		$filter_query = $this->getFilter($filters,true,true);
10358
		$pilot = filter_var($pilot,FILTER_SANITIZE_STRING);
10359
		if ($globalTimezone != '') {
10360
			date_default_timezone_set($globalTimezone);
10361
			$datetime = new DateTime();
10362
			$offset = $datetime->format('P');
10363
		} else $offset = '+00:00';
10364
10365
		if ($globalDBdriver == 'mysql') {
10366
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10367
								FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
10368
								GROUP BY hour_name 
10369
								ORDER BY hour_name ASC";
10370
		} else {
10371
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10372
								FROM spotter_output".$filter_query." (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot) 
10373
								GROUP BY hour_name 
10374
								ORDER BY hour_name ASC";
10375
		}
10376
      
10377
		
10378
		$sth = $this->db->prepare($query);
10379
		$sth->execute(array(':pilot' => $pilot,':offset' => $offset));
10380
      
10381
		$hour_array = array();
10382
		$temp_array = array();
10383
        
10384
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10385
		{
10386
			$temp_array['hour_name'] = $row['hour_name'];
10387
			$temp_array['hour_count'] = $row['hour_count'];
10388
          
10389
			$hour_array[] = $temp_array;
10390
		}
10391
10392
		return $hour_array;
10393
	}
10394
	
10395
	
10396
	
10397
	/**
10398
	* Counts all hours by route
10399
	*
10400
	* @return Array the hour list
10401
	*
10402
	*/
10403
	public function countAllHoursByRoute($departure_airport_icao, $arrival_airport_icao, $filters =array())
10404
	{
10405
		global $globalTimezone, $globalDBdriver;
10406
		$filter_query = $this->getFilter($filters,true,true);
10407
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
10408
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
10409
		if ($globalTimezone != '') {
10410
			date_default_timezone_set($globalTimezone);
10411
			$datetime = new DateTime();
10412
			$offset = $datetime->format('P');
10413
		} else $offset = '+00:00';
10414
10415
		if ($globalDBdriver == 'mysql') {
10416
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10417
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
10418
								GROUP BY hour_name 
10419
								ORDER BY hour_name ASC";
10420
		} else {
10421
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10422
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
10423
								GROUP BY hour_name 
10424
								ORDER BY hour_name ASC";
10425
		}
10426
		
10427
		$sth = $this->db->prepare($query);
10428
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao,':offset' => $offset));
10429
      
10430
		$hour_array = array();
10431
		$temp_array = array();
10432
        
10433
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10434
		{
10435
			$temp_array['hour_name'] = $row['hour_name'];
10436
			$temp_array['hour_count'] = $row['hour_count'];
10437
          
10438
			$hour_array[] = $temp_array;
10439
		}
10440
10441
		return $hour_array;
10442
	}
10443
	
10444
	
10445
	/**
10446
	* Counts all hours by country
10447
	*
10448
	* @return Array the hour list
10449
	*
10450
	*/
10451
	public function countAllHoursByCountry($country, $filters = array())
10452
	{
10453
		global $globalTimezone, $globalDBdriver;
10454
		$filter_query = $this->getFilter($filters,true,true);
10455
		$country = filter_var($country,FILTER_SANITIZE_STRING);
10456
		if ($globalTimezone != '') {
10457
			date_default_timezone_set($globalTimezone);
10458
			$datetime = new DateTime();
10459
			$offset = $datetime->format('P');
10460
		} else $offset = '+00:00';
10461
10462
		if ($globalDBdriver == 'mysql') {
10463
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10464
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
10465
								GROUP BY hour_name 
10466
								ORDER BY hour_name ASC";
10467
		} else {
10468
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10469
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
10470
								GROUP BY hour_name 
10471
								ORDER BY hour_name ASC";
10472
		}
10473
		
10474
		$sth = $this->db->prepare($query);
10475
		$sth->execute(array(':country' => $country,':offset' => $offset));
10476
      
10477
		$hour_array = array();
10478
		$temp_array = array();
10479
        
10480
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10481
		{
10482
			$temp_array['hour_name'] = $row['hour_name'];
10483
			$temp_array['hour_count'] = $row['hour_count'];
10484
          
10485
			$hour_array[] = $temp_array;
10486
		}
10487
10488
		return $hour_array;
10489
	}
10490
10491
10492
10493
10494
	/**
10495
	* Counts all aircraft that have flown over
10496
	*
10497
	* @return Integer the number of aircrafts
10498
	*
10499
	*/
10500
	public function countOverallAircrafts($filters = array(),$year = '',$month = '')
10501
	{
10502
		global $globalDBdriver;
10503
		$filter_query = $this->getFilter($filters,true,true);
10504
		$query  = "SELECT COUNT(DISTINCT spotter_output.aircraft_icao) AS aircraft_count  
10505
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''";
10506
		$query_values = array();
10507
		if ($year != '') {
10508
			if ($globalDBdriver == 'mysql') {
10509
				$query .= " AND YEAR(spotter_output.date) = :year";
10510
				$query_values = array_merge($query_values,array(':year' => $year));
10511
			} else {
10512
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10513
				$query_values = array_merge($query_values,array(':year' => $year));
10514
			}
10515
		}
10516
		if ($month != '') {
10517
			if ($globalDBdriver == 'mysql') {
10518
				$query .= " AND MONTH(spotter_output.date) = :month";
10519
				$query_values = array_merge($query_values,array(':month' => $month));
10520
			} else {
10521
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10522
				$query_values = array_merge($query_values,array(':month' => $month));
10523
			}
10524
		}
10525
10526
		$sth = $this->db->prepare($query);
10527
		$sth->execute($query_values);
10528
		return $sth->fetchColumn();
10529
	}
10530
10531
	/**
10532
	* Counts all flight that really arrival
10533
	*
10534
	* @return Integer the number of aircrafts
10535
	*
10536
	*/
10537
	public function countOverallArrival($filters = array(),$year = '',$month = '')
10538
	{
10539
		global $globalDBdriver;
10540
		$filter_query = $this->getFilter($filters,true,true);
10541
		$query  = "SELECT COUNT(spotter_output.real_arrival_airport_icao) AS arrival_count  
10542
                    FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> ''";
10543
		$query_values = array();
10544
		if ($year != '') {
10545
			if ($globalDBdriver == 'mysql') {
10546
				$query .= " AND YEAR(spotter_output.date) = :year";
10547
				$query_values = array_merge($query_values,array(':year' => $year));
10548
			} else {
10549
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10550
				$query_values = array_merge($query_values,array(':year' => $year));
10551
			}
10552
		}
10553
		if ($month != '') {
10554
			if ($globalDBdriver == 'mysql') {
10555
				$query .= " AND MONTH(spotter_output.date) = :month";
10556
				$query_values = array_merge($query_values,array(':month' => $month));
10557
			} else {
10558
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10559
				$query_values = array_merge($query_values,array(':month' => $month));
10560
			}
10561
		}
10562
		
10563
		$sth = $this->db->prepare($query);
10564
		$sth->execute($query_values);
10565
		return $sth->fetchColumn();
10566
	}
10567
10568
	/**
10569
	* Counts all pilots that have flown over
10570
	*
10571
	* @return Integer the number of pilots
10572
	*
10573
	*/
10574
	public function countOverallPilots($filters = array(),$year = '',$month = '')
10575
	{
10576
		global $globalDBdriver;
10577
		$filter_query = $this->getFilter($filters,true,true);
10578
		$query  = "SELECT COUNT(DISTINCT spotter_output.pilot_id) AS pilot_count  
10579
                    FROM spotter_output".$filter_query." spotter_output.pilot_id <> ''";
10580
		$query_values = array();
10581
		if ($year != '') {
10582
			if ($globalDBdriver == 'mysql') {
10583
				$query .= " AND YEAR(spotter_output.date) = :year";
10584
				$query_values = array_merge($query_values,array(':year' => $year));
10585
			} else {
10586
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10587
				$query_values = array_merge($query_values,array(':year' => $year));
10588
			}
10589
		}
10590
		if ($month != '') {
10591
			if ($globalDBdriver == 'mysql') {
10592
				$query .= " AND MONTH(spotter_output.date) = :month";
10593
				$query_values = array_merge($query_values,array(':month' => $month));
10594
			} else {
10595
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10596
				$query_values = array_merge($query_values,array(':month' => $month));
10597
			}
10598
		}
10599
		$sth = $this->db->prepare($query);
10600
		$sth->execute($query_values);
10601
		return $sth->fetchColumn();
10602
	}
10603
10604
	/**
10605
	* Counts all owners that have flown over
10606
	*
10607
	* @return Integer the number of owners
10608
	*
10609
	*/
10610
	public function countOverallOwners($filters = array(),$year = '',$month = '')
10611
	{
10612
		global $globalDBdriver;
10613
		$filter_query = $this->getFilter($filters,true,true);
10614
		$query  = "SELECT COUNT(DISTINCT spotter_output.owner_name) AS owner_count  
10615
                    FROM spotter_output".$filter_query." spotter_output.owner_name <> ''";
10616
		$query_values = array();
10617
		if ($year != '') {
10618
			if ($globalDBdriver == 'mysql') {
10619
				$query .= " AND YEAR(spotter_output.date) = :year";
10620
				$query_values = array_merge($query_values,array(':year' => $year));
10621
			} else {
10622
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10623
				$query_values = array_merge($query_values,array(':year' => $year));
10624
			}
10625
		}
10626
		if ($month != '') {
10627
			if ($globalDBdriver == 'mysql') {
10628
				$query .= " AND MONTH(spotter_output.date) = :month";
10629
				$query_values = array_merge($query_values,array(':month' => $month));
10630
			} else {
10631
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10632
				$query_values = array_merge($query_values,array(':month' => $month));
10633
			}
10634
		}
10635
		$sth = $this->db->prepare($query);
10636
		$sth->execute($query_values);
10637
		return $sth->fetchColumn();
10638
	}
10639
	
10640
	
10641
	/**
10642
	* Counts all flights that have flown over
10643
	*
10644
	* @return Integer the number of flights
10645
	*
10646
	*/
10647
	public function countOverallFlights($filters = array(),$year = '',$month = '')
10648
	{
10649
		global $globalDBdriver;
10650
		$queryi  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count FROM spotter_output";
10651
		$query_values = array();
10652
		$query = '';
10653
		if ($year != '') {
10654
			if ($globalDBdriver == 'mysql') {
10655
				$query .= " AND YEAR(spotter_output.date) = :year";
10656
				$query_values = array_merge($query_values,array(':year' => $year));
10657
			} else {
10658
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10659
				$query_values = array_merge($query_values,array(':year' => $year));
10660
			}
10661
		}
10662
		if ($month != '') {
10663
			if ($globalDBdriver == 'mysql') {
10664
				$query .= " AND MONTH(spotter_output.date) = :month";
10665
				$query_values = array_merge($query_values,array(':month' => $month));
10666
			} else {
10667
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10668
				$query_values = array_merge($query_values,array(':month' => $month));
10669
			}
10670
		}
10671
		if (empty($query_values)) $queryi .= $this->getFilter($filters);
10672
		else $queryi .= $this->getFilter($filters,true,true).substr($query,4);
10673
		
10674
		//echo $query;
10675
		$sth = $this->db->prepare($queryi);
10676
		$sth->execute($query_values);
10677
		return $sth->fetchColumn();
10678
	}
10679
	
10680
	/**
10681
	* Counts all military flights that have flown over
10682
	*
10683
	* @return Integer the number of flights
10684
	*
10685
	*/
10686
	public function countOverallMilitaryFlights($filters = array(),$year = '',$month = '')
10687
	{
10688
		global $globalDBdriver;
10689
		$filter_query = $this->getFilter($filters,true,true);
10690
		$query  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count  
10691
                    FROM airlines,spotter_output".$filter_query." spotter_output.airline_icao = airlines.icao AND airlines.type = 'military'";
10692
		$query_values = array();
10693
		if ($year != '') {
10694
			if ($globalDBdriver == 'mysql') {
10695
				$query .= " AND YEAR(spotter_output.date) = :year";
10696
				$query_values = array_merge($query_values,array(':year' => $year));
10697
			} else {
10698
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10699
				$query_values = array_merge($query_values,array(':year' => $year));
10700
			}
10701
		}
10702
		if ($month != '') {
10703
			if ($globalDBdriver == 'mysql') {
10704
				$query .= " AND MONTH(spotter_output.date) = :month";
10705
				$query_values = array_merge($query_values,array(':month' => $month));
10706
			} else {
10707
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10708
				$query_values = array_merge($query_values,array(':month' => $month));
10709
			}
10710
		}
10711
      
10712
		$sth = $this->db->prepare($query);
10713
		$sth->execute($query_values);
10714
		return $sth->fetchColumn();
10715
	}
10716
	
10717
	
10718
	
10719
	/**
10720
	* Counts all airlines that have flown over
10721
	*
10722
	* @return Integer the number of airlines
10723
	*
10724
	*/
10725
	public function countOverallAirlines($filters = array(),$year = '',$month = '')
10726
	{
10727
		global $globalDBdriver;
10728
		$queryi  = "SELECT COUNT(DISTINCT spotter_output.airline_name) AS airline_count 
10729
							FROM spotter_output";
10730
      
10731
		$query_values = array();
10732
		$query = '';
10733
		if ($year != '') {
10734
			if ($globalDBdriver == 'mysql') {
10735
				$query .= " AND YEAR(spotter_output.date) = :year";
10736
				$query_values = array_merge($query_values,array(':year' => $year));
10737
			} else {
10738
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10739
				$query_values = array_merge($query_values,array(':year' => $year));
10740
			}
10741
		}
10742
		if ($month != '') {
10743
			if ($globalDBdriver == 'mysql') {
10744
				$query .= " AND MONTH(spotter_output.date) = :month";
10745
				$query_values = array_merge($query_values,array(':month' => $month));
10746
			} else {
10747
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10748
				$query_values = array_merge($query_values,array(':month' => $month));
10749
			}
10750
		}
10751
                if ($query == '') $queryi .= $this->getFilter($filters);
10752
                else $queryi .= $this->getFilter($filters,true,true).substr($query,4);
10753
10754
10755
		$sth = $this->db->prepare($queryi);
10756
		$sth->execute($query_values);
10757
		return $sth->fetchColumn();
10758
	}
10759
10760
  
10761
	/**
10762
	* Counts all hours of today
10763
	*
10764
	* @return Array the hour list
10765
	*
10766
	*/
10767
	public function countAllHoursFromToday($filters = array())
10768
	{
10769
		global $globalTimezone, $globalDBdriver;
10770
		$filter_query = $this->getFilter($filters,true,true);
10771
		if ($globalTimezone != '') {
10772
			date_default_timezone_set($globalTimezone);
10773
			$datetime = new DateTime();
10774
			$offset = $datetime->format('P');
10775
		} else $offset = '+00:00';
10776
10777
		if ($globalDBdriver == 'mysql') {
10778
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10779
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = CURDATE()
10780
								GROUP BY hour_name 
10781
								ORDER BY hour_name ASC";
10782
		} else {
10783
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10784
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = CAST(NOW() AS date)
10785
								GROUP BY hour_name 
10786
								ORDER BY hour_name ASC";
10787
		}
10788
		
10789
		$sth = $this->db->prepare($query);
10790
		$sth->execute(array(':offset' => $offset));
10791
      
10792
		$hour_array = array();
10793
		$temp_array = array();
10794
        
10795
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10796
		{
10797
			$temp_array['hour_name'] = $row['hour_name'];
10798
			$temp_array['hour_count'] = $row['hour_count'];
10799
			$hour_array[] = $temp_array;
10800
		}
10801
10802
		return $hour_array;
10803
	}
10804
    
10805
	/**
10806
	* Gets all the spotter information based on calculated upcoming flights
10807
	*
10808
	* @return Array the spotter information
10809
	*
10810
	*/
10811
	public function getUpcomingFlights($limit = '', $sort = '', $filters = array())
10812
	{
10813
		global $global_query, $globalDBdriver, $globalTimezone;
10814
		$filter_query = $this->getFilter($filters,true,true);
10815
		date_default_timezone_set('UTC');
10816
		$limit_query = '';
10817
		if ($limit != "")
10818
		{
10819
			$limit_array = explode(",", $limit);
10820
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
10821
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
10822
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
10823
			{
10824
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
10825
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
10826
			}
10827
		}
10828
		$currentHour = date("G");
10829
		$next3Hours = date("G", strtotime("+3 hour"));
10830
		//if the next 3 hours is already equal to/past midnight, we limit it to stay there, otherwise the query will fail
10831
		if ($currentHour >= 21 && $next3Hours >= 00)
10832
		{
10833
			$next3Hours = 24;
10834
		}
10835
		$currentDayofWeek = date("l");
10836
		if ($globalDBdriver == 'mysql') {
10837
			if ($sort != "")
10838
			{
10839
				$search_orderby_array = $this->getOrderBy();
10840
				$orderby_query = $search_orderby_array[$sort]['sql'];
10841
			} else {
10842
				$orderby_query = " ORDER BY HOUR(spotter_output.date) ASC";
10843
			}
10844
/*
10845
			$query = "SELECT spotter_output.*, count(spotter_output.ident) as ident_count
10846
			    FROM spotter_output
10847
			    WHERE DAYNAME(spotter_output.date) = '$currentDayofWeek' AND HOUR(spotter_output.date) >= '$currentHour' AND HOUR(spotter_output.date) <= '$next3Hours' AND spotter_output.ident <> '' AND format_source <> 'aprs'
10848
			    GROUP BY spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time HAVING count(spotter_output.ident) > 10 $orderby_query";
10849
*/
10850
/*			$query = "SELECT spotter_output.ident, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time, count(spotter_output.ident) as ident_count
10851
			    FROM spotter_output
10852
			    WHERE DAYNAME(spotter_output.date) = '$currentDayofWeek' AND HOUR(spotter_output.date) >= '$currentHour' AND HOUR(spotter_output.date) <= '$next3Hours' AND spotter_output.ident <> '' AND format_source <> 'aprs'
10853
			    GROUP BY spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time HAVING count(spotter_output.ident) > 10 $orderby_query";
10854
*/
10855
			$query = "SELECT spotter_output.ident, spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time, count(spotter_output.ident) as ident_count 
10856
			    FROM spotter_output".$filter_query." DAYNAME(spotter_output.date) = '$currentDayofWeek' AND HOUR(spotter_output.date) >= '$currentHour' AND HOUR(spotter_output.date) <= '$next3Hours' AND spotter_output.ident <> '' AND format_source <> 'aprs'
10857
			    GROUP BY spotter_output.ident,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time
10858
			    HAVING count(spotter_output.ident) > 5$orderby_query";
10859
10860
			$spotter_array = $this->getDataFromDB($query.$limit_query);
10861
		} else {
10862
			if ($sort != "")
10863
			{
10864
				$search_orderby_array = $this->getOrderBy();
10865
				$orderby_query = $search_orderby_array[$sort]['sql'];
10866
			} else {
10867
				$orderby_query = " ORDER BY to_char(spotter_output.date,'HH') ASC";
10868
			}
10869
			$query = "SELECT spotter_output.ident, spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time, count(spotter_output.ident) as ident_count, to_char(spotter_output.date,'HH') 
10870
			    FROM spotter_output".$filter_query." DATE_PART('dow', spotter_output.date) = DATE_PART('dow', date 'now' AT TIME ZONE :timezone) AND EXTRACT (HOUR FROM spotter_output.date AT TIME ZONE :timezone) >= '$currentHour' AND EXTRACT (HOUR FROM spotter_output.date AT TIME ZONE :timezone) <= '$next3Hours' AND ident <> '' 
10871
			    GROUP BY spotter_output.ident,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time, to_char(spotter_output.date,'HH')
10872
			    HAVING count(spotter_output.ident) > 5$orderby_query";
10873
			//echo $query;
10874
			$spotter_array = $this->getDataFromDB($query.$limit_query,array(':timezone' => $globalTimezone));
10875
			/*
10876
			$sth = $this->db->prepare($query);
10877
			$sth->execute(array(':timezone' => $globalTimezone));
10878
			return $sth->fetchAll(PDO::FETCH_ASSOC);
10879
			*/
10880
		}
10881
		return $spotter_array;
10882
	}
10883
    
10884
    
10885
     /**
10886
	* Gets the Barrie Spotter ID based on the FlightAware ID
10887
	*
10888
	* @return Integer the Barrie Spotter ID
10889
q	*
10890
	*/
10891
	public function getSpotterIDBasedOnFlightAwareID($flightaware_id)
10892
	{
10893
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
10894
10895
		$query  = "SELECT spotter_output.spotter_id
10896
								FROM spotter_output 
10897
								WHERE spotter_output.flightaware_id = '".$flightaware_id."'";
10898
        
10899
		
10900
		$sth = $this->db->prepare($query);
10901
		$sth->execute();
10902
10903
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10904
		{
10905
			return $row['spotter_id'];
10906
		}
10907
	}
10908
  
10909
 
10910
	/**
10911
	* Parses a date string
10912
	*
10913
	* @param String $dateString the date string
10914
	* @param String $timezone the timezone of a user
10915
	* @return Array the time information
10916
	*
10917
	*/
10918
	public function parseDateString($dateString, $timezone = '')
10919
	{
10920
		$time_array = array();
10921
	
10922
		if ($timezone != "")
10923
		{
10924
			date_default_timezone_set($timezone);
10925
		}
10926
		
10927
		$current_date = date("Y-m-d H:i:s");
10928
		$date = date("Y-m-d H:i:s",strtotime($dateString." UTC"));
10929
		
10930
		$diff = abs(strtotime($current_date) - strtotime($date));
10931
10932
		$time_array['years'] = floor($diff / (365*60*60*24)); 
10933
		$years = $time_array['years'];
10934
		
10935
		$time_array['months'] = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
10936
		$months = $time_array['months'];
10937
		
10938
		$time_array['days'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
10939
		$days = $time_array['days'];
10940
		$time_array['hours'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24)/ (60*60));
10941
		$hours = $time_array['hours'];
10942
		$time_array['minutes'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60)/ 60);
10943
		$minutes = $time_array['minutes'];
10944
		$time_array['seconds'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60 - $minutes*60));  
10945
		
10946
		return $time_array;	
10947
	}	
10948
	
10949
	
10950
	
10951
	
10952
	/**
10953
	* Parses the direction degrees to working
10954
	*
10955
	* @param Float $direction the direction in degrees
10956
	* @return Array the direction information
10957
	*
10958
	*/
10959
	public function parseDirection($direction = 0)
10960
	{
10961
		if ($direction == '') $direction = 0;
10962
		$direction_array = array();
10963
		$temp_array = array();
10964
10965
		if ($direction == 360 || ($direction >= 0 && $direction < 22.5))
10966
		{
10967
			$temp_array['direction_degree'] = $direction;
10968
			$temp_array['direction_shortname'] = "N";
10969
			$temp_array['direction_fullname'] = "North";
10970
		} elseif ($direction >= 22.5 && $direction < 45){
10971
			$temp_array['direction_degree'] = $direction;
10972
			$temp_array['direction_shortname'] = "NNE";
10973
			$temp_array['direction_fullname'] = "North-Northeast";
10974
		} elseif ($direction >= 45 && $direction < 67.5){
10975
			$temp_array['direction_degree'] = $direction;
10976
			$temp_array['direction_shortname'] = "NE";
10977
			$temp_array['direction_fullname'] = "Northeast";
10978
		} elseif ($direction >= 67.5 && $direction < 90){
10979
			$temp_array['direction_degree'] = $direction;
10980
			$temp_array['direction_shortname'] = "ENE";
10981
			$temp_array['direction_fullname'] = "East-Northeast";
10982
		} elseif ($direction >= 90 && $direction < 112.5){
10983
			$temp_array['direction_degree'] = $direction;
10984
			$temp_array['direction_shortname'] = "E";
10985
			$temp_array['direction_fullname'] = "East";
10986
		} elseif ($direction >= 112.5 && $direction < 135){
10987
			$temp_array['direction_degree'] = $direction;
10988
			$temp_array['direction_shortname'] = "ESE";
10989
			$temp_array['direction_fullname'] = "East-Southeast";
10990
		} elseif ($direction >= 135 && $direction < 157.5){
10991
			$temp_array['direction_degree'] = $direction;
10992
			$temp_array['direction_shortname'] = "SE";
10993
			$temp_array['direction_fullname'] = "Southeast";
10994
		} elseif ($direction >= 157.5 && $direction < 180){
10995
			$temp_array['direction_degree'] = $direction;
10996
			$temp_array['direction_shortname'] = "SSE";
10997
			$temp_array['direction_fullname'] = "South-Southeast";
10998
		} elseif ($direction >= 180 && $direction < 202.5){
10999
			$temp_array['direction_degree'] = $direction;
11000
			$temp_array['direction_shortname'] = "S";
11001
			$temp_array['direction_fullname'] = "South";
11002
		} elseif ($direction >= 202.5 && $direction < 225){
11003
			$temp_array['direction_degree'] = $direction;
11004
			$temp_array['direction_shortname'] = "SSW";
11005
			$temp_array['direction_fullname'] = "South-Southwest";
11006
		} elseif ($direction >= 225 && $direction < 247.5){
11007
			$temp_array['direction_degree'] = $direction;
11008
			$temp_array['direction_shortname'] = "SW";
11009
			$temp_array['direction_fullname'] = "Southwest";
11010
		} elseif ($direction >= 247.5 && $direction < 270){
11011
			$temp_array['direction_degree'] = $direction;
11012
			$temp_array['direction_shortname'] = "WSW";
11013
			$temp_array['direction_fullname'] = "West-Southwest";
11014
		} elseif ($direction >= 270 && $direction < 292.5){
11015
			$temp_array['direction_degree'] = $direction;
11016
			$temp_array['direction_shortname'] = "W";
11017
			$temp_array['direction_fullname'] = "West";
11018
		} elseif ($direction >= 292.5 && $direction < 315){
11019
			$temp_array['direction_degree'] = $direction;
11020
			$temp_array['direction_shortname'] = "WNW";
11021
			$temp_array['direction_fullname'] = "West-Northwest";
11022
		} elseif ($direction >= 315 && $direction < 337.5){
11023
			$temp_array['direction_degree'] = $direction;
11024
			$temp_array['direction_shortname'] = "NW";
11025
			$temp_array['direction_fullname'] = "Northwest";
11026
		} elseif ($direction >= 337.5 && $direction < 360){
11027
			$temp_array['direction_degree'] = $direction;
11028
			$temp_array['direction_shortname'] = "NNW";
11029
			$temp_array['direction_fullname'] = "North-Northwest";
11030
		}
11031
		$direction_array[] = $temp_array;
11032
		return $direction_array;
11033
	}
11034
	
11035
	
11036
	/**
11037
	* Gets the aircraft registration
11038
	*
11039
	* @param String $flightaware_id the flight aware id
11040
	* @return String the aircraft registration
11041
	*
11042
	*/
11043
	
11044
	public function getAircraftRegistration($flightaware_id)
11045
	{
11046
		global $globalFlightAwareUsername, $globalFlightAwarePassword;
11047
        
11048
		$options = array(
11049
			'trace' => true,
11050
			'exceptions' => 0,
11051
			'login' => $globalFlightAwareUsername,
11052
			'password' => $globalFlightAwarePassword,
11053
		);
11054
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
11055
		
11056
		$params = array('faFlightID' => $flightaware_id);
11057
		$result = $client->AirlineFlightInfo($params);
11058
		
11059
		if (isset($result->AirlineFlightInfoResult))
11060
		{
11061
			$registration = $result->AirlineFlightInfoResult->tailnumber;
11062
		} else return '';
11063
		
11064
		$registration = $this->convertAircraftRegistration($registration);
11065
		
11066
		return $registration;
11067
	}
11068
11069
11070
	/**
11071
	* Gets the aircraft registration from ModeS
11072
	*
11073
	* @param String $aircraft_modes the flight ModeS in hex
11074
	* @return String the aircraft registration
11075
	*
11076
	*/
11077
	public function getAircraftRegistrationBymodeS($aircraft_modes)
11078
	{
11079
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
11080
	
11081
		$query  = "SELECT aircraft_modes.Registration FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes ORDER BY FirstCreated DESC LIMIT 1";
11082
		
11083
		$sth = $this->db->prepare($query);
11084
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
11085
    
11086
		$row = $sth->fetch(PDO::FETCH_ASSOC);
11087
		$sth->closeCursor();
11088
		if (count($row) > 0) {
11089
		    //return $row['Registration'];
11090
		    return $row['registration'];
11091
		} else return '';
11092
	
11093
	}
11094
11095
	/**
11096
	* Gets the aircraft type from ModeS
11097
	*
11098
	* @param String $aircraft_modes the flight ModeS in hex
11099
	* @return String the aircraft type
11100
	*
11101
	*/
11102
	public function getAircraftTypeBymodeS($aircraft_modes)
11103
	{
11104
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
11105
	
11106
		$query  = "SELECT aircraft_modes.type_flight FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes ORDER BY FirstCreated DESC LIMIT 1";
11107
		
11108
		$sth = $this->db->prepare($query);
11109
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
11110
    
11111
		$row = $sth->fetch(PDO::FETCH_ASSOC);
11112
		$sth->closeCursor();
11113
		if (count($row) > 0) {
11114
		    if ($row['type_flight'] == null) return '';
11115
		    else return $row['type_flight'];
11116
		} else return '';
11117
	
11118
	}
11119
11120
	/**
11121
	* Gets Country from latitude/longitude
11122
	*
11123
	* @param Float $latitude latitute of the flight
11124
	* @param Float $longitude longitute of the flight
11125
	* @return String the countrie
11126
	*/
11127
	public function getCountryFromLatitudeLongitude($latitude,$longitude)
11128
	{
11129
		global $globalDBdriver, $globalDebug;
11130
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
11131
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
11132
	
11133
		$Connection = new Connection($this->db);
11134
		if (!$Connection->tableExists('countries')) return '';
11135
	
11136
		try {
11137
			/*
11138
			if ($globalDBdriver == 'mysql') {
11139
				//$query  = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(:latitude :longitude)'), ogc_geom) LIMIT 1";
11140
				$query = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(".$longitude.' '.$latitude.")'), ogc_geom) LIMIT 1";
11141
			}
11142
			*/
11143
			// This query seems to work both for MariaDB and PostgreSQL
11144
			$query = "SELECT name,iso2,iso3 FROM countries WHERE ST_Within(ST_GeomFromText('POINT(".$longitude." ".$latitude.")',4326), ogc_geom) LIMIT 1";
11145
		
11146
			$sth = $this->db->prepare($query);
11147
			//$sth->execute(array(':latitude' => $latitude,':longitude' => $longitude));
11148
			$sth->execute();
11149
    
11150
			$row = $sth->fetch(PDO::FETCH_ASSOC);
11151
			$sth->closeCursor();
11152
			if (count($row) > 0) {
11153
				return $row;
11154
			} else return '';
11155
		} catch (PDOException $e) {
11156
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
11157
			return '';
11158
		}
11159
	
11160
	}
11161
11162
	/**
11163
	* Gets Country from iso2
11164
	*
11165
	* @param String $iso2 ISO2 country code
11166
	* @return String the countrie
11167
	*/
11168
	public function getCountryFromISO2($iso2)
11169
	{
11170
		global $globalDBdriver, $globalDebug;
11171
		$iso2 = filter_var($iso2,FILTER_SANITIZE_STRING);
11172
	
11173
		$Connection = new Connection($this->db);
11174
		if (!$Connection->tableExists('countries')) return '';
11175
	
11176
		try {
11177
			$query = "SELECT name,iso2,iso3 FROM countries WHERE iso2 = :iso2 LIMIT 1";
11178
		
11179
			$sth = $this->db->prepare($query);
11180
			$sth->execute(array(':iso2' => $iso2));
11181
    
11182
			$row = $sth->fetch(PDO::FETCH_ASSOC);
11183
			$sth->closeCursor();
11184
			if (count($row) > 0) {
11185
				return $row;
11186
			} else return '';
11187
		} catch (PDOException $e) {
11188
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
11189
			return '';
11190
		}
11191
	
11192
	}
11193
11194
	/**
11195
	* converts the registration code using the country prefix
11196
	*
11197
	* @param String $registration the aircraft registration
11198
	* @return String the aircraft registration
11199
	*
11200
	*/
11201
	public function convertAircraftRegistration($registration)
11202
	{
11203
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11204
		$registration_prefix = '';
11205
		$registration_1 = substr($registration, 0, 1);
11206
		$registration_2 = substr($registration, 0, 2);
11207
11208
		//first get the prefix based on two characters
11209
		$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_2";
11210
      
11211
		
11212
		$sth = $this->db->prepare($query);
11213
		$sth->execute(array(':registration_2' => $registration_2));
11214
        
11215
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11216
		{
11217
			$registration_prefix = $row['registration_prefix'];
11218
		}
11219
11220
		//if we didn't find a two chracter prefix lets just search the one with one character
11221
		if ($registration_prefix == '')
11222
		{
11223
			$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_1";
11224
			$sth = $this->db->prepare($query);
11225
			$sth->execute(array(':registration_1' => $registration_1));
11226
	        
11227
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11228
			{
11229
				$registration_prefix = $row['registration_prefix'];
11230
			}
11231
		}
11232
11233
		//determine which characters are being used and convert the registration code appropiately
11234
		if (strlen($registration_prefix) == 1)
11235
		{
11236
			if (0 === strpos($registration, 'N')) {
11237
				$registration = preg_replace("/^(.{1})/", "$1", $registration);
11238
			} else {
11239
				$registration = preg_replace("/^(.{1})/", "$1-", $registration);
11240
			}
11241
		} else if(strlen($registration_prefix) == 2){
11242
			if (0 === strpos($registration, 'N')) {
11243
				$registration = preg_replace("/^(.{2})/", "$1", $registration);
11244
			} else {
11245
				$registration = preg_replace("/^(.{2})/", "$1-", $registration);
11246
			}
11247
		}
11248
		return $registration;
11249
	}
11250
11251
	/**
11252
	* Country from the registration code
11253
	*
11254
	* @param String $registration the aircraft registration
11255
	* @return String the country
11256
	*
11257
	*/
11258
	public function countryFromAircraftRegistration($registration)
11259
	{
11260
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11261
		
11262
		$registration_prefix = '';
11263
		$registration_test = explode('-',$registration);
11264
		$country = '';
11265
		if ($registration_test[0] != $registration) {
11266
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11267
	      
11268
			$sth = $this->db->prepare($query);
11269
			$sth->execute(array(':registration_1' => $registration_test[0]));
11270
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11271
			{
11272
				//$registration_prefix = $row['registration_prefix'];
11273
				$country = $row['country'];
11274
			}
11275
		} else {
11276
    			$registration_1 = substr($registration, 0, 1);
11277
		        $registration_2 = substr($registration, 0, 2);
11278
11279
			$country = '';
11280
			//first get the prefix based on two characters
11281
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
11282
      
11283
			
11284
			$sth = $this->db->prepare($query);
11285
			$sth->execute(array(':registration_2' => $registration_2));
11286
        
11287
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11288
			{
11289
				$registration_prefix = $row['registration_prefix'];
11290
				$country = $row['country'];
11291
			}
11292
11293
			//if we didn't find a two chracter prefix lets just search the one with one character
11294
			if ($registration_prefix == "")
11295
			{
11296
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11297
	      
11298
				$sth = $this->db->prepare($query);
11299
				$sth->execute(array(':registration_1' => $registration_1));
11300
	        
11301
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
11302
				{
11303
					//$registration_prefix = $row['registration_prefix'];
11304
					$country = $row['country'];
11305
				}
11306
			}
11307
		}
11308
    
11309
		return $country;
11310
	}
11311
11312
	/**
11313
	* Registration prefix from the registration code
11314
	*
11315
	* @param String $registration the aircraft registration
11316
	* @return String the registration prefix
11317
	*
11318
	*/
11319
	public function registrationPrefixFromAircraftRegistration($registration)
11320
	{
11321
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11322
		
11323
		$registration_prefix = '';
11324
		$registration_test = explode('-',$registration);
11325
		//$country = '';
11326
		if ($registration_test[0] != $registration) {
11327
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11328
	      
11329
			$sth = $this->db->prepare($query);
11330
			$sth->execute(array(':registration_1' => $registration_test[0]));
11331
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11332
			{
11333
				$registration_prefix = $row['registration_prefix'];
11334
				//$country = $row['country'];
11335
			}
11336
		} else {
11337
    			$registration_1 = substr($registration, 0, 1);
11338
		        $registration_2 = substr($registration, 0, 2);
11339
11340
			//first get the prefix based on two characters
11341
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
11342
      
11343
			
11344
			$sth = $this->db->prepare($query);
11345
			$sth->execute(array(':registration_2' => $registration_2));
11346
        
11347
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
11348
			{
11349
				$registration_prefix = $row['registration_prefix'];
11350
				//$country = $row['country'];
11351
			}
11352
11353
			//if we didn't find a two chracter prefix lets just search the one with one character
11354
			if ($registration_prefix == "")
11355
			{
11356
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
11357
	      
11358
				$sth = $this->db->prepare($query);
11359
				$sth->execute(array(':registration_1' => $registration_1));
11360
	        
11361
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
11362
				{
11363
					$registration_prefix = $row['registration_prefix'];
11364
					//$country = $row['country'];
11365
				}
11366
			}
11367
		}
11368
    
11369
		return $registration_prefix;
11370
	}
11371
11372
11373
	/**
11374
	* Country from the registration code
11375
	*
11376
	* @param String $registration the aircraft registration
11377
	* @return String the country
11378
	*
11379
	*/
11380
	public function countryFromAircraftRegistrationCode($registration)
11381
	{
11382
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
11383
		
11384
		$country = '';
11385
		$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration LIMIT 1";
11386
		$sth = $this->db->prepare($query);
11387
		$sth->execute(array(':registration' => $registration));
11388
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11389
		{
11390
			$country = $row['country'];
11391
		}
11392
		return $country;
11393
	}
11394
	
11395
	/**
11396
	* Set a new highlight value for a flight
11397
	*
11398
	* @param String $flightaware_id flightaware_id from spotter_output table
11399
	* @param String $highlight New highlight value
11400
	*/
11401
	public function setHighlightFlight($flightaware_id,$highlight) {
11402
		
11403
		$query  = "UPDATE spotter_output SET highlight = :highlight WHERE flightaware_id = :flightaware_id";
11404
		$sth = $this->db->prepare($query);
11405
		$sth->execute(array(':flightaware_id' => $flightaware_id, ':highlight' => $highlight));
11406
	}
11407
11408
	/**
11409
	* Set a new highlight value for a flight by Registration
11410
	*
11411
	* @param String $registration Registration of the aircraft
11412
	* @param String $date Date of spotted aircraft
11413
	* @param String $highlight New highlight value
11414
	*/
11415
	public function setHighlightFlightByRegistration($registration,$highlight, $date = '') {
11416
		if ($date == '') {
11417
			$query  = "UPDATE spotter_output SET highlight = :highlight WHERE spotter_id IN (SELECT MAX(spotter_id) FROM spotter_output WHERE registration = :registration)";
11418
			$query_values = array(':registration' => $registration, ':highlight' => $highlight);
11419
		} else {
11420
			$query  = "UPDATE spotter_output SET highlight = :highlight WHERE registration = :registration AND date(date) = :date";
11421
			$query_values = array(':registration' => $registration, ':highlight' => $highlight,':date' => $date);
11422
		}
11423
		$sth = $this->db->prepare($query);
11424
		$sth->execute($query_values);
11425
	}
11426
	
11427
	/**
11428
	* Gets the short url from bit.ly
11429
	*
11430
	* @param String $url the full url
11431
	* @return String the bit.ly url
11432
	*
11433
	*/
11434
	public function getBitlyURL($url)
11435
	{
11436
		global $globalBitlyAccessToken;
11437
		
11438
		if ($globalBitlyAccessToken == '') return $url;
11439
        
11440
		$google_url = 'https://api-ssl.bitly.com/v3/shorten?access_token='.$globalBitlyAccessToken.'&longUrl='.$url;
11441
		
11442
		$ch = curl_init();
11443
		curl_setopt($ch, CURLOPT_HEADER, 0);
11444
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
11445
		curl_setopt($ch, CURLOPT_URL, $google_url);
11446
		$bitly_data = curl_exec($ch);
11447
		curl_close($ch);
11448
		
11449
		$bitly_data = json_decode($bitly_data);
11450
		$bitly_url = '';
11451
		if ($bitly_data->status_txt = "OK"){
11452
			$bitly_url = $bitly_data->data->url;
11453
		}
11454
11455
		return $bitly_url;
11456
	}
11457
11458
11459
	public function getOrderBy()
11460
	{
11461
		$orderby = array("aircraft_asc" => array("key" => "aircraft_asc", "value" => "Aircraft Type - ASC", "sql" => "ORDER BY spotter_output.aircraft_icao ASC"), "aircraft_desc" => array("key" => "aircraft_desc", "value" => "Aircraft Type - DESC", "sql" => "ORDER BY spotter_output.aircraft_icao DESC"),"manufacturer_asc" => array("key" => "manufacturer_asc", "value" => "Aircraft Manufacturer - ASC", "sql" => "ORDER BY spotter_output.aircraft_manufacturer ASC"), "manufacturer_desc" => array("key" => "manufacturer_desc", "value" => "Aircraft Manufacturer - DESC", "sql" => "ORDER BY spotter_output.aircraft_manufacturer DESC"),"airline_name_asc" => array("key" => "airline_name_asc", "value" => "Airline Name - ASC", "sql" => "ORDER BY spotter_output.airline_name ASC"), "airline_name_desc" => array("key" => "airline_name_desc", "value" => "Airline Name - DESC", "sql" => "ORDER BY spotter_output.airline_name DESC"), "ident_asc" => array("key" => "ident_asc", "value" => "Ident - ASC", "sql" => "ORDER BY spotter_output.ident ASC"), "ident_desc" => array("key" => "ident_desc", "value" => "Ident - DESC", "sql" => "ORDER BY spotter_output.ident DESC"), "airport_departure_asc" => array("key" => "airport_departure_asc", "value" => "Departure Airport - ASC", "sql" => "ORDER BY spotter_output.departure_airport_city ASC"), "airport_departure_desc" => array("key" => "airport_departure_desc", "value" => "Departure Airport - DESC", "sql" => "ORDER BY spotter_output.departure_airport_city DESC"), "airport_arrival_asc" => array("key" => "airport_arrival_asc", "value" => "Arrival Airport - ASC", "sql" => "ORDER BY spotter_output.arrival_airport_city ASC"), "airport_arrival_desc" => array("key" => "airport_arrival_desc", "value" => "Arrival Airport - DESC", "sql" => "ORDER BY spotter_output.arrival_airport_city DESC"), "date_asc" => array("key" => "date_asc", "value" => "Date - ASC", "sql" => "ORDER BY spotter_output.date ASC"), "date_desc" => array("key" => "date_desc", "value" => "Date - DESC", "sql" => "ORDER BY spotter_output.date DESC"),"distance_asc" => array("key" => "distance_asc","value" => "Distance - ASC","sql" => "ORDER BY distance ASC"),"distance_desc" => array("key" => "distance_desc","value" => "Distance - DESC","sql" => "ORDER BY distance DESC"));
11462
		
11463
		return $orderby;
11464
		
11465
	}
11466
    
11467
/*
11468
	public function importFromFlightAware()
11469
	{
11470
		global $globalFlightAwareUsername, $globalFlightAwarePassword, $globalLatitudeMax, $globalLatitudeMin, $globalLongitudeMax, $globalLongitudeMin, $globalAirportIgnore;
11471
		$Spotter = new Spotter($this->db);
11472
		$SpotterLive = new SpotterLive($this->db);
11473
		$options = array(
11474
		            'trace' => true,
11475
		            'exceptions' => 0,
11476
		            'login' => $globalFlightAwareUsername,
11477
		            'password' => $globalFlightAwarePassword,
11478
		);
11479
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
11480
		$params = array('query' => '{range lat '.$globalLatitudeMin.' '.$globalLatitudeMax.'} {range lon '.$globalLongitudeMax.' '.$globalLongitudeMin.'} {true inAir}', 'howMany' => '15', 'offset' => '0');
11481
		$result = $client->SearchBirdseyeInFlight($params);
11482
		$dataFound = false;
11483
		$ignoreImport = false;
11484
		if (isset($result->SearchBirdseyeInFlightResult))
11485
		{
11486
			if (is_array($result->SearchBirdseyeInFlightResult->aircraft))
11487
			{
11488
				foreach($result->SearchBirdseyeInFlightResult->aircraft as $aircraft)
11489
				{
11490
					if (!strstr($aircraft->origin, 'L ') && !strstr($aircraft->destination, 'L '))
11491
					{
11492
						foreach($globalAirportIgnore as $airportIgnore)
11493
						{
11494
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
11495
							{
11496
								$ignoreImport = true; 
11497
							}
11498
						}
11499
						if ($ignoreImport == false)
11500
						{
11501
							$flightaware_id = $aircraft->faFlightID;
11502
							$ident = $aircraft->ident;
11503
							$aircraft_type = $aircraft->type;
11504
							$departure_airport = $aircraft->origin;
11505
							$arrival_airport = $aircraft->destination;
11506
							$latitude = $aircraft->latitude;
11507
							$longitude = $aircraft->longitude;
11508
							$waypoints = $aircraft->waypoints;
11509
							$altitude = $aircraft->altitude;
11510
							$heading = $aircraft->heading;
11511
							$groundspeed = $aircraft->groundspeed;
11512
							$dataFound = true;
11513
							//gets the callsign from the last hour
11514
							$last_hour_ident = $this->getIdentFromLastHour($ident);
11515
							//change the departure/arrival airport to NA if its not available
11516
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
11517
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
11518
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
11519
							if($last_hour_ident == "")
11520
							{
11521
								//adds the spotter data for the archive
11522
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11523
							}
11524
11525
							//adds the spotter LIVE data
11526
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11527
						}
11528
					}
11529
					$ignoreImport = false;
11530
				}
11531
			} else {
11532
				if (!strstr($result->SearchBirdseyeInFlightResult->aircraft->origin, 'L ') && !strstr($result->SearchBirdseyeInFlightResult->aircraft->destination, 'L '))
11533
				{
11534
					foreach($globalAirportIgnore as $airportIgnore)
11535
					{
11536
						foreach($globalAirportIgnore as $airportIgnore)
11537
						{
11538
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
11539
							{
11540
								$ignoreImport = true; 
11541
							}
11542
						}
11543
						if ($ignoreImport == false)
11544
						{
11545
							$flightaware_id = $result->SearchBirdseyeInFlightResult->aircraft->faFlightID;
11546
							$ident = $result->SearchBirdseyeInFlightResult->aircraft->ident;
11547
							$aircraft_type = $result->SearchBirdseyeInFlightResult->aircraft->type;
11548
							$departure_airport = $result->SearchBirdseyeInFlightResult->aircraft->origin;
11549
							$arrival_airport = $result->SearchBirdseyeInFlightResult->aircraft->destination;
11550
							$latitude = $result->SearchBirdseyeInFlightResult->aircraft->latitude;
11551
							$longitude = $result->SearchBirdseyeInFlightResult->aircraft->longitude;
11552
							$waypoints = $result->SearchBirdseyeInFlightResult->aircraft->waypoints;
11553
							$altitude = $result->SearchBirdseyeInFlightResult->aircraft->altitude;
11554
							$heading = $result->SearchBirdseyeInFlightResult->aircraft->heading;
11555
							$groundspeed = $result->SearchBirdseyeInFlightResult->aircraft->groundspeed;
11556
							$dataFound = true;
11557
							//gets the callsign from the last hour
11558
							$last_hour_ident = $this->getIdentFromLastHour($ident);
11559
							//change the departure/arrival airport to NA if its not available
11560
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
11561
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
11562
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
11563
							if($last_hour_ident == "")
11564
							{
11565
								//adds the spotter data for the archive
11566
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11567
							}
11568
							//adds the spotter LIVE data
11569
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
11570
						}
11571
						$ignoreImport = false;
11572
					}
11573
				}
11574
			}
11575
		} 
11576
	}
11577
*/
11578
11579
	// Update flights data when new data in DB
11580
	public function updateFieldsFromOtherTables()
11581
	{
11582
		global $globalDebug, $globalDBdriver;
11583
		$Image = new Image($this->db);
11584
		
11585
11586
		// routes
11587
		if ($globalDebug) print "Routes...\n";
11588
		if ($globalDBdriver == 'mysql') {
11589
			$query = "SELECT spotter_output.spotter_id, routes.FromAirport_ICAO, routes.ToAirport_ICAO FROM spotter_output, routes WHERE spotter_output.ident = routes.CallSign AND ( spotter_output.departure_airport_icao != routes.FromAirport_ICAO OR spotter_output.arrival_airport_icao != routes.ToAirport_ICAO) AND routes.FromAirport_ICAO != '' AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 15 DAY)";
11590
		} else {
11591
			$query = "SELECT spotter_output.spotter_id, routes.FromAirport_ICAO, routes.ToAirport_ICAO FROM spotter_output, routes WHERE spotter_output.ident = routes.CallSign AND ( spotter_output.departure_airport_icao != routes.FromAirport_ICAO OR spotter_output.arrival_airport_icao != routes.ToAirport_ICAO) AND routes.FromAirport_ICAO != '' AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INTERVAL '15 DAYS'";
11592
		}
11593
		$sth = $this->db->prepare($query);
11594
		$sth->execute();
11595
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11596
		{
11597
			$departure_airport_array = $this->getAllAirportInfo($row['fromairport_icao']);
11598
			$arrival_airport_array = $this->getAllAirportInfo($row['toairport_icao']);
11599
			if (count($departure_airport_array) > 0 && count($arrival_airport_array) > 0) {
11600
				$update_query="UPDATE spotter_output SET departure_airport_icao = :fromicao, arrival_airport_icao = :toicao, departure_airport_name = :departure_airport_name, departure_airport_city = :departure_airport_city, departure_airport_country = :departure_airport_country, arrival_airport_name = :arrival_airport_name, arrival_airport_city = :arrival_airport_city, arrival_airport_country = :arrival_airport_country WHERE spotter_id = :spotter_id";
11601
				$sthu = $this->db->prepare($update_query);
11602
				$sthu->execute(array(':fromicao' => $row['fromairport_icao'],':toicao' => $row['toairport_icao'],':spotter_id' => $row['spotter_id'],':departure_airport_name' => $departure_airport_array[0]['name'],':departure_airport_city' => $departure_airport_array[0]['city'],':departure_airport_country' => $departure_airport_array[0]['country'],':arrival_airport_name' => $arrival_airport_array[0]['name'],':arrival_airport_city' => $arrival_airport_array[0]['city'],':arrival_airport_country' => $arrival_airport_array[0]['country']));
11603
			}
11604
		}
11605
		
11606
		if ($globalDebug) print "Airlines...\n";
11607
		//airlines
11608
		if ($globalDBdriver == 'mysql') {
11609
			$query  = "SELECT spotter_output.spotter_id, spotter_output.ident FROM spotter_output WHERE (spotter_output.airline_name = '' OR spotter_output.airline_name = 'Not Available') AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 15 DAY)";
11610
		} elseif ($globalDBdriver == 'pgsql') {
11611
			$query  = "SELECT spotter_output.spotter_id, spotter_output.ident FROM spotter_output WHERE (spotter_output.airline_name = '' OR spotter_output.airline_name = 'Not Available') AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INTERVAL '15 DAYS'";
11612
		}
11613
		$sth = $this->db->prepare($query);
11614
		$sth->execute();
11615
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11616
		{
11617
			if (is_numeric(substr($row['ident'], -1, 1)))
11618
			{
11619
				$fromsource = NULL;
11620
				if (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
11621
				elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
11622
				elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
11623
				elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
11624
				$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
11625
				if (isset($airline_array[0]['name'])) {
11626
					$update_query  = "UPDATE spotter_output SET spotter_output.airline_name = :airline_name, spotter_output.airline_icao = :airline_icao, spotter_output.airline_country = :airline_country, spotter_output.airline_type = :airline_type WHERE spotter_output.spotter_id = :spotter_id";
11627
					$sthu = $this->db->prepare($update_query);
11628
					$sthu->execute(array(':airline_name' => $airline_array[0]['name'],':airline_icao' => $airline_array[0]['icao'], ':airline_country' => $airline_array[0]['country'], ':airline_type' => $airline_array[0]['type'], ':spotter_id' => $row['spotter_id']));
11629
				}
11630
			}
11631
		}
11632
11633
		if ($globalDebug) print "Remove Duplicate in aircraft_modes...\n";
11634
		//duplicate modes
11635
		$query = "DELETE aircraft_modes FROM aircraft_modes LEFT OUTER JOIN (SELECT max(`AircraftID`) as `AircraftID`,`ModeS` FROM `aircraft_modes` group by ModeS) as KeepRows ON aircraft_modes.AircraftID = KeepRows.AircraftID WHERE KeepRows.AircraftID IS NULL";
11636
		$sth = $this->db->prepare($query);
11637
		$sth->execute();
11638
		
11639
		if ($globalDebug) print "Aircraft...\n";
11640
		//aircraft
11641
		if ($globalDBdriver == 'mysql') {
11642
			$query  = "SELECT spotter_output.spotter_id, spotter_output.aircraft_icao, spotter_output.registration FROM spotter_output WHERE (spotter_output.aircraft_name = '' OR spotter_output.aircraft_name = 'Not Available') AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY)";
11643
		} elseif ($globalDBdriver == 'pgsql') {
11644
			$query  = "SELECT spotter_output.spotter_id, spotter_output.aircraft_icao, spotter_output.registration FROM spotter_output WHERE (spotter_output.aircraft_name = '' OR spotter_output.aircraft_name = 'Not Available') AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INERVAL '15 DAYS'";
11645
		}
11646
		$sth = $this->db->prepare($query);
11647
		$sth->execute();
11648
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11649
		{
11650
			if ($row['aircraft_icao'] != '') {
11651
				$aircraft_name = $this->getAllAircraftInfo($row['aircraft_icao']);
11652
				if ($row['registration'] != ""){
11653
					$image_array = $Image->getSpotterImage($row['registration']);
11654
					if (!isset($image_array[0]['registration'])) {
11655
						$Image->addSpotterImage($row['registration']);
11656
					}
11657
				}
11658
				if (count($aircraft_name) > 0) {
11659
					$update_query  = "UPDATE spotter_output SET spotter_output.aircraft_name = :aircraft_name, spotter_output.aircraft_manufacturer = :aircraft_manufacturer WHERE spotter_output.spotter_id = :spotter_id";
11660
					$sthu = $this->db->prepare($update_query);
11661
					$sthu->execute(array(':aircraft_name' => $aircraft_name[0]['type'], ':aircraft_manufacturer' => $aircraft_name[0]['manufacturer'], ':spotter_id' => $row['spotter_id']));
11662
				}
11663
			}
11664
		}
11665
	}	
11666
11667
	// Update arrival airports for data already in DB
11668
	public function updateArrivalAirports()
11669
	{
11670
		global $globalDebug, $globalDBdriver, $globalClosestMinDist;
11671
		$query = "SELECT spotter_output.spotter_id, spotter_output.last_latitude, spotter_output.last_longitude, spotter_output.last_altitude, spotter_output.arrival_airport_icao, spotter_output.real_arrival_airport_icao FROM spotter_output";
11672
		$sth = $this->db->prepare($query);
11673
		$sth->execute();
11674
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11675
		{
11676
			if ($row['last_latitude'] != '' && $row['last_longitude'] != '') {
11677
				$closestAirports = $this->closestAirports($row['last_latitude'],$row['last_longitude'],$globalClosestMinDist);
11678
				$airport_icao = '';
11679
				 if (isset($closestAirports[0])) {
11680
					if ($row['arrival_airport_icao'] == $closestAirports[0]['icao']) {
11681
						$airport_icao = $closestAirports[0]['icao'];
11682
						if ($globalDebug) echo "\o/ 1st ---++ Find arrival airport. airport_icao : ".$airport_icao."\n";
11683
					} elseif (count($closestAirports > 1) && $row['arrival_airport_icao'] != '' && $row['arrival_airport_icao'] != 'NA') {
11684
						foreach ($closestAirports as $airport) {
11685
							if ($row['arrival_airport_icao'] == $airport['icao']) {
11686
								$airport_icao = $airport['icao'];
11687
								if ($globalDebug) echo "\o/ try --++ Find arrival airport. airport_icao : ".$airport_icao."\n";
11688
								break;
11689
							}
11690
						}
11691
					} elseif ($row['last_altitude'] == 0 || ($row['last_altitude'] != '' && ($closestAirports[0]['altitude'] <= $row['last_altitude']*100+1000 && $row['last_altitude']*100 < $closestAirports[0]['altitude']+5000))) {
11692
						$airport_icao = $closestAirports[0]['icao'];
11693
						if ($globalDebug) echo "\o/ NP --++ Find arrival airport. Airport ICAO : ".$airport_icao." !  Latitude : ".$row['last_latitude'].' - Longitude : '.$row['last_longitude'].' - MinDist : '.$globalClosestMinDist." - Airport altitude : ".$closestAirports[0]['altitude'].' - flight altitude : '.($row['last_altitude']*100)."\n";
11694
					} else {
11695
						if ($globalDebug) echo "----- Can't find arrival airport. Latitude : ".$row['last_latitude'].' - Longitude : '.$row['last_longitude'].' - MinDist : '.$globalClosestMinDist." - Airport altitude : ".$closestAirports[0]['altitude'].' - flight altitude : '.($row['last_altitude']*100)."\n";
11696
					}
11697
				} else {
11698
					if ($globalDebug) echo "----- No Airport near last coord. Latitude : ".$row['last_latitude'].' - Longitude : '.$row['last_longitude'].' - MinDist : '.$globalClosestMinDist."\n";
11699
				}
11700
				if ($row['real_arrival_airport_icao'] != $airport_icao) {
11701
					if ($globalDebug) echo "Updating airport to ".$airport_icao."...\n";
11702
					$update_query="UPDATE spotter_output SET real_arrival_airport_icao = :airport_icao WHERE spotter_id = :spotter_id";
11703
					$sthu = $this->db->prepare($update_query);
11704
					$sthu->execute(array(':airport_icao' => $airport_icao,':spotter_id' => $row['spotter_id']));
11705
				}
11706
			}
11707
		}
11708
	}
11709
	
11710
	public function closestAirports($origLat,$origLon,$dist = 10) {
11711
		global $globalDBdriver;
11712
		$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
11713
/*
11714
		$query="SELECT name, icao, latitude, longitude, altitude, 3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - abs(latitude))*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(abs(latitude)*pi()/180)*POWER(SIN(($origLon-longitude)*pi()/180/2),2))) as distance 
11715
                      FROM airport WHERE longitude between ($origLon-$dist/abs(cos(radians($origLat))*69)) and ($origLon+$dist/abs(cos(radians($origLat))*69)) and latitude between ($origLat-($dist/69)) and ($origLat+($dist/69)) 
11716
                      having distance < $dist ORDER BY distance limit 100;";
11717
*/
11718
		if ($globalDBdriver == 'mysql') {
11719
			$query="SELECT name, icao, latitude, longitude, altitude, 3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - latitude)*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(latitude*pi()/180)*POWER(SIN(($origLon-longitude)*pi()/180/2),2))) as distance 
11720
	                      FROM airport WHERE longitude between ($origLon-$dist/cos(radians($origLat))*69) and ($origLon+$dist/cos(radians($origLat)*69)) and latitude between ($origLat-($dist/69)) and ($origLat+($dist/69)) 
11721
	                      AND (3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - latitude)*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(latitude*pi()/180)*POWER(SIN(($origLon-longitude)*pi()/180/2),2)))) < $dist ORDER BY distance limit 100;";
11722
                } else {
11723
			$query="SELECT name, icao, latitude, longitude, altitude, 3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - CAST(latitude as double precision))*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(CAST(latitude as double precision)*pi()/180)*POWER(SIN(($origLon-CAST(longitude as double precision))*pi()/180/2),2))) as distance 
11724
	                      FROM airport WHERE CAST(longitude as double precision) between ($origLon-$dist/cos(radians($origLat))*69) and ($origLon+$dist/cos(radians($origLat))*69) and CAST(latitude as double precision) between ($origLat-($dist/69)) and ($origLat+($dist/69)) 
11725
	                      AND (3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - CAST(latitude as double precision))*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(CAST(latitude as double precision)*pi()/180)*POWER(SIN(($origLon-CAST(longitude as double precision))*pi()/180/2),2)))) < $dist ORDER BY distance limit 100;";
11726
    		}
11727
		$sth = $this->db->prepare($query);
11728
		$sth->execute();
11729
		return $sth->fetchAll(PDO::FETCH_ASSOC);
11730
	}
11731
}
11732
/*
11733
$Spotter = new Spotter();
11734
print_r($Spotter->closestAirports('-19.9813','-47.8286',10));
11735
*/
11736
/*
11737
$Spotter = new Spotter();
11738
$da = $Spotter->countAllDetectedArrivalAirports(true,0,'',true);
11739
$aa = $Spotter->countAllArrivalAirports(true,0,'',true);
11740
print_r($da);
11741
print_r($aa);
11742
print_r(array_merge($da,$aa));
11743
*/
11744
?>