Completed
Push — master ( adf80b...238311 )
by Yannick
05:46
created

Stats::addStatArrivalAirportsDaily()   A

Complexity

Conditions 3
Paths 6

Size

Total Lines 15
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 12
nc 6
nop 8
dl 0
loc 15
rs 9.4285
c 0
b 0
f 0

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
/*
3
* This class save stats older than a year and $globalArchiveMonths
4
*/
5
6
require_once(dirname(__FILE__).'/class.Spotter.php');
7
require_once(dirname(__FILE__).'/class.SpotterArchive.php');
8
require_once(dirname(__FILE__).'/class.Common.php');
9
class Stats {
10
	public $db;
11
	public $filter_name = '';
12
	
13
	public function __construct($dbc = null) {
14
		global $globalFilterName;
15
		if (isset($globalFilterName)) $this->filter_name = $globalFilterName;
16
		$Connection = new Connection($dbc);
17
		$this->db = $Connection->db();
18
        }
19
              
20
	public function addLastStatsUpdate($type,$stats_date) {
21
                $query = "DELETE FROM config WHERE name = :type;
22
            		INSERT INTO config (name,value) VALUES (:type,:stats_date);";
23
                $query_values = array('type' => $type,':stats_date' => $stats_date);
24
                 try {
25
                        $sth = $this->db->prepare($query);
26
                        $sth->execute($query_values);
27
                } catch(PDOException $e) {
28
                        return "error : ".$e->getMessage();
29
                }
30
        }
31
32
	public function getLastStatsUpdate($type = 'last_update_stats') {
33
                $query = "SELECT value FROM config WHERE name = :type";
34
                 try {
35
                        $sth = $this->db->prepare($query);
36
                        $sth->execute(array(':type' => $type));
37
                } catch(PDOException $e) {
38
                        echo "error : ".$e->getMessage();
39
                }
40
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
41
                return $all;
42
        }
43
        public function deleteStats($filter_name = '') {
44
        	/*
45
        	$query = "DELETE FROM config WHERE name = 'last_update_stats'";
46
                 try {
47
                        $sth = $this->db->prepare($query);
48
                        $sth->execute();
49
                } catch(PDOException $e) {
50
                        return "error : ".$e->getMessage();
51
                }
52
                */
53
        	$query = "DELETE FROM stats WHERE filter_name = :filter_name;DELETE FROM stats_aircraft WHERE filter_name = :filter_name;DELETE FROM stats_airline WHERE filter_name = :filter_name;DELETE FROM stats_airport WHERE filter_name = :filter_name;DELETE FROM stats_callsign WHERE filter_name = :filter_name;DELETE FROM stats_country WHERE filter_name = :filter_name;DELETE FROM stats_flight WHERE filter_name = :filter_name;DELETE FROM stats_owner WHERE filter_name = :filter_name;DELETE FROM stats_pilot WHERE filter_name = :filter_name;DELETE FROM stats_registration WHERE filter_name = :filter_name;";
54
                 try {
55
                        $sth = $this->db->prepare($query);
56
                        $sth->execute(array(':filter_name' => $filter_name));
57
                } catch(PDOException $e) {
58
                        return "error : ".$e->getMessage();
59
                }
60
        }
61
        public function deleteOldStats($filter_name = '') {
62
        	
63
        	$query = "DELETE FROM config WHERE name = 'last_update_stats'";
64
                 try {
65
                        $sth = $this->db->prepare($query);
66
                        $sth->execute();
67
                } catch(PDOException $e) {
68
                        return "error : ".$e->getMessage();
69
                }
70
                
71
        	$query = "DELETE FROM stats_aircraft WHERE filter_name = :filter_name;DELETE FROM stats_airline WHERE filter_name = :filter_name;DELETE FROM stats_callsign WHERE filter_name = :filter_name;DELETE FROM stats_country WHERE filter_name = :filter_name;DELETE FROM stats_owner WHERE filter_name = :filter_name;DELETE FROM stats_pilot WHERE filter_name = :filter_name;DELETE FROM stats_registration WHERE filter_name = :filter_name;";
72
                 try {
73
                        $sth = $this->db->prepare($query);
74
                        $sth->execute(array(':filter_name' => $filter_name));
75
                } catch(PDOException $e) {
76
                        return "error : ".$e->getMessage();
77
                }
78
        }
79
	public function getAllAirlineNames($filter_name = '') {
80
		if ($filter_name == '') $filter_name = $this->filter_name;
81
                $query = "SELECT * FROM stats_airline WHERE filter_name = :filter_name ORDER BY airline_name ASC";
82
                 try {
83
                        $sth = $this->db->prepare($query);
84
                        $sth->execute(array(':filter_name' => $filter_name));
85
                } catch(PDOException $e) {
86
                        echo "error : ".$e->getMessage();
87
                }
88
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
89
                return $all;
90
        }
91
	public function getAllAircraftTypes($stats_airline = '',$filter_name = '') {
92
		if ($filter_name == '') $filter_name = $this->filter_name;
93
                $query = "SELECT * FROM stats_aircraft WHERE stats_airline = :stats_airline AND filter_name = :filter_name ORDER BY aircraft_manufacturer ASC";
94
                 try {
95
                        $sth = $this->db->prepare($query);
96
                        $sth->execute(array(':stats_airline' => $stats_airline,':filter_name' => $filter_name));
97
                } catch(PDOException $e) {
98
                        echo "error : ".$e->getMessage();
99
                }
100
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
101
                return $all;
102
        }
103
	public function getAllManufacturers($stats_airline = '',$filter_name = '') {
104
		if ($filter_name == '') $filter_name = $this->filter_name;
105
                $query = "SELECT DISTINCT(aircraft_manufacturer) FROM stats_aircraft WHERE stats_airline = :stats_airline AND filter_name = :filter_name AND aircraft_manufacturer <> '' ORDER BY aircraft_manufacturer ASC";
106
                 try {
107
                        $sth = $this->db->prepare($query);
108
                        $sth->execute(array(':stats_airline' => $stats_airline,':filter_name' => $filter_name));
109
                } catch(PDOException $e) {
110
                        echo "error : ".$e->getMessage();
111
                }
112
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
113
                return $all;
114
        }
115
	public function getAllAirportNames($stats_airline = '',$filter_name = '') {
116
		if ($filter_name == '') $filter_name = $this->filter_name;
117
                $query = "SELECT airport_icao, airport_name,airport_city,airport_country FROM stats_airport WHERE stats_airline = :stats_airline AND filter_name = :filter_name AND stats_type = 'daily' GROUP BY airport_icao,airport_name,airport_city,airport_country ORDER BY airport_city ASC";
118
                 try {
119
                        $sth = $this->db->prepare($query);
120
                        $sth->execute(array(':stats_airline' => $stats_airline,':filter_name' => $filter_name));
121
                } catch(PDOException $e) {
122
                        echo "error : ".$e->getMessage();
123
                }
124
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
125
                return $all;
126
        }
127
128
129
	public function countAllAircraftTypes($limit = true, $stats_airline = '', $filter_name = '') {
130
		global $globalStatsFilters;
131
		if ($filter_name == '') $filter_name = $this->filter_name;
132
		if ($limit) $query = "SELECT aircraft_icao, cnt AS aircraft_icao_count, aircraft_name FROM stats_aircraft WHERE aircraft_name <> '' AND aircraft_icao <> '' AND stats_airline = :stats_airline AND filter_name = :filter_name ORDER BY aircraft_icao_count DESC LIMIT 10 OFFSET 0";
133
		else $query = "SELECT aircraft_icao, cnt AS aircraft_icao_count, aircraft_name FROM stats_aircraft WHERE aircraft_name <> '' AND aircraft_icao <> '' AND stats_airline = :stats_airline AND filter_name = :filter_name ORDER BY aircraft_icao_count DESC";
134
                 try {
135
                        $sth = $this->db->prepare($query);
136
                        $sth->execute(array(':stats_airline' => $stats_airline,':filter_name' => $filter_name));
137
                } catch(PDOException $e) {
138
                        echo "error : ".$e->getMessage();
139
                }
140
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
141
                if (empty($all)) {
142
            	    $filters = array('airlines' => array($stats_airline));
143
            	    if ($filter_name != '') {
144
            		    $filters = array_merge($filters,$globalStatsFilters[$filter_name]);
145
            	    }
146
            	    $Spotter = new Spotter($this->db);
147
            	    $all = $Spotter->countAllAircraftTypes($limit,0,'',$filters);
148
                }
149
                return $all;
150
	}
151
	public function countAllAirlineCountries($limit = true,$filter_name = '') {
152
		global $globalStatsFilters;
153
		if ($filter_name == '') $filter_name = $this->filter_name;
154
		if ($limit) $query = "SELECT airlines.country AS airline_country, SUM(stats_airline.cnt) as airline_country_count FROM stats_airline,airlines WHERE stats_airline.airline_icao=airlines.icao AND filter_name = :filter_name GROUP BY airline_country ORDER BY airline_country_count DESC LIMIT 10 OFFSET 0";
155
		else $query = "SELECT airlines.country AS airline_country, SUM(stats_airline.cnt) as airline_country_count FROM stats_airline,airlines WHERE stats_airline.airline_icao=airlines.icao AND filter_name = :filter_name GROUP BY airline_country ORDER BY airline_country_count DESC";
156
                 try {
157
                        $sth = $this->db->prepare($query);
158
                        $sth->execute(array(':filter_name' => $filter_name));
159
                } catch(PDOException $e) {
160
                        echo "error : ".$e->getMessage();
161
                }
162
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
163
                if (empty($all)) {
164
            		$Spotter = new Spotter($this->db);
165
            		$filters = array();
166
            		if ($filter_name != '') {
167
            			$filters = array_merge($filters,$globalStatsFilters[$filter_name]);
168
			}
169
            		$all = $Spotter->countAllAirlineCountries($limit,$filters);
170
                }
171
                return $all;
172
	}
173
	public function countAllAircraftManufacturers($limit = true,$stats_airline = '', $filter_name = '') {
174
		global $globalStatsFilters;
175
		if ($filter_name == '') $filter_name = $this->filter_name;
176
		if ($limit) $query = "SELECT aircraft_manufacturer, SUM(stats_aircraft.cnt) as aircraft_manufacturer_count FROM stats_aircraft WHERE stats_airline = :stats_airline AND filter_name = :filter_name GROUP BY aircraft_manufacturer ORDER BY aircraft_manufacturer_count DESC LIMIT 10 OFFSET 0";
177
		else $query = "SELECT aircraft_manufacturer, SUM(stats_aircraft.cnt) as aircraft_manufacturer_count FROM stats_aircraft WHERE stats_airline = :stats_airline AND filter_name = :filter_name GROUP BY aircraft_manufacturer ORDER BY aircraft_manufacturer_count DESC";
178
                 try {
179
                        $sth = $this->db->prepare($query);
180
                        $sth->execute(array(':stats_airline' => $stats_airline,':filter_name' => $filter_name));
181
                } catch(PDOException $e) {
182
                        echo "error : ".$e->getMessage();
183
                }
184
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
185
                if (empty($all)) {
186
            		$filters = array('airlines' => array($stats_airline));
187
            		if ($filter_name != '') {
188
            			$filters = array_merge($filters,$globalStatsFilters[$filter_name]);
189
			}
190
            		$Spotter = new Spotter($this->db);
191
			$all = $Spotter->countAllAircraftManufacturers($filters);
192
                }
193
                return $all;
194
	}
195
196
	public function countAllArrivalCountries($limit = true, $stats_airline = '', $filter_name = '') {
197
		global $globalStatsFilters;
198
		if ($filter_name == '') $filter_name = $this->filter_name;
199
		if ($limit) $query = "SELECT airport_country AS airport_arrival_country, SUM(arrival) as airport_arrival_country_count FROM stats_airport WHERE stats_type = 'yearly' AND stats_airline = :stats_airline AND filter_name = :filter_name GROUP BY airport_arrival_country ORDER BY airport_arrival_country_count DESC LIMIT 10 OFFSET 0";
200
		else $query = "SELECT airport_country AS airport_arrival_country, SUM(arrival) as airport_arrival_country_count FROM stats_airport WHERE stats_type = 'yearly' AND stats_airline = :stats_airline AND filter_name = :filter_name GROUP BY airport_arrival_country ORDER BY airport_arrival_country_count DESC";
201
                 try {
202
                        $sth = $this->db->prepare($query);
203
                        $sth->execute(array(':stats_airline' => $stats_airline,':filter_name' => $filter_name));
204
                } catch(PDOException $e) {
205
                        echo "error : ".$e->getMessage();
206
                }
207
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
208
                if (empty($all)) {
209
			$filters = array('airlines' => array($stats_airline));
210
			if ($filter_name != '') {
211
            			$filters = array_merge($filters,$globalStatsFilters[$filter_name]);
212
			}
213
			$Spotter = new Spotter($this->db);
214
			$all = $Spotter->countAllArrivalCountries($limit,$filters);
215
                }
216
                return $all;
217
	}
218
	public function countAllDepartureCountries($limit = true, $stats_airline = '', $filter_name = '') {
219
		global $globalStatsFilters;
220
		if ($filter_name == '') $filter_name = $this->filter_name;
221
		if ($limit) $query = "SELECT airport_country AS airport_departure_country, SUM(departure) as airport_departure_country_count FROM stats_airport WHERE stats_type = 'yearly' AND stats_airline = :stats_airline AND filter_name = :filter_name GROUP BY airport_departure_country ORDER BY airport_departure_country_count DESC LIMIT 10 OFFSET 0";
222
		else $query = "SELECT airport_country AS airport_departure_country, SUM(departure) as airport_departure_country_count FROM stats_airport WHERE stats_type = 'yearly' AND stats_airline = :stats_airline AND filter_name = :filter_name GROUP BY airport_departure_country ORDER BY airport_departure_country_count DESC";
223
                 try {
224
                        $sth = $this->db->prepare($query);
225
                        $sth->execute(array(':stats_airline' => $stats_airline,':filter_name' => $filter_name));
226
                } catch(PDOException $e) {
227
                        echo "error : ".$e->getMessage();
228
                }
229
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
230
                if (empty($all)) {
231
			$filters = array('airlines' => array($stats_airline));
232
			if ($filter_name != '') {
233
            			$filters = array_merge($filters,$globalStatsFilters[$filter_name]);
234
			}
235
			$Spotter = new Spotter($this->db);
236
			$all = $Spotter->countAllDepartureCountries($filters);
237
                }
238
                return $all;
239
	}
240
241
	public function countAllAirlines($limit = true,$filter_name = '') {
242
		global $globalStatsFilters;
243
		if ($filter_name == '') $filter_name = $this->filter_name;
244
		if ($limit) $query = "SELECT DISTINCT stats_airline.airline_icao, stats_airline.cnt AS airline_count, stats_airline.airline_name, airlines.country as airline_country FROM stats_airline, airlines WHERE stats_airline.airline_name <> '' AND stats_airline.airline_icao <> '' AND airlines.icao = stats_airline.airline_icao AND filter_name = :filter_name ORDER BY airline_count DESC LIMIT 10 OFFSET 0";
245
		else $query = "SELECT DISTINCT stats_airline.airline_icao, stats_airline.cnt AS airline_count, stats_airline.airline_name, airlines.country as airline_country FROM stats_airline, airlines WHERE stats_airline.airline_name <> '' AND stats_airline.airline_icao <> '' AND airlines.icao = stats_airline.airline_icao AND filter_name = :filter_name ORDER BY airline_count DESC";
246
                 try {
247
                        $sth = $this->db->prepare($query);
248
                        $sth->execute(array(':filter_name' => $filter_name));
249
                } catch(PDOException $e) {
250
                        echo "error : ".$e->getMessage();
251
                }
252
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
253
                if (empty($all)) {
254
	                $Spotter = new Spotter($this->db);
255
            		$filters = array();
256
            		if ($filter_name != '') {
257
            			$filters = array_merge($filters,$globalStatsFilters[$filter_name]);
258
			}
259
260
    		        $all = $Spotter->countAllAirlines($limit,0,'',$filters);
261
                }
262
                return $all;
263
	}
264
	public function countAllAircraftRegistrations($limit = true,$stats_airline = '',$filter_name = '') {
265
		global $globalStatsFilters;
266
		if ($filter_name == '') $filter_name = $this->filter_name;
267
		if ($limit) $query = "SELECT s.aircraft_icao, s.cnt AS aircraft_registration_count, a.type AS aircraft_name, s.registration FROM stats_registration s, aircraft a WHERE s.registration <> '' AND a.icao = s.aircraft_icao AND s.stats_airline = :stats_airline AND filter_name = :filter_name ORDER BY aircraft_registration_count DESC LIMIT 10 OFFSET 0";
268
		else $query = "SELECT s.aircraft_icao, s.cnt AS aircraft_registration_count, a.type AS aircraft_name FROM stats_registration s, aircraft a WHERE s.registration <> '' AND a.icao = s.aircraft_icao AND s.stats_airline = :stats_airline AND filter_name = :filter_name ORDER BY aircraft_registration_count DESC";
269
                 try {
270
                        $sth = $this->db->prepare($query);
271
                        $sth->execute(array(':stats_airline' => $stats_airline,':filter_name' => $filter_name));
272
                } catch(PDOException $e) {
273
                        echo "error : ".$e->getMessage();
274
                }
275
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
276
                if (empty($all)) {
277
			$filters = array('airlines' => array($stats_airline));
278
			if ($filter_name != '') {
279
				$filters = array_merge($filters,$globalStatsFilters[$filter_name]);
280
			}
281
	                $Spotter = new Spotter($this->db);
282
    		        $all = $Spotter->countAllAircraftRegistrations($limit,0,'',$filters);
283
                }
284
                return $all;
285
	}
286
	public function countAllCallsigns($limit = true,$stats_airline = '',$filter_name = '') {
287
		global $globalStatsFilters;
288
		if ($filter_name == '') $filter_name = $this->filter_name;
289
		if ($limit) $query = "SELECT s.callsign_icao, s.cnt AS callsign_icao_count, a.name AS airline_name, a.icao as airline_icao FROM stats_callsign s, airlines a WHERE s.callsign_icao <> '' AND a.icao = s.airline_icao AND s.airline_icao = :stats_airline AND filter_name = :filter_name ORDER BY callsign_icao_count DESC LIMIT 10 OFFSET 0";
290
		else $query = "SELECT s.callsign_icao, s.cnt AS callsign_icao_count, a.name AS airline_name, a.icao as airline_icao FROM stats_callsign s, airlines a WHERE s.callsign_icao <> '' AND a.icao = s.airline_icao AND s.airline_icao = :stats_airline AND filter_name = :filter_name ORDER BY callsign_icao_count DESC";
291
		 try {
292
			$sth = $this->db->prepare($query);
293
			$sth->execute(array(':stats_airline' => $stats_airline,':filter_name' => $filter_name));
294
		} catch(PDOException $e) {
295
			echo "error : ".$e->getMessage();
296
		}
297
		$all = $sth->fetchAll(PDO::FETCH_ASSOC);
298
		if (empty($all)) {
299
			$filters = array('airlines' => array($stats_airline));
300
			if ($filter_name != '') {
301
				$filters = array_merge($filters,$globalStatsFilters[$filter_name]);
302
			}
303
			$Spotter = new Spotter($this->db);
304
			$all = $Spotter->countAllCallsigns($limit,0,'',$filters);
305
		}
306
		return $all;
307
	}
308
	public function countAllFlightOverCountries($limit = true, $stats_airline = '',$filter_name = '') {
309
		$Connection = new Connection();
310
		if ($filter_name == '') $filter_name = $this->filter_name;
311
		if ($Connection->tableExists('countries')) {
312
			if ($limit) $query = "SELECT countries.iso3 as flight_country_iso3, countries.iso2 as flight_country_iso2, countries.name as flight_country, cnt as flight_count, lat as flight_country_latitude, lon as flight_country_longitude FROM stats_country, countries WHERE stats_country.iso2 = countries.iso2 AND stats_country.stats_airline = :stats_airline AND filter_name = :filter_name ORDER BY flight_count DESC LIMIT 20 OFFSET 0";
313
			else $query = "SELECT countries.iso3 as flight_country_iso3, countries.iso2 as flight_country_iso2, countries.name as flight_country, cnt as flight_count, lat as flight_country_latitude, lon as flight_country_longitude FROM stats_country, countries WHERE stats_country.iso2 = countries.iso2 AND stats_country.stats_airline = :stats_airline AND filter_name = :filter_name ORDER BY flight_count DESC";
314
			 try {
315
				$sth = $this->db->prepare($query);
316
				$sth->execute(array(':stats_airline' => $stats_airline,':filter_name' => $filter_name));
317
			} catch(PDOException $e) {
318
				echo "error : ".$e->getMessage();
319
			}
320
			$all = $sth->fetchAll(PDO::FETCH_ASSOC);
321
                /*
322
                if (empty($all)) {
323
	                $Spotter = new Spotter($this->db);
324
    		        $all = $Spotter->countAllFlightOverCountries($limit);
325
                }
326
                */
327
			return $all;
328
		} else {
329
			return array();
330
		}
331
	}
332
	public function countAllPilots($limit = true,$stats_airline = '',$filter_name = '') {
333
		global $globalStatsFilters;
334
		if ($filter_name == '') $filter_name = $this->filter_name;
335
		if ($limit) $query = "SELECT pilot_id, cnt AS pilot_count, pilot_name, format_source FROM stats_pilot WHERE stats_airline = :stats_airline AND filter_name = :filter_name ORDER BY pilot_count DESC LIMIT 10 OFFSET 0";
336
		else $query = "SELECT pilot_id, cnt AS pilot_count, pilot_name, format_source FROM stats_pilot WHERE stats_airline = :stats_airline AND filter_name = :filter_name ORDER BY pilot_count DESC";
337
                 try {
338
                        $sth = $this->db->prepare($query);
339
                        $sth->execute(array(':stats_airline' => $stats_airline,':filter_name' => $filter_name));
340
                } catch(PDOException $e) {
341
                        echo "error : ".$e->getMessage();
342
                }
343
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
344
                if (empty($all)) {
345
			$filters = array('airlines' => array($stats_airline));
346
			if ($filter_name != '') {
347
				$filters = array_merge($filters,$globalStatsFilters[$filter_name]);
348
			}
349
            		$Spotter = new Spotter($this->db);
350
            		$all = $Spotter->countAllPilots($limit,0,'',$filters);
351
                }
352
                return $all;
353
	}
354
	public function countAllOwners($limit = true,$stats_airline = '', $filter_name = '') {
355
		global $globalStatsFilters;
356
		if ($filter_name == '') $filter_name = $this->filter_name;
357
		if ($limit) $query = "SELECT owner_name, cnt AS owner_count FROM stats_owner WHERE stats_airline = :stats_airline AND filter_name = :filter_name ORDER BY owner_count DESC LIMIT 10 OFFSET 0";
358
		else $query = "SELECT owner_name, cnt AS owner_count FROM stats_owner WHERE stats_airline = :stats_airline AND filter_name = :filter_name ORDER BY owner_count DESC";
359
                 try {
360
                        $sth = $this->db->prepare($query);
361
                        $sth->execute(array(':stats_airline' => $stats_airline,':filter_name' => $filter_name));
362
                } catch(PDOException $e) {
363
                        echo "error : ".$e->getMessage();
364
                }
365
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
366
                if (empty($all)) {
367
			$filters = array('airlines' => array($stats_airline));
368
			if ($filter_name != '') {
369
				$filters = array_merge($filters,$globalStatsFilters[$filter_name]);
370
			}
371
            		$Spotter = new Spotter($this->db);
372
            		$all = $Spotter->countAllOwners($limit,0,'',$filters);
373
                }
374
                return $all;
375
	}
376
	public function countAllDepartureAirports($limit = true,$stats_airline = '',$filter_name = '') {
377
		global $globalStatsFilters;
378
		if ($filter_name == '') $filter_name = $this->filter_name;
379
		if ($limit) $query = "SELECT DISTINCT airport_icao AS airport_departure_icao,airport_city AS airport_departure_city,airport_country AS airport_departure_country,departure AS airport_departure_icao_count FROM stats_airport WHERE departure > 0 AND stats_type = 'yearly' AND stats_airline = :stats_airline AND filter_name = :filter_name ORDER BY airport_departure_icao_count DESC LIMIT 10 OFFSET 0";
380
		else $query = "SELECT DISTINCT airport_icao AS airport_departure_icao,airport_city AS airport_departure_city,airport_country AS airport_departure_country,departure AS airport_departure_icao_count FROM stats_airport WHERE departure > 0 AND stats_type = 'yearly' AND stats_airline = :stats_airline AND filter_name = :filter_name ORDER BY airport_departure_icao_count DESC";
381
                 try {
382
                        $sth = $this->db->prepare($query);
383
                        $sth->execute(array(':stats_airline' => $stats_airline,':filter_name' => $filter_name));
384
                } catch(PDOException $e) {
385
                        echo "error : ".$e->getMessage();
386
                }
387
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
388
                if (empty($all)) {
389
			$filters = array('airlines' => array($stats_airline));
390
            		if ($filter_name != '') {
391
            			$filters = array_merge($filters,$globalStatsFilters[$filter_name]);
392
			}
393
            		$Spotter = new Spotter($this->db);
394
            		$pall = $Spotter->countAllDepartureAirports($limit,0,'',$filters);
395
        		$dall = $Spotter->countAllDetectedDepartureAirports($limit,0,'',$filters);
396
        		$all = array();
397
        		foreach ($pall as $value) {
398
        			$icao = $value['airport_departure_icao'];
399
        			$all[$icao] = $value;
400
        		}
401
        		
402
        		foreach ($dall as $value) {
403
        			$icao = $value['airport_departure_icao'];
404
        			if (isset($all[$icao])) {
405
        				$all[$icao]['airport_departure_icao_count'] = $all[$icao]['airport_departure_icao_count'] + $value['airport_departure_icao_count'];
406
        			} else $all[$icao] = $value;
407
        		}
408
        		$count = array();
409
        		foreach ($all as $key => $row) {
410
        			$count[$key] = $row['airport_departure_icao_count'];
411
        		}
412
        		array_multisort($count,SORT_DESC,$all);
413
                }
414
                return $all;
415
	}
416
	public function countAllArrivalAirports($limit = true,$stats_airline = '',$filter_name = '') {
417
		global $globalStatsFilters;
418
		if ($filter_name == '') $filter_name = $this->filter_name;
419
		if ($limit) $query = "SELECT DISTINCT airport_icao AS airport_arrival_icao,airport_city AS airport_arrival_city,airport_country AS airport_arrival_country,arrival AS airport_arrival_icao_count FROM stats_airport WHERE arrival > 0 AND stats_type = 'yearly' AND stats_airline = :stats_airline AND filter_name = :filter_name ORDER BY airport_arrival_icao_count DESC LIMIT 10 OFFSET 0";
420
		else $query = "SELECT DISTINCT airport_icao AS airport_arrival_icao,airport_city AS airport_arrival_city,airport_country AS airport_arrival_country,arrival AS airport_arrival_icao_count FROM stats_airport WHERE arrival > 0 AND stats_type = 'yearly' AND stats_airline = :stats_airline AND filter_name = :filter_name ORDER BY airport_arrival_icao_count DESC";
421
		try {
422
			$sth = $this->db->prepare($query);
423
			$sth->execute(array(':stats_airline' => $stats_airline,':filter_name' => $filter_name));
424
		} catch(PDOException $e) {
425
			echo "error : ".$e->getMessage();
426
		}
427
		$all = $sth->fetchAll(PDO::FETCH_ASSOC);
428
		if (empty($all)) {
429
			$filters = array('airlines' => array($stats_airline));
430
			if ($filter_name != '') {
431
				$filters = array_merge($filters,$globalStatsFilters[$filter_name]);
432
			}
433
			$Spotter = new Spotter($this->db);
434
			$pall = $Spotter->countAllArrivalAirports($limit,0,'',false,$filters);
435
			$dall = $Spotter->countAllDetectedArrivalAirports($limit,0,'',false,$filters);
436
        		$all = array();
437
        		foreach ($pall as $value) {
438
        			$icao = $value['airport_arrival_icao'];
439
        			$all[$icao] = $value;
440
        		}
441
        		
442
        		foreach ($dall as $value) {
443
        			$icao = $value['airport_arrival_icao'];
444
        			if (isset($all[$icao])) {
445
        				$all[$icao]['airport_arrival_icao_count'] = $all[$icao]['airport_arrival_icao_count'] + $value['airport_arrival_icao_count'];
446
        			} else $all[$icao] = $value;
447
        		}
448
        		$count = array();
449
        		foreach ($all as $key => $row) {
450
        			$count[$key] = $row['airport_arrival_icao_count'];
451
        		}
452
        		array_multisort($count,SORT_DESC,$all);
453
                }
454
 
455
                return $all;
456
	}
457
	public function countAllMonthsLastYear($limit = true,$stats_airline = '',$filter_name = '') {
458
		global $globalDBdriver, $globalStatsFilters;
459
		if ($filter_name == '') $filter_name = $this->filter_name;
460
		if ($globalDBdriver == 'mysql') {
461
			if ($limit) $query = "SELECT MONTH(stats_date) as month_name, YEAR(stats_date) as year_name, cnt as date_count FROM stats WHERE stats_type = 'flights_bymonth' AND stats_date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 12 MONTH) AND stats_airline = :stats_airline AND filter_name = :filter_name";
462
			else $query = "SELECT MONTH(stats_date) as month_name, YEAR(stats_date) as year_name, cnt as date_count FROM stats WHERE stats_type = 'flights_bymonth' AND stats_airline = :stats_airline AND filter_name = :filter_name";
463
		} else {
464
			if ($limit) $query = "SELECT EXTRACT(MONTH FROM stats_date) as month_name, EXTRACT(YEAR FROM stats_date) as year_name, cnt as date_count FROM stats WHERE stats_type = 'flights_bymonth' AND stats_date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '12 MONTHS' AND stats_airline = :stats_airline AND filter_name = :filter_name";
465
			else $query = "SELECT EXTRACT(MONTH FROM stats_date) as month_name, EXTRACT(YEAR FROM stats_date) as year_name, cnt as date_count FROM stats WHERE stats_type = 'flights_bymonth' AND stats_airline = :stats_airline AND filter_name = :filter_name";
466
		}
467
		$query_data = array(':stats_airline' => $stats_airline,':filter_name' => $filter_name);
468
                 try {
469
                        $sth = $this->db->prepare($query);
470
                        $sth->execute($query_data);
471
                } catch(PDOException $e) {
472
                        echo "error : ".$e->getMessage();
473
                }
474
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
475
                if (empty($all)) {
476
			$filters = array('airlines' => array($stats_airline));
477
			if ($filter_name != '') {
478
				$filters = array_merge($filters,$globalStatsFilters[$filter_name]);
479
			}
480
            		$Spotter = new Spotter($this->db);
481
            		$all = $Spotter->countAllMonthsLastYear($filters);
482
                }
483
                
484
                return $all;
485
	}
486
	
487
	public function countAllDatesLastMonth($stats_airline = '',$filter_name = '') {
488
		global $globalStatsFilters;
489
		if ($filter_name == '') $filter_name = $this->filter_name;
490
		$query = "SELECT flight_date as date_name, cnt as date_count FROM stats_flight WHERE stats_type = 'month' AND stats_airline = :stats_airline AND filter_name = :filter_name";
491
		$query_data = array(':stats_airline' => $stats_airline,':filter_name' => $filter_name);
492
                 try {
493
                        $sth = $this->db->prepare($query);
494
                        $sth->execute($query_data);
495
                } catch(PDOException $e) {
496
                        echo "error : ".$e->getMessage();
497
                }
498
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
499
                if (empty($all)) {
500
			$filters = array('airlines' => array($stats_airline));
501
			if ($filter_name != '') {
502
				$filters = array_merge($filters,$globalStatsFilters[$filter_name]);
503
			}
504
            		$Spotter = new Spotter($this->db);
505
            		$all = $Spotter->countAllDatesLastMonth($filters);
506
                }
507
                return $all;
508
	}
509
	public function countAllDatesLast7Days($stats_airline = '',$filter_name = '') {
510
		global $globalDBdriver, $globalStatsFilters;
511
		if ($filter_name == '') $filter_name = $this->filter_name;
512
		if ($globalDBdriver == 'mysql') {
513
			$query = "SELECT flight_date as date_name, cnt as date_count FROM stats_flight WHERE stats_type = 'month' AND flight_date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY) AND stats_airline = :stats_airline AND filter_name = :filter_name";
514
		} else {
515
			$query = "SELECT flight_date as date_name, cnt as date_count FROM stats_flight WHERE stats_type = 'month' AND flight_date::timestamp >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND stats_airline = :stats_airline AND filter_name = :filter_name";
516
		}
517
		$query_data = array(':stats_airline' => $stats_airline,':filter_name' => $filter_name);
518
                 try {
519
                        $sth = $this->db->prepare($query);
520
                        $sth->execute($query_data);
521
                } catch(PDOException $e) {
522
                        echo "error : ".$e->getMessage();
523
                }
524
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
525
                if (empty($all)) {
526
			$filters = array('airlines' => array($stats_airline));
527
			if ($filter_name != '') {
528
				$filters = array_merge($filters,$globalStatsFilters[$filter_name]);
529
			}
530
            		$Spotter = new Spotter($this->db);
531
            		$all = $Spotter->countAllDatesLast7Days($filters);
532
                }
533
                return $all;
534
	}
535
	public function countAllDates($stats_airline = '',$filter_name = '') {
536
		global $globalStatsFilters;
537
		if ($filter_name == '') $filter_name = $this->filter_name;
538
		$query = "SELECT flight_date as date_name, cnt as date_count FROM stats_flight WHERE stats_type = 'date' AND stats_airline = :stats_airline AND filter_name = :filter_name";
539
		$query_data = array(':stats_airline' => $stats_airline,':filter_name' => $filter_name);
540
                 try {
541
                        $sth = $this->db->prepare($query);
542
                        $sth->execute($query_data);
543
                } catch(PDOException $e) {
544
                        echo "error : ".$e->getMessage();
545
                }
546
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
547
                if (empty($all)) {
548
			$filters = array('airlines' => array($stats_airline));
549
			if ($filter_name != '') {
550
            			$filters = array_merge($filters,$globalStatsFilters[$filter_name]);
551
			}
552
            		$Spotter = new Spotter($this->db);
553
            		$all = $Spotter->countAllDates($filters);
554
                }
555
                return $all;
556
	}
557
	public function countAllDatesByAirlines($filter_name = '') {
558
		global $globalStatsFilters;
559
		if ($filter_name == '') $filter_name = $this->filter_name;
560
		$query = "SELECT stats_airline as airline_icao, flight_date as date_name, cnt as date_count FROM stats_flight WHERE stats_type = 'date' AND filter_name = :filter_name";
561
		$query_data = array('filter_name' => $filter_name);
562
                 try {
563
                        $sth = $this->db->prepare($query);
564
                        $sth->execute($query_data);
565
                } catch(PDOException $e) {
566
                        echo "error : ".$e->getMessage();
567
                }
568
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
569
                if (empty($all)) {
570
            		$filters = array();
571
            		if ($filter_name != '') {
572
            			$filters = array_merge($filters,$globalStatsFilters[$filter_name]);
573
			}
574
            		$Spotter = new Spotter($this->db);
575
            		$all = $Spotter->countAllDatesByAirlines($filters);
576
                }
577
                return $all;
578
	}
579
	public function countAllMonths($stats_airline = '',$filter_name = '') {
580
		global $globalStatsFilters;
581
		if ($filter_name == '') $filter_name = $this->filter_name;
582
	    	$query = "SELECT YEAR(stats_date) AS year_name,MONTH(stats_date) AS month_name, cnt as date_count FROM stats WHERE stats_type = 'flights_bymonth' AND stats_airline = :stats_airline AND filter_name = :filter_name";
583
                 try {
584
                        $sth = $this->db->prepare($query);
585
                        $sth->execute(array(':stats_airline' => $stats_airline, ':filter_name' => $filter_name));
586
                } catch(PDOException $e) {
587
                        echo "error : ".$e->getMessage();
588
                }
589
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
590
                if (empty($all)) {
591
			$filters = array('airlines' => array($stats_airline));
592
			if ($filter_name != '') {
593
				$filters = array_merge($filters,$globalStatsFilters[$filter_name]);
594
			}
595
            		$Spotter = new Spotter($this->db);
596
            		$all = $Spotter->countAllMonths($filters);
597
                }
598
                return $all;
599
	}
600
	public function countAllMilitaryMonths($filter_name = '') {
601
		global $globalStatsFilters;
602
		if ($filter_name == '') $filter_name = $this->filter_name;
603
	    	$query = "SELECT YEAR(stats_date) AS year_name,MONTH(stats_date) AS month_name, cnt as date_count FROM stats WHERE stats_type = 'military_flights_bymonth' AND filter_name = :filter_name";
604
                 try {
605
                        $sth = $this->db->prepare($query);
606
                        $sth->execute(array(':filter_name' => $filter_name));
607
                } catch(PDOException $e) {
608
                        echo "error : ".$e->getMessage();
609
                }
610
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
611
                if (empty($all)) {
612
            		$filters = array();
613
            		if ($filter_name != '') {
614
            			$filters = array_merge($filters,$globalStatsFilters[$filter_name]);
615
			}
616
            		$Spotter = new Spotter($this->db);
617
            		$all = $Spotter->countAllMilitaryMonths($filters);
618
                }
619
                return $all;
620
	}
621
	public function countAllHours($orderby = 'hour',$limit = true,$stats_airline = '',$filter_name = '') {
622
		global $globalTimezone, $globalDBdriver, $globalStatsFilters;
623
		if ($filter_name == '') $filter_name = $this->filter_name;
624
		if ($limit) $query = "SELECT flight_date as hour_name, cnt as hour_count FROM stats_flight WHERE stats_type = 'hour' AND stats_airline = :stats_airline AND filter_name = :filter_name";
625
		else $query = "SELECT flight_date as hour_name, cnt as hour_count FROM stats_flight WHERE stats_type = 'hour' AND stats_airline = :stats_airline AND filter_name = :filter_name";
626
		if ($orderby == 'hour') {
627
			/*
628
			if ($globalDBdriver == 'mysql') {
629
				$query .= " ORDER BY flight_date ASC";
630
			} else {
631
			*/
632
			$query .= " ORDER BY CAST(flight_date AS integer) ASC";
633
		}
634
		if ($orderby == 'count') $query .= " ORDER BY hour_count DESC";
635
                 try {
636
                        $sth = $this->db->prepare($query);
637
                        $sth->execute(array(':stats_airline' => $stats_airline, ':filter_name' => $filter_name));
638
                } catch(PDOException $e) {
639
                        echo "error : ".$e->getMessage();
640
                }
641
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
642
                if (empty($all)) {
643
			$filters = array('airlines' => array($stats_airline));
644
			if ($filter_name != '') {
645
            			$filters = array_merge($filters,$globalStatsFilters[$filter_name]);
646
			}
647
            		$Spotter = new Spotter($this->db);
648
            		$all = $Spotter->countAllHours($orderby,$filters);
649
                }
650
                return $all;
651
	}
652
	
653
	public function countOverallFlights($stats_airline = '', $filter_name = '') {
654
		global $globalStatsFilters;
655
		if ($filter_name == '') $filter_name = $this->filter_name;
656
		$all = $this->getSumStats('flights_bymonth',date('Y'),$stats_airline,$filter_name);
657
		if (empty($all)) {
658
			$filters = array('airlines' => array($stats_airline));
659
			if ($filter_name != '') {
660
				$filters = array_merge($filters,$globalStatsFilters[$filter_name]);
661
			}
662
			$Spotter = new Spotter($this->db);
663
			$all = $Spotter->countOverallFlights($filters);
664
		}
665
		return $all;
666
	}
667
	public function countOverallMilitaryFlights($filter_name = '') {
668
		global $globalStatsFilters;
669
		if ($filter_name == '') $filter_name = $this->filter_name;
670
		$all = $this->getSumStats('military_flights_bymonth',date('Y'),'',$filter_name);
671
		if (empty($all)) {
672
		        $filters = array();
673
            		if ($filter_name != '') {
674
            			$filters = array_merge($filters,$globalStatsFilters[$filter_name]);
675
			}
676
			$Spotter = new Spotter($this->db);
677
			$all = $Spotter->countOverallMilitaryFlights($filters);
678
		}
679
		return $all;
680
	}
681
	public function countOverallArrival($stats_airline = '',$filter_name = '') {
682
		global $globalStatsFilters;
683
		if ($filter_name == '') $filter_name = $this->filter_name;
684
		$all = $this->getSumStats('realarrivals_bymonth',date('Y'),$stats_airline,$filter_name);
685
		if (empty($all)) {
686
			$filters = array('airlines' => array($stats_airline));
687
			if ($filter_name != '') {
688
				$filters = array_merge($filters,$globalStatsFilters[$filter_name]);
689
			}
690
			$Spotter = new Spotter($this->db);
691
			$all = $Spotter->countOverallArrival($filters);
692
		}
693
		return $all;
694
	}
695
	public function countOverallAircrafts($stats_airline = '',$filter_name = '') {
696
		global $globalStatsFilters;
697
		if ($filter_name == '') $filter_name = $this->filter_name;
698
		$all = $this->getSumStats('aircrafts_bymonth',date('Y'),$stats_airline,$filter_name);
699
		if (empty($all)) {
700
			$filters = array('airlines' => array($stats_airline));
701
			if ($filter_name != '') {
702
				$filters = array_merge($filters,$globalStatsFilters[$filter_name]);
703
			}
704
			$Spotter = new Spotter($this->db);
705
			$all = $Spotter->countOverallAircrafts($filters);
706
		}
707
		return $all;
708
	}
709
	public function countOverallAirlines($filter_name = '') {
710
		global $globalStatsFilters;
711
		if ($filter_name == '') $filter_name = $this->filter_name;
712
		$query = "SELECT COUNT(*) AS nb_airline FROM stats_airline WHERE filter_name = :filter_name";
713
                 try {
714
                        $sth = $this->db->prepare($query);
715
                        $sth->execute(array(':filter_name' => $filter_name));
716
                } catch(PDOException $e) {
717
                        echo "error : ".$e->getMessage();
718
                }
719
                $result = $sth->fetchAll(PDO::FETCH_ASSOC);
720
                $all = $result[0]['nb_airline'];
721
		//$all = $this->getSumStats('airlines_bymonth',date('Y'));
722
		if (empty($all)) {
723
            		$filters = array();
724
            		if ($filter_name != '') {
725
            			$filters = array_merge($filters,$globalStatsFilters[$filter_name]);
726
			}
727
			$Spotter = new Spotter($this->db);
728
			$all = $Spotter->countOverallAirlines($filters);
729
		}
730
		return $all;
731
	}
732
	public function countOverallOwners($stats_airline = '',$filter_name = '') {
733
		global $globalStatsFilters;
734
		if ($filter_name == '') $filter_name = $this->filter_name;
735
		/*
736
		$query = "SELECT COUNT(*) AS nb_owner FROM stats_owner";
737
                 try {
738
                        $sth = $this->db->prepare($query);
739
                        $sth->execute();
740
                } catch(PDOException $e) {
741
                        echo "error : ".$e->getMessage();
742
                }
743
                $result = $sth->fetchAll(PDO::FETCH_ASSOC);
744
                $all = $result[0]['nb_owner'];
745
                */
746
		$all = $this->getSumStats('owners_bymonth',date('Y'),$stats_airline,$filter_name);
747
		if (empty($all)) {
748
			$filters = array('airlines' => array($stats_airline));
749
			if ($filter_name != '') {
750
				$filters = array_merge($filters,$globalStatsFilters[$filter_name]);
751
			}
752
			$Spotter = new Spotter($this->db);
753
			$all = $Spotter->countOverallOwners($filters);
754
		}
755
		return $all;
756
	}
757
	public function countOverallPilots($stats_airline = '',$filter_name = '') {
758
		global $globalStatsFilters;
759
		if ($filter_name == '') $filter_name = $this->filter_name;
760
		$all = $this->getSumStats('pilots_bymonth',date('Y'),$stats_airline,$filter_name);
761
		if (empty($all)) {
762
			$filters = array('airlines' => array($stats_airline));
763
			if ($filter_name != '') {
764
				$filters = array_merge($filters,$globalStatsFilters[$filter_name]);
765
			}
766
			$Spotter = new Spotter($this->db);
767
			$all = $Spotter->countOverallPilots($filters);
768
		}
769
		return $all;
770
	}
771
772
	public function getLast7DaysAirports($airport_icao = '', $stats_airline = '',$filter_name = '') {
773
		if ($filter_name == '') $filter_name = $this->filter_name;
774
		$query = "SELECT * FROM stats_airport WHERE stats_type = 'daily' AND airport_icao = :airport_icao AND stats_airline = :stats_airline AND filter_name = :filter_name ORDER BY date";
775
		$query_values = array(':airport_icao' => $airport_icao,':stats_airline' => $stats_airline, ':filter_name' => $filter_name);
776
                 try {
777
                        $sth = $this->db->prepare($query);
778
                        $sth->execute($query_values);
779
                } catch(PDOException $e) {
780
                        echo "error : ".$e->getMessage();
781
                }
782
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
783
                return $all;
784
	}
785
	public function getStats($type,$stats_airline = '', $filter_name = '') {
786
		if ($filter_name == '') $filter_name = $this->filter_name;
787
                $query = "SELECT * FROM stats WHERE stats_type = :type AND stats_airline = :stats_airline AND filter_name = :filter_name ORDER BY stats_date";
788
                $query_values = array(':type' => $type,':stats_airline' => $stats_airline,':filter_name' => $filter_name);
789
                 try {
790
                        $sth = $this->db->prepare($query);
791
                        $sth->execute($query_values);
792
                } catch(PDOException $e) {
793
                        echo "error : ".$e->getMessage();
794
                }
795
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
796
                return $all;
797
        }
798
	public function getSumStats($type,$year,$stats_airline = '',$filter_name = '') {
799
		if ($filter_name == '') $filter_name = $this->filter_name;
800
    		global $globalArchiveMonths, $globalDBdriver;
801
    		if ($globalDBdriver == 'mysql') {
802
	                $query = "SELECT SUM(cnt) as total FROM stats WHERE stats_type = :type AND YEAR(stats_date) = :year AND stats_airline = :stats_airline AND filter_name = :filter_name";
803
	        } else {
804
            		$query = "SELECT SUM(cnt) as total FROM stats WHERE stats_type = :type AND EXTRACT(YEAR FROM stats_date) = :year AND stats_airline = :stats_airline AND filter_name = :filter_name";
805
                }
806
                $query_values = array(':type' => $type, ':year' => $year, ':stats_airline' => $stats_airline,':filter_name' => $filter_name);
807
                 try {
808
                        $sth = $this->db->prepare($query);
809
                        $sth->execute($query_values);
810
                } catch(PDOException $e) {
811
                        echo "error : ".$e->getMessage();
812
                }
813
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
814
                return $all[0]['total'];
815
        }
816
	public function getStatsTotal($type, $stats_airline = '', $filter_name = '') {
817
    		global $globalArchiveMonths, $globalDBdriver;
818
		if ($filter_name == '') $filter_name = $this->filter_name;
819
    		if ($globalDBdriver == 'mysql') {
820
			$query = "SELECT SUM(cnt) as total FROM stats WHERE stats_type = :type AND stats_date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL ".$globalArchiveMonths." MONTH) AND stats_airline = :stats_airline AND filter_name = :filter_name";
821
		} else {
822
			$query = "SELECT SUM(cnt) as total FROM stats WHERE stats_type = :type AND stats_date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$globalArchiveMonths." MONTHS' AND stats_airline = :stats_airline AND filter_name = :filter_name";
823
                }
824
                $query_values = array(':type' => $type, ':stats_airline' => $stats_airline, ':filter_name' => $filter_name);
825
                 try {
826
                        $sth = $this->db->prepare($query);
827
                        $sth->execute($query_values);
828
                } catch(PDOException $e) {
829
                        echo "error : ".$e->getMessage();
830
                }
831
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
832
                return $all[0]['total'];
833
        }
834
	public function getStatsAircraftTotal($stats_airline = '', $filter_name = '') {
835
    		global $globalArchiveMonths, $globalDBdriver;
836
		if ($filter_name == '') $filter_name = $this->filter_name;
837
    		if ($globalDBdriver == 'mysql') {
838
			$query = "SELECT SUM(cnt) as total FROM stats_aircraft WHERE stats_airline = :stats_airline AND filter_name = :filter_name";
839
                } else {
840
			$query = "SELECT SUM(cnt) as total FROM stats_aircraft WHERE stats_airline = :stats_airline AND filter_name = :filter_name";
841
                }
842
                 try {
843
                        $sth = $this->db->prepare($query);
844
                        $sth->execute(array(':stats_airline' => $stats_airline, ':filter_name' => $filter_name));
845
                } catch(PDOException $e) {
846
                        echo "error : ".$e->getMessage();
847
                }
848
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
849
                return $all[0]['total'];
850
        }
851
	public function getStatsAirlineTotal($filter_name = '') {
852
    		global $globalArchiveMonths, $globalDBdriver;
853
		if ($filter_name == '') $filter_name = $this->filter_name;
854
    		if ($globalDBdriver == 'mysql') {
855
			$query = "SELECT SUM(cnt) as total FROM stats_airline WHERE filter_name = :filter_name";
856
                } else {
857
			$query = "SELECT SUM(cnt) as total FROM stats_airline WHERE filter_name = :filter_name";
858
                }
859
                 try {
860
                        $sth = $this->db->prepare($query);
861
                        $sth->execute(array(':filter_name' => $filter_name));
862
                } catch(PDOException $e) {
863
                        echo "error : ".$e->getMessage();
864
                }
865
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
866
                return $all[0]['total'];
867
        }
868
	public function getStatsOwnerTotal($filter_name = '') {
869
    		global $globalArchiveMonths, $globalDBdriver;
870
		if ($filter_name == '') $filter_name = $this->filter_name;
871
    		if ($globalDBdriver == 'mysql') {
872
			$query = "SELECT SUM(cnt) as total FROM stats_owner WHERE filter_name = :filter_name";
873
		} else {
874
			$query = "SELECT SUM(cnt) as total FROM stats_owner WHERE filter_name = :filter_name";
875
                }
876
                 try {
877
                        $sth = $this->db->prepare($query);
878
                        $sth->execute(array(':filter_name' => $filter_name));
879
                } catch(PDOException $e) {
880
                        echo "error : ".$e->getMessage();
881
                }
882
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
883
                return $all[0]['total'];
884
        }
885
	public function getStatsPilotTotal($filter_name = '') {
886
    		global $globalArchiveMonths, $globalDBdriver;
887
		if ($filter_name == '') $filter_name = $this->filter_name;
888
    		if ($globalDBdriver == 'mysql') {
889
            		$query = "SELECT SUM(cnt) as total FROM stats_pilot WHERE filter_name = :filter_name";
890
            	} else {
891
            		$query = "SELECT SUM(cnt) as total FROM stats_pilot WHERE filter_name = :filter_name";
892
            	}
893
                 try {
894
                        $sth = $this->db->prepare($query);
895
                        $sth->execute(array(':filter_name' => $filter_name));
896
                } catch(PDOException $e) {
897
                        echo "error : ".$e->getMessage();
898
                }
899
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
900
                return $all[0]['total'];
901
        }
902
903
	public function addStat($type,$cnt,$stats_date,$stats_airline = '',$filter_name = '') {
904
		global $globalDBdriver;
905
		if ($filter_name == '') $filter_name = $this->filter_name;
906
		if ($globalDBdriver == 'mysql') {
907
			$query = "INSERT INTO stats (stats_type,cnt,stats_date,stats_airline,filter_name) VALUES (:type,:cnt,:stats_date,:stats_airline,:filter_name) ON DUPLICATE KEY UPDATE cnt = :cnt";
908
                } else {
909
			$query = "UPDATE stats SET cnt = :cnt WHERE stats_type = :type AND stats_date = :stats_date AND stats_airline = :stats_airline AND filter_name = :filter_name; INSERT INTO stats (stats_type,cnt,stats_date,stats_airline,filter_name) SELECT :type,:cnt,:stats_date,:stats_airline,:filter_name WHERE NOT EXISTS (SELECT 1 FROM stats WHERE  stats_type = :type AND stats_date = :stats_date AND stats_airline = :stats_airline AND filter_name = :filter_name);"; 
910
		}
911
                $query_values = array(':type' => $type,':cnt' => $cnt,':stats_date' => $stats_date, ':stats_airline' => $stats_airline,':filter_name' => $filter_name);
912
                 try {
913
                        $sth = $this->db->prepare($query);
914
                        $sth->execute($query_values);
915
                } catch(PDOException $e) {
916
                        return "error : ".$e->getMessage();
917
                }
918
        }
919
	public function updateStat($type,$cnt,$stats_date,$stats_airline = '',$filter_name = '') {
920
		global $globalDBdriver;
921
		if ($filter_name == '') $filter_name = $this->filter_name;
922
		if ($globalDBdriver == 'mysql') {
923
			$query = "INSERT INTO stats (stats_type,cnt,stats_date,stats_airline,filter_name) VALUES (:type,:cnt,:stats_date,:stats_airline,:filter_name) ON DUPLICATE KEY UPDATE cnt = cnt+:cnt, stats_date = :date";
924
		} else {
925
            		//$query = "INSERT INTO stats (stats_type,cnt,stats_date) VALUES (:type,:cnt,:stats_date) ON DUPLICATE KEY UPDATE cnt = cnt+:cnt, stats_date = :date";
926
			$query = "UPDATE stats SET cnt = cnt+:cnt WHERE stats_type = :type AND stats_date = :stats_date AND stats_airline = :stats_airline AND filter_name = :filter_name; INSERT INTO stats (stats_type,cnt,stats_date,stats_airline,filter_name) SELECT :type,:cnt,:stats_date,:stats_airline,:filter_name WHERE NOT EXISTS (SELECT 1 FROM stats WHERE  stats_type = :type AND stats_date = :stats_date AND stats_airline = :stats_airline AND filter_name = :filter_name);"; 
927
                }
928
                $query_values = array(':type' => $type,':cnt' => $cnt,':stats_date' => $stats_date,':stats_airline' => $stats_airline,':filter_name' => $filter_name);
929
                 try {
930
                        $sth = $this->db->prepare($query);
931
                        $sth->execute($query_values);
932
                } catch(PDOException $e) {
933
                        return "error : ".$e->getMessage();
934
                }
935
        }
936
	public function getStatsSource($date,$stats_type = '') {
937
		if ($stats_type == '') {
938
			$query = "SELECT * FROM stats_source WHERE stats_date = :date ORDER BY source_name";
939
			$query_values = array(':date' => $date);
940
		} else {
941
			$query = "SELECT * FROM stats_source WHERE stats_date = :date AND stats_type = :stats_type ORDER BY source_name";
942
			$query_values = array(':date' => $date,':stats_type' => $stats_type);
943
		}
944
                 try {
945
                        $sth = $this->db->prepare($query);
946
                        $sth->execute($query_values);
947
                } catch(PDOException $e) {
948
                        echo "error : ".$e->getMessage();
949
                }
950
                $all = $sth->fetchAll(PDO::FETCH_ASSOC);
951
                return $all;
952
        }
953
954
	public function addStatSource($data,$source_name,$stats_type,$date) {
955
		global $globalDBdriver;
956
		if ($globalDBdriver == 'mysql') {
957
			$query = "INSERT INTO stats_source (source_data,source_name,stats_type,stats_date) VALUES (:data,:source_name,:stats_type,:stats_date) ON DUPLICATE KEY UPDATE source_data = :data";
958
		} else {
959
			$query = "UPDATE stats_source SET source_data = :data WHERE stats_date = :stats_date AND source_name = :source_name AND stats_type = :stats_type; INSERT INTO stats_source (source_data,source_name,stats_type,stats_date) SELECT :data,:source_name,:stats_type,:stats_date WHERE NOT EXISTS (SELECT 1 FROM stats_source WHERE stats_date = :stats_date AND source_name = :source_name AND stats_type = :stats_type);"; 
960
                }
961
                $query_values = array(':data' => $data,':stats_date' => $date,':source_name' => $source_name,':stats_type' => $stats_type);
962
                 try {
963
                        $sth = $this->db->prepare($query);
964
                        $sth->execute($query_values);
965
                } catch(PDOException $e) {
966
                        return "error : ".$e->getMessage();
967
                }
968
        }
969
	public function addStatFlight($type,$date_name,$cnt,$stats_airline = '',$filter_name = '') {
970
                $query = "INSERT INTO stats_flight (stats_type,flight_date,cnt,stats_airline,filter_name) VALUES (:type,:flight_date,:cnt,:stats_airline,:filter_name)";
971
                $query_values = array(':type' => $type,':flight_date' => $date_name,':cnt' => $cnt, ':stats_airline' => $stats_airline,':filter_name' => $filter_name);
972
                 try {
973
                        $sth = $this->db->prepare($query);
974
                        $sth->execute($query_values);
975
                } catch(PDOException $e) {
976
                        return "error : ".$e->getMessage();
977
                }
978
        }
979
	public function addStatAircraftRegistration($registration,$cnt,$aircraft_icao = '',$airline_icao = '',$filter_name = '') {
980
		global $globalDBdriver;
981
		if ($globalDBdriver == 'mysql') {
982
			$query = "INSERT INTO stats_registration (aircraft_icao,registration,cnt,stats_airline,filter_name) VALUES (:aircraft_icao,:registration,:cnt,:stats_airline,:filter_name) ON DUPLICATE KEY UPDATE cnt = cnt+:cnt";
983
		} else {
984
			$query = "UPDATE stats_registration SET cnt = cnt+:cnt WHERE registration = :registration AND stats_airline = :stats_airline AND filter_name = :filter_name; INSERT INTO stats_registration (aircraft_icao,registration,cnt,stats_airline,filter_name) SELECT :aircraft_icao,:registration,:cnt,:stats_airline,:filter_name WHERE NOT EXISTS (SELECT 1 FROM stats_registration WHERE registration = :registration AND stats_airline = :stats_airline AND filter_name = :filter_name);"; 
985
		}
986
                $query_values = array(':aircraft_icao' => $aircraft_icao,':registration' => $registration,':cnt' => $cnt,':stats_airline' => $airline_icao, ':filter_name' => $filter_name);
987
                 try {
988
                        $sth = $this->db->prepare($query);
989
                        $sth->execute($query_values);
990
                } catch(PDOException $e) {
991
                        return "error : ".$e->getMessage();
992
                }
993
        }
994
	public function addStatCallsign($callsign_icao,$cnt,$airline_icao = '', $filter_name = '') {
995
		global $globalDBdriver;
996
		if ($globalDBdriver == 'mysql') {
997
			$query = "INSERT INTO stats_callsign (callsign_icao,airline_icao,cnt,filter_name) VALUES (:callsign_icao,:airline_icao,:cnt,:filter_name) ON DUPLICATE KEY UPDATE cnt = cnt+:cnt";
998
		} else {
999
			$query = "UPDATE stats_callsign SET cnt = cnt+:cnt WHERE callsign_icao = :callsign_icao AND filter_name = :filter_name; INSERT INTO stats_callsign (callsign_icao,airline_icao,cnt,filter_name) SELECT :callsign_icao,:airline_icao,:cnt,:filter_name WHERE NOT EXISTS (SELECT 1 FROM stats_callsign WHERE callsign_icao = :callsign_icao AND filter_name = :filter_name);"; 
1000
		}
1001
                $query_values = array(':callsign_icao' => $callsign_icao,':airline_icao' => $airline_icao,':cnt' => $cnt, ':filter_name' => $filter_name);
1002
                 try {
1003
                        $sth = $this->db->prepare($query);
1004
                        $sth->execute($query_values);
1005
                } catch(PDOException $e) {
1006
                        return "error : ".$e->getMessage();
1007
                }
1008
        }
1009
	public function addStatCountry($iso2,$iso3,$name,$cnt,$filter_name = '') {
1010
		global $globalDBdriver;
1011
		if ($globalDBdriver == 'mysql') {
1012
			$query = "INSERT INTO stats_country (iso2,iso3,name,cnt,filter_name) VALUES (:iso2,:iso3,:name,:cnt,:filter_name) ON DUPLICATE KEY UPDATE cnt = cnt+:cnt";
1013
		} else {
1014
			$query = "UPDATE stats_country SET cnt = cnt+:cnt WHERE iso2 = :iso2 AND filter_name = :filter_name; INSERT INTO stats_country (iso2,iso3,name,cnt,filter_name) SELECT :iso2,:iso3,:name,:cnt,:filter_name WHERE NOT EXISTS (SELECT 1 FROM stats_country WHERE iso2 = :iso2 AND filter_name = :filter_name);"; 
1015
		}
1016
                $query_values = array(':iso2' => $iso2,':iso3' => $iso3,':name' => $name,':cnt' => $cnt,':filter_name' => $filter_name);
1017
                 try {
1018
                        $sth = $this->db->prepare($query);
1019
                        $sth->execute($query_values);
1020
                } catch(PDOException $e) {
1021
                        return "error : ".$e->getMessage();
1022
                }
1023
        }
1024
	public function addStatAircraft($aircraft_icao,$cnt,$aircraft_name = '',$aircraft_manufacturer = '', $airline_icao = '', $filter_name = '') {
1025
		global $globalDBdriver;
1026
		if ($globalDBdriver == 'mysql') {
1027
			$query = "INSERT INTO stats_aircraft (aircraft_icao,aircraft_name,aircraft_manufacturer,cnt,stats_airline, filter_name) VALUES (:aircraft_icao,:aircraft_name,:aircraft_manufacturer,:cnt,:stats_airline,:filter_name) ON DUPLICATE KEY UPDATE cnt = cnt+:cnt, aircraft_name = :aircraft_name, aircraft_manufacturer = :aircraft_manufacturer, stats_airline = :stats_airline";
1028
		} else {
1029
			$query = "UPDATE stats_aircraft SET cnt = cnt+:cnt, aircraft_name = :aircraft_name, aircraft_manufacturer = :aircraft_manufacturer, filter_name = :filter_name WHERE aircraft_icao = :aircraft_icao AND stats_airline = :stats_airline AND filter_name = :filter_name; INSERT INTO stats_aircraft (aircraft_icao,aircraft_name,aircraft_manufacturer,cnt,stats_airline,filter_name) SELECT :aircraft_icao,:aircraft_name,:aircraft_manufacturer,:cnt,:stats_airline,:filter_name WHERE NOT EXISTS (SELECT 1 FROM stats_aircraft WHERE aircraft_icao = :aircraft_icao AND stats_airline = :stats_airline AND filter_name = :filter_name);"; 
1030
		}
1031
                $query_values = array(':aircraft_icao' => $aircraft_icao,':aircraft_name' => $aircraft_name,':cnt' => $cnt, ':aircraft_manufacturer' => $aircraft_manufacturer,':stats_airline' => $airline_icao, ':filter_name' => $filter_name);
1032
                 try {
1033
                        $sth = $this->db->prepare($query);
1034
                        $sth->execute($query_values);
1035
                } catch(PDOException $e) {
1036
                        return "error : ".$e->getMessage();
1037
                }
1038
        }
1039
	public function addStatAirline($airline_icao,$cnt,$airline_name = '',$filter_name = '') {
1040
		global $globalDBdriver;
1041
		if ($globalDBdriver == 'mysql') {
1042
			$query = "INSERT INTO stats_airline (airline_icao,airline_name,cnt,filter_name) VALUES (:airline_icao,:airline_name,:cnt,:filter_name) ON DUPLICATE KEY UPDATE cnt = cnt+:cnt,airline_name = :airline_name";
1043
		} else {
1044
			$query = "UPDATE stats_airline SET cnt = cnt+:cnt WHERE airline_icao = :airline_icao AND filter_name = :filter_name; INSERT INTO stats_airline (airline_icao,airline_name,cnt,filter_name) SELECT :airline_icao,:airline_name,:cnt,:filter_name WHERE NOT EXISTS (SELECT 1 FROM stats_airline WHERE airline_icao = :airline_icao AND filter_name = :filter_name);"; 
1045
		}
1046
                $query_values = array(':airline_icao' => $airline_icao,':airline_name' => $airline_name,':cnt' => $cnt,':filter_name' => $filter_name);
1047
                 try {
1048
                        $sth = $this->db->prepare($query);
1049
                        $sth->execute($query_values);
1050
                } catch(PDOException $e) {
1051
                        return "error : ".$e->getMessage();
1052
                }
1053
        }
1054
	public function addStatOwner($owner_name,$cnt,$stats_airline = '', $filter_name = '') {
1055
		global $globalDBdriver;
1056
		if ($globalDBdriver == 'mysql') {
1057
			$query = "INSERT INTO stats_owner (owner_name,cnt,stats_airline,filter_name) VALUES (:owner_name,:cnt,:stats_airline,:filter_name) ON DUPLICATE KEY UPDATE cnt = cnt+:cnt";
1058
		} else {
1059
			$query = "UPDATE stats_owner SET cnt = cnt+:cnt WHERE owner_name = :owner_name AND stats_airline = :stats_airline AND filter_name = :filter_name; INSERT INTO stats_owner (owner_name,cnt,stats_airline,filter_name) SELECT :owner_name,:cnt,:stats_airline,:filter_name WHERE NOT EXISTS (SELECT 1 FROM stats_owner WHERE owner_name = :owner_name AND stats_airline = :stats_airline AND filter_name = :filter_name);"; 
1060
		}
1061
                $query_values = array(':owner_name' => $owner_name,':cnt' => $cnt,':stats_airline' => $stats_airline,':filter_name' => $filter_name);
1062
                 try {
1063
                        $sth = $this->db->prepare($query);
1064
                        $sth->execute($query_values);
1065
                } catch(PDOException $e) {
1066
                        return "error : ".$e->getMessage();
1067
                }
1068
        }
1069
	public function addStatPilot($pilot_id,$cnt,$pilot_name,$stats_airline = '',$filter_name = '',$format_source = '') {
1070
		global $globalDBdriver;
1071
		if ($globalDBdriver == 'mysql') {
1072
			$query = "INSERT INTO stats_pilot (pilot_id,cnt,pilot_name,stats_airline,filter_name,format_source) VALUES (:pilot_id,:cnt,:pilot_name,:stats_airline,:filter_name,:format_source) ON DUPLICATE KEY UPDATE cnt = cnt+:cnt, pilot_name = :pilot_name";
1073
		} else {
1074
			$query = "UPDATE stats_pilot SET cnt = cnt+:cnt, pilot_name = :pilot_name WHERE pilot_id = :pilot_id AND stats_airline = :stats_airline AND filter_name = :filter_name AND format_source = :format_source; INSERT INTO stats_pilot (pilot_id,cnt,pilot_name,stats_airline,filter_name,format_source) SELECT :pilot_id,:cnt,:pilot_name,:stats_airline,:filter_name,:format_source WHERE NOT EXISTS (SELECT 1 FROM stats_pilot WHERE pilot_id = :pilot_id AND stats_airline = :stats_airline AND filter_name = :filter_name AND format_source = :format_source);"; 
1075
		}
1076
                $query_values = array(':pilot_id' => $pilot_id,':cnt' => $cnt,':pilot_name' => $pilot_name,':stats_airline' => $stats_airline,':filter_name' => $filter_name,':format_source' => $format_source);
1077
                 try {
1078
                        $sth = $this->db->prepare($query);
1079
                        $sth->execute($query_values);
1080
                } catch(PDOException $e) {
1081
                        return "error : ".$e->getMessage();
1082
                }
1083
        }
1084
	public function addStatDepartureAirports($airport_icao,$airport_name,$airport_city,$airport_country,$departure,$airline_icao = '',$filter_name = '') {
1085
		global $globalDBdriver;
1086
		if ($globalDBdriver == 'mysql') {
1087
			$query = "INSERT INTO stats_airport (airport_icao,airport_name,airport_city,airport_country,departure,stats_type,date,stats_airline,filter_name) VALUES (:airport_icao,:airport_name,:airport_city,:airport_country,:departure,'yearly',:date,:stats_airline,:filter_name) ON DUPLICATE KEY UPDATE departure = departure+:departure";
1088
		} else {
1089
			$query = "UPDATE stats_airport SET departure = departure+:departure WHERE airport_icao = :airport_icao AND stats_type = 'yearly' AND stats_airline = :stats_airline AND date = :date AND filter_name = :filter_name; INSERT INTO stats_airport (airport_icao,airport_name,airport_city,airport_country,departure,stats_type,date,stats_airline,filter_name) SELECT :airport_icao,:airport_name,:airport_city,:airport_country,:departure,'yearly',:date,:stats_airline,:filter_name WHERE NOT EXISTS (SELECT 1 FROM stats_airport WHERE airport_icao = :airport_icao AND stats_type = 'yearly' AND stats_airline = :stats_airline AND date = :date AND filter_name = :filter_name);"; 
1090
		}
1091
                $query_values = array(':airport_icao' => $airport_icao,':airport_name' => $airport_name,':airport_city' => $airport_city,':airport_country' => $airport_country,':departure' => $departure,':date' => date('Y').'-01-01 00:00:00', ':stats_airline' => $airline_icao,':filter_name' => $filter_name);
1092
                 try {
1093
                        $sth = $this->db->prepare($query);
1094
                        $sth->execute($query_values);
1095
                } catch(PDOException $e) {
1096
                        return "error : ".$e->getMessage();
1097
                }
1098
        }
1099
	public function addStatDepartureAirportsDaily($date,$airport_icao,$airport_name,$airport_city,$airport_country,$departure,$airline_icao = '',$filter_name = '') {
1100
		global $globalDBdriver;
1101
		if ($globalDBdriver == 'mysql') {
1102
			$query = "INSERT INTO stats_airport (airport_icao,airport_name,airport_city,airport_country,departure,stats_type,date,stats_airline,filter_name) VALUES (:airport_icao,:airport_name,:airport_city,:airport_country,:departure,'daily',:date,:stats_airline,:filter_name) ON DUPLICATE KEY UPDATE departure = :departure";
1103
		} else {
1104
			$query = "UPDATE stats_airport SET departure = departure+:departure WHERE airport_icao = :airport_icao AND stats_type = 'daily' AND date = :date AND stats_airline = :stats_airline AND filter_name = :filter_name; INSERT INTO stats_airport (airport_icao,airport_name,airport_city,airport_country,departure,stats_type,date,stats_airline,filter_name) SELECT :airport_icao,:airport_name,:airport_city,:airport_country,:departure,'daily',:date,:stats_airline,:filter_name WHERE NOT EXISTS (SELECT 1 FROM stats_airport WHERE airport_icao = :airport_icao AND stats_type = 'daily' AND date = :date AND stats_airline = :stats_airline AND filter_name = :filter_name);"; 
1105
		}
1106
                $query_values = array(':airport_icao' => $airport_icao,':airport_name' => $airport_name,':airport_city' => $airport_city,':airport_country' => $airport_country,':departure' => $departure,':date' => $date,':stats_airline' => $airline_icao,':filter_name' => $filter_name);
1107
                 try {
1108
                        $sth = $this->db->prepare($query);
1109
                        $sth->execute($query_values);
1110
                } catch(PDOException $e) {
1111
                        return "error : ".$e->getMessage();
1112
                }
1113
        }
1114
	public function addStatArrivalAirports($airport_icao,$airport_name,$airport_city,$airport_country,$arrival,$airline_icao = '',$filter_name = '') {
1115
		global $globalDBdriver;
1116
		if ($globalDBdriver == 'mysql') {
1117
			$query = "INSERT INTO stats_airport (airport_icao,airport_name,airport_city,airport_country,arrival,stats_type,date,stats_airline,filter_name) VALUES (:airport_icao,:airport_name,:airport_city,:airport_country,:arrival,'yearly',:date,:stats_airline,:filter_name) ON DUPLICATE KEY UPDATE arrival = arrival+:arrival";
1118
		} else {
1119
			$query = "UPDATE stats_airport SET arrival = arrival+:arrival WHERE airport_icao = :airport_icao AND stats_type = 'yearly' AND stats_airline = :stats_airline AND date = :date AND filter_name = :filter_name; INSERT INTO stats_airport (airport_icao,airport_name,airport_city,airport_country,arrival,stats_type,date,stats_airline,filter_name) SELECT :airport_icao,:airport_name,:airport_city,:airport_country,:arrival,'yearly',:date,:stats_airline,:filter_name WHERE NOT EXISTS (SELECT 1 FROM stats_airport WHERE airport_icao = :airport_icao AND stats_type = 'yearly' AND stats_airline = :stats_airline AND date = :date AND filter_name = :filter_name);"; 
1120
		}
1121
                $query_values = array(':airport_icao' => $airport_icao,':airport_name' => $airport_name,':airport_city' => $airport_city,':airport_country' => $airport_country,':arrival' => $arrival,':date' => date('Y').'-01-01 00:00:00',':stats_airline' => $airline_icao,':filter_name' => $filter_name);
1122
                 try {
1123
                        $sth = $this->db->prepare($query);
1124
                        $sth->execute($query_values);
1125
                } catch(PDOException $e) {
1126
                        return "error : ".$e->getMessage();
1127
                }
1128
        }
1129
	public function addStatArrivalAirportsDaily($date,$airport_icao,$airport_name,$airport_city,$airport_country,$arrival,$airline_icao = '',$filter_name = '') {
1130
		global $globalDBdriver;
1131
		if ($globalDBdriver == 'mysql') {
1132
			$query = "INSERT INTO stats_airport (airport_icao,airport_name,airport_city,airport_country,arrival,stats_type,date,stats_airline,filter_name) VALUES (:airport_icao,:airport_name,:airport_city,:airport_country,:arrival,'daily',:date,:stats_airline,:filter_name) ON DUPLICATE KEY UPDATE arrival = :arrival";
1133
		} else {
1134
			$query = "UPDATE stats_airport SET arrival = arrival+:arrival WHERE airport_icao = :airport_icao AND stats_type = 'daily' AND date = :date AND stats_airline = :stats_airline AND filter_name = :filter_name; INSERT INTO stats_airport (airport_icao,airport_name,airport_city,airport_country,arrival,stats_type,date,stats_airline,filter_name) SELECT :airport_icao,:airport_name,:airport_city,:airport_country,:arrival,'daily',:date,:stats_airline,:filter_name WHERE NOT EXISTS (SELECT 1 FROM stats_airport WHERE airport_icao = :airport_icao AND stats_type = 'daily' AND date = :date AND stats_airline = :stats_airline AND filter_name = :filter_name);"; 
1135
		}
1136
                $query_values = array(':airport_icao' => $airport_icao,':airport_name' => $airport_name,':airport_city' => $airport_city,':airport_country' => $airport_country,':arrival' => $arrival, ':date' => $date,':stats_airline' => $airline_icao,':filter_name' => $filter_name);
1137
                 try {
1138
                        $sth = $this->db->prepare($query);
1139
                        $sth->execute($query_values);
1140
                } catch(PDOException $e) {
1141
                        return "error : ".$e->getMessage();
1142
                }
1143
        }
1144
1145
	public function deleteStat($id) {
1146
                $query = "DELETE FROM stats WHERE stats_id = :id";
1147
                $query_values = array(':id' => $id);
1148
                 try {
1149
                        $sth = $this->db->prepare($query);
1150
                        $sth->execute($query_values);
1151
                } catch(PDOException $e) {
1152
                        return "error : ".$e->getMessage();
1153
                }
1154
        }
1155
	public function deleteStatFlight($type) {
1156
                $query = "DELETE FROM stats_flight WHERE stats_type = :type";
1157
                $query_values = array(':type' => $type);
1158
                 try {
1159
                        $sth = $this->db->prepare($query);
1160
                        $sth->execute($query_values);
1161
                } catch(PDOException $e) {
1162
                        return "error : ".$e->getMessage();
1163
                }
1164
        }
1165
	public function deleteStatAirport($type) {
1166
                $query = "DELETE FROM stats_airport WHERE stats_type = :type";
1167
                $query_values = array(':type' => $type);
1168
                 try {
1169
                        $sth = $this->db->prepare($query);
1170
                        $sth->execute($query_values);
1171
                } catch(PDOException $e) {
1172
                        return "error : ".$e->getMessage();
1173
                }
1174
        }
1175
        
1176
        public function addOldStats() {
1177
    		global $globalDebug, $globalArchiveMonths, $globalArchive, $globalArchiveYear, $globalDBdriver, $globalStatsFilters,$globalDeleteLastYearStats;
1178
    		$Common = new Common();
1179
    		$Connection = new Connection();
1180
    		date_default_timezone_set('UTC');
1181
    		$last_update = $this->getLastStatsUpdate('last_update_stats');
1182
		//print_r($last_update);
1183
		/*
1184
		$flightsbymonth = $this->getStats('flights_by_month');
1185
    		if (empty($last_update) && empty($flightsbymonth)) {
1186
			// Initial update
1187
			$Spotter = new Spotter($this->db);
1188
			$alldata = $Spotter->countAllMonths();
1189
			$lastyear = false;
1190
			foreach ($alldata as $number) {
1191
				if ($number['year_name'] != date('Y')) $lastyear = true;
1192
				$this->addStat('flights_bymonth',$number['date_count'],date('Y-m-d H:i:s',mktime(0,0,0,$number['month_name'],1,$number['year_name'])));
1193
			}
1194
			$alldata = $Spotter->countAllMilitaryMonths();
1195
			//$lastyear = false;
1196
			foreach ($alldata as $number) {
1197
				if ($number['year_name'] != date('Y')) $lastyear = true;
1198
				$this->addStat('military_flights_bymonth',$number['date_count'],date('Y-m-d H:i:s',mktime(0,0,0,$number['month_name'],1,$number['year_name'])));
1199
			}
1200
			$alldata = $Spotter->countAllMonthsOwners();
1201
			foreach ($alldata as $number) {
1202
				$this->addStat('owners_bymonth',$number['date_count'],date('Y-m-d H:i:s',mktime(0,0,0,$number['month_name'],1,$number['year_name'])));
1203
			}
1204
			$alldata = $Spotter->countAllMonthsPilots();
1205
			foreach ($alldata as $number) {
1206
				$this->addStat('pilots_bymonth',$number['date_count'],date('Y-m-d H:i:s',mktime(0,0,0,$number['month_name'],1,$number['year_name'])));
1207
			}
1208
			$alldata = $Spotter->countAllMonthsAirlines();
1209
			foreach ($alldata as $number) {
1210
				$this->addStat('airlines_bymonth',$number['date_count'],date('Y-m-d H:i:s',mktime(0,0,0,$number['month_name'],1,$number['year_name'])));
1211
			}
1212
			$alldata = $Spotter->countAllMonthsAircrafts();
1213
			foreach ($alldata as $number) {
1214
				$this->addStat('aircrafts_bymonth',$number['date_count'],date('Y-m-d H:i:s',mktime(0,0,0,$number['month_name'],1,$number['year_name'])));
1215
			}
1216
			$alldata = $Spotter->countAllMonthsRealArrivals();
1217
			foreach ($alldata as $number) {
1218
				$this->addStat('realarrivals_bymonth',$number['date_count'],date('Y-m-d H:i:s',mktime(0,0,0,$number['month_name'],1,$number['year_name'])));
1219
			}
1220
			$this->deleteStatFlight('month');
1221
			$alldata = $Spotter->countAllDatesLastMonth();
1222
			foreach ($alldata as $number) {
1223
				$this->addStatFlight('month',$number['date_name'],$number['date_count']);
1224
			}
1225
			$previousdata = $this->countAllDates();
1226
			$this->deleteStatFlight('date');
1227
			$alldata = $Common->array_merge_noappend($previousdata,$Spotter->countAllDates());
1228
			$values = array();
1229
			foreach ($alldata as $cnt) {
1230
				$values[] = $cnt['date_count'];
1231
			}
1232
			array_multisort($values,SORT_DESC,$alldata);
1233
			array_splice($alldata,11);
1234
			foreach ($alldata as $number) {
1235
				$this->addStatFlight('date',$number['date_name'],$number['date_count']);
1236
			}
1237
			$this->deleteStatFlight('hour');
1238
			$alldata = $Spotter->countAllHours('hour');
1239
			foreach ($alldata as $number) {
1240
				$this->addStatFlight('hour',$number['hour_name'],$number['hour_count']);
1241
			}
1242
			if ($lastyear) {
1243
				$monthsSinceLastYear = date('n');
1244
				$alldata = $Spotter->countAllAircraftTypes(false,$monthsSinceLastYear);
1245
				foreach ($alldata as $number) {
1246
					$this->addStatAircraft($number['aircraft_icao'],$number['aircraft_icao_count'],$number['aircraft_name'],$number['aircraft_manufacturer']);
1247
				}
1248
				$alldata = $Spotter->countAllAirlines(false,$monthsSinceLastYear);
1249
				foreach ($alldata as $number) {
1250
					$this->addStatAirline($number['airline_icao'],$number['airline_count'],$number['airline_name']);
1251
				}
1252
				if ($Connection->tableExists('countries')) {
1253
					$alldata = $Spotter->countAllFlightOverCountries(false,$monthsSinceLastYear);
1254
					foreach ($alldata as $number) {
1255
						$this->addStatCountry($number['flight_country_iso2'],$number['flight_country_iso3'],$number['flight_country'],$number['flight_count']);
1256
					}
1257
				}
1258
				$alldata = $Spotter->countAllOwners(false,$monthsSinceLastYear);
1259
				foreach ($alldata as $number) {
1260
					$this->addStatOwner($number['owner_name'],$number['owner_count']);
1261
				}
1262
				$alldata = $Spotter->countAllPilots(false,$monthsSinceLastYear);
1263
				foreach ($alldata as $number) {
1264
					$this->addStatPilot($number['pilot_id'],$number['pilot_count'],$number['pilot_name']);
1265
				}
1266
				$previous_year = date('Y');
1267
				$previous_year--;
1268
				$this->addStat('aircrafts_byyear',$this->getStatsAircraftTotal(),$previous_year.'-01-01 00:00:00');
1269
				$this->addStat('airlines_byyear',$this->getStatsAirlineTotal(),$previous_year.'-01-01 00:00:00');
1270
				$this->addStat('owner_byyear',$this->getStatsOwnerTotal(),$previous_year.'-01-01 00:00:00');
1271
				$this->addStat('pilot_byyear',$this->getStatsPilotTotal(),$previous_year.'-01-01 00:00:00');
1272
				
1273
				if (isset($globalArchiveYear) && $globalArchiveYear) {
1274
					if ($globalArchive) {
1275
						$query = "INSERT INTO spotter_archive_output SELECT * FROM spotter_output WHERE spotter_output.date < '".date('Y')."-01-01 00:00:00'";
1276
						//echo $query;
1277
						try {
1278
							$sth = $this->db->prepare($query);
1279
							$sth->execute();
1280
						} catch(PDOException $e) {
1281
							return "error : ".$e->getMessage().' - query : '.$query."\n";
1282
						}
1283
					}
1284
					$query = "DELETE FROM spotter_output WHERE spotter_output.date < '".date('Y')."-01-01 00:00:00'";
1285
					try {
1286
						$sth = $this->db->prepare($query);
1287
						$sth->execute();
1288
					} catch(PDOException $e) {
1289
						return "error : ".$e->getMessage().' - query : '.$query."\n";
1290
					}
1291
				}
1292
			}
1293
			if (!isset($globalArchiveMonths) || $globalArchiveMonths == '') $globalArchiveMonths = 2;
1294
			if ($globalArchiveMonths > 0) {
1295
				$alldata = $Spotter->countAllAircraftTypes(false,$globalArchiveMonths);
1296
				foreach ($alldata as $number) {
1297
					$this->addStatAircraft($number['aircraft_icao'],$number['aircraft_icao_count'],$number['aircraft_name'],$number['aircraft_manufacturer']);
1298
				}
1299
				$alldata = $Spotter->countAllAirlines(false,$globalArchiveMonths);
1300
				foreach ($alldata as $number) {
1301
					$this->addStatAirline($number['airline_icao'],$number['airline_count'],$number['airline_name']);
1302
				}
1303
				$alldata = $Spotter->countAllAircraftRegistrations(false,$globalArchiveMonths);
1304
				foreach ($alldata as $number) {
1305
					$this->addStatAircraftRegistration($number['registration'],$number['aircraft_registration_count'],$number['aircraft_icao']);
1306
				}
1307
				$alldata = $Spotter->countAllCallsigns(false,$globalArchiveMonths);
1308
				foreach ($alldata as $number) {
1309
					$this->addStatCallsign($number['callsign_icao'],$number['callsign_icao_count'],$number['airline_icao']);
1310
				}
1311
				$alldata = $Spotter->countAllOwners(false,$globalArchiveMonths);
1312
				foreach ($alldata as $number) {
1313
					$this->addStatOwner($number['owner_name'],$number['owner_count']);
1314
				}
1315
				if ($Connection->tableExists('countries')) {
1316
					$alldata = $Spotter->countAllFlightOverCountries(false,$globalArchiveMonths);
1317
					foreach ($alldata as $number) {
1318
						$this->addStatCountry($number['flight_country_iso2'],$number['flight_country_iso3'],$number['flight_country'],$number['flight_count']);
1319
					}
1320
				}
1321
				$alldata = $Spotter->countAllPilots(false,$globalArchiveMonths);
1322
				foreach ($alldata as $number) {
1323
					$this->addStatPilot($number['pilot_id'],$number['pilot_count'],$number['pilot_name']);
1324
				}
1325
				$pall = $Spotter->countAllDepartureAirports(false,$globalArchiveMonths);
1326
        			$dall = $Spotter->countAllDetectedDepartureAirports(false,$globalArchiveMonths);
1327
	        		$alldata = array();
1328
    				foreach ($pall as $value) {
1329
	        			$icao = $value['airport_departure_icao'];
1330
    					$alldata[$icao] = $value;
1331
	        		}
1332
	        		foreach ($dall as $value) {
1333
    					$icao = $value['airport_departure_icao'];
1334
        				if (isset($alldata[$icao])) {                                                           
1335
        					$alldata[$icao]['airport_departure_icao_count'] = $alldata[$icao]['airport_departure_icao_count'] + $value['airport_departure_icao_count'];
1336
	        			} else $alldata[$icao] = $value;
1337
    				}
1338
        			$count = array();
1339
        			foreach ($alldata as $key => $row) {
1340
        				$count[$key] = $row['airport_departure_icao_count'];
1341
	        		}
1342
    				array_multisort($count,SORT_DESC,$alldata);
1343
1344
				//print_r($alldate);
1345
				foreach ($alldata as $number) {
1346
					$this->addStatDepartureAirports($number['airport_departure_icao'],$number['airport_departure_name'],$number['airport_departure_city'],$number['airport_departure_country'],$number['airport_departure_icao_count']);
1347
				}
1348
				$pdata = $Spotter->countAllArrivalAirports(false,$globalArchiveMonths);
1349
        			$dall = $Spotter->countAllDetectedArrivalAirports(false,$globalArchiveMonths);
1350
	        		$alldata = array();
1351
    				foreach ($pdata as $value) {
1352
	        			$icao = $value['airport_arrival_icao'];
1353
    					$alldata[$icao] = $value;
1354
	        		}
1355
	        		foreach ($dall as $value) {
1356
    					$icao = $value['airport_arrival_icao'];
1357
        				if (isset($alldata[$icao])) {                                                           
1358
        					$alldata[$icao]['airport_arrival_icao_count'] = $alldata[$icao]['airport_arrival_icao_count'] + $value['airport_arrival_icao_count'];
1359
	        			} else $alldata[$icao] = $value;
1360
    				}
1361
        			$count = array();
1362
        			foreach ($alldata as $key => $row) {
1363
        				$count[$key] = $row['airport_arrival_icao_count'];
1364
	        		}
1365
    				array_multisort($count,SORT_DESC,$alldata);
1366
				foreach ($alldata as $number) {
1367
					$this->addStatArrivalAirports($number['airport_arrival_icao'],$number['airport_arrival_name'],$number['airport_arrival_city'],$number['airport_arrival_country'],$number['airport_arrival_icao_count']);
1368
				}
1369
				$this->addStat('aircrafts_byyear',$this->getStatsAircraftTotal(),date('Y').'-01-01 00:00:00');
1370
				$this->addStat('airlines_byyear',$this->getStatsAirlineTotal(),date('Y').'-01-01 00:00:00');
1371
				$this->addStat('owner_byyear',$this->getStatsOwnerTotal(),date('Y').'-01-01 00:00:00');
1372
				$this->addStat('pilot_byyear',$this->getStatsPilotTotal(),date('Y').'-01-01 00:00:00');
1373
			
1374
				if ($globalArchive) {
1375
					if ($globalDBdriver == 'mysql') {
1376
						$query = "INSERT INTO spotter_archive_output SELECT * FROM spotter_output WHERE spotter_output.date < DATE_FORMAT(UTC_TIMESTAMP() - INTERVAL ".$globalArchiveMonths." MONTH, '%Y/%m/01')";
1377
					} else {
1378
						$query = "INSERT INTO spotter_archive_output SELECT * FROM spotter_output WHERE spotter_output.date < CAST(to_char(CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$globalArchiveMonths." MONTHS', 'YYYY/mm/01') AS TIMESTAMP)";
1379
					}
1380
					try {
1381
						$sth = $this->db->prepare($query);
1382
						$sth->execute();
1383
					} catch(PDOException $e) {
1384
						return "error : ".$e->getMessage().' - query : '.$query."\n";
1385
					}
1386
				}
1387
	
1388
				//$query = 'DELETE FROM spotter_output WHERE spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$globalArchiveMonths.' MONTH)';
1389
				if ($globalDBdriver == 'mysql') {
1390
					$query = "DELETE FROM spotter_output WHERE spotter_output.date < DATE_FORMAT(UTC_TIMESTAMP() - INTERVAL ".$globalArchiveMonths." MONTH, '%Y/%m/01')";
1391
				} else {
1392
					$query = "DELETE FROM spotter_output WHERE spotter_output.date < CAST(to_char(CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$globalArchiveMonths." MONTHS, 'YYYY/mm/01') AS TIMESTAMP)";
1393
				}
1394
				try {
1395
					$sth = $this->db->prepare($query);
1396
					$sth->execute();
1397
				} catch(PDOException $e) {
1398
					return "error : ".$e->getMessage().' - query : '.$query."\n";
1399
				}
1400
			}
1401
			$this->addLastStatsUpdate('last_update_stats',date('Y-m-d G:i:s'));
1402
		} else {
1403
		*/
1404
			if ($globalDebug) echo 'Update stats !'."\n";
1405
			if ($globalDebug) echo 'Count all aircraft types...'."\n";
1406
			if (isset($last_update[0]['value'])) {
1407
				$last_update_day = $last_update[0]['value'];
1408
			} else $last_update_day = '2012-12-12 12:12:12';
1409
			$Spotter = new Spotter($this->db);
1410
			$alldata = $Spotter->countAllAircraftTypes(false,0,$last_update_day);
1411
			foreach ($alldata as $number) {
1412
				$this->addStatAircraft($number['aircraft_icao'],$number['aircraft_icao_count'],$number['aircraft_name'],$number['aircraft_manufacturer']);
1413
			}
1414
			if ($globalDebug) echo 'Count all airlines...'."\n";
1415
			$alldata = $Spotter->countAllAirlines(false,0,$last_update_day);
1416
			foreach ($alldata as $number) {
1417
				$this->addStatAirline($number['airline_icao'],$number['airline_count'],$number['airline_name']);
1418
			}
1419
			if ($globalDebug) echo 'Count all registrations...'."\n";
1420
			$alldata = $Spotter->countAllAircraftRegistrations(false,0,$last_update_day);
1421
			foreach ($alldata as $number) {
1422
				$this->addStatAircraftRegistration($number['registration'],$number['aircraft_registration_count'],$number['aircraft_icao']);
1423
			}
1424
			if ($globalDebug) echo 'Count all callsigns...'."\n";
1425
			$alldata = $Spotter->countAllCallsigns(false,0,$last_update_day);
1426
			foreach ($alldata as $number) {
1427
				$this->addStatCallsign($number['callsign_icao'],$number['callsign_icao_count'],$number['airline_icao']);
1428
			}
1429
			if ($globalDebug) echo 'Count all owners...'."\n";
1430
			$alldata = $Spotter->countAllOwners(false,0,$last_update_day);
1431
			foreach ($alldata as $number) {
1432
				$this->addStatOwner($number['owner_name'],$number['owner_count']);
1433
			}
1434
			if ($globalDebug) echo 'Count all pilots...'."\n";
1435
			$alldata = $Spotter->countAllPilots(false,0,$last_update_day);
1436
			foreach ($alldata as $number) {
1437
				$this->addStatPilot($number['pilot_id'],$number['pilot_count'],$number['pilot_name'],'','',$number['format_source']);
1438
			}
1439
			
1440
			if ($globalDebug) echo 'Count all departure airports...'."\n";
1441
			$pall = $Spotter->countAllDepartureAirports(false,0,$last_update_day);
1442
			if ($globalDebug) echo 'Count all detected departure airports...'."\n";
1443
        		$dall = $Spotter->countAllDetectedDepartureAirports(false,0,$last_update_day);
1444
			if ($globalDebug) echo 'Order departure airports...'."\n";
1445
	        	$alldata = array();
1446
	        	
1447
    			foreach ($pall as $value) {
1448
	        		$icao = $value['airport_departure_icao'];
1449
    				$alldata[$icao] = $value;
1450
	        	}
1451
	        	foreach ($dall as $value) {
1452
    				$icao = $value['airport_departure_icao'];
1453
        			if (isset($alldata[$icao])) {
1454
    					$alldata[$icao]['airport_departure_icao_count'] = $alldata[$icao]['airport_departure_icao_count'] + $value['airport_departure_icao_count'];
1455
        			} else $alldata[$icao] = $value;
1456
			}
1457
    			$count = array();
1458
    			foreach ($alldata as $key => $row) {
1459
    				$count[$key] = $row['airport_departure_icao_count'];
1460
        		}
1461
			array_multisort($count,SORT_DESC,$alldata);
1462
			foreach ($alldata as $number) {
1463
				echo $this->addStatDepartureAirports($number['airport_departure_icao'],$number['airport_departure_name'],$number['airport_departure_city'],$number['airport_departure_country'],$number['airport_departure_icao_count']);
1464
			}
1465
			if ($globalDebug) echo 'Count all arrival airports...'."\n";
1466
			$pall = $Spotter->countAllArrivalAirports(false,0,$last_update_day);
1467
			if ($globalDebug) echo 'Count all detected arrival airports...'."\n";
1468
        		$dall = $Spotter->countAllDetectedArrivalAirports(false,0,$last_update_day);
1469
			if ($globalDebug) echo 'Order arrival airports...'."\n";
1470
	        	$alldata = array();
1471
    			foreach ($pall as $value) {
1472
	        		$icao = $value['airport_arrival_icao'];
1473
    				$alldata[$icao] = $value;
1474
	        	}
1475
	        	foreach ($dall as $value) {
1476
    				$icao = $value['airport_arrival_icao'];
1477
        			if (isset($alldata[$icao])) {
1478
        				$alldata[$icao]['airport_arrival_icao_count'] = $alldata[$icao]['airport_arrival_icao_count'] + $value['airport_arrival_icao_count'];
1479
	        		} else $alldata[$icao] = $value;
1480
    			}
1481
        		$count = array();
1482
        		foreach ($alldata as $key => $row) {
1483
        			$count[$key] = $row['airport_arrival_icao_count'];
1484
	        	}
1485
    			array_multisort($count,SORT_DESC,$alldata);
1486
                        foreach ($alldata as $number) {
1487
				echo $this->addStatArrivalAirports($number['airport_arrival_icao'],$number['airport_arrival_name'],$number['airport_arrival_city'],$number['airport_arrival_country'],$number['airport_arrival_icao_count']);
1488
			}
1489
			if ($Connection->tableExists('countries')) {
1490
				if ($globalDebug) echo 'Count all flights by countries...'."\n";
1491
				$SpotterArchive = new SpotterArchive();
1492
				$alldata = $SpotterArchive->countAllFlightOverCountries(false,0,$last_update_day);
1493
				foreach ($alldata as $number) {
1494
					$this->addStatCountry($number['flight_country_iso2'],$number['flight_country_iso3'],$number['flight_country'],$number['flight_count']);
1495
				}
1496
			}
1497
			
1498
1499
			// Add by month using getstat if month finish...
1500
1501
			//if (date('m',strtotime($last_update_day)) != date('m')) {
1502
			if ($globalDebug) echo 'Count all flights by months...'."\n";
1503
			$Spotter = new Spotter($this->db);
1504
			$alldata = $Spotter->countAllMonths();
1505
			$lastyear = false;
0 ignored issues
show
Unused Code introduced by
$lastyear 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...
1506
			foreach ($alldata as $number) {
1507
				if ($number['year_name'] != date('Y')) $lastyear = true;
0 ignored issues
show
Unused Code introduced by
$lastyear 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...
1508
				$this->addStat('flights_bymonth',$number['date_count'],date('Y-m-d H:i:s',mktime(0,0,0,$number['month_name'],1,$number['year_name'])));
1509
			}
1510
			if ($globalDebug) echo 'Count all military flights by months...'."\n";
1511
			$alldata = $Spotter->countAllMilitaryMonths();
1512
			foreach ($alldata as $number) {
1513
				$this->addStat('military_flights_bymonth',$number['date_count'],date('Y-m-d H:i:s',mktime(0,0,0,$number['month_name'],1,$number['year_name'])));
1514
			}
1515
			if ($globalDebug) echo 'Count all owners by months...'."\n";
1516
			$alldata = $Spotter->countAllMonthsOwners();
1517
			foreach ($alldata as $number) {
1518
				$this->addStat('owners_bymonth',$number['date_count'],date('Y-m-d H:i:s',mktime(0,0,0,$number['month_name'],1,$number['year_name'])));
1519
			}
1520
			if ($globalDebug) echo 'Count all pilots by months...'."\n";
1521
			$alldata = $Spotter->countAllMonthsPilots();
1522
			foreach ($alldata as $number) {
1523
				$this->addStat('pilots_bymonth',$number['date_count'],date('Y-m-d H:i:s',mktime(0,0,0,$number['month_name'],1,$number['year_name'])));
1524
			}
1525
			if ($globalDebug) echo 'Count all airlines by months...'."\n";
1526
			$alldata = $Spotter->countAllMonthsAirlines();
1527
			foreach ($alldata as $number) {
1528
				$this->addStat('airlines_bymonth',$number['date_count'],date('Y-m-d H:i:s',mktime(0,0,0,$number['month_name'],1,$number['year_name'])));
1529
			}
1530
			if ($globalDebug) echo 'Count all aircrafts by months...'."\n";
1531
			$alldata = $Spotter->countAllMonthsAircrafts();
1532
			foreach ($alldata as $number) {
1533
				$this->addStat('aircrafts_bymonth',$number['date_count'],date('Y-m-d H:i:s',mktime(0,0,0,$number['month_name'],1,$number['year_name'])));
1534
			}
1535
			if ($globalDebug) echo 'Count all real arrivals by months...'."\n";
1536
			$alldata = $Spotter->countAllMonthsRealArrivals();
1537
			foreach ($alldata as $number) {
1538
				$this->addStat('realarrivals_bymonth',$number['date_count'],date('Y-m-d H:i:s',mktime(0,0,0,$number['month_name'],1,$number['year_name'])));
1539
			}
1540
			if ($globalDebug) echo 'Airports data...'."\n";
1541
			if ($globalDebug) echo '...Departure'."\n";
1542
			$this->deleteStatAirport('daily');
1543
//			$pall = $Spotter->getLast7DaysAirportsDeparture();
1544
  //      		$dall = $Spotter->getLast7DaysDetectedAirportsDeparture();
1545
			$pall = $Spotter->getLast7DaysAirportsDeparture();
1546
        		$dall = $Spotter->getLast7DaysDetectedAirportsDeparture();
1547
        		/*
1548
	        	$alldata = array();
1549
    			foreach ($pall as $value) {
1550
	        		$icao = $value['departure_airport_icao'];
1551
    				$alldata[$icao] = $value;
1552
	        	}
1553
	        	foreach ($dall as $value) {
1554
    				$icao = $value['departure_airport_icao'];
1555
    				$ddate = $value['date'];
1556
        			if (isset($alldata[$icao])) {
1557
        				$alldata[$icao]['departure_airport_count'] = $alldata[$icao]['departure_airport_count'] + $value['departure_airport_count'];
1558
	        		} else $alldata[$icao] = $value;
1559
    			}
1560
        		$count = array();
1561
        		foreach ($alldata as $key => $row) {
1562
        			$count[$key] = $row['departure_airport_count'];
1563
	        	}
1564
    			array_multisort($count,SORT_DESC,$alldata);
1565
    			*/
1566
    			foreach ($dall as $value) {
1567
    				$icao = $value['departure_airport_icao'];
1568
    				$ddate = $value['date'];
1569
    				$find = false;
1570
    				foreach ($pall as $pvalue) {
1571
    					if ($pvalue['departure_airport_icao'] == $icao && $pvalue['date'] == $ddate) {
1572
    						$pvalue['departure_airport_count'] = $pvalue['departure_airport_count'] + $value['departure_airport_count'];
1573
    						$find = true;
1574
    						break;
1575
    					}
1576
    				}
1577
    				if ($find === false) {
1578
    					$pall[] = $value;
1579
    				}
1580
    			}
1581
    			$alldata = $pall;
1582
			foreach ($alldata as $number) {
1583
				$this->addStatDepartureAirportsDaily($number['date'],$number['departure_airport_icao'],$number['departure_airport_name'],$number['departure_airport_city'],$number['departure_airport_country'],$number['departure_airport_count']);
1584
			}
1585
			echo '...Arrival'."\n";
1586
			$pall = $Spotter->getLast7DaysAirportsArrival();
1587
        		$dall = $Spotter->getLast7DaysDetectedAirportsArrival();
1588
        		/*
1589
	        	$alldata = array();
1590
    			foreach ($pall as $value) {
1591
	        		$icao = $value['arrival_airport_icao'];
1592
    				$alldata[$icao] = $value;
1593
	        	}
1594
	        	foreach ($dall as $value) {
1595
    				$icao = $value['arrival_airport_icao'];
1596
        			if (isset($alldata[$icao])) {
1597
        				$alldata[$icao]['arrival_airport_icao_count'] = $alldata[$icao]['arrival_airport_count'] + $value['arrival_airport_count'];
1598
	        		} else $alldata[$icao] = $value;
1599
    			}
1600
        		$count = array();
1601
        		foreach ($alldata as $key => $row) {
1602
        			$count[$key] = $row['arrival_airport_count'];
1603
	        	}
1604
    			array_multisort($count,SORT_DESC,$alldata);
1605
    			*/
1606
1607
1608
    			foreach ($dall as $value) {
1609
    				$icao = $value['arrival_airport_icao'];
1610
    				$ddate = $value['date'];
1611
    				$find = false;
1612
    				foreach ($pall as $pvalue) {
1613
    					if ($pvalue['arrival_airport_icao'] == $icao && $pvalue['date'] == $ddate) {
1614
    						$pvalue['arrival_airport_count'] = $pvalue['arrival_airport_count'] + $value['arrival_airport_count'];
1615
    						$find = true;
1616
    						break;
1617
    					}
1618
    				}
1619
    				if ($find === false) {
1620
    					$pall[] = $value;
1621
    				}
1622
    			}
1623
    			$alldata = $pall;
1624
			foreach ($alldata as $number) {
1625
				$this->addStatArrivalAirportsDaily($number['date'],$number['arrival_airport_icao'],$number['arrival_airport_name'],$number['arrival_airport_city'],$number['arrival_airport_country'],$number['arrival_airport_count']);
1626
			}
1627
1628
			echo 'Flights data...'."\n";
1629
			$this->deleteStatFlight('month');
1630
			echo '-> countAllDatesLastMonth...'."\n";
1631
			$alldata = $Spotter->countAllDatesLastMonth();
1632
			foreach ($alldata as $number) {
1633
				$this->addStatFlight('month',$number['date_name'],$number['date_count']);
1634
			}
1635
			echo '-> countAllDates...'."\n";
1636
			$previousdata = $this->countAllDates();
1637
			$previousdatabyairlines = $this->countAllDatesByAirlines();
1638
			$this->deleteStatFlight('date');
1639
			$alldata = $Common->array_merge_noappend($previousdata,$Spotter->countAllDates());
1640
			$values = array();
1641
			foreach ($alldata as $cnt) {
1642
				$values[] = $cnt['date_count'];
1643
			}
1644
			array_multisort($values,SORT_DESC,$alldata);
1645
			array_splice($alldata,11);
1646
			foreach ($alldata as $number) {
1647
				$this->addStatFlight('date',$number['date_name'],$number['date_count']);
1648
			}
1649
			
1650
			$this->deleteStatFlight('hour');
1651
			echo '-> countAllHours...'."\n";
1652
			$alldata = $Spotter->countAllHours('hour');
1653
			foreach ($alldata as $number) {
1654
				$this->addStatFlight('hour',$number['hour_name'],$number['hour_count']);
1655
			}
1656
1657
1658
1659
			// Count by airlines
1660
			echo '--- Stats by airlines ---'."\n";
1661
			if ($globalDebug) echo 'Count all aircraft types by airlines...'."\n";
1662
			$Spotter = new Spotter($this->db);
1663
			$alldata = $Spotter->countAllAircraftTypesByAirlines(false,0,$last_update_day);
1664
			foreach ($alldata as $number) {
1665
				$this->addStatAircraft($number['aircraft_icao'],$number['aircraft_icao_count'],$number['aircraft_name'],$number['aircraft_manufacturer'],$number['airline_icao']);
1666
			}
1667
			if ($globalDebug) echo 'Count all aircraft registrations by airlines...'."\n";
1668
			$alldata = $Spotter->countAllAircraftRegistrationsByAirlines(false,0,$last_update_day);
1669
			foreach ($alldata as $number) {
1670
				$this->addStatAircraftRegistration($number['registration'],$number['aircraft_registration_count'],$number['aircraft_icao'],$number['airline_icao']);
1671
			}
1672
			if ($globalDebug) echo 'Count all callsigns by airlines...'."\n";
1673
			$alldata = $Spotter->countAllCallsignsByAirlines(false,0,$last_update_day);
1674
			foreach ($alldata as $number) {
1675
				$this->addStatCallsign($number['callsign_icao'],$number['callsign_icao_count'],$number['airline_icao']);
1676
			}
1677
			if ($globalDebug) echo 'Count all owners by airlines...'."\n";
1678
			$alldata = $Spotter->countAllOwnersByAirlines(false,0,$last_update_day);
1679
			foreach ($alldata as $number) {
1680
				$this->addStatOwner($number['owner_name'],$number['owner_count'],$number['airline_icao']);
1681
			}
1682
			if ($globalDebug) echo 'Count all pilots by airlines...'."\n";
1683
			$alldata = $Spotter->countAllPilotsByAirlines(false,0,$last_update_day);
1684
			foreach ($alldata as $number) {
1685
				$this->addStatPilot($number['pilot_id'],$number['pilot_count'],$number['pilot_name'],$number['airline_icao'],'',$number['format_source']);
1686
			}
1687
			if ($globalDebug) echo 'Count all departure airports by airlines...'."\n";
1688
			$pall = $Spotter->countAllDepartureAirportsByAirlines(false,0,$last_update_day);
1689
			if ($globalDebug) echo 'Count all detected departure airports by airlines...'."\n";
1690
       			$dall = $Spotter->countAllDetectedDepartureAirportsByAirlines(false,0,$last_update_day);
1691
			if ($globalDebug) echo 'Order detected departure airports by airlines...'."\n";
1692
	        	//$alldata = array();
1693
    			foreach ($dall as $value) {
1694
    				$icao = $value['airport_departure_icao'];
1695
    				$dicao = $value['airline_icao'];
1696
    				$find = false;
1697
    				foreach ($pall as $pvalue) {
1698
    					if ($pvalue['airport_departure_icao'] == $icao && $pvalue['airline_icao'] = $dicao) {
1699
    						$pvalue['airport_departure_icao_count'] = $pvalue['airport_departure_icao_count'] + $value['airport_departure_icao_count'];
1700
    						$find = true;
1701
    						break;
1702
    					}
1703
    				}
1704
    				if ($find === false) {
1705
    					$pall[] = $value;
1706
    				}
1707
    			}
1708
    			$alldata = $pall;
1709
			foreach ($alldata as $number) {
1710
				echo $this->addStatDepartureAirports($number['airport_departure_icao'],$number['airport_departure_name'],$number['airport_departure_city'],$number['airport_departure_country'],$number['airport_departure_icao_count'],$number['airline_icao']);
1711
			}
1712
			if ($globalDebug) echo 'Count all arrival airports by airlines...'."\n";
1713
			$pall = $Spotter->countAllArrivalAirportsByAirlines(false,0,$last_update_day);
1714
			if ($globalDebug) echo 'Count all detected arrival airports by airlines...'."\n";
1715
        		$dall = $Spotter->countAllDetectedArrivalAirportsByAirlines(false,0,$last_update_day);
1716
			if ($globalDebug) echo 'Order arrival airports by airlines...'."\n";
1717
	        	//$alldata = array();
1718
    			foreach ($dall as $value) {
1719
    				$icao = $value['airport_arrival_icao'];
1720
    				$dicao = $value['airline_icao'];
1721
    				$find = false;
1722
    				foreach ($pall as $pvalue) {
1723
    					if ($pvalue['airport_arrival_icao'] == $icao && $pvalue['airline_icao'] = $dicao) {
1724
    						$pvalue['airport_arrival_icao_count'] = $pvalue['airport_arrival_icao_count'] + $value['airport_arrival_icao_count'];
1725
    						$find = true;
1726
    						break;
1727
    					}
1728
    				}
1729
    				if ($find === false) {
1730
    					$pall[] = $value;
1731
    				}
1732
    			}
1733
    			$alldata = $pall;
1734
                        foreach ($alldata as $number) {
1735
				echo $this->addStatArrivalAirports($number['airport_arrival_icao'],$number['airport_arrival_name'],$number['airport_arrival_city'],$number['airport_arrival_country'],$number['airport_arrival_icao_count'],$number['airline_icao']);
1736
			}
1737
			if ($globalDebug) echo 'Count all flights by months by airlines...'."\n";
1738
			$Spotter = new Spotter($this->db);
1739
			$alldata = $Spotter->countAllMonthsByAirlines();
1740
			$lastyear = false;
1741
			foreach ($alldata as $number) {
1742
				if ($number['year_name'] != date('Y')) $lastyear = true;
1743
				$this->addStat('flights_bymonth',$number['date_count'],date('Y-m-d H:i:s',mktime(0,0,0,$number['month_name'],1,$number['year_name'])),$number['airline_icao']);
1744
			}
1745
			if ($globalDebug) echo 'Count all owners by months by airlines...'."\n";
1746
			$alldata = $Spotter->countAllMonthsOwnersByAirlines();
1747
			foreach ($alldata as $number) {
1748
				$this->addStat('owners_bymonth',$number['date_count'],date('Y-m-d H:i:s',mktime(0,0,0,$number['month_name'],1,$number['year_name'])),$number['airline_icao']);
1749
			}
1750
			if ($globalDebug) echo 'Count all pilots by months by airlines...'."\n";
1751
			$alldata = $Spotter->countAllMonthsPilotsByAirlines();
1752
			foreach ($alldata as $number) {
1753
				$this->addStat('pilots_bymonth',$number['date_count'],date('Y-m-d H:i:s',mktime(0,0,0,$number['month_name'],1,$number['year_name'])),$number['airline_icao']);
1754
			}
1755
			if ($globalDebug) echo 'Count all aircrafts by months by airlines...'."\n";
1756
			$alldata = $Spotter->countAllMonthsAircraftsByAirlines();
1757
			foreach ($alldata as $number) {
1758
				$this->addStat('aircrafts_bymonth',$number['date_count'],date('Y-m-d H:i:s',mktime(0,0,0,$number['month_name'],1,$number['year_name'])),$number['airline_icao']);
1759
			}
1760
			if ($globalDebug) echo 'Count all real arrivals by months by airlines...'."\n";
1761
			$alldata = $Spotter->countAllMonthsRealArrivalsByAirlines();
1762
			foreach ($alldata as $number) {
1763
				$this->addStat('realarrivals_bymonth',$number['date_count'],date('Y-m-d H:i:s',mktime(0,0,0,$number['month_name'],1,$number['year_name'])),$number['airline_icao']);
1764
			}
1765
			if ($globalDebug) echo '...Departure'."\n";
1766
			$pall = $Spotter->getLast7DaysAirportsDepartureByAirlines();
1767
        		$dall = $Spotter->getLast7DaysDetectedAirportsDepartureByAirlines();
1768
    			foreach ($dall as $value) {
1769
    				$icao = $value['departure_airport_icao'];
1770
    				$airline = $value['airline_icao'];
1771
    				$ddate = $value['date'];
1772
    				$find = false;
1773
    				foreach ($pall as $pvalue) {
1774
    					if ($pvalue['departure_airport_icao'] == $icao && $pvalue['date'] == $ddate && $pvalue['airline_icao'] = $airline) {
1775
    						$pvalue['departure_airport_count'] = $pvalue['departure_airport_count'] + $value['departure_airport_count'];
1776
    						$find = true;
1777
    						break;
1778
    					}
1779
    				}
1780
    				if ($find === false) {
1781
    					$pall[] = $value;
1782
    				}
1783
    			}
1784
    			$alldata = $pall;
1785
			foreach ($alldata as $number) {
1786
				$this->addStatDepartureAirportsDaily($number['date'],$number['departure_airport_icao'],$number['departure_airport_name'],$number['departure_airport_city'],$number['departure_airport_country'],$number['departure_airport_count'],$number['airline_icao']);
1787
			}
1788
			if ($globalDebug) echo '...Arrival'."\n";
1789
			$pall = $Spotter->getLast7DaysAirportsArrivalByAirlines();
1790
        		$dall = $Spotter->getLast7DaysDetectedAirportsArrivalByAirlines();
1791
    			foreach ($dall as $value) {
1792
    				$icao = $value['arrival_airport_icao'];
1793
    				$airline = $value['airline_icao'];
1794
    				$ddate = $value['date'];
1795
    				$find = false;
1796
    				foreach ($pall as $pvalue) {
1797
    					if ($pvalue['arrival_airport_icao'] == $icao && $pvalue['date'] == $ddate && $pvalue['airline_icao'] == $airline) {
1798
    						$pvalue['arrival_airport_count'] = $pvalue['arrival_airport_count'] + $value['arrival_airport_count'];
1799
    						$find = true;
1800
    						break;
1801
    					}
1802
    				}
1803
    				if ($find === false) {
1804
    					$pall[] = $value;
1805
    				}
1806
    			}
1807
    			$alldata = $pall;
1808
			foreach ($alldata as $number) {
1809
				$this->addStatArrivalAirportsDaily($number['date'],$number['arrival_airport_icao'],$number['arrival_airport_name'],$number['arrival_airport_city'],$number['arrival_airport_country'],$number['arrival_airport_count'],$number['airline_icao']);
1810
			}
1811
1812
			if ($globalDebug) echo 'Flights data...'."\n";
1813
			if ($globalDebug) echo '-> countAllDatesLastMonth...'."\n";
1814
			$alldata = $Spotter->countAllDatesLastMonthByAirlines();
1815
			foreach ($alldata as $number) {
1816
				$this->addStatFlight('month',$number['date_name'],$number['date_count'], $number['airline_icao']);
1817
			}
1818
			if ($globalDebug) echo '-> countAllDates...'."\n";
1819
			//$previousdata = $this->countAllDatesByAirlines();
1820
			$alldata = $Common->array_merge_noappend($previousdatabyairlines,$Spotter->countAllDatesByAirlines());
1821
			$values = array();
1822
			foreach ($alldata as $cnt) {
1823
				$values[] = $cnt['date_count'];
1824
			}
1825
			array_multisort($values,SORT_DESC,$alldata);
1826
			array_splice($alldata,11);
1827
			foreach ($alldata as $number) {
1828
				$this->addStatFlight('date',$number['date_name'],$number['date_count'],$number['airline_icao']);
1829
			}
1830
			
1831
			if ($globalDebug) echo '-> countAllHours...'."\n";
1832
			$alldata = $Spotter->countAllHoursByAirlines('hour');
1833
			foreach ($alldata as $number) {
1834
				$this->addStatFlight('hour',$number['hour_name'],$number['hour_count'],$number['airline_icao']);
1835
			}
1836
			
1837
1838
			if (!isset($globalStatsFilters) || $globalStatsFilters == '') $globalStatsFilters = array();
1839
			foreach ($globalStatsFilters as $name => $filter) {
1840
				//$filter_name = $filter['name'];
1841
				$filter_name = $name;
1842
1843
				$last_update = $this->getLastStatsUpdate('last_update_stats_'.$filter_name);
1844
				if (isset($last_update[0]['value'])) {
1845
					$last_update_day = $last_update[0]['value'];
1846
				} else $last_update_day = '2012-12-12 12:12:12';
1847
1848
				// Count by filter
1849
				if ($globalDebug) echo '--- Stats for filter '.$filter_name.' ---'."\n";
1850
				$Spotter = new Spotter($this->db);
1851
				$alldata = $Spotter->countAllAircraftTypes(false,0,$last_update_day,$filter);
1852
				foreach ($alldata as $number) {
1853
					$this->addStatAircraft($number['aircraft_icao'],$number['aircraft_icao_count'],$number['aircraft_name'],$number['aircraft_manufacturer'],'',$filter_name);
1854
				}
1855
				$alldata = $Spotter->countAllAirlines(false,0,$last_update_day,$filter);
1856
				foreach ($alldata as $number) {
1857
					$this->addStatAirline($number['airline_icao'],$number['airline_count'],$number['airline_name'],$filter_name);
1858
				}
1859
				$alldata = $Spotter->countAllAircraftRegistrations(false,0,$last_update_day,$filter);
1860
				foreach ($alldata as $number) {
1861
					$this->addStatAircraftRegistration($number['registration'],$number['aircraft_registration_count'],$number['aircraft_icao'],'',$filter_name);
1862
				}
1863
				$alldata = $Spotter->countAllCallsigns(false,0,$last_update_day,$filter);
1864
				foreach ($alldata as $number) {
1865
					$this->addStatCallsign($number['callsign_icao'],$number['callsign_icao_count'],'',$filter_name);
1866
				}
1867
				$alldata = $Spotter->countAllOwners(false,0,$last_update_day,$filter);
1868
				foreach ($alldata as $number) {
1869
					$this->addStatOwner($number['owner_name'],$number['owner_count'],'',$filter_name);
1870
				}
1871
				$alldata = $Spotter->countAllPilots(false,0,$last_update_day,$filter);
1872
				foreach ($alldata as $number) {
1873
					$this->addStatPilot($number['pilot_id'],$number['pilot_count'],$number['pilot_name'],'',$filter_name,$number['format_source']);
1874
				}
1875
				$pall = $Spotter->countAllDepartureAirports(false,0,$last_update_day,$filter);
1876
	       			$dall = $Spotter->countAllDetectedDepartureAirports(false,0,$last_update_day,$filter);
1877
		        	$alldata = array();
1878
	    			foreach ($pall as $value) {
1879
		        		$icao = $value['airport_departure_icao'];
1880
    					$alldata[$icao] = $value;
1881
	    			}
1882
		        	foreach ($dall as $value) {
1883
	    				$icao = $value['airport_departure_icao'];
1884
        				if (isset($alldata[$icao])) {
1885
    						$alldata[$icao]['airport_departure_icao_count'] = $alldata[$icao]['airport_departure_icao_count'] + $value['airport_departure_icao_count'];
1886
        				} else $alldata[$icao] = $value;
1887
				}
1888
	    			$count = array();
1889
    				foreach ($alldata as $key => $row) {
1890
    					$count[$key] = $row['airport_departure_icao_count'];
1891
    				}
1892
				array_multisort($count,SORT_DESC,$alldata);
1893
				foreach ($alldata as $number) {
1894
    					echo $this->addStatDepartureAirports($number['airport_departure_icao'],$number['airport_departure_name'],$number['airport_departure_city'],$number['airport_departure_country'],$number['airport_departure_icao_count'],'',$filter_name);
1895
				}
1896
				$pall = $Spotter->countAllArrivalAirports(false,0,$last_update_day,$filter);
1897
    				$dall = $Spotter->countAllDetectedArrivalAirports(false,0,$last_update_day,$filter);
1898
				$alldata = array();
1899
    				foreach ($pall as $value) {
1900
		        		$icao = $value['airport_arrival_icao'];
1901
    					$alldata[$icao] = $value;
1902
	    			}
1903
		        	foreach ($dall as $value) {
1904
	    				$icao = $value['airport_arrival_icao'];
1905
        				if (isset($alldata[$icao])) {
1906
        					$alldata[$icao]['airport_arrival_icao_count'] = $alldata[$icao]['airport_arrival_icao_count'] + $value['airport_arrival_icao_count'];
1907
		        		} else $alldata[$icao] = $value;
1908
	    			}
1909
        			$count = array();
1910
        			foreach ($alldata as $key => $row) {
1911
    					$count[$key] = $row['airport_arrival_icao_count'];
1912
		        	}
1913
        			array_multisort($count,SORT_DESC,$alldata);
1914
				foreach ($alldata as $number) {
1915
					echo $this->addStatArrivalAirports($number['airport_arrival_icao'],$number['airport_arrival_name'],$number['airport_arrival_city'],$number['airport_arrival_country'],$number['airport_arrival_icao_count'],'',$filter_name);
1916
				}
1917
				$Spotter = new Spotter($this->db);
1918
				$alldata = $Spotter->countAllMonths($filter);
1919
				$lastyear = false;
1920
				foreach ($alldata as $number) {
1921
					if ($number['year_name'] != date('Y')) $lastyear = true;
1922
					$this->addStat('flights_bymonth',$number['date_count'],date('Y-m-d H:i:s',mktime(0,0,0,$number['month_name'],1,$number['year_name'])),'',$filter_name);
1923
				}
1924
				$alldata = $Spotter->countAllMonthsOwners($filter);
1925
				foreach ($alldata as $number) {
1926
					$this->addStat('owners_bymonth',$number['date_count'],date('Y-m-d H:i:s',mktime(0,0,0,$number['month_name'],1,$number['year_name'])),'',$filter_name);
1927
				}
1928
				$alldata = $Spotter->countAllMonthsPilots($filter);
1929
				foreach ($alldata as $number) {
1930
					$this->addStat('pilots_bymonth',$number['date_count'],date('Y-m-d H:i:s',mktime(0,0,0,$number['month_name'],1,$number['year_name'])),'',$filter_name);
1931
				}
1932
				$alldata = $Spotter->countAllMilitaryMonths($filter);
1933
				foreach ($alldata as $number) {
1934
					$this->addStat('military_flights_bymonth',$number['date_count'],date('Y-m-d H:i:s',mktime(0,0,0,$number['month_name'],1,$number['year_name'])),'',$filter_name);
1935
				}
1936
				$alldata = $Spotter->countAllMonthsAircrafts($filter);
1937
				foreach ($alldata as $number) {
1938
					$this->addStat('aircrafts_bymonth',$number['date_count'],date('Y-m-d H:i:s',mktime(0,0,0,$number['month_name'],1,$number['year_name'])),'',$filter_name);
1939
				}
1940
				$alldata = $Spotter->countAllMonthsRealArrivals($filter);
1941
				foreach ($alldata as $number) {
1942
					$this->addStat('realarrivals_bymonth',$number['date_count'],date('Y-m-d H:i:s',mktime(0,0,0,$number['month_name'],1,$number['year_name'])),'',$filter_name);
1943
				}
1944
				echo '...Departure'."\n";
1945
				$pall = $Spotter->getLast7DaysAirportsDeparture('',$filter);
1946
        			$dall = $Spotter->getLast7DaysDetectedAirportsDeparture('',$filter);
1947
				foreach ($dall as $value) {
1948
    					$icao = $value['departure_airport_icao'];
1949
    					$ddate = $value['date'];
1950
    					$find = false;
1951
    					foreach ($pall as $pvalue) {
1952
    						if ($pvalue['departure_airport_icao'] == $icao && $pvalue['date'] == $ddate) {
1953
    							$pvalue['departure_airport_count'] = $pvalue['departure_airport_count'] + $value['departure_airport_count'];
1954
	    						$find = true;
1955
    							break;
1956
    						}
1957
    					}
1958
    					if ($find === false) {
1959
    						$pall[] = $value;
1960
	    				}
1961
    				}
1962
	    			$alldata = $pall;
1963
				foreach ($alldata as $number) {
1964
					$this->addStatDepartureAirportsDaily($number['date'],$number['departure_airport_icao'],$number['departure_airport_name'],$number['departure_airport_city'],$number['departure_airport_country'],$number['departure_airport_count'],'',$filter_name);
1965
				}
1966
				echo '...Arrival'."\n";
1967
				$pall = $Spotter->getLast7DaysAirportsArrival('',$filter);
1968
    				$dall = $Spotter->getLast7DaysDetectedAirportsArrival('',$filter);
1969
				foreach ($dall as $value) {
1970
					$icao = $value['arrival_airport_icao'];
1971
					$ddate = $value['date'];
1972
    					$find = false;
1973
					foreach ($pall as $pvalue) {
1974
    						if ($pvalue['arrival_airport_icao'] == $icao && $pvalue['date'] == $ddate) {
1975
    							$pvalue['arrival_airport_count'] = $pvalue['arrival_airport_count'] + $value['arrival_airport_count'];
1976
    							$find = true;
1977
    							break;
1978
	    					}
1979
    					}
1980
    					if ($find === false) {
1981
    						$pall[] = $value;
1982
	    				}
1983
    				}
1984
    				$alldata = $pall;
1985
				foreach ($alldata as $number) {
1986
					$this->addStatArrivalAirportsDaily($number['date'],$number['arrival_airport_icao'],$number['arrival_airport_name'],$number['arrival_airport_city'],$number['arrival_airport_country'],$number['arrival_airport_count'],'',$filter_name);
1987
				}
1988
    
1989
				echo 'Flights data...'."\n";
1990
				echo '-> countAllDatesLastMonth...'."\n";
1991
				$alldata = $Spotter->countAllDatesLastMonth($filter);
1992
				foreach ($alldata as $number) {
1993
					$this->addStatFlight('month',$number['date_name'],$number['date_count'], '',$filter_name);
1994
				}
1995
				echo '-> countAllDates...'."\n";
1996
				$previousdata = $this->countAllDates('',$filter_name);
1997
				$alldata = $Common->array_merge_noappend($previousdata,$Spotter->countAllDates($filter));
1998
				$values = array();
1999
				foreach ($alldata as $cnt) {
2000
					$values[] = $cnt['date_count'];
2001
				}
2002
				array_multisort($values,SORT_DESC,$alldata);
2003
				array_splice($alldata,11);
2004
				foreach ($alldata as $number) {
2005
					$this->addStatFlight('date',$number['date_name'],$number['date_count'],'',$filter_name);
2006
				}
2007
				
2008
				echo '-> countAllHours...'."\n";
2009
				$alldata = $Spotter->countAllHours('hour',$filter);
2010
				foreach ($alldata as $number) {
2011
					$this->addStatFlight('hour',$number['hour_name'],$number['hour_count'],'',$filter_name);
2012
				}
2013
				echo 'Insert last stats update date...'."\n";
2014
				date_default_timezone_set('UTC');
2015
				$this->addLastStatsUpdate('last_update_stats_'.$filter_name,date('Y-m-d G:i:s'));
2016
				if (isset($filter['DeleteLastYearStats']) && $filter['DeleteLastYearStats'] == true) {
2017
					if (date('Y',strtotime($last_update_day)) != date('Y')) {
2018
						$this->deleteOldStats($filter_name);
2019
						$this->addLastStatsUpdate('last_update_stats_'.$filter_name,date('Y').'-01-01 00:00:00');
2020
					}
2021
				}
2022
2023
			}
2024
	
2025
2026
			// Last year stats
2027
			if ($lastyear) {
2028
				echo 'Data from last year...'."\n";
2029
				// SUM all previous month to put as year
2030
				$previous_year = date('Y');
2031
				$previous_year--;
2032
				$this->addStat('aircrafts_byyear',$this->getSumStats('aircrafts_bymonth',$previous_year),$previous_year.'-01-01 00:00:00');
2033
				$this->addStat('airlines_byyear',$this->getSumStats('airlines_bymonth',$previous_year),$previous_year.'-01-01 00:00:00');
2034
				$this->addStat('owner_byyear',$this->getSumStats('owner_bymonth',$previous_year),$previous_year.'-01-01 00:00:00');
2035
				$this->addStat('pilot_byyear',$this->getSumStats('pilot_bymonth',$previous_year),$previous_year.'-01-01 00:00:00');
2036
				$allairlines = $this->getAllAirlineNames();
2037
				foreach ($allairlines as $data) {
2038
					$this->addStat('aircrafts_byyear',$this->getSumStats('aircrafts_bymonth',$previous_year,$data['airline_icao']),$previous_year.'-01-01 00:00:00',$data['airline_icao']);
2039
					$this->addStat('airlines_byyear',$this->getSumStats('airlines_bymonth',$previous_year,$data['airline_icao']),$previous_year.'-01-01 00:00:00',$data['airline_icao']);
2040
					$this->addStat('owner_byyear',$this->getSumStats('owner_bymonth',$previous_year,$data['airline_icao']),$previous_year.'-01-01 00:00:00',$data['airline_icao']);
2041
					$this->addStat('pilot_byyear',$this->getSumStats('pilot_bymonth',$previous_year,$data['airline_icao']),$previous_year.'-01-01 00:00:00',$data['airline_icao']);
2042
				}
2043
				
2044
				if (isset($globalArchiveYear) && $globalArchiveYear) {
2045
					if ($globalArchive) {
2046
						$query = "INSERT INTO spotter_archive_output SELECT * FROM spotter_output WHERE spotter_output.date < '".date('Y')."-01-01 00:00:00'";
2047
						try {
2048
							$sth = $this->db->prepare($query);
2049
							$sth->execute();
2050
						} catch(PDOException $e) {
2051
							return "error : ".$e->getMessage().' - query : '.$query."\n";
2052
						}
2053
					}
2054
					echo 'Delete old data'."\n";
2055
					$query = "DELETE FROM spotter_output WHERE spotter_output.date < '".date('Y')."-01-01 00:00:00'";
2056
					try {
2057
						$sth = $this->db->prepare($query);
2058
						$sth->execute();
2059
					} catch(PDOException $e) {
2060
						return "error : ".$e->getMessage().' - query : '.$query."\n";
2061
					}
2062
				}
2063
				if (isset($globalDeleteLastYearStats) && $globalDeleteLastYearStats) {
2064
					$last_update = $this->getLastStatsUpdate('last_update_stats');
2065
					if (date('Y',strtotime($last_update[0]['value'])) != date('Y')) {
2066
						$this->deleteOldStats();
2067
						$this->addLastStatsUpdate('last_update_stats',date('Y').'-01-01 00:00:00');
2068
						$lastyearupdate = true;
2069
					}
2070
				}
2071
			}
2072
			if ($globalArchiveMonths > 0) {
2073
				if ($globalArchive) {
2074
					echo 'Archive old data...'."\n";
2075
					if ($globalDBdriver == 'mysql') {
2076
						//$query = "INSERT INTO spotter_archive_output SELECT * FROM spotter_output WHERE spotter_output.date < DATE_FORMAT(UTC_TIMESTAMP() - INTERVAL ".$globalArchiveMonths." MONTH, '%Y/%m/01')";
2077
						$query = "INSERT INTO spotter_archive_output (spotter_id,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,departure_airport_time,arrival_airport_icao,arrival_airport_name,arrival_airport_city,arrival_airport_country,arrival_airport_time,route_stop,date,latitude,longitude,waypoints,altitude,heading,ground_speed,highlight,squawk,ModeS,pilot_id,pilot_name,owner_name,verticalrate,format_source,source_name,ground,last_ground,last_seen,last_latitude,last_longitude,last_altitude,last_ground_speed,real_arrival_airport_icao,real_arrival_airport_time,real_departure_airport_icao,real_departure_airport_time)
2078
							    SELECT spotter_id,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,departure_airport_time,arrival_airport_icao,arrival_airport_name,arrival_airport_city,arrival_airport_country,arrival_airport_time,route_stop,date,latitude,longitude,waypoints,altitude,heading,ground_speed,highlight,squawk,ModeS,pilot_id,pilot_name,owner_name,verticalrate,format_source,source_name,ground,last_ground,last_seen,last_latitude,last_longitude,last_altitude,last_ground_speed,real_arrival_airport_icao,real_arrival_airport_time,real_departure_airport_icao,real_departure_airport_time
2079
	    						     FROM spotter_output WHERE spotter_output.date < DATE_FORMAT(UTC_TIMESTAMP() - INTERVAL ".$globalArchiveMonths." MONTH, '%Y/%m/01')";
2080
					} else {
2081
						$query = "INSERT INTO spotter_archive_output (spotter_id,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,departure_airport_time,arrival_airport_icao,arrival_airport_name,arrival_airport_city,arrival_airport_country,arrival_airport_time,route_stop,date,latitude,longitude,waypoints,altitude,heading,ground_speed,highlight,squawk,ModeS,pilot_id,pilot_name,owner_name,verticalrate,format_source,source_name,ground,last_ground,last_seen,last_latitude,last_longitude,last_altitude,last_ground_speed,real_arrival_airport_icao,real_arrival_airport_time,real_departure_airport_icao,real_departure_airport_time)
2082
							     SELECT 
2083
								spotter_id,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,departure_airport_time,arrival_airport_icao,arrival_airport_name,arrival_airport_city,arrival_airport_country,arrival_airport_time,route_stop,date,latitude,longitude,waypoints,altitude,heading,ground_speed,highlight,squawk,ModeS,pilot_id,pilot_name,owner_name,verticalrate,format_source,source_name,ground,last_ground,last_seen,last_latitude,last_longitude,last_altitude,last_ground_speed,real_arrival_airport_icao,real_arrival_airport_time,real_departure_airport_icao,real_departure_airport_time
2084
							    FROM spotter_output WHERE spotter_output.date < CAST(to_char(CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$globalArchiveMonths." MONTHS', 'YYYY/mm/01') AS TIMESTAMP)";
2085
					}
2086
					try {
2087
						$sth = $this->db->prepare($query);
2088
						$sth->execute();
2089
					} catch(PDOException $e) {
2090
						return "error : ".$e->getMessage();
2091
					}
2092
				}
2093
				echo 'Deleting old data...'."\n";
2094
				//$query = 'DELETE FROM spotter_output WHERE spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$globalArchiveMonths.' MONTH)';
2095
				if ($globalDBdriver == 'mysql') {
2096
					$query = "DELETE FROM spotter_output WHERE spotter_output.date < DATE_FORMAT(UTC_TIMESTAMP() - INTERVAL ".$globalArchiveMonths." MONTH, '%Y/%m/01')";
2097
				} else {
2098
					$query = "DELETE FROM spotter_output WHERE spotter_output.date < CAST(to_char(CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$globalArchiveMonths." MONTHS', 'YYYY/mm/01') AS TIMESTAMP)";
2099
				}
2100
				try {
2101
					$sth = $this->db->prepare($query);
2102
					$sth->execute();
2103
				} catch(PDOException $e) {
2104
					return "error : ".$e->getMessage();
2105
				}
2106
			}
2107
			if (!isset($lastyearupdate)) {
2108
				echo 'Insert last stats update date...'."\n";
2109
				date_default_timezone_set('UTC');
2110
				$this->addLastStatsUpdate('last_update_stats',date('Y-m-d G:i:s'));
2111
			}
2112
		//}
2113
	}
2114
}
2115
2116
?>