Completed
Push — master ( ed020e...bb6700 )
by Yannick
09:11
created

Spotter   D

Complexity

Total Complexity 1550

Size/Duplication

Total Lines 12104
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Importance

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

254 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
F getFilter() 0 105 62
B countAllArrivalAirportsByAircraft() 0 29 2
B countAllArrivalAirportsByRegistration() 0 30 2
B countAllArrivalAirportCountriesByRegistration() 0 26 2
B countAllArrivalAirportsByAirport() 0 29 2
B countAllDepartureAirportsByAircraft() 0 29 2
B countAllDepartureAirportsByRegistration() 0 29 2
B countAllDepartureAirportCountriesByRegistration() 0 26 2
B countAllDepartureAirportsByAirport() 0 29 2
C countAllAirlineCountries() 0 53 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
C countAllAircraftTypesByPilot() 0 43 7
C countAllAircraftTypesByOwner() 0 42 7
B countAllAircraftRegistrationByIdent() 0 36 4
C countAllAircraftRegistrationByOwner() 0 68 10
C countAllAircraftRegistrationByPilot() 0 68 10
A countAllAircraftManufacturerByIdent() 0 22 2
C countAllAircraftManufacturerByOwner() 0 45 7
C countAllAircraftManufacturerByPilot() 0 45 7
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 70 13
C countAllDepartureAirportsByAirlines() 0 46 7
F countAllDetectedDepartureAirports() 0 72 13
C countAllDetectedDepartureAirportsByAirlines() 0 46 7
B countAllDepartureAirportsByAirline() 0 29 2
B countAllDepartureAirportCountriesByAirline() 0 24 2
B countAllDepartureAirportCountriesByAircraft() 0 26 2
F getDataFromDB() 0 366 153
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 49 7
C getSpotterDataByOwner() 0 50 8
B getSpotterDataByPilot() 0 44 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
B getAllAircraftType() 0 24 6
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 11 1
A getAllPilotNames() 0 11 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 107
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 27 2
B countAllAirlinesByAirport() 0 27 2
B countAllAirlineCountriesByAirport() 0 27 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
D getFlightDurationByOwner() 0 44 9
A countFlightsByOwner() 0 13 1
A countFlightsByPilot() 0 13 1
C getFlightDurationByPilot() 0 43 8
A countAllAirlinesByPilot() 0 14 1
B countAllAirlinesByRoute() 0 29 2
B countAllAirlineCountriesByRoute() 0 28 2
B countAllAirlinesByCountry() 0 26 2
B countAllAirlineCountriesByCountry() 0 24 2
B countAllDepartureAirportCountriesByAirport() 0 24 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
A countAllDepartureAirportCountriesByCountry() 0 22 2
F countAllArrivalAirports() 0 77 14
C countAllArrivalAirportsByAirlines() 0 52 8
F countAllDetectedArrivalAirports() 0 74 14
C countAllDetectedArrivalAirportsByAirlines() 0 51 8
B countAllArrivalAirportsByAirline() 0 28 2
B countAllArrivalAirportCountriesByAirline() 0 26 2
B countAllArrivalAirportCountriesByAircraft() 0 26 2
B countAllArrivalAirportCountriesByAirport() 0 24 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
A countAllArrivalAirportCountriesByCountry() 0 23 2
B countAllDepartureCountries() 0 55 8
C countAllArrivalCountries() 0 56 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 31 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
B getAircraftRegistrationBymodeS() 0 22 5
B getAircraftTypeBymodeS() 0 23 6
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, $globalDBdriver;
64
		$filters = array();
65
		if (is_array($globalStatsFilters) && isset($globalStatsFilters[$globalFilterName])) {
66
			if (isset($globalStatsFilters[$globalFilterName][0]['source'])) {
67
				$filters = $globalStatsFilters[$globalFilterName];
68
			} else {
69
				$filter = array_merge($filter,$globalStatsFilters[$globalFilterName]);
70
			}
71
		}
72
		if (isset($filter[0]['source'])) {
73
			$filters = array_merge($filters,$filter);
74
		}
75
		if (is_array($globalFilter)) $filter = array_merge($filter,$globalFilter);
76
		$filter_query_join = '';
77
		$filter_query_where = '';
78
		foreach($filters as $flt) {
79
			if (isset($flt['airlines']) && !empty($flt['airlines'])) {
80
				if ($flt['airlines'][0] != '') {
81
					if (isset($flt['source'])) {
82
						$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_icao IN ('".implode("','",$flt['airlines'])."') AND spotter_output.format_source IN ('".implode("','",$flt['source'])."')) saf ON saf.flightaware_id = spotter_output.flightaware_id";
83
					} else {
84
						$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_icao IN ('".implode("','",$flt['airlines'])."')) saf ON saf.flightaware_id = spotter_output.flightaware_id";
85
					}
86
				}
87
			}
88
			if (isset($flt['pilots_id']) && !empty($flt['pilots_id'])) {
89
				if (isset($flt['source'])) {
90
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.pilot_id IN ('".implode("','",$flt['pilots_id'])."') AND spotter_output.format_source IN ('".implode("','",$flt['source'])."')) spf ON spf.flightaware_id = spotter_output.flightaware_id";
91
				} else {
92
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.pilot_id IN ('".implode("','",$flt['pilots_id'])."')) spf ON spf.flightaware_id = spotter_output.flightaware_id";
93
				}
94
			}
95
			if (isset($flt['idents']) && !empty($flt['idents'])) {
96
				if (isset($flt['source'])) {
97
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.ident IN ('".implode("','",$flt['idents'])."') AND spotter_output.format_source IN ('".implode("','",$flt['source'])."')) spfi ON spfi.flightaware_id = spotter_output.flightaware_id";
98
				} else {
99
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.ident IN ('".implode("','",$flt['idents'])."')) spfi ON spfi.flightaware_id = spotter_output.flightaware_id";
100
				}
101
			}
102
			if (isset($flt['registrations']) && !empty($flt['registrations'])) {
103
				if (isset($flt['source'])) {
104
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.registration IN ('".implode("','",$flt['registrations'])."') AND spotter_output.format_source IN ('".implode("','",$flt['source'])."')) sre ON sre.flightaware_id = spotter_output.flightaware_id";
105
				} else {
106
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.registration IN ('".implode("','",$flt['registrations'])."')) sre ON sre.flightaware_id = spotter_output.flightaware_id";
107
				}
108
			}
109
			if ((isset($flt['airlines']) && empty($flt['airlines']) && isset($flt['pilots_id']) && empty($flt['pilots_id']) && isset($flt['idents']) && empty($flt['idents']) && isset($flt['registrations']) && empty($flt['registrations'])) || (!isset($flt['airlines']) && !isset($flt['pilots_id']) && !isset($flt['idents']) && !isset($flt['registrations']))) {
110
				if (isset($flt['source'])) {
111
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.format_source IN ('".implode("','",$flt['source'])."')) sf ON sf.flightaware_id = spotter_output.flightaware_id";
112
				}
113
			}
114
		}
115
		if (isset($filter['airlines']) && !empty($filter['airlines'])) {
116
			if ($filter['airlines'][0] != '') {
117
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_icao IN ('".implode("','",$filter['airlines'])."')) sof ON sof.flightaware_id = spotter_output.flightaware_id";
118
			}
119
		}
120
		if (isset($filter['airlinestype']) && !empty($filter['airlinestype'])) {
121
			$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 ";
122
		}
123
		if (isset($filter['alliance']) && !empty($filter['alliance'])) {
124
			$filter_query_join .= " INNER JOIN (SELECT icao FROM airlines WHERE alliance = '".$filter['alliance']."') sal ON sal.icao = spotter_output.airline_icao ";
125
		}
126
		if (isset($filter['pilots_id']) && !empty($filter['pilots_id'])) {
127
				$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.pilot_id IN ('".implode("','",$filter['pilots_id'])."')) spid ON spid.flightaware_id = spotter_output.flightaware_id";
128
			}
129
		if (isset($filter['source']) && !empty($filter['source'])) {
130
			$filter_query_where .= " AND format_source IN ('".implode("','",$filter['source'])."')";
131
		}
132
		if (isset($filter['ident']) && !empty($filter['ident'])) {
133
			$filter_query_where .= " AND ident = '".$filter['ident']."'";
134
		}
135
		if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
136
			$filter_query_where .= " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
137
		}
138
		if (isset($filter['year']) && $filter['year'] != '') {
139
			if ($globalDBdriver == 'mysql') {
140
				$filter_query_where .= " AND YEAR(spotter_output.date) = '".$filter['year']."'";
141
			} else {
142
				$filter_query_where .= " AND EXTRACT(YEAR FROM spotter_output.date) = '".$filter['year']."'";
143
			}
144
		}
145
		if (isset($filter['month']) && $filter['month'] != '') {
146
			if ($globalDBdriver == 'mysql') {
147
				$filter_query_where .= " AND MONTH(spotter_output.date) = '".$filter['month']."'";
148
			} else {
149
				$filter_query_where .= " AND EXTRACT(MONTH FROM spotter_output.date) = '".$filter['month']."'";
150
			}
151
		}
152
		if (isset($filter['day']) && $filter['day'] != '') {
153
			if ($globalDBdriver == 'mysql') {
154
				$filter_query_where .= " AND DAY(spotter_output.date) = '".$filter['day']."'";
155
			} else {
156
				$filter_query_where .= " AND EXTRACT(DAY FROM spotter_output.date) = '".$filter['day']."'";
157
			}
158
		}
159
		if ($filter_query_where == '' && $where) $filter_query_where = ' WHERE';
160
		elseif ($filter_query_where != '' && $and) $filter_query_where .= ' AND';
161
		if ($filter_query_where != '') {
162
			$filter_query_where = preg_replace('/^ AND/',' WHERE',$filter_query_where);
163
		}
164
		$filter_query = $filter_query_join.$filter_query_where;
165
		return $filter_query;
166
	}
167
168
	/**
169
	* Executes the SQL statements to get the spotter information
170
	*
171
	* @param String $query the SQL query
172
	* @param Array $params parameter of the query
173
	* @param String $limitQuery the limit query
174
	* @return Array the spotter information
175
	*
176
	*/
177
	public function getDataFromDB($query, $params = array(), $limitQuery = '',$schedules = false)
178
	{
179
		global $globalSquawkCountry, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalAirlinesSource, $globalVAM;
180
		$Image = new Image($this->db);
181
		$Schedule = new Schedule($this->db);
182
		$ACARS = new ACARS($this->db);
183
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
184
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
185
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
186
		if (!isset($globalVAM)) $globalVAM = FALSE;
187
		date_default_timezone_set('UTC');
188
		
189
		if (!is_string($query))
190
		{
191
			return false;
192
		}
193
		
194
		if ($limitQuery != "")
195
		{
196
			if (!is_string($limitQuery))
197
			{
198
				return false;
199
			}
200
		}
201
202
		
203
		try {
204
			$sth = $this->db->prepare($query.$limitQuery);
205
			$sth->execute($params);
206
		} catch (PDOException $e) {
207
			printf("Invalid query : %s\nWhole query: %s\n",$e->getMessage(), $query.$limitQuery);
208
			exit();
209
		}
210
		
211
	//	$num_rows = count($sth->fetchAll());
212
		$num_rows = 0;
213
214
		$spotter_array = array();
215
		
216
217
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
218
		{
219
			$num_rows++;
220
			$temp_array = array();
221
			if (isset($row['spotter_live_id'])) {
222
				//$temp_array['spotter_id'] = $row['spotter_live_id'];
223
				$temp_array['spotter_id'] = $this->getSpotterIDBasedOnFlightAwareID($row['flightaware_id']);
224
			} elseif (isset($row['spotter_archive_id'])) {
225
				$temp_array['spotter_id'] = $row['spotter_archive_id'];
226
			} elseif (isset($row['spotter_archive_output_id'])) {
227
				$temp_array['spotter_id'] = $row['spotter_archive_output_id'];
228
			} elseif (isset($row['spotter_id'])) {
229
				$temp_array['spotter_id'] = $row['spotter_id'];
230
			} else {
231
				$temp_array['spotter_id'] = '';
232
			}
233
			if (isset($row['flightaware_id'])) $temp_array['flightaware_id'] = $row['flightaware_id'];
234
			if (isset($row['modes'])) $temp_array['modes'] = $row['modes'];
235
			$temp_array['ident'] = $row['ident'];
236
			if (isset($row['registration']) && $row['registration'] != '') {
237
				$temp_array['registration'] = $row['registration'];
238
			} elseif (isset($temp_array['modes'])) {
239
				$temp_array['registration'] = $this->getAircraftRegistrationBymodeS($temp_array['modes']);
240
			} else $temp_array['registration'] = '';
241
			if (isset($row['aircraft_icao'])) $temp_array['aircraft_type'] = $row['aircraft_icao'];
242
			
243
			$temp_array['departure_airport'] = $row['departure_airport_icao'];
244
			$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
245
			if (isset($row['real_arrival_airport_icao']) && $row['real_arrival_airport_icao'] != NULL) $temp_array['real_arrival_airport'] = $row['real_arrival_airport_icao'];
246
			if (isset($row['latitude'])) $temp_array['latitude'] = $row['latitude'];
247
			if (isset($row['longitude'])) $temp_array['longitude'] = $row['longitude'];
248
			/*
249
			if (Connection->tableExists('countries')) {
250
				$country_info = $this->getCountryFromLatitudeLongitude($temp_array['latitude'],$temp_array['longitude']);
251
				if (is_array($country_info) && isset($country_info['name']) && isset($country_info['iso2'])) {
252
				    $temp_array['country'] = $country_info['name'];
253
				    $temp_array['country_iso2'] = $country_info['iso2'];
254
				}
255
			}
256
			*/
257
			if (isset($row['waypoints'])) $temp_array['waypoints'] = $row['waypoints'];
258
			if (isset($row['format_source'])) $temp_array['format_source'] = $row['format_source'];
259
			if (isset($row['route_stop']) && $row['route_stop'] != '') {
260
				$temp_array['route_stop'] = $row['route_stop'];
261
				$allroute = explode(' ',$row['route_stop']);
262
				foreach ($allroute as $route) {
263
					$route_airport_array = $this->getAllAirportInfo($route);
264
					if (isset($route_airport_array[0]['name'])) {
265
						$route_stop_details = array();
266
						$route_stop_details['airport_name'] = $route_airport_array[0]['name'];
267
						$route_stop_details['airport_city'] = $route_airport_array[0]['city'];
268
						$route_stop_details['airport_country'] = $route_airport_array[0]['country'];
269
						$route_stop_details['airport_icao'] = $route_airport_array[0]['icao'];
270
						$temp_array['route_stop_details'][] = $route_stop_details;
271
					}
272
				}
273
			}
274
			if (isset($row['altitude'])) $temp_array['altitude'] = $row['altitude'];
275
			if (isset($row['heading'])) {
276
				$temp_array['heading'] = $row['heading'];
277
				$heading_direction = $this->parseDirection($row['heading']);
278
				if (isset($heading_direction[0]['direction_fullname'])) $temp_array['heading_name'] = $heading_direction[0]['direction_fullname'];
279
			}
280
			if (isset($row['ground_speed'])) $temp_array['ground_speed'] = $row['ground_speed'];
281
			$temp_array['image'] = "";
282
			$temp_array['image_thumbnail'] = "";
283
			$temp_array['image_source'] = "";
284
			$temp_array['image_copyright'] = "";
285
 
286
			if (isset($row['highlight'])) {
287
				$temp_array['highlight'] = $row['highlight'];
288
			} else $temp_array['highlight'] = '';
289
			
290
			if (isset($row['date'])) {
291
				$dateArray = $this->parseDateString($row['date']);
292
				if ($dateArray['seconds'] < 10)
293
				{
294
					$temp_array['date'] = "a few seconds ago";
295
				} elseif ($dateArray['seconds'] >= 5 && $dateArray['seconds'] < 30)
296
				{
297
					$temp_array['date'] = "half a minute ago";
298
				} elseif ($dateArray['seconds'] >= 30 && $dateArray['seconds'] < 60)
299
				{
300
					$temp_array['date'] = "about a minute ago";
301
				} elseif ($dateArray['minutes'] < 5)
302
				{
303
					$temp_array['date'] = "a few minutes ago";
304
				} elseif ($dateArray['minutes'] >= 5 && $dateArray['minutes'] < 60)
305
				{
306
					$temp_array['date'] = "about ".$dateArray['minutes']." minutes ago";
307
				} elseif ($dateArray['hours'] < 2)
308
				{
309
					$temp_array['date'] = "about an hour ago";
310
				} elseif ($dateArray['hours'] >= 2 && $dateArray['hours'] < 24)
311
				{
312
					$temp_array['date'] = "about ".$dateArray['hours']." hours ago";
313
				} else {
314
					$temp_array['date'] = date("M j Y, g:i a",strtotime($row['date']." UTC"));
315
				}
316
				$temp_array['date_minutes_past'] = $dateArray['minutes'];
317
				$temp_array['date_iso_8601'] = date("c",strtotime($row['date']." UTC"));
318
				$temp_array['date_rfc_2822'] = date("r",strtotime($row['date']." UTC"));
319
				$temp_array['date_unix'] = strtotime($row['date']." UTC");
320
				if (isset($row['last_seen']) && $row['last_seen'] != '') {
321
					if (strtotime($row['last_seen']) > strtotime($row['date'])) {
322
						$temp_array['duration'] = strtotime($row['last_seen']) - strtotime($row['date']);
323
						$temp_array['last_seen_date_iso_8601'] = date("c",strtotime($row['last_seen']." UTC"));
324
						$temp_array['last_seen_date_rfc_2822'] = date("r",strtotime($row['last_seen']." UTC"));
325
						$temp_array['last_seen_date_unix'] = strtotime($row['last_seen']." UTC");
326
					}
327
				}
328
			}
329
			
330
			if (isset($row['aircraft_name']) && $row['aircraft_name'] != '' && isset($row['aircraft_shadow']) && $row['aircraft_shadow'] != '') {
331
				$temp_array['aircraft_name'] = $row['aircraft_name'];
332
				$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
333
				if (isset($row['aircraft_shadow'])) {
334
					$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
335
				}
336
			} elseif (isset($row['aircraft_icao'])) {
337
				$aircraft_array = $this->getAllAircraftInfo($row['aircraft_icao']);
338
				if (count($aircraft_array) > 0) {
339
					$temp_array['aircraft_name'] = $aircraft_array[0]['type'];
340
					$temp_array['aircraft_manufacturer'] = $aircraft_array[0]['manufacturer'];
341
				
342
					if ($aircraft_array[0]['aircraft_shadow'] != NULL) {
343
						$temp_array['aircraft_shadow'] = $aircraft_array[0]['aircraft_shadow'];
344
					} else $temp_array['aircraft_shadow'] = 'default.png';
345
                                } else {
346
                            		$temp_array['aircraft_shadow'] = 'default.png';
347
					$temp_array['aircraft_name'] = 'N/A';
348
					$temp_array['aircraft_manufacturer'] = 'N/A';
349
                            	}
350
			}
351
			$fromsource = NULL;
352
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
353
			elseif (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
354
			elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
355
			elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
356
			elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
357
			if (!isset($row['airline_name']) || $row['airline_name'] == '') {
358
				if (!is_numeric(substr($row['ident'], 0, 3))) {
359
					if (is_numeric(substr($row['ident'], 2, 1))) {
360
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 2),$fromsource);
361
					} elseif (is_numeric(substr($row['ident'], 3, 1))) {
362
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
363
					} else {
364
						$airline_array = $this->getAllAirlineInfo('NA');
365
					}
366
				} else {
367
					$airline_array = $this->getAllAirlineInfo('NA');
368
				}
369
				if (count($airline_array) > 0) {
370
					$temp_array['airline_icao'] = $airline_array[0]['icao'];
371
					$temp_array['airline_iata'] = $airline_array[0]['iata'];
372
					$temp_array['airline_name'] = $airline_array[0]['name'];
373
					$temp_array['airline_country'] = $airline_array[0]['country'];
374
					$temp_array['airline_callsign'] = $airline_array[0]['callsign'];
375
					$temp_array['airline_type'] = $airline_array[0]['type'];
376
				}
377
			} else {
378
				$temp_array['airline_icao'] = $row['airline_icao'];
379
				if (isset($row['airline_iata'])) $temp_array['airline_iata'] = $row['airline_iata'];
380
				else $temp_array['airline_iata'] = 'N/A';
381
				$temp_array['airline_name'] = $row['airline_name'];
382
				$temp_array['airline_country'] = $row['airline_country'];
383
				if (isset($row['airline_callsign'])) $temp_array['airline_callsign'] = $row['airline_callsign'];
384
				else $temp_array['airline_callsign'] = 'N/A';
385
				$temp_array['airline_type'] = $row['airline_type'];
386
				if ($temp_array['airline_icao'] != '' && $temp_array['airline_iata'] == 'N/A') {
387
					$airline_array = $this->getAllAirlineInfo($temp_array['airline_icao']);
388
					if (count($airline_array) > 0) {
389
						$temp_array['airline_icao'] = $airline_array[0]['icao'];
390
						$temp_array['airline_iata'] = $airline_array[0]['iata'];
391
						$temp_array['airline_name'] = $airline_array[0]['name'];
392
						$temp_array['airline_country'] = $airline_array[0]['country'];
393
						$temp_array['airline_callsign'] = $airline_array[0]['callsign'];
394
						$temp_array['airline_type'] = $airline_array[0]['type'];
395
					}
396
				}
397
			}
398
			if (isset($temp_array['airline_iata']) && $temp_array['airline_iata'] != '') {
399
				$acars_array = $ACARS->getLiveAcarsData($temp_array['airline_iata'].substr($temp_array['ident'],3));
400
				//$acars_array = ACARS->getLiveAcarsData('BA40YL');
401
				if (count($acars_array) > 0) {
402
					$temp_array['acars'] = $acars_array;
403
					//print_r($acars_array);
404
				}
405
			}
406
			if (isset($row['owner_name']) && $row['owner_name'] != '' && $row['owner_name'] != NULL) {
407
				$temp_array['aircraft_owner'] = $row['owner_name'];
408
			}
409
			if ($temp_array['registration'] != "" && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM && !isset($temp_array['aircraft_owner'])) {
410
				$owner_info = $this->getAircraftOwnerByRegistration($temp_array['registration']);
411
				if ($owner_info['owner'] != '') $temp_array['aircraft_owner'] = ucwords(strtolower($owner_info['owner']));
412
				$temp_array['aircraft_base'] = $owner_info['base'];
413
				$temp_array['aircraft_date_first_reg'] = $owner_info['date_first_reg'];
414
			}
415
416
			if($temp_array['registration'] != "" || (($globalIVAO || $globalVATSIM || $globalphpVMS || $globalVAM) && isset($temp_array['aircraft_type']) && $temp_array['aircraft_type'] != ''))
417
			{
418
				if ($globalIVAO) {
419
					if (isset($temp_array['airline_icao']))	$image_array = $Image->getSpotterImage('',$temp_array['aircraft_type'],$temp_array['airline_icao']);
420
					else $image_array = $Image->getSpotterImage('',$temp_array['aircraft_type']);
421
				} elseif (isset($temp_array['aircraft_type'])) $image_array = $Image->getSpotterImage($temp_array['registration'],$temp_array['aircraft_type']);
422
				else $image_array = $Image->getSpotterImage($temp_array['registration']);
423
				if (count($image_array) > 0) {
424
					$temp_array['image'] = $image_array[0]['image'];
425
					$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
426
					$temp_array['image_source'] = $image_array[0]['image_source'];
427
					$temp_array['image_source_website'] = $image_array[0]['image_source_website'];
428
					if ($temp_array['image_source_website'] == '' && $temp_array['image_source'] == 'planespotters') {
429
						$planespotter_url_array = explode("_", $temp_array['image']);
430
						$planespotter_id = str_replace(".jpg", "", $planespotter_url_array[1]);
431
						$temp_array['image_source_website'] = 'http://www.planespotters.net/Aviation_Photos/photo.show?id='.$planespotter_id;
432
					 }
433
					$temp_array['image_copyright'] = $image_array[0]['image_copyright'];
434
				}
435
			}
436
437
438
			if (isset($row['departure_airport_time']) && $row['departure_airport_time'] != '') {
439
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
440
			}
441
			if (isset($row['arrival_airport_time']) && $row['arrival_airport_time'] != '') {
442
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
443
			}
444
			
445
			if ((!isset($globalIVAO) || ! $globalIVAO) && (!isset($globalVATSIM) || !$globalVATSIM) && (!isset($globalphpVMS) || !$globalphpVMS) && (!isset($globalVAM) || !$globalVAM)) {
446
				if ($schedules === true) {
447
					$schedule_array = $Schedule->getSchedule($temp_array['ident']);
448
					//print_r($schedule_array);
449
					if (count($schedule_array) > 0) {
450
						if ($schedule_array['departure_airport_icao'] != '') {
451
							$row['departure_airport_icao'] = $schedule_array['departure_airport_icao'];
452
							$temp_array['departure_airport'] = $row['departure_airport_icao'];
453
						}
454
						if ($schedule_array['arrival_airport_icao'] != '') {
455
							$row['arrival_airport_icao'] = $schedule_array['arrival_airport_icao'];
456
							$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
457
						}
458
						$temp_array['departure_airport_time'] = $schedule_array['departure_airport_time'];
459
						$temp_array['arrival_airport_time'] = $schedule_array['arrival_airport_time'];
460
					}
461
				}
462
			} else {
463
				if (isset($row['real_departure_airport_time']) && $row['real_departure_airport_time'] != '') {
464
					$temp_array['departure_airport_time'] = $row['real_departure_airport_time'];
465
				}
466
				if (isset($row['real_arrival_airport_time']) && $row['real_arrival_airport_time'] != '') {
467
					$temp_array['real_arrival_airport_time'] = $row['real_arrival_airport_time'];
468
				}
469
			}
470
			
471
			//if ($row['departure_airport_icao'] != '' && $row['departure_airport_name'] == '') {
472
			if ($row['departure_airport_icao'] != '') {
473
				$departure_airport_array = $this->getAllAirportInfo($row['departure_airport_icao']);
474
				if (!isset($departure_airport_array[0]['name'])) $departure_airport_array = $this->getAllAirportInfo('NA');
475
			/*
476
			} elseif ($row['departure_airport_name'] != '') {
477
				$temp_array['departure_airport_name'] = $row['departure_airport_name'];
478
				$temp_array['departure_airport_city'] = $row['departure_airport_city'];
479
				$temp_array['departure_airport_country'] = $row['departure_airport_country'];
480
				$temp_array['departure_airport_icao'] = $row['departure_airport_icao'];
481
			*/
482
			} else $departure_airport_array = $this->getAllAirportInfo('NA');
483
			if (isset($departure_airport_array[0]['name'])) {
484
				$temp_array['departure_airport_name'] = $departure_airport_array[0]['name'];
485
				$temp_array['departure_airport_city'] = $departure_airport_array[0]['city'];
486
				$temp_array['departure_airport_country'] = $departure_airport_array[0]['country'];
487
				$temp_array['departure_airport_iata'] = $departure_airport_array[0]['iata'];
488
				$temp_array['departure_airport_icao'] = $departure_airport_array[0]['icao'];
489
				$temp_array['departure_airport_latitude'] = $departure_airport_array[0]['latitude'];
490
				$temp_array['departure_airport_longitude'] = $departure_airport_array[0]['longitude'];
491
				$temp_array['departure_airport_altitude'] = $departure_airport_array[0]['altitude'];
492
			}
493
494
			/*
495
			if (isset($row['departure_airport_time'])) {
496
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
497
			}
498
			*/
499
			
500
			if ($row['arrival_airport_icao'] != '') {
501
				$arrival_airport_array = $this->getAllAirportInfo($row['arrival_airport_icao']);
502
				if (count($arrival_airport_array) == 0) $arrival_airport_array = $this->getAllAirportInfo('NA');
503
			} else $arrival_airport_array = $this->getAllAirportInfo('NA');
504
			if (isset($arrival_airport_array[0]['name'])) {
505
				$temp_array['arrival_airport_name'] = $arrival_airport_array[0]['name'];
506
				$temp_array['arrival_airport_city'] = $arrival_airport_array[0]['city'];
507
				$temp_array['arrival_airport_country'] = $arrival_airport_array[0]['country'];
508
				$temp_array['arrival_airport_iata'] = $arrival_airport_array[0]['iata'];
509
				$temp_array['arrival_airport_icao'] = $arrival_airport_array[0]['icao'];
510
				$temp_array['arrival_airport_latitude'] = $arrival_airport_array[0]['latitude'];
511
				$temp_array['arrival_airport_longitude'] = $arrival_airport_array[0]['longitude'];
512
				$temp_array['arrival_airport_altitude'] = $arrival_airport_array[0]['altitude'];
513
			}
514
			/*
515
			if (isset($row['arrival_airport_time'])) {
516
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
517
			}
518
			*/
519
			if (isset($row['pilot_id']) && $row['pilot_id'] != '') $temp_array['pilot_id'] = $row['pilot_id'];
520
			if (isset($row['pilot_name']) && $row['pilot_name'] != '') $temp_array['pilot_name'] = $row['pilot_name'];
521
			if (isset($row['source_name']) && $row['source_name'] != '') $temp_array['source_name'] = $row['source_name'];
522
			if (isset($row['over_country']) && $row['over_country'] != '') $temp_array['over_country'] = $row['over_country'];
523
			if (isset($row['distance']) && $row['distance'] != '') $temp_array['distance'] = $row['distance'];
524
			if (isset($row['squawk'])) {
525
				$temp_array['squawk'] = $row['squawk'];
526
				if ($row['squawk'] != '' && isset($temp_array['country_iso2'])) {
527
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['country_iso2']);
528
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
529
				} elseif ($row['squawk'] != '' && isset($temp_array['over_country'])) {
530
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['over_country']);
531
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
532
				} elseif ($row['squawk'] != '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
533
			}
534
    			
535
			$temp_array['query_number_rows'] = $num_rows;
536
			
537
			$spotter_array[] = $temp_array;
538
		}
539
		if ($num_rows == 0) return array();
540
		$spotter_array[0]['query_number_rows'] = $num_rows;
541
		return $spotter_array;
542
	}	
543
	
544
	
545
	/**
546
	* Gets all the spotter information
547
	*
548
	* @return Array the spotter information
549
	*
550
	*/
551
	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())
552
	{
553
		global $globalTimezone, $globalDBdriver;
554
		require_once(dirname(__FILE__).'/class.Translation.php');
555
		$Translation = new Translation();
556
557
		date_default_timezone_set('UTC');
558
559
		$query_values = array();
560
		$additional_query = '';
561
		$filter_query = $this->getFilter($filters,true,true);
562
		if ($q != "")
563
		{
564
			if (!is_string($q))
565
			{
566
				return false;
567
			} else {
568
				$q_array = explode(" ", $q);
569
				foreach ($q_array as $q_item){
570
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
571
					$additional_query .= " AND (";
572
					if (is_int($q_item)) $additional_query .= "(spotter_output.spotter_id like '%".$q_item."%') OR ";
573
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
574
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
575
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
576
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
577
					$additional_query .= "(spotter_output.airline_name like '%".$q_item."%') OR ";
578
					$additional_query .= "(spotter_output.airline_country like '%".$q_item."%') OR ";
579
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
580
					$additional_query .= "(spotter_output.departure_airport_name like '%".$q_item."%') OR ";
581
					$additional_query .= "(spotter_output.departure_airport_city like '%".$q_item."%') OR ";
582
					$additional_query .= "(spotter_output.departure_airport_country like '%".$q_item."%') OR ";
583
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
584
					$additional_query .= "(spotter_output.arrival_airport_name like '%".$q_item."%') OR ";
585
					$additional_query .= "(spotter_output.arrival_airport_city like '%".$q_item."%') OR ";
586
					$additional_query .= "(spotter_output.arrival_airport_country like '%".$q_item."%') OR ";
587
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
588
					$additional_query .= "(spotter_output.owner_name like '%".$q_item."%') OR ";
589
					$additional_query .= "(spotter_output.pilot_id like '%".$q_item."%') OR ";
590
					$additional_query .= "(spotter_output.pilot_name like '%".$q_item."%') OR ";
591
					$additional_query .= "(spotter_output.ident like '%".$q_item."%') OR ";
592
					$translate = $Translation->ident2icao($q_item);
593
					if ($translate != $q_item) $additional_query .= "(spotter_output.ident like '%".$translate."%') OR ";
594
					$additional_query .= "(spotter_output.highlight like '%".$q_item."%')";
595
					$additional_query .= ")";
596
				}
597
			}
598
		}
599
600
		if ($registration != "")
601
		{
602
			$registration = filter_var($registration,FILTER_SANITIZE_STRING);
603
			if (!is_string($registration))
604
			{
605
				return false;
606
			} else {
607
				$additional_query .= " AND spotter_output.registration = :registration";
608
				$query_values = array_merge($query_values,array(':registration' => $registration));
609
			}
610
		}
611
612
		if ($aircraft_icao != "")
613
		{
614
			$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
615
			if (!is_string($aircraft_icao))
616
			{
617
				return false;
618
			} else {
619
				$additional_query .= " AND spotter_output.aircraft_icao = :aircraft_icao";
620
				$query_values = array_merge($query_values,array(':aircraft_icao' => $aircraft_icao));
621
			}
622
		}
623
624
		if ($aircraft_manufacturer != "")
625
		{
626
			$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
627
			if (!is_string($aircraft_manufacturer))
628
			{
629
				return false;
630
			} else {
631
				$additional_query .= " AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer";
632
				$query_values = array_merge($query_values,array(':aircraft_manufacturer' => $aircraft_manufacturer));
633
			}
634
		}
635
636
		if ($highlights == "true")
637
		{
638
			if (!is_string($highlights))
639
			{
640
				return false;
641
			} else {
642
				$additional_query .= " AND (spotter_output.highlight <> '')";
643
			}
644
		}
645
646
		if ($airline_icao != "")
647
		{
648
			$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
649
			if (!is_string($airline_icao))
650
			{
651
				return false;
652
			} else {
653
				$additional_query .= " AND spotter_output.airline_icao = :airline_icao";
654
				$query_values = array_merge($query_values,array(':airline_icao' => $airline_icao));
655
			}
656
		}
657
658
		if ($airline_country != "")
659
		{
660
			$airline_country = filter_var($airline_country,FILTER_SANITIZE_STRING);
661
			if (!is_string($airline_country))
662
			{
663
				return false;
664
			} else {
665
				$additional_query .= " AND spotter_output.airline_country = :airline_country";
666
				$query_values = array_merge($query_values,array(':airline_country' => $airline_country));
667
			}
668
		}
669
670
		if ($airline_type != "")
671
		{
672
			if (!is_string($airline_type))
673
			{
674
				return false;
675
			} else {
676
				if ($airline_type == "passenger")
677
				{
678
					$additional_query .= " AND (spotter_output.airline_type = 'passenger')";
679
				}
680
				if ($airline_type == "cargo")
681
				{
682
					$additional_query .= " AND (spotter_output.airline_type = 'cargo')";
683
				}
684
				if ($airline_type == "military")
685
				{
686
					$additional_query .= " AND (spotter_output.airline_type = 'military')";
687
				}
688
			}
689
		}
690
691
		if ($airport != "")
692
		{
693
			$airport = filter_var($airport,FILTER_SANITIZE_STRING);
694
			if (!is_string($airport))
695
			{
696
				return false;
697
			} else {
698
				$additional_query .= " AND (spotter_output.departure_airport_icao = :airport OR spotter_output.arrival_airport_icao = :airport)";
699
				$query_values = array_merge($query_values,array(':airport' => $airport));
700
			}
701
		}
702
703
		if ($airport_country != "")
704
		{
705
			$airport_country = filter_var($airport_country,FILTER_SANITIZE_STRING);
706
			if (!is_string($airport_country))
707
			{
708
				return false;
709
			} else {
710
				$additional_query .= " AND (spotter_output.departure_airport_country = :airport_country OR spotter_output.arrival_airport_country = :airport_country)";
711
				$query_values = array_merge($query_values,array(':airport_country' => $airport_country));
712
			}
713
		}
714
    
715
		if ($callsign != "")
716
		{
717
			$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
718
			if (!is_string($callsign))
719
			{
720
				return false;
721
			} else {
722
				$translate = $Translation->ident2icao($callsign);
723
				if ($translate != $callsign) {
724
					$additional_query .= " AND (spotter_output.ident = :callsign OR spotter_output.ident = :translate)";
725
					$query_values = array_merge($query_values,array(':callsign' => $callsign,':translate' => $translate));
726
				} else {
727
					$additional_query .= " AND spotter_output.ident = :callsign";
728
					$query_values = array_merge($query_values,array(':callsign' => $callsign));
729
				}
730
			}
731
		}
732
733
		if ($owner != "")
734
		{
735
			$owner = filter_var($owner,FILTER_SANITIZE_STRING);
736
			if (!is_string($owner))
737
			{
738
				return false;
739
			} else {
740
				$additional_query .= " AND spotter_output.owner_name = :owner";
741
				$query_values = array_merge($query_values,array(':owner' => $owner));
742
			}
743
		}
744
745
		if ($pilot_name != "")
746
		{
747
			$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
748
			if (!is_string($pilot_name))
749
			{
750
				return false;
751
			} else {
752
				$additional_query .= " AND spotter_output.pilot_name = :pilot_name";
753
				$query_values = array_merge($query_values,array(':pilot_name' => $pilot_name));
754
			}
755
		}
756
757
		if ($pilot_id != "")
758
		{
759
			$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_STRING);
760
			if (!is_string($pilot_id))
761
			{
762
				return false;
763
			} else {
764
				$additional_query .= " AND spotter_output.pilot_id = :pilot_id";
765
				$query_values = array_merge($query_values,array(':pilot_id' => $pilot_id));
766
			}
767
		}
768
769
		if ($departure_airport_route != "")
770
		{
771
			$departure_airport_route = filter_var($departure_airport_route,FILTER_SANITIZE_STRING);
772
			if (!is_string($departure_airport_route))
773
			{
774
				return false;
775
			} else {
776
				$additional_query .= " AND spotter_output.departure_airport_icao = :departure_airport_route";
777
				$query_values = array_merge($query_values,array(':departure_airport_route' => $departure_airport_route));
778
			}
779
		}
780
781
		if ($arrival_airport_route != "")
782
		{
783
			$arrival_airport_route = filter_var($arrival_airport_route,FILTER_SANITIZE_STRING);
784
			if (!is_string($arrival_airport_route))
785
			{
786
				return false;
787
			} else {
788
				$additional_query .= " AND spotter_output.arrival_airport_icao = :arrival_airport_route";
789
				$query_values = array_merge($query_values,array(':arrival_airport_route' => $arrival_airport_route));
790
			}
791
		}
792
793
		if ($altitude != "")
794
		{
795
			$altitude_array = explode(",", $altitude);
796
			$altitude_array[0] = filter_var($altitude_array[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
797
			$altitude_array[1] = filter_var($altitude_array[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
798
799
			if ($altitude_array[1] != "")
800
			{                
801
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
802
				$altitude_array[1] = substr($altitude_array[1], 0, -2);
803
				$additional_query .= " AND altitude BETWEEN '".$altitude_array[0]."' AND '".$altitude_array[1]."' ";
804
			} else {
805
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
806
				$additional_query .= " AND altitude <= '".$altitude_array[0]."' ";
807
			}
808
		}
809
810
		if ($date_posted != "")
811
		{
812
			$date_array = explode(",", $date_posted);
813
			$date_array[0] = filter_var($date_array[0],FILTER_SANITIZE_STRING);
814
			$date_array[1] = filter_var($date_array[1],FILTER_SANITIZE_STRING);
815
816
			if ($globalTimezone != '') {
817
				date_default_timezone_set($globalTimezone);
818
				$datetime = new DateTime();
819
				$offset = $datetime->format('P');
820
			} else $offset = '+00:00';
821
822
			if ($date_array[1] != "")
823
			{
824
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
825
				$date_array[1] = date("Y-m-d H:i:s", strtotime($date_array[1]));
826
				if ($globalDBdriver == 'mysql') {
827
					$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]."' ";
828
				} else {
829
					$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]."' ";
830
				}
831
			} else {
832
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
833
				if ($globalDBdriver == 'mysql') {
834
					$additional_query .= " AND TIMESTAMP(CONVERT_TZ(spotter_output.date,'+00:00', '".$offset."')) >= '".$date_array[0]."' ";
835
				} else {
836
					$additional_query .= " AND CAST(spotter_output.date AT TIME ZONE INTERVAL ".$offset." AS TIMESTAMP) >= '".$date_array[0]."' ";
837
				}
838
			}
839
		}
840
841
		if ($limit != "")
842
		{
843
			$limit_array = explode(",", $limit);
844
			
845
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
846
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
847
			
848
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
849
			{
850
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
851
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
852
			} else $limit_query = "";
853
		} else $limit_query = "";
854
855
856
		if ($sort != "")
857
		{
858
			$search_orderby_array = $this->getOrderBy();
859
			$orderby_query = $search_orderby_array[$sort]['sql'];
860
		} else {
861
			if ($origLat != "" && $origLon != "" && $dist != "") {
862
				$orderby_query = " ORDER BY distance ASC";
863
			} else {
864
				$orderby_query = " ORDER BY spotter_output.date DESC";
865
			}
866
		}
867
868
		if ($includegeodata == "true")
869
		{
870
			$additional_query .= " AND spotter_output.waypoints <> ''";
871
		}
872
873
874
		if ($origLat != "" && $origLon != "" && $dist != "") {
875
			$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
876
877
			if ($globalDBdriver == 'mysql') {
878
				$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 
879
						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)) 
880
						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;
881
			} else {
882
				$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 
883
						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)) 
884
						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;
885
			}
886
		} else {		
887
			$query  = "SELECT spotter_output.* FROM spotter_output".$filter_query." spotter_output.ident <> '' 
888
					".$additional_query."
889
					".$orderby_query;
890
		}
891
		$spotter_array = $this->getDataFromDB($query, $query_values,$limit_query);
892
		return $spotter_array;
893
	}
894
	
895
	
896
	/**
897
	* Gets all the spotter information based on the latest data entry
898
	*
899
	* @return Array the spotter information
900
	*
901
	*/
902
	public function getLatestSpotterData($limit = '', $sort = '', $filter = array())
903
	{
904
		global $global_query;
905
		
906
		date_default_timezone_set('UTC');
907
908
		$filter_query = $this->getFilter($filter);
909
		
910
		if ($limit != "")
911
		{
912
			$limit_array = explode(",", $limit);
913
			
914
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
915
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
916
			
917
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
918
			{
919
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
920
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
921
			} else $limit_query = "";
922
		} else $limit_query = "";
923
		
924
		if ($sort != "")
925
		{
926
			$search_orderby_array = $this->getOrderBy();
927
			$orderby_query = $search_orderby_array[$sort]['sql'];
928
		} else {
929
			$orderby_query = " ORDER BY spotter_output.date DESC";
930
		}
931
932
		$query  = $global_query.$filter_query." ".$orderby_query;
933
934
		$spotter_array = $this->getDataFromDB($query, array(),$limit_query,true);
935
936
		return $spotter_array;
937
	}
938
    
939
    
940
    /**
941
	* Gets all the spotter information based on a user's latitude and longitude
942
	*
943
	* @return Array the spotter information
944
	*
945
	*/
946
	public function getLatestSpotterForLayar($lat, $lng, $radius, $interval)
947
	{
948
		date_default_timezone_set('UTC');
949
		$limit_query = '';
950
		if ($lat != "")
951
		{
952
			if (!is_numeric($lat))
953
			{
954
				return false;
955
			}
956
		}
957
        
958
		if ($lng != "")
959
		{
960
			if (!is_numeric($lng))
961
			{
962
				return false;
963
			}
964
		}
965
		
966
		if ($radius != "")
967
		{
968
			if (!is_numeric($radius))
969
			{
970
				return false;
971
			}
972
		}
973
    		$additional_query = '';
974
		if ($interval != "")
975
		{
976
			if (!is_string($interval))
977
			{
978
				return false;
979
			} else {
980
				if ($interval == "30m"){
981
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 MINUTE) <= $this_output.date ';
982
				} else if ($interval == "1h"){
983
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) <= $this_output.date ';
984
				} else if ($interval == "3h"){
985
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 3 HOUR) <= $this_output.date ';
986
				} else if ($interval == "6h"){
987
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 6 HOUR) <= $this_output.date ';
988
				} else if ($interval == "12h"){
989
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 12 HOUR) <= $this_output.date ';
990
				} else if ($interval == "24h"){
991
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 24 HOUR) <= $this_output.date ';
992
				} else if ($interval == "7d"){
993
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY) <= $this_output.date ';
994
				} else if ($interval == "30d"){
995
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 DAY) <= $this_output.date ';
996
				} 
997
			}
998
		}
999
1000
		$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 
1001
                   WHERE spotter_output.latitude <> '' 
1002
				   AND spotter_output.longitude <> '' 
1003
                   ".$additional_query."
1004
                   HAVING distance < :radius  
1005
				   ORDER BY distance";
1006
1007
		$spotter_array = $this->getDataFromDB($query, array(':radius' => $radius),$limit_query);
1008
1009
		return $spotter_array;
1010
	}
1011
    
1012
    
1013
    /**
1014
	* Gets all the spotter information sorted by the newest aircraft type
1015
	*
1016
	* @return Array the spotter information
1017
	*
1018
	*/
1019
	public function getNewestSpotterDataSortedByAircraftType($limit = '', $sort = '',$filter = array())
1020
	{
1021
		global $global_query;
1022
		
1023
		date_default_timezone_set('UTC');
1024
1025
		$filter_query = $this->getFilter($filter,true,true);
1026
1027
		$limit_query = '';
1028
		if ($limit != "")
1029
		{
1030
			$limit_array = explode(",", $limit);
1031
			
1032
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1033
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1034
			
1035
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1036
			{
1037
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1038
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1039
			}
1040
		}
1041
		
1042
		if ($sort != "")
1043
		{
1044
			$search_orderby_array = $this->getOrderBy();
1045
			$orderby_query = $search_orderby_array[$sort]['sql'];
1046
		} else {
1047
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1048
		}
1049
1050
		$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;
1051
1052
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1053
1054
		return $spotter_array;
1055
	}
1056
    
1057
    
1058
	/**
1059
	* Gets all the spotter information sorted by the newest aircraft registration
1060
	*
1061
	* @return Array the spotter information
1062
	*
1063
	*/
1064
	public function getNewestSpotterDataSortedByAircraftRegistration($limit = '', $sort = '', $filter = array())
1065
	{
1066
		global $global_query;
1067
		
1068
		date_default_timezone_set('UTC');
1069
		$filter_query = $this->getFilter($filter,true,true);
1070
1071
		$limit_query = '';
1072
		if ($limit != "")
1073
		{
1074
			$limit_array = explode(",", $limit);
1075
			
1076
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1077
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1078
			
1079
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1080
			{
1081
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1082
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1083
			}
1084
		}
1085
		
1086
		if ($sort != "")
1087
		{
1088
			$search_orderby_array = $this->getOrderBy();
1089
			$orderby_query = $search_orderby_array[$sort]['sql'];
1090
		} else {
1091
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1092
		}
1093
1094
		$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;
1095
1096
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1097
1098
		return $spotter_array;
1099
	}
1100
1101
1102
	/**
1103
	* Gets all the spotter information sorted by the newest airline
1104
	*
1105
	* @return Array the spotter information
1106
	*
1107
	*/
1108
	public function getNewestSpotterDataSortedByAirline($limit = '', $sort = '',$filter = array())
1109
	{
1110
		global $global_query;
1111
		
1112
		date_default_timezone_set('UTC');
1113
		$filter_query = $this->getFilter($filter,true,true);
1114
		
1115
		$limit_query = '';
1116
		if ($limit != "")
1117
		{
1118
			$limit_array = explode(",", $limit);
1119
			
1120
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1121
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1122
			
1123
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1124
			{
1125
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1126
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1127
			}
1128
		}
1129
		
1130
		if ($sort != "")
1131
		{
1132
			$search_orderby_array = $this->getOrderBy();
1133
			$orderby_query = $search_orderby_array[$sort]['sql'];
1134
		} else {
1135
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1136
		}
1137
1138
		$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;
1139
1140
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1141
1142
		return $spotter_array;
1143
	}
1144
    
1145
    
1146
    /**
1147
	* Gets all the spotter information sorted by the newest departure airport
1148
	*
1149
	* @return Array the spotter information
1150
	*
1151
	*/
1152
	public function getNewestSpotterDataSortedByDepartureAirport($limit = '', $sort = '', $filter = array())
1153
	{
1154
		global $global_query;
1155
		
1156
		date_default_timezone_set('UTC');
1157
		
1158
		$filter_query = $this->getFilter($filter,true,true);
1159
		
1160
		$limit_query = '';
1161
		
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.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;
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 sorted by the newest arrival airport
1194
	*
1195
	* @return Array the spotter information
1196
	*
1197
	*/
1198
	public function getNewestSpotterDataSortedByArrivalAirport($limit = '', $sort = '', $filter = array())
1199
	{
1200
		global $global_query;
1201
		
1202
		date_default_timezone_set('UTC');
1203
		$filter_query = $this->getFilter($filter,true,true);
1204
		$limit_query = '';
1205
		if ($limit != "")
1206
		{
1207
			$limit_array = explode(",", $limit);
1208
			
1209
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1210
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1211
			
1212
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1213
			{
1214
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1215
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1216
			}
1217
		}
1218
		
1219
		if ($sort != "")
1220
		{
1221
			$search_orderby_array = $this->getOrderBy();
1222
			$orderby_query = $search_orderby_array[$sort]['sql'];
1223
		} else {
1224
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1225
		}
1226
1227
		$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;
1228
1229
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1230
1231
		return $spotter_array;
1232
	}
1233
	
1234
1235
	/**
1236
	* Gets all the spotter information based on the spotter id
1237
	*
1238
	* @return Array the spotter information
1239
	*
1240
	*/
1241
	public function getSpotterDataByID($id = '')
1242
	{
1243
		global $global_query;
1244
		
1245
		date_default_timezone_set('UTC');
1246
		if ($id == '') return array();
1247
		$additional_query = "spotter_output.spotter_id = :id";
1248
		$query_values = array(':id' => $id);
1249
1250
		//$query  = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ";
1251
		$query  = $global_query." WHERE ".$additional_query." ";
1252
1253
		$spotter_array = $this->getDataFromDB($query,$query_values);
1254
1255
		return $spotter_array;
1256
	}
1257
1258
	
1259
	
1260
	
1261
	/**
1262
	* Gets all the spotter information based on the callsign
1263
	*
1264
	* @return Array the spotter information
1265
	*
1266
	*/
1267
	public function getSpotterDataByIdent($ident = '', $limit = '', $sort = '', $filter = array())
1268
	{
1269
		global $global_query;
1270
		
1271
		date_default_timezone_set('UTC');
1272
		
1273
		$query_values = array();
1274
		$limit_query = '';
1275
		$additional_query = '';
1276
		$filter_query = $this->getFilter($filter,true,true);
1277
		if ($ident != "")
1278
		{
1279
			if (!is_string($ident))
1280
			{
1281
				return false;
1282
			} else {
1283
				$additional_query = " AND (spotter_output.ident = :ident)";
1284
				$query_values = array(':ident' => $ident);
1285
			}
1286
		}
1287
		
1288
		if ($limit != "")
1289
		{
1290
			$limit_array = explode(",", $limit);
1291
			
1292
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1293
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1294
			
1295
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1296
			{
1297
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1298
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1299
			}
1300
		}
1301
1302
		if ($sort != "")
1303
		{
1304
			$search_orderby_array = $this->getOrderBy();
1305
			$orderby_query = $search_orderby_array[$sort]['sql'];
1306
		} else {
1307
			$orderby_query = " ORDER BY spotter_output.date DESC";
1308
		}
1309
1310
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1311
1312
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1313
1314
		return $spotter_array;
1315
	}
1316
	
1317
	/**
1318
	* Gets all the spotter information based on the owner
1319
	*
1320
	* @return Array the spotter information
1321
	*
1322
	*/
1323
	public function getSpotterDataByOwner($owner = '', $limit = '', $sort = '', $filter = array())
1324
	{
1325
		global $global_query;
1326
		
1327
		date_default_timezone_set('UTC');
1328
		
1329
		$query_values = array();
1330
		$limit_query = '';
1331
		$additional_query = '';
1332
		$filter_query = $this->getFilter($filter,true,true);
1333
		if ($owner != "")
1334
		{
1335
			if (!is_string($owner))
1336
			{
1337
				return false;
1338
			} else {
1339
				$additional_query = " AND (spotter_output.owner_name = :owner)";
1340
				$query_values = array(':owner' => $owner);
1341
			}
1342
		}
1343
		
1344
		if ($limit != "")
1345
		{
1346
			$limit_array = explode(",", $limit);
1347
			
1348
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1349
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1350
			
1351
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1352
			{
1353
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1354
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1355
			}
1356
		}
1357
1358
		if ($sort != "")
1359
		{
1360
			$search_orderby_array = $this->getOrderBy();
1361
			if (isset($search_orderby_array[$sort]['sql'])) $orderby_query = $search_orderby_array[$sort]['sql'];
1362
			else $orderby_query = " ORDER BY spotter_output.date DESC";
1363
		} else {
1364
			$orderby_query = " ORDER BY spotter_output.date DESC";
1365
		}
1366
1367
		$query = $global_query.$filter_query." spotter_output.owner_name <> '' ".$additional_query." ".$orderby_query;
1368
1369
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1370
1371
		return $spotter_array;
1372
	}
1373
	
1374
	/**
1375
	* Gets all the spotter information based on the pilot
1376
	*
1377
	* @return Array the spotter information
1378
	*
1379
	*/
1380
	public function getSpotterDataByPilot($pilot = '', $limit = '', $sort = '', $filter = array())
1381
	{
1382
		global $global_query;
1383
		
1384
		date_default_timezone_set('UTC');
1385
		
1386
		$query_values = array();
1387
		$limit_query = '';
1388
		$additional_query = '';
1389
		$filter_query = $this->getFilter($filter,true,true);
1390
		if ($pilot != "")
1391
		{
1392
			$additional_query = " AND (spotter_output.pilot_name = :pilot OR spotter_output.pilot_id = :pilot)";
1393
			$query_values = array(':pilot' => $pilot);
1394
		}
1395
		
1396
		if ($limit != "")
1397
		{
1398
			$limit_array = explode(",", $limit);
1399
			
1400
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1401
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1402
			
1403
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1404
			{
1405
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1406
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1407
			}
1408
		}
1409
1410
		if ($sort != "")
1411
		{
1412
			$search_orderby_array = $this->getOrderBy();
1413
			$orderby_query = $search_orderby_array[$sort]['sql'];
1414
		} else {
1415
			$orderby_query = " ORDER BY spotter_output.date DESC";
1416
		}
1417
1418
		$query = $global_query.$filter_query." spotter_output.pilot_name <> '' ".$additional_query." ".$orderby_query;
1419
1420
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1421
1422
		return $spotter_array;
1423
	}
1424
	
1425
	
1426
	
1427
	/**
1428
	* Gets all the spotter information based on the aircraft type
1429
	*
1430
	* @return Array the spotter information
1431
	*
1432
	*/
1433
	public function getSpotterDataByAircraft($aircraft_type = '', $limit = '', $sort = '', $filter = array())
1434
	{
1435
		global $global_query;
1436
		
1437
		date_default_timezone_set('UTC');
1438
		
1439
		$query_values = array();
1440
		$limit_query = '';
1441
		$additional_query = '';
1442
		$filter_query = $this->getFilter($filter,true,true);
1443
		
1444
		if ($aircraft_type != "")
1445
		{
1446
			if (!is_string($aircraft_type))
1447
			{
1448
				return false;
1449
			} else {
1450
				$additional_query = " AND (spotter_output.aircraft_icao = :aircraft_type)";
1451
				$query_values = array(':aircraft_type' => $aircraft_type);
1452
			}
1453
		}
1454
		
1455
		if ($limit != "")
1456
		{
1457
			$limit_array = explode(",", $limit);
1458
			
1459
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1460
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1461
			
1462
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1463
			{
1464
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1465
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1466
			}
1467
		}
1468
1469
		if ($sort != "")
1470
		{
1471
			$search_orderby_array = $this->getOrderBy();
1472
			$orderby_query = $search_orderby_array[$sort]['sql'];
1473
		} else {
1474
			$orderby_query = " ORDER BY spotter_output.date DESC";
1475
		}
1476
1477
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1478
1479
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1480
1481
		return $spotter_array;
1482
	}
1483
	
1484
	
1485
	/**
1486
	* Gets all the spotter information based on the aircraft registration
1487
	*
1488
	* @return Array the spotter information
1489
	*
1490
	*/
1491
	public function getSpotterDataByRegistration($registration = '', $limit = '', $sort = '', $filter = array())
1492
	{
1493
		global $global_query;
1494
		
1495
		date_default_timezone_set('UTC');
1496
		
1497
		$query_values = array();
1498
		$limit_query = '';
1499
		$additional_query = '';
1500
		
1501
		if ($registration != "")
1502
		{
1503
			if (!is_string($registration))
1504
			{
1505
				return false;
1506
			} else {
1507
				$additional_query = " (spotter_output.registration = :registration)";
1508
				$query_values = array(':registration' => $registration);
1509
			}
1510
		}
1511
		
1512
		if ($limit != "")
1513
		{
1514
			$limit_array = explode(",", $limit);
1515
			
1516
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1517
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1518
			
1519
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1520
			{
1521
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1522
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1523
			}
1524
		}
1525
1526
		if ($sort != "")
1527
		{
1528
			$search_orderby_array = $this->getOrderBy();
1529
			$orderby_query = $search_orderby_array[$sort]['sql'];
1530
		} else {
1531
			$orderby_query = " ORDER BY spotter_output.date DESC";
1532
		}
1533
		$filter_query = $this->getFilter($filter,true,true);
1534
1535
		//$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1536
		$query = $global_query.$filter_query." ".$additional_query." ".$orderby_query;
1537
1538
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1539
1540
		return $spotter_array;
1541
	}
1542
1543
	
1544
	
1545
	
1546
	/**
1547
	* Gets all the spotter information based on the airline
1548
	*
1549
	* @return Array the spotter information
1550
	*
1551
	*/
1552
	public function getSpotterDataByAirline($airline = '', $limit = '', $sort = '',$filters = array())
1553
	{
1554
		global $global_query;
1555
		
1556
		date_default_timezone_set('UTC');
1557
1558
		$query_values = array();
1559
		$limit_query = '';
1560
		$additional_query = '';
1561
		$filter_query = $this->getFilter($filters,true,true);
1562
		
1563
		if ($airline != "")
1564
		{
1565
			if (!is_string($airline))
1566
			{
1567
				return false;
1568
			} else {
1569
				$additional_query = " AND (spotter_output.airline_icao = :airline)";
1570
				$query_values = array(':airline' => $airline);
1571
			}
1572
		}
1573
		
1574
		if ($limit != "")
1575
		{
1576
			$limit_array = explode(",", $limit);
1577
			
1578
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1579
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1580
			
1581
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1582
			{
1583
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1584
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1585
			}
1586
		}
1587
		
1588
		if ($sort != "")
1589
		{
1590
			$search_orderby_array = $this->getOrderBy();
1591
			$orderby_query = $search_orderby_array[$sort]['sql'];
1592
		} else {
1593
			$orderby_query = " ORDER BY spotter_output.date DESC";
1594
		}
1595
1596
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1597
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1598
1599
		return $spotter_array;
1600
	}
1601
	
1602
	
1603
	/**
1604
	* Gets all the spotter information based on the airport
1605
	*
1606
	* @return Array the spotter information
1607
	*
1608
	*/
1609
	public function getSpotterDataByAirport($airport = '', $limit = '', $sort = '',$filters = array())
1610
	{
1611
		global $global_query;
1612
		
1613
		date_default_timezone_set('UTC');
1614
		$query_values = array();
1615
		$limit_query = '';
1616
		$additional_query = '';
1617
		$filter_query = $this->getFilter($filters,true,true);
1618
		
1619
		if ($airport != "")
1620
		{
1621
			if (!is_string($airport))
1622
			{
1623
				return false;
1624
			} else {
1625
				$additional_query .= " AND ((spotter_output.departure_airport_icao = :airport) OR (spotter_output.arrival_airport_icao = :airport))";
1626
				$query_values = array(':airport' => $airport);
1627
			}
1628
		}
1629
		
1630
		if ($limit != "")
1631
		{
1632
			$limit_array = explode(",", $limit);
1633
			
1634
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1635
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1636
			
1637
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1638
			{
1639
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1640
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1641
			}
1642
		}
1643
		
1644
		if ($sort != "")
1645
		{
1646
			$search_orderby_array = $this->getOrderBy();
1647
			$orderby_query = $search_orderby_array[$sort]['sql'];
1648
		} else {
1649
			$orderby_query = " ORDER BY spotter_output.date DESC";
1650
		}
1651
1652
		$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;
1653
1654
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1655
1656
		return $spotter_array;
1657
	}
1658
1659
1660
1661
	/**
1662
	* Gets all the spotter information based on the date
1663
	*
1664
	* @return Array the spotter information
1665
	*
1666
	*/
1667
	public function getSpotterDataByDate($date = '', $limit = '', $sort = '',$filter = array())
1668
	{
1669
		global $global_query, $globalTimezone, $globalDBdriver;
1670
		
1671
		$query_values = array();
1672
		$limit_query = '';
1673
		$additional_query = '';
1674
1675
		$filter_query = $this->getFilter($filter,true,true);
1676
		
1677
		if ($date != "")
1678
		{
1679
			if ($globalTimezone != '') {
1680
				date_default_timezone_set($globalTimezone);
1681
				$datetime = new DateTime($date);
1682
				$offset = $datetime->format('P');
1683
			} else {
1684
				date_default_timezone_set('UTC');
1685
				$datetime = new DateTime($date);
1686
				$offset = '+00:00';
1687
			}
1688
			if ($globalDBdriver == 'mysql') {
1689
				$additional_query = " AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date ";
1690
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':offset' => $offset);
1691
			} elseif ($globalDBdriver == 'pgsql') {
1692
				//$globalTimezone = 'UTC';
1693
				$additional_query = " AND to_char(spotter_output.date AT TIME ZONE :timezone,'YYYY-mm-dd') = :date ";
1694
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':timezone' => $globalTimezone);
1695
				//$additional_query = " AND to_char(spotter_output.date,'YYYY-mm-dd') = :date ";
1696
				//$query_values = array(':date' => $datetime->format('Y-m-d'));
1697
			}
1698
		}
1699
		
1700
		if ($limit != "")
1701
		{
1702
			$limit_array = explode(",", $limit);
1703
			
1704
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1705
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1706
			
1707
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1708
			{
1709
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1710
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1711
			}
1712
		}
1713
1714
		if ($sort != "")
1715
		{
1716
			$search_orderby_array = $this->getOrderBy();
1717
			$orderby_query = $search_orderby_array[$sort]['sql'];
1718
		} else {
1719
			$orderby_query = " ORDER BY spotter_output.date DESC";
1720
		}
1721
1722
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query.$orderby_query;
1723
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1724
		return $spotter_array;
1725
	}
1726
1727
1728
1729
	/**
1730
	* Gets all the spotter information based on the country name
1731
	*
1732
	* @return Array the spotter information
1733
	*
1734
	*/
1735
	public function getSpotterDataByCountry($country = '', $limit = '', $sort = '',$filters = array())
1736
	{
1737
		global $global_query;
1738
		
1739
		date_default_timezone_set('UTC');
1740
		
1741
		$query_values = array();
1742
		$limit_query = '';
1743
		$additional_query = '';
1744
		$filter_query = $this->getFilter($filters,true,true);
1745
		if ($country != "")
1746
		{
1747
			if (!is_string($country))
1748
			{
1749
				return false;
1750
			} else {
1751
				$additional_query .= " AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country))";
1752
				$additional_query .= " OR spotter_output.airline_country = :country";
1753
				$query_values = array(':country' => $country);
1754
			}
1755
		}
1756
		
1757
		if ($limit != "")
1758
		{
1759
			$limit_array = explode(",", $limit);
1760
			
1761
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1762
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1763
			
1764
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1765
			{
1766
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1767
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1768
			}
1769
		}
1770
					
1771
		if ($sort != "")
1772
		{
1773
			$search_orderby_array = $this->getOrderBy();
1774
			$orderby_query = $search_orderby_array[$sort]['sql'];
1775
		} else {
1776
			$orderby_query = " ORDER BY spotter_output.date DESC";
1777
		}
1778
1779
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1780
1781
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1782
1783
		return $spotter_array;
1784
	}	
1785
	
1786
	
1787
	/**
1788
	* Gets all the spotter information based on the manufacturer name
1789
	*
1790
	* @return Array the spotter information
1791
	*
1792
	*/
1793
	public function getSpotterDataByManufacturer($aircraft_manufacturer = '', $limit = '', $sort = '', $filters = array())
1794
	{
1795
		global $global_query;
1796
		
1797
		date_default_timezone_set('UTC');
1798
		
1799
		$query_values = array();
1800
		$additional_query = '';
1801
		$limit_query = '';
1802
		$filter_query = $this->getFilter($filters,true,true);
1803
		
1804
		if ($aircraft_manufacturer != "")
1805
		{
1806
			if (!is_string($aircraft_manufacturer))
1807
			{
1808
				return false;
1809
			} else {
1810
				$additional_query .= " AND (spotter_output.aircraft_manufacturer = :aircraft_manufacturer)";
1811
				$query_values = array(':aircraft_manufacturer' => $aircraft_manufacturer);
1812
			}
1813
		}
1814
		
1815
		if ($limit != "")
1816
		{
1817
			$limit_array = explode(",", $limit);
1818
			
1819
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1820
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1821
			
1822
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1823
			{
1824
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1825
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1826
			}
1827
		}
1828
1829
		if ($sort != "")
1830
		{
1831
			$search_orderby_array = $this->getOrderBy();
1832
			$orderby_query = $search_orderby_array[$sort]['sql'];
1833
		} else {
1834
			$orderby_query = " ORDER BY spotter_output.date DESC";
1835
		}
1836
1837
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1838
1839
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1840
1841
		return $spotter_array;
1842
	}
1843
1844
1845
  
1846
  
1847
	/**
1848
	* Gets a list of all aircraft that take a route
1849
	*
1850
	* @param String $departure_airport_icao ICAO code of departure airport
1851
	* @param String $arrival_airport_icao ICAO code of arrival airport
1852
	* @return Array the spotter information
1853
	*
1854
	*/
1855
	public function getSpotterDataByRoute($departure_airport_icao = '', $arrival_airport_icao = '', $limit = '', $sort = '', $filters = array())
1856
	{
1857
		global $global_query;
1858
		
1859
		$query_values = array();
1860
		$additional_query = '';
1861
		$limit_query = '';
1862
		$filter_query = $this->getFilter($filters,true,true);
1863
		if ($departure_airport_icao != "")
1864
		{
1865
			if (!is_string($departure_airport_icao))
1866
			{
1867
				return false;
1868
			} else {
1869
				$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
1870
				$additional_query .= " AND (spotter_output.departure_airport_icao = :departure_airport_icao)";
1871
				//$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";
1872
				$query_values = array(':departure_airport_icao' => $departure_airport_icao);
1873
			}
1874
		}
1875
		
1876
		if ($arrival_airport_icao != "")
1877
		{
1878
			if (!is_string($arrival_airport_icao))
1879
			{
1880
				return false;
1881
			} else {
1882
				$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
1883
				$additional_query .= " AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)";
1884
				//$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)";
1885
				$query_values = array_merge($query_values,array(':arrival_airport_icao' => $arrival_airport_icao));
1886
			}
1887
		}
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.ident <> '' ".$additional_query." ".$orderby_query;
1912
          
1913
		//$result = mysqli_query($GLOBALS["___mysqli_ston"], $query);
1914
1915
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1916
1917
		return $spotter_array;
1918
	}
1919
	
1920
	
1921
	
1922
	/**
1923
	* Gets all the spotter information based on the special column in the table
1924
	*
1925
	* @return Array the spotter information
1926
	*
1927
	*/
1928
	public function getSpotterDataByHighlight($limit = '', $sort = '', $filter = array())
1929
	{
1930
		global $global_query;
1931
		
1932
		date_default_timezone_set('UTC');
1933
		$filter_query = $this->getFilter($filter,true,true);
1934
		$limit_query = '';
1935
		
1936
		if ($limit != "")
1937
		{
1938
			$limit_array = explode(",", $limit);
1939
			
1940
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1941
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1942
			
1943
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1944
			{
1945
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1946
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1947
			}
1948
		}
1949
		
1950
		if ($sort != "")
1951
		{
1952
			$search_orderby_array = $this->getOrderBy();
1953
			$orderby_query = $search_orderby_array[$sort]['sql'];
1954
		} else {
1955
			$orderby_query = " ORDER BY spotter_output.date DESC";
1956
		}
1957
1958
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' ".$orderby_query;
1959
1960
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1961
1962
		return $spotter_array;
1963
	}
1964
1965
	/**
1966
	* Gets all the highlight based on a aircraft registration
1967
	*
1968
	* @return String the highlight text
1969
	*
1970
	*/
1971
	public function getHighlightByRegistration($registration,$filter = array())
1972
	{
1973
		global $global_query;
1974
		
1975
		date_default_timezone_set('UTC');
1976
		$filter_query = $this->getFilter($filter,true,true);
1977
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
1978
		
1979
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' AND spotter_output.registration = :registration";
1980
		$sth = $this->db->prepare($query);
1981
		$sth->execute(array(':registration' => $registration));
1982
1983
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1984
		{
1985
			$highlight = $row['highlight'];
1986
		}
1987
		if (isset($highlight)) return $highlight;
1988
	}
1989
1990
	
1991
	/**
1992
	* Gets the squawk usage from squawk code
1993
	*
1994
	* @param String $squawk squawk code
1995
	* @param String $country country
1996
	* @return String usage
1997
	*
1998
	*/
1999
	public function getSquawkUsage($squawk = '',$country = 'FR')
2000
	{
2001
		
2002
		$squawk = filter_var($squawk,FILTER_SANITIZE_STRING);
2003
		$country = filter_var($country,FILTER_SANITIZE_STRING);
2004
2005
		$query  = "SELECT squawk.* FROM squawk WHERE squawk.code = :squawk AND squawk.country = :country LIMIT 1";
2006
		$query_values = array(':squawk' => ltrim($squawk,'0'), ':country' => $country);
2007
		
2008
		$sth = $this->db->prepare($query);
2009
		$sth->execute($query_values);
2010
    
2011
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2012
		$sth->closeCursor();
2013
		if (count($row) > 0) {
2014
			return $row['usage'];
2015
		} else return '';
2016
	}
2017
2018
	/**
2019
	* Gets the airport icao from the iata
2020
	*
2021
	* @param String $airport_iata the iata code of the airport
2022
	* @return String airport iata
2023
	*
2024
	*/
2025
	public function getAirportIcao($airport_iata = '')
2026
	{
2027
		
2028
		$airport_iata = filter_var($airport_iata,FILTER_SANITIZE_STRING);
2029
2030
		$query  = "SELECT airport.* FROM airport WHERE airport.iata = :airport LIMIT 1";
2031
		$query_values = array(':airport' => $airport_iata);
2032
		
2033
		$sth = $this->db->prepare($query);
2034
		$sth->execute($query_values);
2035
		
2036
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2037
		$sth->closeCursor();
2038
		if (count($row) > 0) {
2039
			return $row['icao'];
2040
		} else return '';
2041
	}
2042
2043
	/**
2044
	* Gets the airport distance
2045
	*
2046
	* @param String $airport_icao the icao code of the airport
2047
	* @param Float $latitude the latitude
2048
	* @param Float $longitude the longitude
2049
	* @return Float distance to the airport
2050
	*
2051
	*/
2052
	public function getAirportDistance($airport_icao,$latitude,$longitude)
2053
	{
2054
		
2055
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
2056
2057
		$query  = "SELECT airport.latitude, airport.longitude FROM airport WHERE airport.icao = :airport LIMIT 1";
2058
		$query_values = array(':airport' => $airport_icao);
2059
		$sth = $this->db->prepare($query);
2060
		$sth->execute($query_values);
2061
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2062
		$sth->closeCursor();
2063
		if (count($row) > 0) {
2064
			$airport_latitude = $row['latitude'];
2065
			$airport_longitude = $row['longitude'];
2066
			$Common = new Common();
2067
			return $Common->distance($latitude,$longitude,$airport_latitude,$airport_longitude);
2068
		} else return '';
2069
	}
2070
	
2071
	/**
2072
	* Gets the airport info based on the icao
2073
	*
2074
	* @param String $airport the icao code of the airport
2075
	* @return Array airport information
2076
	*
2077
	*/
2078
	public function getAllAirportInfo($airport = '')
2079
	{
2080
		
2081
		$airport = filter_var($airport,FILTER_SANITIZE_STRING);
2082
2083
		$query_values = array();
2084
		if ($airport == 'NA') {
2085
			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' => ''));
2086
		} elseif ($airport == '') {
2087
			$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";
2088
		} else {
2089
			$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";
2090
			$query_values = array(':airport' => $airport);
2091
		}
2092
		
2093
		$sth = $this->db->prepare($query);
2094
		$sth->execute($query_values);
2095
		/*
2096
		$airport_array = array();
2097
		$temp_array = array();
2098
		
2099
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2100
		{
2101
			$temp_array['name'] = $row['name'];
2102
			$temp_array['city'] = $row['city'];
2103
			$temp_array['country'] = $row['country'];
2104
			$temp_array['iata'] = $row['iata'];
2105
			$temp_array['icao'] = $row['icao'];
2106
			$temp_array['latitude'] = $row['latitude'];
2107
			$temp_array['longitude'] = $row['longitude'];
2108
			$temp_array['altitude'] = $row['altitude'];
2109
			$temp_array['home_link'] = $row['home_link'];
2110
			$temp_array['wikipedia_link'] = $row['wikipedia_link'];
2111
			$temp_array['image'] = $row['image'];
2112
			$temp_array['image_thumb'] = $row['image_thumb'];
2113
2114
			$airport_array[] = $temp_array;
2115
		}
2116
2117
		return $airport_array;
2118
		*/
2119
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2120
	}
2121
	
2122
	/**
2123
	* Gets the airport info based on the country
2124
	*
2125
	* @param Array $countries Airports countries
2126
	* @return Array airport information
2127
	*
2128
	*/
2129
	public function getAllAirportInfobyCountry($countries)
2130
	{
2131
		$lst_countries = '';
2132
		foreach ($countries as $country) {
2133
			$country = filter_var($country,FILTER_SANITIZE_STRING);
2134
			if ($lst_countries == '') {
2135
				$lst_countries = "'".$country."'";
2136
			} else {
2137
				$lst_countries .= ",'".$country."'";
2138
			}
2139
		}
2140
		$query  = "SELECT airport.* FROM airport WHERE airport.country IN (".$lst_countries.")";
2141
		
2142
		$sth = $this->db->prepare($query);
2143
		$sth->execute();
2144
    
2145
		$airport_array = array();
2146
		$temp_array = array();
2147
		
2148
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2149
		{
2150
			$temp_array['name'] = $row['name'];
2151
			$temp_array['city'] = $row['city'];
2152
			$temp_array['country'] = $row['country'];
2153
			$temp_array['iata'] = $row['iata'];
2154
			$temp_array['icao'] = $row['icao'];
2155
			$temp_array['latitude'] = $row['latitude'];
2156
			$temp_array['longitude'] = $row['longitude'];
2157
			$temp_array['altitude'] = $row['altitude'];
2158
2159
			$airport_array[] = $temp_array;
2160
		}
2161
2162
		return $airport_array;
2163
	}
2164
	
2165
	/**
2166
	* Gets airports info based on the coord
2167
	*
2168
	* @param Array $coord Airports longitude min,latitude min, longitude max, latitude max
2169
	* @return Array airport information
2170
	*
2171
	*/
2172
	public function getAllAirportInfobyCoord($coord)
2173
	{
2174
		global $globalDBdriver;
2175
		if (is_array($coord)) {
2176
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2177
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2178
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2179
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2180
		} else return array();
2181
		if ($globalDBdriver == 'mysql') {
2182
			$query  = "SELECT airport.* FROM airport WHERE airport.latitude BETWEEN ".$minlat." AND ".$maxlat." AND airport.longitude BETWEEN ".$minlong." AND ".$maxlong." AND airport.type != 'closed'";
2183
		} else {
2184
			$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'";
2185
		}
2186
		$sth = $this->db->prepare($query);
2187
		$sth->execute();
2188
    
2189
		$airport_array = array();
2190
		
2191
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2192
		{
2193
			$temp_array = $row;
2194
2195
			$airport_array[] = $temp_array;
2196
		}
2197
2198
		return $airport_array;
2199
	}
2200
2201
	/**
2202
	* Gets waypoints info based on the coord
2203
	*
2204
	* @param Array $coord waypoints coord
2205
	* @return Array airport information
2206
	*
2207
	*/
2208
	public function getAllWaypointsInfobyCoord($coord)
2209
	{
2210
		if (is_array($coord)) {
2211
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2212
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2213
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2214
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2215
		} else return array();
2216
		//$query  = "SELECT waypoints.* FROM waypoints WHERE waypoints.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_begin BETWEEN ".$minlong." AND ".$maxlong;
2217
		$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.")";
2218
		//$query  = "SELECT waypoints.* FROM waypoints";
2219
		//$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";
2220
		//$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;
2221
		//$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;
2222
		//echo $query;
2223
		
2224
		$sth = $this->db->prepare($query);
2225
		$sth->execute();
2226
    
2227
		$waypoints_array = array();
2228
		
2229
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2230
		{
2231
			$temp_array = $row;
2232
2233
			$waypoints_array[] = $temp_array;
2234
		}
2235
2236
		return $waypoints_array;
2237
	}
2238
	
2239
	
2240
	/**
2241
	* Gets the airline info based on the icao code or iata code
2242
	*
2243
	* @param String $airline_icao the iata code of the airport
2244
	* @return Array airport information
2245
	*
2246
	*/
2247
	public function getAllAirlineInfo($airline_icao, $fromsource = NULL)
2248
	{
2249
		global $globalUseRealAirlines;
2250
		if (isset($globalUseRealAirlines) && $globalUseRealAirlines) $fromsource = NULL;
2251
		$airline_icao = strtoupper(filter_var($airline_icao,FILTER_SANITIZE_STRING));
2252
		if ($airline_icao == 'NA') {
2253
			$airline_array = array();
2254
			$airline_array[] = array('name' => 'Not Available','iata' => 'NA', 'icao' => 'NA', 'callsign' => '', 'country' => 'NA', 'type' =>'');
2255
			return $airline_array;
2256
		} else {
2257
			if (strlen($airline_icao) == 2) {
2258
				if ($fromsource === NULL) {
2259
					$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";
2260
				} else {
2261
					$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";
2262
				}
2263
			} else {
2264
				if ($fromsource === NULL) {
2265
					$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";
2266
				} else {
2267
					$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";
2268
				}
2269
			}
2270
			
2271
			$sth = $this->db->prepare($query);
2272
			if ($fromsource === NULL) {
2273
				$sth->execute(array(':airline_icao' => $airline_icao));
2274
			} else {
2275
				$sth->execute(array(':airline_icao' => $airline_icao,':fromsource' => $fromsource));
2276
			}
2277
                        /*
2278
			$airline_array = array();
2279
			$temp_array = array();
2280
		
2281
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2282
			{
2283
				$temp_array['name'] = $row['name'];
2284
				$temp_array['iata'] = $row['iata'];
2285
				$temp_array['icao'] = $row['icao'];
2286
				$temp_array['callsign'] = $row['callsign'];
2287
				$temp_array['country'] = $row['country'];
2288
				$temp_array['type'] = $row['type'];
2289
				$airline_array[] = $temp_array;
2290
			}
2291
			return $airline_array;
2292
			*/
2293
			$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2294
			if (empty($result) && $fromsource !== NULL) {
2295
				/*
2296
				$query = 'SELECT COUNT(*) AS nb FROM airlines WHERE forsource = :fromsource';
2297
				$sth = $this->db->prepare($query);
2298
				$sth->execute(array(':fromsource' => $fromsource));
2299
				$row = $sth->fetch(PDO::FETCH_ASSOC);
2300
				$sth->closeCursor();
2301
				if ($row['nb'] == 0) $result = $this->getAllAirlineInfo($airline_icao);
2302
				*/
2303
				$result = $this->getAllAirlineInfo($airline_icao);
2304
			}
2305
			return $result;
2306
		}
2307
	}
2308
	
2309
	/**
2310
	* Gets the airline info based on the airline name
2311
	*
2312
	* @param String $airline_name the name of the airline
2313
	* @return Array airline information
2314
	*
2315
	*/
2316
	public function getAllAirlineInfoByName($airline_name, $fromsource = NULL)
2317
	{
2318
		global $globalUseRealAirlines;
2319
		if (isset($globalUseRealAirlines) && $globalUseRealAirlines) $fromsource = NULL;
2320
		$airline_name = strtolower(filter_var($airline_name,FILTER_SANITIZE_STRING));
2321
		$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";
2322
		$sth = $this->db->prepare($query);
2323
		if ($fromsource === NULL) {
2324
			$sth->execute(array(':airline_name' => $airline_name));
2325
		} else {
2326
			$sth->execute(array(':airline_name' => $airline_name,':fromsource' => $fromsource));
2327
		}
2328
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2329
		if (empty($result) && $fromsource !== NULL) {
2330
			$query = 'SELECT COUNT(*) AS nb FROM airlines WHERE forsource = :fromsource';
2331
			$sth = $this->db->prepare($query);
2332
			$sth->execute(array(':fromsource' => $fromsource));
2333
			$row = $sth->fetch(PDO::FETCH_ASSOC);
2334
			$sth->closeCursor();
2335
			if ($row['nb'] == 0) $result = $this->getAllAirlineInfoByName($airline_name);
2336
		}
2337
		return $result;
2338
	}
2339
	
2340
	
2341
	
2342
	/**
2343
	* Gets the aircraft info based on the aircraft type
2344
	*
2345
	* @param String $aircraft_type the aircraft type
2346
	* @return Array aircraft information
2347
	*
2348
	*/
2349
	public function getAllAircraftInfo($aircraft_type)
2350
	{
2351
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2352
2353
		if ($aircraft_type == 'NA') {
2354
			return array(array('icao' => 'NA','type' => 'Not Available', 'manufacturer' => 'Not Available', 'aircraft_shadow' => NULL));
2355
		}
2356
		$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";
2357
		
2358
		$sth = $this->db->prepare($query);
2359
		$sth->execute(array(':aircraft_type' => $aircraft_type));
2360
		/*
2361
		$aircraft_array = array();
2362
		$temp_array = array();
2363
		
2364
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2365
		{
2366
			$temp_array = array();
2367
			$temp_array['icao'] = $row['icao'];
2368
			$temp_array['type'] = $row['type'];
2369
			$temp_array['manufacturer'] = $row['manufacturer'];
2370
			$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
2371
2372
			$aircraft_array[] = $temp_array;
2373
		}
2374
		return $aircraft_array;
2375
		*/
2376
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2377
	}
2378
2379
	/**
2380
	* Gets the aircraft icao based on the aircraft name/type
2381
	*
2382
	* @param String $aircraft_type the aircraft type
2383
	* @return String aircraft information
2384
	*
2385
	*/
2386
	public function getAircraftIcao($aircraft_type)
2387
	{
2388
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2389
		$all_aircraft = array('737-300' => 'B733',
2390
				'777-200' => 'B772',
2391
				'777-200ER' => 'B772',
2392
				'777-300ER' => 'B77W',
2393
				'c172p' => 'C172',
2394
				'aerostar' => 'AEST',
2395
				'A320-211' => 'A320',
2396
				'747-8i' => 'B748',
2397
				'A380' => 'A388');
2398
		if (isset($all_aircraft[$aircraft_type])) return $all_aircraft[$aircraft_type];
2399
2400
		$query  = "SELECT aircraft.icao FROM aircraft WHERE aircraft.type LIKE :saircraft_type OR aircraft.type = :aircraft_type OR aircraft.icao = :aircraft_type LIMIT 1";
2401
		$aircraft_type = strtoupper($aircraft_type);
2402
		$sth = $this->db->prepare($query);
2403
		$sth->execute(array(':saircraft_type' => '%'.$aircraft_type.'%',':aircraft_type' => $aircraft_type,));
2404
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2405
		if (isset($result[0]['icao'])) return $result[0]['icao'];
2406
		else return '';
2407
	}
2408
	
2409
	/**
2410
	* Gets the aircraft info based on the aircraft modes
2411
	*
2412
	* @param String $aircraft_modes the aircraft ident (hex)
2413
	* @return String aircraft type
2414
	*
2415
	*/
2416
	public function getAllAircraftType($aircraft_modes,$source_type = '')
2417
	{
2418
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
2419
		$source_type = filter_var($source_type,FILTER_SANITIZE_STRING);
2420
2421
		if ($source_type == '' || $source_type == 'modes') {
2422
			$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes AND aircraft_modes.source_type = 'modes' ORDER BY FirstCreated DESC LIMIT 1";
2423
		} else {
2424
			$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes AND aircraft_modes.source_type = 'flarm' ORDER BY FirstCreated DESC LIMIT 1";
2425
		}
2426
		
2427
		$sth = $this->db->prepare($query);
2428
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
2429
2430
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2431
		$sth->closeCursor();
2432
		if (isset($row['icaotypecode'])) {
2433
			$icao = $row['icaotypecode'];
2434
			if (isset($this->aircraft_correct_icaotype[$icao])) $icao = $this->aircraft_correct_icaotype[$icao];
2435
			return $icao;
2436
		} elseif ($source_type == 'flarm') {
2437
			return $this->getAllAircraftType($aircraft_modes);
2438
		} else  return '';
2439
	}
2440
2441
	/**
2442
	* Gets the aircraft info based on the aircraft registration
2443
	*
2444
	* @param String $registration the aircraft registration
2445
	* @return String aircraft type
2446
	*
2447
	*/
2448
	public function getAllAircraftTypeByRegistration($registration)
2449
	{
2450
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2451
2452
		$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.registration = :registration ORDER BY FirstCreated DESC LIMIT 1";
2453
		
2454
		$sth = $this->db->prepare($query);
2455
		$sth->execute(array(':registration' => $registration));
2456
2457
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2458
		$sth->closeCursor();
2459
		if (isset($row['icaotypecode'])) {
2460
			return $row['icaotypecode'];
2461
		} else return '';
2462
	}
2463
2464
	/**
2465
	* Gets the spotter_id and flightaware_id based on the aircraft registration
2466
	*
2467
	* @param String $registration the aircraft registration
2468
	* @return Array spotter_id and flightaware_id
2469
	*
2470
	*/
2471
	public function getAllIDByRegistration($registration)
2472
	{
2473
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2474
2475
		$query  = "SELECT spotter_id,flightaware_id, date FROM spotter_output WHERE spotter_output.registration = :registration";
2476
		
2477
		$sth = $this->db->prepare($query);
2478
		$sth->execute(array(':registration' => $registration));
2479
2480
		$idarray = array();
2481
		while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
2482
			$date = $row['date'];
2483
			$idarray[$date] = array('flightaware_id' => $row['flightaware_id'],'spotter_id' => $row['spotter_id']);
2484
		}
2485
		return $idarray;
2486
	}
2487
2488
	/**
2489
	* Gets correct aircraft operator code
2490
	*
2491
	* @param String $operator the aircraft operator code (callsign)
2492
	* @return String aircraft operator code
2493
	*
2494
	*/
2495
	public function getOperator($operator)
2496
	{
2497
		$operator = filter_var($operator,FILTER_SANITIZE_STRING);
2498
		$query  = "SELECT translation.operator_correct FROM translation WHERE translation.operator = :operator LIMIT 1";
2499
		
2500
		$sth = $this->db->prepare($query);
2501
		$sth->execute(array(':operator' => $operator));
2502
2503
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2504
		$sth->closeCursor();
2505
		if (isset($row['operator_correct'])) {
2506
			return $row['operator_correct'];
2507
		} else return $operator;
2508
	}
2509
2510
	/**
2511
	* Gets the aircraft route based on the aircraft callsign
2512
	*
2513
	* @param String $callsign the aircraft callsign
2514
	* @return Array aircraft type
2515
	*
2516
	*/
2517
	public function getRouteInfo($callsign)
2518
	{
2519
		$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
2520
                if ($callsign == '') return array();
2521
		$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";
2522
		
2523
		$sth = $this->db->prepare($query);
2524
		$sth->execute(array(':callsign' => $callsign));
2525
2526
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2527
		$sth->closeCursor();
2528
		if (count($row) > 0) {
2529
			return $row;
2530
		} else return array();
2531
	}
2532
	
2533
	/**
2534
	* Gets the aircraft info based on the aircraft registration
2535
	*
2536
	* @param String $registration the aircraft registration
2537
	* @return Array aircraft information
2538
	*
2539
	*/
2540
	public function getAircraftInfoByRegistration($registration)
2541
	{
2542
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2543
2544
		$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";
2545
		
2546
		$sth = $this->db->prepare($query);
2547
		$sth->execute(array(':registration' => $registration));
2548
2549
		$aircraft_array = array();
2550
		$temp_array = array();
2551
		
2552
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2553
		{
2554
			$temp_array['airline_icao'] = $row['airline_icao'];
2555
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2556
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2557
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2558
2559
			$aircraft_array[] = $temp_array;
2560
		}
2561
2562
		return $aircraft_array;
2563
	}
2564
	
2565
	/**
2566
	* Gets the aircraft owner & base based on the aircraft registration
2567
	*
2568
	* @param String $registration the aircraft registration
2569
	* @return Array aircraft information
2570
	*
2571
	*/
2572
	public function getAircraftOwnerByRegistration($registration)
2573
	{
2574
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2575
		$Connection = new Connection($this->db);
2576
		if ($Connection->tableExists('aircraft_owner')) {
2577
			$query  = "SELECT aircraft_owner.base, aircraft_owner.owner, aircraft_owner.date_first_reg FROM aircraft_owner WHERE registration = :registration LIMIT 1";
2578
			$sth = $this->db->prepare($query);
2579
			$sth->execute(array(':registration' => $registration));
2580
			$result = $sth->fetch(PDO::FETCH_ASSOC);
2581
			$sth->closeCursor();
2582
			return $result;
2583
		} else return array();
2584
	}
2585
	
2586
  
2587
  /**
2588
	* Gets all flights (but with only little info)
2589
	*
2590
	* @return Array basic flight information
2591
	*
2592
	*/
2593
	public function getAllFlightsforSitemap()
2594
	{
2595
		//$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 ";
2596
		$query  = "SELECT spotter_output.spotter_id FROM spotter_output ORDER BY spotter_id DESC LIMIT 200 OFFSET 0";
2597
		
2598
		$sth = $this->db->prepare($query);
2599
		$sth->execute();
2600
                  /*
2601
		$flight_array = array();
2602
		$temp_array = array();
2603
		
2604
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2605
		{
2606
			$temp_array['spotter_id'] = $row['spotter_id'];
2607
//			$temp_array['ident'] = $row['ident'];
2608
//			$temp_array['airline_name'] = $row['airline_name'];
2609
//			$temp_array['aircraft_type'] = $row['aircraft_icao'];
2610
//			$temp_array['aircraft_name'] = $row['aircraft_name'];
2611
			//$temp_array['image'] = $row['image'];
2612
2613
			$flight_array[] = $temp_array;
2614
		}
2615
2616
		return $flight_array;
2617
		*/
2618
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2619
	}
2620
  
2621
	/**
2622
	* Gets a list of all aircraft manufacturers
2623
	*
2624
	* @return Array list of aircraft types
2625
	*
2626
	*/
2627
	public function getAllManufacturers()
2628
	{
2629
		/*
2630
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer AS aircraft_manufacturer
2631
								FROM spotter_output
2632
								WHERE spotter_output.aircraft_manufacturer <> '' 
2633
								ORDER BY spotter_output.aircraft_manufacturer ASC";
2634
		  */
2635
		
2636
		$query = "SELECT DISTINCT manufacturer AS aircraft_manufacturer FROM aircraft WHERE manufacturer <> '' ORDER BY manufacturer ASC";
2637
		$sth = $this->db->prepare($query);
2638
		$sth->execute();
2639
2640
		$manufacturer_array = array();
2641
		$temp_array = array();
2642
		
2643
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2644
		{
2645
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2646
2647
			$manufacturer_array[] = $temp_array;
2648
		}
2649
2650
		return $manufacturer_array;
2651
	}
2652
  
2653
  
2654
  /**
2655
	* Gets a list of all aircraft types
2656
	*
2657
	* @return Array list of aircraft types
2658
	*
2659
	*/
2660
	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...
2661
	{
2662
		/*
2663
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao AS aircraft_icao, spotter_output.aircraft_name AS aircraft_name
2664
								FROM spotter_output  
2665
								WHERE spotter_output.aircraft_icao <> '' 
2666
								ORDER BY spotter_output.aircraft_name ASC";
2667
								
2668
		*/
2669
		//$filter_query = $this->getFilter($filters,true,true);
2670
		//$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";
2671
2672
		$query = "SELECT DISTINCT icao AS aircraft_icao, type AS aircraft_name, manufacturer AS aircraft_manufacturer FROM aircraft WHERE icao <> '' ORDER BY aircraft_manufacturer ASC";
2673
		
2674
		$sth = $this->db->prepare($query);
2675
		$sth->execute();
2676
2677
		$aircraft_array = array();
2678
		$temp_array = array();
2679
		
2680
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2681
		{
2682
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2683
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2684
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2685
2686
			$aircraft_array[] = $temp_array;
2687
		}
2688
2689
		return $aircraft_array;
2690
	}
2691
	
2692
	
2693
	/**
2694
	* Gets a list of all aircraft registrations
2695
	*
2696
	* @return Array list of aircraft registrations
2697
	*
2698
	*/
2699
	public function getAllAircraftRegistrations($filters = array())
2700
	{
2701
		$filter_query = $this->getFilter($filters,true,true);
2702
		$query  = "SELECT DISTINCT spotter_output.registration 
2703
				FROM spotter_output".$filter_query." spotter_output.registration <> '' 
2704
				ORDER BY spotter_output.registration ASC";
2705
2706
		$sth = $this->db->prepare($query);
2707
		$sth->execute();
2708
2709
		$aircraft_array = array();
2710
		$temp_array = array();
2711
		
2712
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2713
		{
2714
			$temp_array['registration'] = $row['registration'];
2715
2716
			$aircraft_array[] = $temp_array;
2717
		}
2718
2719
		return $aircraft_array;
2720
	}
2721
2722
	/**
2723
	* Gets all source name
2724
	*
2725
	* @param String type format of source
2726
	* @return Array list of source name
2727
	*
2728
	*/
2729
	public function getAllSourceName($type = '',$filters = array())
2730
	{
2731
		$filter_query = $this->getFilter($filters,true,true);
2732
		$query_values = array();
2733
		$query  = "SELECT DISTINCT spotter_output.source_name 
2734
				FROM spotter_output".$filter_query." spotter_output.source_name <> ''";
2735
		if ($type != '') {
2736
			$query_values = array(':type' => $type);
2737
			$query .= " AND format_source = :type";
2738
		}
2739
		$query .= " ORDER BY spotter_output.source_name ASC";
2740
2741
		$sth = $this->db->prepare($query);
2742
		if (!empty($query_values)) $sth->execute($query_values);
2743
		else $sth->execute();
2744
2745
		$source_array = array();
2746
		$temp_array = array();
2747
		
2748
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2749
		{
2750
			$temp_array['source_name'] = $row['source_name'];
2751
			$source_array[] = $temp_array;
2752
		}
2753
		return $source_array;
2754
	}
2755
2756
2757
2758
	/**
2759
	* Gets a list of all airline names
2760
	*
2761
	* @return Array list of airline names
2762
	*
2763
	*/
2764
	public function getAllAirlineNames($airline_type = '',$forsource = NULL,$filters = array())
2765
	{
2766
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2767
		$filter_query = $this->getFilter($filters,true,true);
2768
		$airline_type = filter_var($airline_type,FILTER_SANITIZE_STRING);
2769
		if ($airline_type == '' || $airline_type == 'all') {
2770
			/*
2771
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2772
								FROM spotter_output
2773
								WHERE spotter_output.airline_icao <> '' 
2774
								ORDER BY spotter_output.airline_name ASC";
2775
			*/
2776
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2777
			elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2778
			elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2779
			if ($forsource === NULL) {
2780
				$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";
2781
				$query_data = array();
2782
			} else {
2783
				$query = "SELECT DISTINCT icao AS airline_icao, name AS airline_name, type AS airline_type FROM airlines WHERE forsource = :forsource ORDER BY name ASC";
2784
				$query_data = array(':forsource' => $forsource);
2785
			}
2786
		} else {
2787
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2788
					FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
2789
					AND spotter_output.airline_type = :airline_type 
2790
					ORDER BY spotter_output.airline_icao ASC";
2791
			$query_data = array(':airline_type' => $airline_type);
2792
		}
2793
		
2794
		$sth = $this->db->prepare($query);
2795
		$sth->execute($query_data);
2796
    
2797
		$airline_array = array();
2798
		$temp_array = array();
2799
		
2800
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2801
		{
2802
			$temp_array['airline_icao'] = $row['airline_icao'];
2803
			$temp_array['airline_name'] = $row['airline_name'];
2804
			$temp_array['airline_type'] = $row['airline_type'];
2805
2806
			$airline_array[] = $temp_array;
2807
		}
2808
		return $airline_array;
2809
	}
2810
	
2811
	/**
2812
	* Gets a list of all alliance names
2813
	*
2814
	* @return Array list of alliance names
2815
	*
2816
	*/
2817
	public function getAllAllianceNames($forsource = NULL,$filters = array())
2818
	{
2819
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2820
		$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...
2821
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2822
		elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2823
		elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2824
		if ($forsource === NULL) {
2825
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND forsource IS NULL ORDER BY alliance ASC";
2826
			$query_data = array();
2827
		} else {
2828
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND  forsource = :forsource ORDER BY alliance ASC";
2829
			$query_data = array(':forsource' => $forsource);
2830
		}
2831
		
2832
		$sth = $this->db->prepare($query);
2833
		$sth->execute($query_data);
2834
    
2835
		$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...
2836
		$alliance_array = $sth->fetchAll(PDO::FETCH_ASSOC);
2837
		return $alliance_array;
2838
	}
2839
	
2840
	/**
2841
	* Gets a list of all airline countries
2842
	*
2843
	* @return Array list of airline countries
2844
	*
2845
	*/
2846
	public function getAllAirlineCountries($filters = array())
2847
	{
2848
		$filter_query = $this->getFilter($filters,true,true);
2849
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
2850
				FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
2851
				ORDER BY spotter_output.airline_country ASC";
2852
		
2853
		//$query = "SELECT DISTINCT country AS airline_country FROM airlines WHERE country <> '' AND active = 'Y' ORDER BY country ASC";
2854
		$sth = $this->db->prepare($query);
2855
		$sth->execute();
2856
2857
		$airline_array = array();
2858
		$temp_array = array();
2859
		
2860
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2861
		{
2862
			$temp_array['airline_country'] = $row['airline_country'];
2863
2864
			$airline_array[] = $temp_array;
2865
		}
2866
2867
		return $airline_array;
2868
	}
2869
2870
	
2871
	
2872
	/**
2873
	* Gets a list of all departure & arrival names
2874
	*
2875
	* @return Array list of airport names
2876
	*
2877
	*/
2878
	public function getAllAirportNames($filters = array())
2879
	{
2880
		$filter_query = $this->getFilter($filters,true,true);
2881
		$airport_array = array();
2882
		$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
2883
				FROM spotter_output".$filter_query." spotter_output.departure_airport_icao <> '' AND spotter_output.departure_airport_icao <> 'NA' 
2884
				ORDER BY spotter_output.departure_airport_city ASC";
2885
		
2886
		//$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";
2887
		$sth = $this->db->prepare($query);
2888
		$sth->execute();
2889
2890
		$temp_array = array();
2891
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2892
		{
2893
			$temp_array['airport_icao'] = $row['airport_icao'];
2894
			$temp_array['airport_name'] = $row['airport_name'];
2895
			$temp_array['airport_city'] = $row['airport_city'];
2896
			$temp_array['airport_country'] = $row['airport_country'];
2897
2898
			$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2899
		}
2900
2901
		$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
2902
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> '' AND spotter_output.arrival_airport_icao <> 'NA' 
2903
								ORDER BY spotter_output.arrival_airport_city ASC";
2904
					
2905
		$sth = $this->db->prepare($query);
2906
		$sth->execute();
2907
2908
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2909
			{
2910
		//	if ($airport_array[$row['airport_city'].",".$row['airport_name']]['airport_icao'] != $row['airport_icao'])
2911
		//	{
2912
				$temp_array['airport_icao'] = $row['airport_icao'];
2913
				$temp_array['airport_name'] = $row['airport_name'];
2914
				$temp_array['airport_city'] = $row['airport_city'];
2915
				$temp_array['airport_country'] = $row['airport_country'];
2916
				
2917
				$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2918
		//	}
2919
		}
2920
2921
		return $airport_array;
2922
	} 
2923
2924
	/**
2925
	* Gets a list of all owner names
2926
	*
2927
	* @return Array list of owner names
2928
	*
2929
	*/
2930
	public function getAllOwnerNames($filters = array())
2931
	{
2932
		$filter_query = $this->getFilter($filters,true,true);
2933
		$query  = "SELECT DISTINCT spotter_output.owner_name
2934
				FROM spotter_output".$filter_query." spotter_output.owner_name <> '' 
2935
				ORDER BY spotter_output.owner_name ASC";
2936
		
2937
		$sth = $this->db->prepare($query);
2938
		$sth->execute();
2939
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2940
	} 
2941
2942
	/**
2943
	* Gets a list of all pilot names and pilot ids
2944
	*
2945
	* @return Array list of pilot names and pilot ids
2946
	*
2947
	*/
2948
	public function getAllPilotNames($filters = array())
2949
	{
2950
		$filter_query = $this->getFilter($filters,true,true);
2951
		$query  = "SELECT DISTINCT spotter_output.pilot_name, spotter_output.pilot_id
2952
				FROM spotter_output".$filter_query." spotter_output.pilot_name <> '' 
2953
				ORDER BY spotter_output.pilot_name ASC";
2954
		
2955
		$sth = $this->db->prepare($query);
2956
		$sth->execute();
2957
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2958
	} 
2959
	
2960
	
2961
	/**
2962
	* Gets a list of all departure & arrival airport countries
2963
	*
2964
	* @return Array list of airport countries
2965
	*
2966
	*/
2967
	public function getAllAirportCountries($filters = array())
2968
	{
2969
		$airport_array = array();
2970
					
2971
		  /*
2972
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
2973
								FROM spotter_output
2974
								WHERE spotter_output.departure_airport_country <> '' 
2975
								ORDER BY spotter_output.departure_airport_country ASC";
2976
		*/
2977
		$query = "SELECT DISTINCT country AS airport_country FROM airport ORDER BY country ASC";
2978
		
2979
		$sth = $this->db->prepare($query);
2980
		$sth->execute();
2981
   
2982
		$temp_array = array();
2983
		
2984
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2985
		{
2986
			$temp_array['airport_country'] = $row['airport_country'];
2987
2988
			$airport_array[$row['airport_country']] = $temp_array;
2989
		}
2990
		$filter_query = $this->getFilter($filters,true,true);
2991
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
2992
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
2993
								ORDER BY spotter_output.arrival_airport_country ASC";
2994
					
2995
		$sth = $this->db->prepare($query);
2996
		$sth->execute();
2997
		
2998
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2999
		{
3000
			if (isset($airport_array[$row['airport_country']]['airport_country']) && $airport_array[$row['airport_country']]['airport_country'] != $row['airport_country'])
3001
			{
3002
				$temp_array['airport_country'] = $row['airport_country'];
3003
				$airport_array[$row['airport_country']] = $temp_array;
3004
			}
3005
		}
3006
3007
		return $airport_array;
3008
	} 
3009
	
3010
	
3011
	
3012
	
3013
	/**
3014
	* Gets a list of all countries (airline, departure airport & arrival airport)
3015
	*
3016
	* @return Array list of countries
3017
	*
3018
	*/
3019
	public function getAllCountries($filters = array())
3020
	{
3021
		$Connection= new Connection($this->db);
3022
		if ($Connection->tableExists('countries')) {
3023
			$query  = "SELECT countries.name AS airport_country
3024
				FROM countries
3025
				ORDER BY countries.name ASC";
3026
			$sth = $this->db->prepare($query);
3027
			$sth->execute();
3028
   
3029
			$temp_array = array();
3030
			$country_array = array();
3031
		
3032
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
3033
			{
3034
				$temp_array['country'] = $row['airport_country'];
3035
				$country_array[$row['airport_country']] = $temp_array;
3036
			}
3037
		} else {
3038
			$filter_query = $this->getFilter($filters,true,true);
3039
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
3040
								FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' 
3041
								ORDER BY spotter_output.departure_airport_country ASC";
3042
3043
			$sth = $this->db->prepare($query);
3044
			$sth->execute();
3045
   
3046
			$temp_array = array();
3047
			$country_array = array();
3048
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
3049
			{
3050
				$temp_array['country'] = $row['airport_country'];
3051
				$country_array[$row['airport_country']] = $temp_array;
3052
			}
3053
3054
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
3055
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
3056
								ORDER BY spotter_output.arrival_airport_country ASC";
3057
					
3058
		$sth = $this->db->prepare($query);
3059
		$sth->execute();
3060
		
3061
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3062
		{
3063
			if ($country_array[$row['airport_country']]['country'] != $row['airport_country'])
3064
			{
3065
				$temp_array['country'] = $row['airport_country'];
3066
				
3067
				$country_array[$row['country']] = $temp_array;
3068
			}
3069
		}
3070
		
3071
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
3072
								FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
3073
								ORDER BY spotter_output.airline_country ASC";
3074
					
3075
		$sth = $this->db->prepare($query);
3076
		$sth->execute();
3077
		
3078
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3079
		{
3080
			if (isset($country_array[$row['airline_country']]['country']) && $country_array[$row['airline_country']]['country'] != $row['airline_country'])
3081
			{
3082
				$temp_array['country'] = $row['airline_country'];
3083
				
3084
				$country_array[$row['country']] = $temp_array;
3085
			}
3086
		}
3087
		}  
3088
		return $country_array;
3089
	} 
3090
	
3091
	
3092
	
3093
	
3094
	/**
3095
	* Gets a list of all idents/callsigns
3096
	*
3097
	* @return Array list of ident/callsign names
3098
	*
3099
	*/
3100
	public function getAllIdents($filters = array())
3101
	{
3102
		$filter_query = $this->getFilter($filters,true,true);
3103
		$query  = "SELECT DISTINCT spotter_output.ident
3104
								FROM spotter_output".$filter_query." spotter_output.ident <> '' 
3105
								ORDER BY spotter_output.date ASC LIMIT 700 OFFSET 0";
3106
3107
		$sth = $this->db->prepare($query);
3108
		$sth->execute();
3109
    
3110
		$ident_array = array();
3111
		$temp_array = array();
3112
		
3113
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3114
		{
3115
			$temp_array['ident'] = $row['ident'];
3116
			$ident_array[] = $temp_array;
3117
		}
3118
3119
		return $ident_array;
3120
	}
3121
3122
	/**
3123
	* Get a list of flights from airport since 7 days
3124
	* @return Array number, icao, name and city of airports
3125
	*/
3126
3127
	public function getLast7DaysAirportsDeparture($airport_icao = '',$filters = array()) {
3128
		global $globalTimezone, $globalDBdriver;
3129
		$filter_query = $this->getFilter($filters,true,true);
3130
		if ($globalTimezone != '') {
3131
			date_default_timezone_set($globalTimezone);
3132
			$datetime = new DateTime();
3133
			$offset = $datetime->format('P');
3134
		} else $offset = '+00:00';
3135
		if ($airport_icao == '') {
3136
			if ($globalDBdriver == 'mysql') {
3137
				$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";
3138
			} else {
3139
				$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";
3140
			}
3141
			$sth = $this->db->prepare($query);
3142
			$sth->execute(array(':offset' => $offset));
3143
		} else {
3144
			if ($globalDBdriver == 'mysql') {
3145
				$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";
3146
			} else {
3147
				$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";
3148
			}
3149
			$sth = $this->db->prepare($query);
3150
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3151
		}
3152
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3153
	}
3154
3155
	/**
3156
	* Get a list of flights from airport since 7 days
3157
	* @return Array number, icao, name and city of airports
3158
	*/
3159
3160
	public function getLast7DaysAirportsDepartureByAirlines($airport_icao = '') {
3161
		global $globalTimezone, $globalDBdriver;
3162
		if ($globalTimezone != '') {
3163
			date_default_timezone_set($globalTimezone);
3164
			$datetime = new DateTime();
3165
			$offset = $datetime->format('P');
3166
		} else $offset = '+00:00';
3167
		if ($airport_icao == '') {
3168
			if ($globalDBdriver == 'mysql') {
3169
				$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";
3170
			} else {
3171
				$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";
3172
			}
3173
			$sth = $this->db->prepare($query);
3174
			$sth->execute(array(':offset' => $offset));
3175
		} else {
3176
			if ($globalDBdriver == 'mysql') {
3177
				$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";
3178
			} else {
3179
				$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";
3180
			}
3181
			$sth = $this->db->prepare($query);
3182
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3183
		}
3184
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3185
	}
3186
3187
	/**
3188
	* Get a list of flights from detected airport since 7 days
3189
	* @return Array number, icao, name and city of airports
3190
	*/
3191
3192
	public function getLast7DaysDetectedAirportsDeparture($airport_icao = '', $filters = array()) {
3193
		global $globalTimezone, $globalDBdriver;
3194
		$filter_query = $this->getFilter($filters,true,true);
3195
		if ($globalTimezone != '') {
3196
			date_default_timezone_set($globalTimezone);
3197
			$datetime = new DateTime();
3198
			$offset = $datetime->format('P');
3199
		} else $offset = '+00:00';
3200
		if ($airport_icao == '') {
3201
			if ($globalDBdriver == 'mysql') {
3202
				$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 
3203
				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 <> '' 
3204
				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";
3205
			} else {
3206
				$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 
3207
				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 <> '' 
3208
				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";
3209
			}
3210
			$sth = $this->db->prepare($query);
3211
			$sth->execute(array(':offset' => $offset));
3212
		} else {
3213
			if ($globalDBdriver == 'mysql') {
3214
				$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 
3215
				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 
3216
				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";
3217
			} else {
3218
				$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 
3219
				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";
3220
			}
3221
			$sth = $this->db->prepare($query);
3222
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3223
		}
3224
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3225
	}
3226
3227
	/**
3228
	* Get a list of flights from detected airport since 7 days
3229
	* @return Array number, icao, name and city of airports
3230
	*/
3231
3232
	public function getLast7DaysDetectedAirportsDepartureByAirlines($airport_icao = '') {
3233
		global $globalTimezone, $globalDBdriver;
3234
		if ($globalTimezone != '') {
3235
			date_default_timezone_set($globalTimezone);
3236
			$datetime = new DateTime();
3237
			$offset = $datetime->format('P');
3238
		} else $offset = '+00:00';
3239
		if ($airport_icao == '') {
3240
			if ($globalDBdriver == 'mysql') {
3241
				$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 
3242
				FROM `spotter_output`, airport 
3243
				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 <> '' 
3244
				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";
3245
			} else {
3246
				$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 
3247
				FROM spotter_output, airport 
3248
				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 <> '' 
3249
				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";
3250
			}
3251
			$sth = $this->db->prepare($query);
3252
			$sth->execute(array(':offset' => $offset));
3253
		} else {
3254
			if ($globalDBdriver == 'mysql') {
3255
				$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 
3256
				FROM `spotter_output`, airport 
3257
				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 
3258
				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";
3259
			} else {
3260
				$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 
3261
				FROM spotter_output, airport 
3262
				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";
3263
			}
3264
			$sth = $this->db->prepare($query);
3265
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3266
		}
3267
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3268
	}
3269
3270
3271
	/**
3272
	* Get a list of flights to airport since 7 days
3273
	* @return Array number, icao, name and city of airports
3274
	*/
3275
3276
	public function getLast7DaysAirportsArrival($airport_icao = '', $filters = array()) {
3277
		global $globalTimezone, $globalDBdriver;
3278
		$filter_query = $this->getFilter($filters,true,true);
3279
		if ($globalTimezone != '') {
3280
			date_default_timezone_set($globalTimezone);
3281
			$datetime = new DateTime();
3282
			$offset = $datetime->format('P');
3283
		} else $offset = '+00:00';
3284
		if ($airport_icao == '') {
3285
			if ($globalDBdriver == 'mysql') {
3286
				$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";
3287
			} else {
3288
				$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";
3289
			}
3290
			$sth = $this->db->prepare($query);
3291
			$sth->execute(array(':offset' => $offset));
3292
		} else {
3293
			if ($globalDBdriver == 'mysql') {
3294
				$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";
3295
			} else {
3296
				$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";
3297
			}
3298
			$sth = $this->db->prepare($query);
3299
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3300
		}
3301
		
3302
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3303
	}
3304
3305
3306
	/**
3307
	* Get a list of flights detected to airport since 7 days
3308
	* @return Array number, icao, name and city of airports
3309
	*/
3310
3311
	public function getLast7DaysDetectedAirportsArrival($airport_icao = '',$filters = array()) {
3312
		global $globalTimezone, $globalDBdriver;
3313
		$filter_query = $this->getFilter($filters,true,true);
3314
		if ($globalTimezone != '') {
3315
			date_default_timezone_set($globalTimezone);
3316
			$datetime = new DateTime();
3317
			$offset = $datetime->format('P');
3318
		} else $offset = '+00:00';
3319
		if ($airport_icao == '') {
3320
			if ($globalDBdriver == 'mysql') {
3321
				$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 
3322
				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 <> '' 
3323
				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";
3324
			} else {
3325
				$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 
3326
				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 <> '' 
3327
				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";
3328
			}
3329
			$sth = $this->db->prepare($query);
3330
			$sth->execute(array(':offset' => $offset));
3331
		} else {
3332
			if ($globalDBdriver == 'mysql') {
3333
				$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 
3334
				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 
3335
				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";
3336
			} else {
3337
				$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 
3338
				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 
3339
				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";
3340
			}
3341
			$sth = $this->db->prepare($query);
3342
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3343
		}
3344
		
3345
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3346
	}
3347
3348
3349
	/**
3350
	* Get a list of flights to airport since 7 days
3351
	* @return Array number, icao, name and city of airports
3352
	*/
3353
3354
	public function getLast7DaysAirportsArrivalByAirlines($airport_icao = '') {
3355
		global $globalTimezone, $globalDBdriver;
3356
		if ($globalTimezone != '') {
3357
			date_default_timezone_set($globalTimezone);
3358
			$datetime = new DateTime();
3359
			$offset = $datetime->format('P');
3360
		} else $offset = '+00:00';
3361
		if ($airport_icao == '') {
3362
			if ($globalDBdriver == 'mysql') {
3363
				$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";
3364
			} else {
3365
				$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";
3366
			}
3367
			$sth = $this->db->prepare($query);
3368
			$sth->execute(array(':offset' => $offset));
3369
		} else {
3370
			if ($globalDBdriver == 'mysql') {
3371
				$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";
3372
			} else {
3373
				$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";
3374
			}
3375
			$sth = $this->db->prepare($query);
3376
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3377
		}
3378
		
3379
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3380
	}
3381
3382
3383
	/**
3384
	* Get a list of flights detected to airport since 7 days
3385
	* @return Array number, icao, name and city of airports
3386
	*/
3387
3388
	public function getLast7DaysDetectedAirportsArrivalByAirlines($airport_icao = '') {
3389
		global $globalTimezone, $globalDBdriver;
3390
		if ($globalTimezone != '') {
3391
			date_default_timezone_set($globalTimezone);
3392
			$datetime = new DateTime();
3393
			$offset = $datetime->format('P');
3394
		} else $offset = '+00:00';
3395
		if ($airport_icao == '') {
3396
			if ($globalDBdriver == 'mysql') {
3397
				$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 
3398
				FROM `spotter_output`, airport 
3399
				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 <> '' 
3400
				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";
3401
			} else {
3402
				$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 
3403
				FROM spotter_output, airport 
3404
				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 <> '' 
3405
				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";
3406
			}
3407
			$sth = $this->db->prepare($query);
3408
			$sth->execute(array(':offset' => $offset));
3409
		} else {
3410
			if ($globalDBdriver == 'mysql') {
3411
				$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 
3412
				FROM `spotter_output`, airport 
3413
				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 
3414
				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";
3415
			} else {
3416
				$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 
3417
				FROM spotter_output, airport 
3418
				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 
3419
				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";
3420
			}
3421
			$sth = $this->db->prepare($query);
3422
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3423
		}
3424
		
3425
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3426
	}
3427
3428
3429
	/**
3430
	* Gets a list of all dates
3431
	*
3432
	* @return Array list of date names
3433
	*
3434
	*/
3435
	public function getAllDates()
3436
	{
3437
		global $globalTimezone, $globalDBdriver;
3438
		if ($globalTimezone != '') {
3439
			date_default_timezone_set($globalTimezone);
3440
			$datetime = new DateTime();
3441
			$offset = $datetime->format('P');
3442
		} else $offset = '+00:00';
3443
3444
		if ($globalDBdriver == 'mysql') {
3445
			$query  = "SELECT DISTINCT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) as date
3446
								FROM spotter_output
3447
								WHERE spotter_output.date <> '' 
3448
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3449
		} else {
3450
			$query  = "SELECT DISTINCT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date
3451
								FROM spotter_output
3452
								WHERE spotter_output.date <> '' 
3453
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3454
		}
3455
		
3456
		$sth = $this->db->prepare($query);
3457
		$sth->execute(array(':offset' => $offset));
3458
    
3459
		$date_array = array();
3460
		$temp_array = array();
3461
		
3462
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3463
		{
3464
			$temp_array['date'] = $row['date'];
3465
3466
			$date_array[] = $temp_array;
3467
		}
3468
3469
		return $date_array;
3470
	}
3471
	
3472
	
3473
	
3474
	/**
3475
	* Gets all route combinations
3476
	*
3477
	* @return Array the route list
3478
	*
3479
	*/
3480
	public function getAllRoutes()
3481
	{
3482
		$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 
3483
				FROM spotter_output
3484
				WHERE spotter_output.ident <> '' 
3485
				GROUP BY route
3486
				ORDER BY route ASC";
3487
3488
		$sth = $this->db->prepare($query);
3489
		$sth->execute();
3490
3491
		$routes_array = array();
3492
		$temp_array = array();
3493
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3494
		{
3495
			$temp_array['route'] = $row['route'];
3496
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
3497
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
3498
3499
			$routes_array[] = $temp_array;
3500
		}
3501
		return $routes_array;
3502
	}
3503
3504
	/**
3505
	* Update ident spotter data
3506
	*
3507
	* @param String $flightaware_id the ID from flightaware
3508
	* @param String $ident the flight ident
3509
	* @return String success or false
3510
	*
3511
	*/	
3512
	public function updateIdentSpotterData($flightaware_id = '', $ident = '',$fromsource = NULL)
3513
	{
3514
		if (!is_numeric(substr($ident, 0, 3)))
3515
		{
3516
			if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3517
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3518
			} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3519
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3520
			} else {
3521
				$airline_array = $this->getAllAirlineInfo("NA");
3522
			}
3523
			if (count($airline_array) == 0) {
3524
				$airline_array = $this->getAllAirlineInfo("NA");
3525
			}
3526
			if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3527
				$airline_array = $this->getAllAirlineInfo("NA");
3528
			}
3529
		} else {
3530
			$airline_array = $this->getAllAirlineInfo("NA");
3531
		}
3532
                $airline_name = $airline_array[0]['name'];
3533
                $airline_icao = $airline_array[0]['icao'];
3534
                $airline_country = $airline_array[0]['country'];
3535
                $airline_type = $airline_array[0]['type'];
3536
3537
3538
		$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';
3539
                $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);
3540
3541
		try {
3542
			$sth = $this->db->prepare($query);
3543
			$sth->execute($query_values);
3544
		} catch (PDOException $e) {
3545
			return "error : ".$e->getMessage();
3546
		}
3547
		
3548
		return "success";
3549
3550
	}
3551
	/**
3552
	* Update latest spotter data
3553
	*
3554
	* @param String $flightaware_id the ID from flightaware
3555
	* @param String $ident the flight ident
3556
	* @param String $arrival_airport_icao the arrival airport
3557
	* @return String success or false
3558
	*
3559
	*/	
3560
	public function updateLatestSpotterData($flightaware_id = '', $ident = '', $latitude = '', $longitude = '', $altitude = '', $ground = false, $groundspeed = NULL, $date = '', $arrival_airport_icao = '',$arrival_airport_time = '')
3561
	{
3562
		if ($groundspeed == '') $groundspeed = NULL;
3563
		$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';
3564
                $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);
3565
3566
		try {
3567
			$sth = $this->db->prepare($query);
3568
			$sth->execute($query_values);
3569
		} catch (PDOException $e) {
3570
			return "error : ".$e->getMessage();
3571
		}
3572
		
3573
		return "success";
3574
3575
	}
3576
3577
	/**
3578
	* Adds a new spotter data
3579
	*
3580
	* @param String $flightaware_id the ID from flightaware
3581
	* @param String $ident the flight ident
3582
	* @param String $aircraft_icao the aircraft type
3583
	* @param String $departure_airport_icao the departure airport
3584
	* @param String $arrival_airport_icao the arrival airport
3585
	* @param String $latitude latitude of flight
3586
	* @param String $longitude latitude of flight
3587
	* @param String $waypoints waypoints of flight
3588
	* @param String $altitude altitude of flight
3589
	* @param String $heading heading of flight
3590
	* @param String $groundspeed speed of flight
3591
	* @param String $date date of flight
3592
	* @param String $departure_airport_time departure time of flight
3593
	* @param String $arrival_airport_time arrival time of flight
3594
	* @param String $squawk squawk code of flight
3595
	* @param String $route_stop route stop of flight
3596
	* @param String $highlight highlight or not
3597
	* @param String $ModeS ModesS code of flight
3598
	* @param String $registration registration code of flight
3599
	* @param String $pilot_id pilot id of flight (for virtual airlines)
3600
	* @param String $pilot_name pilot name of flight (for virtual airlines)
3601
	* @param String $verticalrate vertival rate of flight
3602
	* @return String success or false
3603
	*/
3604
	public function addSpotterData($flightaware_id = '', $ident = '', $aircraft_icao = '', $departure_airport_icao = '', $arrival_airport_icao = '', $latitude = '', $longitude = '', $waypoints = '', $altitude = '', $altitude_real = '',$heading = '', $groundspeed = '', $date = '', $departure_airport_time = '', $arrival_airport_time = '',$squawk = '', $route_stop = '', $highlight = '', $ModeS = '', $registration = '',$pilot_id = '', $pilot_name = '', $verticalrate = '', $ground = false,$format_source = '', $source_name = '',$source_type = '')
0 ignored issues
show
Unused Code introduced by
The parameter $altitude_real is not used and could be removed.

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

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