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

Stats::deleteOldStats()   A

Complexity

Conditions 3
Paths 5

Size

Total Lines 18
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 13
nc 5
nop 1
dl 0
loc 18
rs 9.4285
c 0
b 0
f 0
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
?>