Completed
Push — master ( ba9f5e...7f1c9f )
by Yannick
14:25
created

SpotterArchive::searchSpotterData()   F

Complexity

Conditions 54
Paths > 20000

Size

Total Lines 328
Code Lines 197

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 54
eloc 197
nc 429496.7295
nop 25
dl 0
loc 328
rs 2
c 0
b 0
f 0

How to fix   Long Method    Complexity    Many Parameters   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

Many Parameters

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

There are several approaches to avoid long parameter lists:

1
<?php
2
class SpotterArchive {
3
	public $global_query = "SELECT spotter_archive.* FROM spotter_archive";
4
	public $db;
5
6
	public function __construct($dbc = null) {
7
		$Connection = new Connection($dbc);
8
		$this->db = $Connection->db;
9
	}
10
11
	public function getFilter($filter) {
12
		$filter_query = '';
13
		if (isset($filter['source']) && !empty($filter['source'])) {
14
			$filter_query = " AND format_source IN ('".implode("','",$filter['source'])."')";
15
		}
16
		if (isset($filter['airlines']) && !empty($filter['airlines'])) {
17
			$filter_query .= " INNER JOIN (SELECT flightaware_id FROM spotter_archive_output WHERE spotter_output.airline_icao IN ('".implode("','",$filter['airlines'])."')) so ON so.flightaware_id = spotter_live.flightaware_id";
18
		}
19
		if (isset($filter['airlinestype']) && !empty($filter['airlinestype'])) {
20
			$filter_query .= " INNER JOIN (SELECT flightaware_id FROM spotter_archive_output WHERE spotter_output.airline_type = '".$filter['airlinestype']."') sa ON sa.flightaware_id = spotter_live.flightaware_id ";
21
		}
22
		if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
23
			$filter_query = " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
24
		}
25
		if (isset($filter['pilots_id']) && !empty($filter['pilots_id'])) {
26
			$filter_query .= " INNER JOIN (SELECT flightaware_id FROM spotter_archive_output WHERE spotter_output.pilot_id IN ('".implode("','",$filter['pilots_id'])."')) so ON so.flightaware_id = spotter_live.flightaware_id";
27
		}
28
		return $filter_query;
29
	}
30
31
	// Spotter_archive
32
	public function addSpotterArchiveData($flightaware_id = '', $ident = '', $registration = '', $airline_name = '', $airline_icao = '', $airline_country = '', $airline_type = '', $aircraft_icao = '', $aircraft_shadow = '', $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 = '', $squawk = '', $ModeS = '', $pilot_id = '', $pilot_name = '',$verticalrate = '',$format_source = '', $source_name = '', $over_country = '') {
33
		require_once(dirname(__FILE__).'/class.Spotter.php');
34
		if ($over_country == '') {
35
			$Spotter = new Spotter($this->db);
36
			$data_country = $Spotter->getCountryFromLatitudeLongitude($latitude,$longitude);
37
			if (!empty($data_country)) $country = $data_country['iso2'];
38
			else $country = '';
39
		} else $country = $over_country;
40
		if ($airline_type === NULL) $airline_type ='';
41
	
42
		//if ($country == '') echo "\n".'************ UNKNOW COUNTRY ****************'."\n";
43
		//else echo "\n".'*/*/*/*/*/*/*/ Country : '.$country.' */*/*/*/*/*/*/*/*/'."\n";
44
45
		// Route is not added in spotter_archive
46
		$query  = "INSERT INTO spotter_archive (flightaware_id, ident, registration, airline_name, airline_icao, airline_country, airline_type, aircraft_icao, aircraft_shadow, 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, squawk, ModeS, pilot_id, pilot_name, verticalrate,format_source,over_country,source_name)
47
		        VALUES (:flightaware_id, :ident, :registration, :airline_name, :airline_icao, :airline_country, :airline_type, :aircraft_icao, :aircraft_shadow, :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, :squawk, :ModeS, :pilot_id, :pilot_name, :verticalrate, :format_source, :over_country, :source_name)";
48
49
		$query_values = array(':flightaware_id' => $flightaware_id, ':ident' => $ident, ':registration' => $registration, ':airline_name' => $airline_name, ':airline_icao' => $airline_icao, ':airline_country' => $airline_country, ':airline_type' => $airline_type, ':aircraft_icao' => $aircraft_icao, ':aircraft_shadow' => $aircraft_shadow, ':aircraft_name' => $aircraft_name, ':aircraft_manufacturer' => $aircraft_manufacturer, ':departure_airport_icao' => $departure_airport_icao, ':departure_airport_name' => $departure_airport_name, ':departure_airport_city' => $departure_airport_city, ':departure_airport_country' => $departure_airport_country, ':departure_airport_time' => $departure_airport_time,':arrival_airport_icao' => $arrival_airport_icao, ':arrival_airport_name' => $arrival_airport_name, ':arrival_airport_city' => $arrival_airport_city, ':arrival_airport_country' => $arrival_airport_country, ':arrival_airport_time' => $arrival_airport_time, ':route_stop' => $route_stop, ':date' => $date,':latitude' => $latitude, ':longitude' => $longitude, ':waypoints' => $waypoints, ':altitude' => $altitude, ':heading' => $heading, ':ground_speed' => $ground_speed, ':squawk' => $squawk, ':ModeS' => $ModeS, ':pilot_id' => $pilot_id, ':pilot_name' => $pilot_name, ':verticalrate' => $verticalrate, ':format_source' => $format_source, ':over_country' => $country, ':source_name' => $source_name);
50
		try {
51
			$sth = $this->db->prepare($query);
52
			$sth->execute($query_values);
53
		} catch(PDOException $e) {
54
			return "error : ".$e->getMessage();
55
		}
56
		return "success";
57
	}
58
59
60
        /**
61
        * Gets all the spotter information based on a particular callsign
62
        *
63
        * @return Array the spotter information
64
        *
65
        */
66
        public function getLastArchiveSpotterDataByIdent($ident)
67
        {
68
		$Spotter = new Spotter($this->db);
69
                date_default_timezone_set('UTC');
70
71
                $ident = filter_var($ident, FILTER_SANITIZE_STRING);
72
                //$query  = "SELECT spotter_archive.* FROM spotter_archive INNER JOIN (SELECT l.flightaware_id, max(l.date) as maxdate FROM spotter_archive l WHERE l.ident = :ident GROUP BY l.flightaware_id) s on spotter_archive.flightaware_id = s.flightaware_id AND spotter_archive.date = s.maxdate LIMIT 1";
73
                $query  = "SELECT spotter_archive.* FROM spotter_archive WHERE ident = :ident ORDER BY date DESC LIMIT 1";
74
75
                $spotter_array = $Spotter->getDataFromDB($query,array(':ident' => $ident));
76
77
                return $spotter_array;
78
        }
79
80
81
        /**
82
        * Gets last the spotter information based on a particular id
83
        *
84
        * @return Array the spotter information
85
        *
86
        */
87
        public function getLastArchiveSpotterDataById($id)
88
        {
89
    		$Spotter = new Spotter($this->db);
90
                date_default_timezone_set('UTC');
91
                $id = filter_var($id, FILTER_SANITIZE_STRING);
92
                //$query  = SpotterArchive->$global_query." WHERE spotter_archive.flightaware_id = :id";
93
                //$query  = "SELECT spotter_archive.* FROM spotter_archive INNER JOIN (SELECT l.flightaware_id, max(l.date) as maxdate FROM spotter_archive l WHERE l.flightaware_id = :id GROUP BY l.flightaware_id) s on spotter_archive.flightaware_id = s.flightaware_id AND spotter_archive.date = s.maxdate LIMIT 1";
94
                $query  = "SELECT * FROM spotter_archive WHERE flightaware_id = :id ORDER BY date DESC LIMIT 1";
95
96
//              $spotter_array = Spotter->getDataFromDB($query,array(':id' => $id));
97
                  /*
98
                try {
99
                        $Connection = new Connection();
100
                        $sth = Connection->$db->prepare($query);
101
                        $sth->execute(array(':id' => $id));
102
                } catch(PDOException $e) {
103
                        return "error";
104
                }
105
                $spotter_array = $sth->fetchAll(PDO->FETCH_ASSOC);
106
                */
107
                $spotter_array = $Spotter->getDataFromDB($query,array(':id' => $id));
108
109
                return $spotter_array;
110
        }
111
112
        /**
113
        * Gets all the spotter information based on a particular id
114
        *
115
        * @return Array the spotter information
116
        *
117
        */
118
        public function getAllArchiveSpotterDataById($id)
119
        {
120
                date_default_timezone_set('UTC');
121
                $id = filter_var($id, FILTER_SANITIZE_STRING);
122
                $query  = $this->global_query." WHERE spotter_archive.flightaware_id = :id";
123
124
//              $spotter_array = Spotter->getDataFromDB($query,array(':id' => $id));
125
126
                try {
127
                        $sth = $this->db->prepare($query);
128
                        $sth->execute(array(':id' => $id));
129
                } catch(PDOException $e) {
130
                        echo $e->getMessage();
131
                        die;
132
                }
133
                $spotter_array = $sth->fetchAll(PDO::FETCH_ASSOC);
134
135
                return $spotter_array;
136
        }
137
138
        /**
139
        * Gets coordinate & time spotter information based on a particular id
140
        *
141
        * @return Array the spotter information
142
        *
143
        */
144
        public function getCoordArchiveSpotterDataById($id)
145
        {
146
                date_default_timezone_set('UTC');
147
                $id = filter_var($id, FILTER_SANITIZE_STRING);
148
                $query  = "SELECT spotter_archive.latitude, spotter_archive.longitude, spotter_archive.date FROM spotter_archive WHERE spotter_archive.flightaware_id = :id";
149
150
//              $spotter_array = Spotter->getDataFromDB($query,array(':id' => $id));
151
152
                try {
153
                        $sth = $this->db->prepare($query);
154
                        $sth->execute(array(':id' => $id));
155
                } catch(PDOException $e) {
156
                        echo $e->getMessage();
157
                        die;
158
                }
159
                $spotter_array = $sth->fetchAll(PDO::FETCH_ASSOC);
160
161
                return $spotter_array;
162
        }
163
164
165
        /**
166
        * Gets altitude information based on a particular callsign
167
        *
168
        * @return Array the spotter information
169
        *
170
        */
171
        public function getAltitudeArchiveSpotterDataByIdent($ident)
172
        {
173
174
                date_default_timezone_set('UTC');
175
176
                $ident = filter_var($ident, FILTER_SANITIZE_STRING);
177
                $query  = "SELECT spotter_archive.altitude, spotter_archive.date FROM spotter_archive WHERE spotter_archive.ident = :ident";
178
179
                try {
180
                        $sth = $this->db->prepare($query);
181
                        $sth->execute(array(':ident' => $ident));
182
                } catch(PDOException $e) {
183
                        echo $e->getMessage();
184
                        die;
185
                }
186
                $spotter_array = $sth->fetchAll(PDO::FETCH_ASSOC);
187
188
                return $spotter_array;
189
        }
190
191
        /**
192
        * Gets altitude information based on a particular id
193
        *
194
        * @return Array the spotter information
195
        *
196
        */
197
        public function getAltitudeArchiveSpotterDataById($id)
198
        {
199
200
                date_default_timezone_set('UTC');
201
202
                $id = filter_var($id, FILTER_SANITIZE_STRING);
203
                $query  = "SELECT spotter_archive.altitude, spotter_archive.date FROM spotter_archive WHERE spotter_archive.flightaware_id = :id ORDER BY date";
204
205
                try {
206
                        $sth = $this->db->prepare($query);
207
                        $sth->execute(array(':id' => $id));
208
                } catch(PDOException $e) {
209
                        echo $e->getMessage();
210
                        die;
211
                }
212
                $spotter_array = $sth->fetchAll(PDO::FETCH_ASSOC);
213
214
                return $spotter_array;
215
        }
216
217
        /**
218
        * Gets altitude & speed information based on a particular id
219
        *
220
        * @return Array the spotter information
221
        *
222
        */
223
        public function getAltitudeSpeedArchiveSpotterDataById($id)
224
        {
225
226
                date_default_timezone_set('UTC');
227
228
                $id = filter_var($id, FILTER_SANITIZE_STRING);
229
                $query  = "SELECT spotter_archive.altitude, spotter_archive.ground_speed, spotter_archive.date FROM spotter_archive WHERE spotter_archive.flightaware_id = :id ORDER BY date";
230
231
                try {
232
                        $sth = $this->db->prepare($query);
233
                        $sth->execute(array(':id' => $id));
234
                } catch(PDOException $e) {
235
                        echo $e->getMessage();
236
                        die;
237
                }
238
                $spotter_array = $sth->fetchAll(PDO::FETCH_ASSOC);
239
240
                return $spotter_array;
241
        }
242
243
244
        /**
245
        * Gets altitude information based on a particular callsign
246
        *
247
        * @return Array the spotter information
248
        *
249
        */
250
        public function getLastAltitudeArchiveSpotterDataByIdent($ident)
251
        {
252
253
                date_default_timezone_set('UTC');
254
255
                $ident = filter_var($ident, FILTER_SANITIZE_STRING);
256
                $query  = "SELECT spotter_archive.altitude, spotter_archive.date FROM spotter_archive INNER JOIN (SELECT l.flightaware_id, max(l.date) as maxdate FROM spotter_archive l WHERE l.ident = :ident GROUP BY l.flightaware_id) s on spotter_archive.flightaware_id = s.flightaware_id AND spotter_archive.date = s.maxdate LIMIT 1";
257
//                $query  = "SELECT spotter_archive.altitude, spotter_archive.date FROM spotter_archive WHERE spotter_archive.ident = :ident";
258
259
                try {
260
                        $sth = $this->db->prepare($query);
261
                        $sth->execute(array(':ident' => $ident));
262
                } catch(PDOException $e) {
263
                        echo $e->getMessage();
264
                        die;
265
                }
266
                $spotter_array = $sth->fetchAll(PDO::FETCH_ASSOC);
267
268
                return $spotter_array;
269
        }
270
271
272
273
       /**
274
        * Gets all the archive spotter information
275
        *
276
        * @return Array the spotter information
277
        *
278
        */
279
        public function getSpotterArchiveData($ident,$flightaware_id,$date)
280
        {
281
    		$Spotter = new Spotter($this->db);
282
                $ident = filter_var($ident, FILTER_SANITIZE_STRING);
283
                $query  = "SELECT spotter_live.* FROM spotter_live INNER JOIN (SELECT l.flightaware_id, max(l.date) as maxdate FROM spotter_live l WHERE l.ident = :ident AND l.flightaware_id = :flightaware_id AND l.date LIKE :date GROUP BY l.flightaware_id) s on spotter_live.flightaware_id = s.flightaware_id AND spotter_live.date = s.maxdate";
284
285
                $spotter_array = $Spotter->getDataFromDB($query,array(':ident' => $ident,':flightaware_id' => $flightaware_id,':date' => $date.'%'));
286
287
                return $spotter_array;
288
        }
289
        
290
        public function deleteSpotterArchiveTrackData()
291
        {
292
		global $globalArchiveKeepTrackMonths;
293
                date_default_timezone_set('UTC');
294
		$query = 'DELETE FROM spotter_archive WHERE spotter_archive.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$globalArchiveKeepTrackMonths.' MONTH)';
295
                try {
296
                        $sth = $this->db->prepare($query);
297
                        $sth->execute();
298
                } catch(PDOException $e) {
299
                        echo $e->getMessage();
300
                        die;
301
                }
302
	}
303
304
	/**
305
        * Gets Minimal Live Spotter data
306
        *
307
        * @return Array the spotter information
308
        *
309
        */
310
        public function getMinLiveSpotterData($begindate,$enddate,$filter = array())
0 ignored issues
show
Unused Code introduced by
The parameter $enddate is not used and could be removed.

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

Loading history...
311
        {
312
                global $globalDBdriver, $globalLiveInterval;
313
                date_default_timezone_set('UTC');
314
315
                $filter_query = '';
316
                if (isset($filter['source']) && !empty($filter['source'])) {
317
                        $filter_query .= " AND format_source IN ('".implode("','",$filter['source'])."') ";
318
                }
319
                // Use spotter_output also ?
320
                if (isset($filter['airlines']) && !empty($filter['airlines'])) {
321
                        $filter_query .= " INNER JOIN (SELECT flightaware_id FROM spotter_archive_output WHERE spotter_archive_output.airline_icao IN ('".implode("','",$filter['airlines'])."')) so ON so.flightaware_id = spotter_archive.flightaware_id ";
322
                }
323
                if (isset($filter['airlinestype']) && !empty($filter['airlinestype'])) {
324
                        $filter_query .= " INNER JOIN (SELECT flightaware_id FROM spotter_archive_output WHERE spotter_archive_output.airline_type = '".$filter['airlinestype']."') sa ON sa.flightaware_id = spotter_archive.flightaware_id ";
325
                }
326
                if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
327
                        $filter_query = " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
328
                }
329
330
                //if (!isset($globalLiveInterval)) $globalLiveInterval = '200';
331
                if ($globalDBdriver == 'mysql') {
332
                        /*
333
                        $query  = 'SELECT a.aircraft_shadow, spotter_archive.ident, spotter_archive.flightaware_id, spotter_archive.aircraft_icao, spotter_archive.departure_airport_icao as departure_airport, spotter_archive.arrival_airport_icao as arrival_airport, spotter_archive.latitude, spotter_archive.longitude, spotter_archive.altitude, spotter_archive.heading, spotter_archive.ground_speed, spotter_archive.squawk 
334
                    		    FROM spotter_archive 
335
                    		    INNER JOIN (SELECT l.flightaware_id, max(l.date) as maxdate FROM spotter_archive l WHERE (l.date BETWEEN '."'".$begindate."'".' AND '."'".$enddate."'".') GROUP BY l.flightaware_id) s on spotter_archive.flightaware_id = s.flightaware_id AND spotter_archive.date = s.maxdate '.$filter_query.'LEFT JOIN (SELECT aircraft_shadow,icao FROM aircraft) a ON spotter_archive.aircraft_icao = a.icao';
336
			*/
337
			$query  = 'SELECT a.aircraft_shadow, spotter_archive.ident, spotter_archive.flightaware_id, spotter_archive.aircraft_icao, spotter_archive.departure_airport_icao as departure_airport, spotter_archive.arrival_airport_icao as arrival_airport, spotter_archive.latitude, spotter_archive.longitude, spotter_archive.altitude, spotter_archive.heading, spotter_archive.ground_speed, spotter_archive.squawk 
338
				    FROM spotter_archive 
339
				    INNER JOIN (SELECT l.flightaware_id, max(l.date) as maxdate 
340
						FROM spotter_archive l 
341
						WHERE (l.date BETWEEN DATE_SUB('."'".$begindate."'".',INTERVAL '.$globalLiveInterval.' SECOND) AND '."'".$begindate."'".') 
342
						GROUP BY l.flightaware_id) s on spotter_archive.flightaware_id = s.flightaware_id 
343
				    AND spotter_archive.date = s.maxdate '.$filter_query.'LEFT JOIN (SELECT aircraft_shadow,icao FROM aircraft) a ON spotter_archive.aircraft_icao = a.icao';
344
                } else {
345
                        $query  = 'SELECT spotter_archive.ident, spotter_archive.flightaware_id, spotter_archive.aircraft_icao, spotter_archive.departure_airport_icao as departure_airport, spotter_archive.arrival_airport_icao as arrival_airport, spotter_archive.latitude, spotter_archive.longitude, spotter_archive.altitude, spotter_archive.heading, spotter_archive.ground_speed, spotter_archive.squawk, a.aircraft_shadow FROM spotter_archive INNER JOIN (SELECT l.flightaware_id, max(l.date) as maxdate FROM spotter_archive l WHERE DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$globalLiveInterval.' SECOND) <= l.date GROUP BY l.flightaware_id) s on spotter_archive.flightaware_id = s.flightaware_id AND spotter_archive.date = s.maxdate '.$filter_query.'INNER JOIN (SELECT * FROM aircraft) a on spotter_archive.aircraft_icao = a.icao';
346
                }
347
                //echo $query;
348
                try {
349
                        $sth = $this->db->prepare($query);
350
                        $sth->execute();
351
                } catch(PDOException $e) {
352
                        echo $e->getMessage();
353
                        die;
354
                }
355
                $spotter_array = $sth->fetchAll(PDO::FETCH_ASSOC);
356
357
                return $spotter_array;
358
        }
359
360
	/**
361
        * Gets Minimal Live Spotter data
362
        *
363
        * @return Array the spotter information
364
        *
365
        */
366
        public function getMinLiveSpotterDataPlayback($begindate,$enddate,$filter = array())
367
        {
368
                global $globalDBdriver, $globalLiveInterval;
369
                date_default_timezone_set('UTC');
370
371
                $filter_query = '';
372
                if (isset($filter['source']) && !empty($filter['source'])) {
373
                        $filter_query .= " AND format_source IN ('".implode("','",$filter['source'])."') ";
374
                }
375
                // Should use spotter_output also ?
376
                if (isset($filter['airlines']) && !empty($filter['airlines'])) {
377
                        $filter_query .= " INNER JOIN (SELECT flightaware_id FROM spotter_archive_output WHERE spotter_archive_output.airline_icao IN ('".implode("','",$filter['airlines'])."')) so ON so.flightaware_id = spotter_archive.flightaware_id ";
378
                }
379
                if (isset($filter['airlinestype']) && !empty($filter['airlinestype'])) {
380
                        $filter_query .= " INNER JOIN (SELECT flightaware_id FROM spotter_archive_output WHERE spotter_archive_output.airline_type = '".$filter['airlinestype']."') sa ON sa.flightaware_id = spotter_archive.flightaware_id ";
381
                }
382
                if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
383
                        $filter_query = " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
384
                }
385
386
                //if (!isset($globalLiveInterval)) $globalLiveInterval = '200';
387
                if ($globalDBdriver == 'mysql') {
388
                        /*
389
                        $query  = 'SELECT a.aircraft_shadow, spotter_archive.ident, spotter_archive.flightaware_id, spotter_archive.aircraft_icao, spotter_archive.departure_airport_icao as departure_airport, spotter_archive.arrival_airport_icao as arrival_airport, spotter_archive.latitude, spotter_archive.longitude, spotter_archive.altitude, spotter_archive.heading, spotter_archive.ground_speed, spotter_archive.squawk 
390
                    		    FROM spotter_archive 
391
                    		    INNER JOIN (SELECT l.flightaware_id, max(l.date) as maxdate FROM spotter_archive l WHERE (l.date BETWEEN '."'".$begindate."'".' AND '."'".$enddate."'".') GROUP BY l.flightaware_id) s on spotter_archive.flightaware_id = s.flightaware_id AND spotter_archive.date = s.maxdate '.$filter_query.'LEFT JOIN (SELECT aircraft_shadow,icao FROM aircraft) a ON spotter_archive.aircraft_icao = a.icao';
392
			*/
393
			$query  = 'SELECT a.aircraft_shadow, spotter_archive_output.ident, spotter_archive_output.flightaware_id, spotter_archive_output.aircraft_icao, spotter_archive_output.departure_airport_icao as departure_airport, spotter_archive_output.arrival_airport_icao as arrival_airport, spotter_archive_output.latitude, spotter_archive_output.longitude, spotter_archive_output.altitude, spotter_archive_output.heading, spotter_archive_output.ground_speed, spotter_archive_output.squawk 
394
				    FROM spotter_archive_output 
395
				    LEFT JOIN (SELECT aircraft_shadow,icao FROM aircraft) a ON spotter_archive_output.aircraft_icao = a.icao 
396
				    WHERE (spotter_archive_output.date BETWEEN '."'".$begindate."'".' AND '."'".$enddate."'".') 
397
                        	    '.$filter_query.' GROUP BY spotter_archive_output.flightaware_id, spotter_archive_output.ident, spotter_archive_output.aircraft_icao, spotter_archive_output.departure_airport_icao, spotter_archive_output.arrival_airport_icao, spotter_archive_output.latitude, spotter_archive_output.longitude, spotter_archive_output.altitude, spotter_archive_output.heading, spotter_archive_output.ground_speed, spotter_archive_output.squawk, a.aircraft_shadow';
398
399
                } else {
400
                        //$query  = 'SELECT spotter_archive_output.ident, spotter_archive_output.flightaware_id, spotter_archive_output.aircraft_icao, spotter_archive_output.departure_airport_icao as departure_airport, spotter_archive_output.arrival_airport_icao as arrival_airport, spotter_archive_output.latitude, spotter_archive_output.longitude, spotter_archive_output.altitude, spotter_archive_output.heading, spotter_archive_output.ground_speed, spotter_archive_output.squawk, a.aircraft_shadow FROM spotter_archive_output INNER JOIN (SELECT l.flightaware_id, max(l.date) as maxdate FROM spotter_archive_output l WHERE DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$globalLiveInterval.' SECOND) <= l.date GROUP BY l.flightaware_id) s on spotter_archive_output.flightaware_id = s.flightaware_id AND spotter_archive_output.date = s.maxdate '.$filter_query.'INNER JOIN (SELECT * FROM aircraft) a on spotter_archive_output.aircraft_icao = a.icao';
401
                       /*
402
                        $query  = 'SELECT spotter_archive_output.ident, spotter_archive_output.flightaware_id, spotter_archive_output.aircraft_icao, spotter_archive_output.departure_airport_icao as departure_airport, spotter_archive_output.arrival_airport_icao as arrival_airport, spotter_archive_output.latitude, spotter_archive_output.longitude, spotter_archive_output.altitude, spotter_archive_output.heading, spotter_archive_output.ground_speed, spotter_archive_output.squawk, a.aircraft_shadow
403
                        	    FROM spotter_archive_output 
404
                        	    INNER JOIN (SELECT * FROM aircraft) a on spotter_archive_output.aircraft_icao = a.icao
405
                        	    WHERE spotter_archive_output.date >= '."'".$begindate."'".' AND spotter_archive_output.date <= '."'".$enddate."'".'
406
                        	    '.$filter_query.' GROUP BY spotter_archive_output.flightaware_id, spotter_archive_output.ident, spotter_archive_output.aircraft_icao, spotter_archive_output.departure_airport_icao, spotter_archive_output.arrival_airport_icao, spotter_archive_output.latitude, spotter_archive_output.longitude, spotter_archive_output.altitude, spotter_archive_output.heading, spotter_archive_output.ground_speed, spotter_archive_output.squawk, a.aircraft_shadow';
407
                        */
408
                        $query  = 'SELECT DISTINCT spotter_output.flightaware_id, spotter_output.ident, spotter_output.aircraft_icao, spotter_output.departure_airport_icao as departure_airport, spotter_output.arrival_airport_icao as arrival_airport, spotter_output.latitude, spotter_output.longitude, spotter_output.altitude, spotter_output.heading, spotter_output.ground_speed, spotter_output.squawk, a.aircraft_shadow
409
                        	    FROM spotter_output 
410
                        	    INNER JOIN (SELECT * FROM aircraft) a on spotter_output.aircraft_icao = a.icao
411
                        	    WHERE spotter_output.date >= '."'".$begindate."'".' AND spotter_output.date <= '."'".$enddate."'".'
412
                        	    '.$filter_query.' LIMIT 200 OFFSET 0';
413
//                        	    .' GROUP BY spotter_output.flightaware_id, spotter_output.ident, spotter_output.aircraft_icao, spotter_output.departure_airport_icao, spotter_output.arrival_airport_icao, spotter_output.latitude, spotter_output.longitude, spotter_output.altitude, spotter_output.heading, spotter_output.ground_speed, spotter_output.squawk, a.aircraft_shadow';
414
                        	    
415
                }
416
                //echo $query;
417
                try {
418
                        $sth = $this->db->prepare($query);
419
                        $sth->execute();
420
                } catch(PDOException $e) {
421
                        echo $e->getMessage();
422
                        die;
423
                }
424
                $spotter_array = $sth->fetchAll(PDO::FETCH_ASSOC);
425
426
                return $spotter_array;
427
        }
428
429
	 /**
430
        * Gets count Live Spotter data
431
        *
432
        * @return Array the spotter information
433
        *
434
        */
435
        public function getLiveSpotterCount($begindate,$enddate,$filter = array())
436
        {
437
                global $globalDBdriver, $globalLiveInterval;
438
                date_default_timezone_set('UTC');
439
440
                $filter_query = '';
441
                if (isset($filter['source']) && !empty($filter['source'])) {
442
                        $filter_query .= " AND format_source IN ('".implode("','",$filter['source'])."') ";
443
                }
444
                if (isset($filter['airlines']) && !empty($filter['airlines'])) {
445
                        $filter_query .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_icao IN ('".implode("','",$filter['airlines'])."')) so ON so.flightaware_id = spotter_archive.flightaware_id ";
446
                }
447
                if (isset($filter['airlinestype']) && !empty($filter['airlinestype'])) {
448
                        $filter_query .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_type = '".$filter['airlinestype']."') sa ON sa.flightaware_id = spotter_archive.flightaware_id ";
449
                }
450
                if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
451
                        $filter_query = " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
452
                }
453
454
                //if (!isset($globalLiveInterval)) $globalLiveInterval = '200';
455
                if ($globalDBdriver == 'mysql') {
456
			$query = 'SELECT COUNT(DISTINCT flightaware_id) as nb 
457
			FROM spotter_archive l 
458
			WHERE (l.date BETWEEN DATE_SUB('."'".$begindate."'".',INTERVAL '.$globalLiveInterval.' SECOND) AND '."'".$begindate."'".')'.$filter_query;
459
                } else {
460
			$query = 'SELECT COUNT(DISTINCT flightaware_id) as nb FROM spotter_archive l WHERE (l.date BETWEEN '."'".$begindate."' - INTERVAL '".$globalLiveInterval." SECONDS' AND "."'".$enddate."'".')'.$filter_query;
461
                }
462
                //echo $query;
463
                try {
464
                        $sth = $this->db->prepare($query);
465
                        $sth->execute();
466
                } catch(PDOException $e) {
467
                        echo $e->getMessage();
468
                        die;
469
                }
470
		$result = $sth->fetch(PDO::FETCH_ASSOC);
471
                return $result['nb'];
472
473
        }
474
475
476
477
	// Spotter_Archive_output
478
	
479
    /**
480
    * Gets all the spotter information
481
    *
482
    * @return Array the spotter information
483
    *
484
    */
485
    public function searchSpotterData($q = '', $registration = '', $aircraft_icao = '', $aircraft_manufacturer = '', $highlights = '', $airline_icao = '', $airline_country = '', $airline_type = '', $airport = '', $airport_country = '', $callsign = '', $departure_airport_route = '', $arrival_airport_route = '', $owner = '',$pilot_id = '',$pilot_name = '',$altitude = '', $date_posted = '', $limit = '', $sort = '', $includegeodata = '',$origLat = '',$origLon = '',$dist = '', $filter=array())
486
    {
487
	global $globalTimezone, $globalDBdriver;
488
	require_once(dirname(__FILE__).'/class.Translation.php');
489
	$Translation = new Translation();
490
	$Spotter = new Spotter($this->db);
491
492
	date_default_timezone_set('UTC');
493
	
494
	$query_values = array();
495
	$additional_query = '';
496
	$limit_query = '';
497
	$filter_query = $this->getFilter($filter);
498
	if ($q != "")
499
	{
500
	    if (!is_string($q))
501
	    {
502
		return false;
503
	    } else {
504
	        
505
		$q_array = explode(" ", $q);
506
		
507
		foreach ($q_array as $q_item){
508
		    $additional_query .= " AND (";
509
		    $additional_query .= "(spotter_archive_output.spotter_id like '%".$q_item."%') OR ";
510
		    $additional_query .= "(spotter_archive_output.aircraft_icao like '%".$q_item."%') OR ";
511
		    $additional_query .= "(spotter_archive_output.aircraft_name like '%".$q_item."%') OR ";
512
		    $additional_query .= "(spotter_archive_output.aircraft_manufacturer like '%".$q_item."%') OR ";
513
		    $additional_query .= "(spotter_archive_output.airline_icao like '%".$q_item."%') OR ";
514
		    $additional_query .= "(spotter_archive_output.airline_name like '%".$q_item."%') OR ";
515
		    $additional_query .= "(spotter_archive_output.airline_country like '%".$q_item."%') OR ";
516
		    $additional_query .= "(spotter_archive_output.departure_airport_icao like '%".$q_item."%') OR ";
517
		    $additional_query .= "(spotter_archive_output.departure_airport_name like '%".$q_item."%') OR ";
518
		    $additional_query .= "(spotter_archive_output.departure_airport_city like '%".$q_item."%') OR ";
519
		    $additional_query .= "(spotter_archive_output.departure_airport_country like '%".$q_item."%') OR ";
520
		    $additional_query .= "(spotter_archive_output.arrival_airport_icao like '%".$q_item."%') OR ";
521
		    $additional_query .= "(spotter_archive_output.arrival_airport_name like '%".$q_item."%') OR ";
522
		    $additional_query .= "(spotter_archive_output.arrival_airport_city like '%".$q_item."%') OR ";
523
		    $additional_query .= "(spotter_archive_output.arrival_airport_country like '%".$q_item."%') OR ";
524
		    $additional_query .= "(spotter_archive_output.registration like '%".$q_item."%') OR ";
525
		    $additional_query .= "(spotter_archive_output.owner_name like '%".$q_item."%') OR ";
526
		    $additional_query .= "(spotter_archive_output.pilot_id like '%".$q_item."%') OR ";
527
		    $additional_query .= "(spotter_archive_output.pilot_name like '%".$q_item."%') OR ";
528
		    $additional_query .= "(spotter_archive_output.ident like '%".$q_item."%') OR ";
529
		    $translate = $Translation->ident2icao($q_item);
530
		    if ($translate != $q_item) $additional_query .= "(spotter_archive_output.ident like '%".$translate."%') OR ";
531
		    $additional_query .= "(spotter_archive_output.highlight like '%".$q_item."%')";
532
		    $additional_query .= ")";
533
		}
534
	    }
535
	}
536
	
537
	if ($registration != "")
538
	{
539
	    $registration = filter_var($registration,FILTER_SANITIZE_STRING);
540
	    if (!is_string($registration))
541
	    {
542
		return false;
543
	    } else {
544
		$additional_query .= " AND (spotter_archive_output.registration = '".$registration."')";
545
	    }
546
	}
547
	
548
	if ($aircraft_icao != "")
549
	{
550
	    $aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
551
	    if (!is_string($aircraft_icao))
552
	    {
553
		return false;
554
	    } else {
555
		$additional_query .= " AND (spotter_archive_output.aircraft_icao = '".$aircraft_icao."')";
556
	    }
557
	}
558
	
559
	if ($aircraft_manufacturer != "")
560
	{
561
	    $aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
562
	    if (!is_string($aircraft_manufacturer))
563
	    {
564
		return false;
565
	    } else {
566
		$additional_query .= " AND (spotter_archive_output.aircraft_manufacturer = '".$aircraft_manufacturer."')";
567
	    }
568
	}
569
	
570
	if ($highlights == "true")
571
	{
572
	    if (!is_string($highlights))
573
	    {
574
		return false;
575
	    } else {
576
		$additional_query .= " AND (spotter_archive_output.highlight <> '')";
577
	    }
578
	}
579
	
580
	if ($airline_icao != "")
581
	{
582
	    $airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
583
	    if (!is_string($airline_icao))
584
	    {
585
		return false;
586
	    } else {
587
		$additional_query .= " AND (spotter_archive_output.airline_icao = '".$airline_icao."')";
588
	    }
589
	}
590
	
591
	if ($airline_country != "")
592
	{
593
	    $airline_country = filter_var($airline_country,FILTER_SANITIZE_STRING);
594
	    if (!is_string($airline_country))
595
	    {
596
		return false;
597
	    } else {
598
		$additional_query .= " AND (spotter_archive_output.airline_country = '".$airline_country."')";
599
	    }
600
	}
601
	
602
	if ($airline_type != "")
603
	{
604
	    $airline_type = filter_var($airline_type,FILTER_SANITIZE_STRING);
605
	    if (!is_string($airline_type))
606
	    {
607
		return false;
608
	    } else {
609
		if ($airline_type == "passenger")
610
		{
611
		    $additional_query .= " AND (spotter_archive_output.airline_type = 'passenger')";
612
		}
613
		if ($airline_type == "cargo")
614
		{
615
		    $additional_query .= " AND (spotter_archive_output.airline_type = 'cargo')";
616
		}
617
		if ($airline_type == "military")
618
		{
619
		    $additional_query .= " AND (spotter_archive_output.airline_type = 'military')";
620
		}
621
	    }
622
	}
623
	
624
	if ($airport != "")
625
	{
626
	    $airport = filter_var($airport,FILTER_SANITIZE_STRING);
627
	    if (!is_string($airport))
628
	    {
629
		return false;
630
	    } else {
631
		$additional_query .= " AND ((spotter_archive_output.departure_airport_icao = '".$airport."') OR (spotter_archive_output.arrival_airport_icao = '".$airport."'))";
632
	    }
633
	}
634
	
635
	if ($airport_country != "")
636
	{
637
	    $airport_country = filter_var($airport_country,FILTER_SANITIZE_STRING);
638
	    if (!is_string($airport_country))
639
	    {
640
		return false;
641
	    } else {
642
		$additional_query .= " AND ((spotter_archive_output.departure_airport_country = '".$airport_country."') OR (spotter_archive_output.arrival_airport_country = '".$airport_country."'))";
643
	    }
644
	}
645
    
646
	if ($callsign != "")
647
	{
648
	    $callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
649
	    if (!is_string($callsign))
650
	    {
651
		return false;
652
	    } else {
653
		$translate = $Translation->ident2icao($callsign);
654
		if ($translate != $callsign) {
655
			$additional_query .= " AND (spotter_archive_output.ident = :callsign OR spotter_archive_output.ident = :translate)";
656
			$query_values = array_merge($query_values,array(':callsign' => $callsign,':translate' => $translate));
657
		} else {
658
			$additional_query .= " AND (spotter_archive_output.ident = '".$callsign."')";
659
		}
660
	    }
661
	}
662
663
	if ($owner != "")
664
	{
665
	    $owner = filter_var($owner,FILTER_SANITIZE_STRING);
666
	    if (!is_string($owner))
667
	    {
668
		return false;
669
	    } else {
670
		$additional_query .= " AND (spotter_archive_output.owner_name = '".$owner."')";
671
	    }
672
	}
673
674
	if ($pilot_name != "")
675
	{
676
	    $pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
677
	    if (!is_string($pilot_name))
678
	    {
679
		return false;
680
	    } else {
681
		$additional_query .= " AND (spotter_archive_output.pilot_name = '".$pilot_name."')";
682
	    }
683
	}
684
	
685
	if ($pilot_id != "")
686
	{
687
	    $pilot_id = filter_var($pilot_id,FILTER_SANITIZE_NUMBER_INT);
688
	    if (!is_string($pilot_id))
689
	    {
690
		return false;
691
	    } else {
692
		$additional_query .= " AND (spotter_archive_output.pilot_id = '".$pilot_id."')";
693
	    }
694
	}
695
	
696
	if ($departure_airport_route != "")
697
	{
698
	    $departure_airport_route = filter_var($departure_airport_route,FILTER_SANITIZE_STRING);
699
	    if (!is_string($departure_airport_route))
700
	    {
701
		return false;
702
	    } else {
703
		$additional_query .= " AND (spotter_archive_output.departure_airport_icao = '".$departure_airport_route."')";
704
	    }
705
	}
706
	
707
	if ($arrival_airport_route != "")
708
	{
709
	    $arrival_airport_route = filter_var($arrival_airport_route,FILTER_SANITIZE_STRING);
710
	    if (!is_string($arrival_airport_route))
711
	    {
712
		return false;
713
	    } else {
714
		$additional_query .= " AND (spotter_archive_output.arrival_airport_icao = '".$arrival_airport_route."')";
715
	    }
716
	}
717
	
718
	if ($altitude != "")
719
	{
720
	    $altitude_array = explode(",", $altitude);
721
	    
722
	    $altitude_array[0] = filter_var($altitude_array[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
723
	    $altitude_array[1] = filter_var($altitude_array[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
724
	    
725
726
	    if ($altitude_array[1] != "")
727
	    {                
728
		$altitude_array[0] = substr($altitude_array[0], 0, -2);
729
		$altitude_array[1] = substr($altitude_array[1], 0, -2);
730
		$additional_query .= " AND altitude BETWEEN '".$altitude_array[0]."' AND '".$altitude_array[1]."' ";
731
	    } else {
732
		$altitude_array[0] = substr($altitude_array[0], 0, -2);
733
		$additional_query .= " AND altitude <= '".$altitude_array[0]."' ";
734
	    }
735
	}
736
	
737
	if ($date_posted != "")
738
	{
739
	    $date_array = explode(",", $date_posted);
740
	    
741
	    $date_array[0] = filter_var($date_array[0],FILTER_SANITIZE_STRING);
742
	    $date_array[1] = filter_var($date_array[1],FILTER_SANITIZE_STRING);
743
	    
744
	    if ($globalTimezone != '') {
745
		date_default_timezone_set($globalTimezone);
746
		$datetime = new DateTime();
747
		$offset = $datetime->format('P');
748
	    } else $offset = '+00:00';
749
750
751
	    if ($date_array[1] != "")
752
	    {                
753
		$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
754
		$date_array[1] = date("Y-m-d H:i:s", strtotime($date_array[1]));
755
		if ($globalDBdriver == 'mysql') {
756
			$additional_query .= " AND TIMESTAMP(CONVERT_TZ(spotter_archive_output.date,'+00:00', '".$offset."')) >= '".$date_array[0]."' AND TIMESTAMP(CONVERT_TZ(spotter_archive_output.date,'+00:00', '".$offset."')) <= '".$date_array[1]."' ";
757
		} else {
758
			$additional_query .= " AND spotter_archive_output.date::timestamp AT TIME ZONE INTERVAL ".$offset." >= CAST('".$date_array[0]."' AS TIMESTAMP) AND spotter_archive_output.date::timestamp AT TIME ZONE INTERVAL ".$offset." <= CAST('".$date_array[1]."' AS TIMESTAMP) ";
759
		}
760
	    } else {
761
		$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
762
                if ($globalDBdriver == 'mysql') {
763
			$additional_query .= " AND TIMESTAMP(CONVERT_TZ(spotter_archive_output.date,'+00:00', '".$offset."')) >= '".$date_array[0]."' ";
764
		} else {
765
			$additional_query .= " AND spotter_archive_output.date::timestamp AT TIME ZONE INTERVAL ".$offset." >= CAST('".$date_array[0]."' AS TIMESTAMP) ";
766
		}
767
	    }
768
	}
769
	
770
	if ($limit != "")
771
	{
772
	    $limit_array = explode(",", $limit);
773
	    
774
	    $limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
775
	    $limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
776
	    
777
	    if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
778
	    {
779
		//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
780
		$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
781
	    }
782
	}
783
	
784
785
	if ($origLat != "" && $origLon != "" && $dist != "") {
786
		$dist = number_format($dist*0.621371,2,'.','');
787
		$query="SELECT spotter_archive_output.*, 3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - ABS(CAST(spotter_archive.latitude as double precision)))*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(ABS(CAST(spotter_archive.latitude as double precision))*pi()/180)*POWER(SIN(($origLon-CAST(spotter_archive.longitude as double precision))*pi()/180/2),2))) as distance 
788
                          FROM spotter_archive_output, spotter_archive WHERE spotter_output_archive.flightaware_id = spotter_archive.flightaware_id AND spotter_output.ident <> '' ".$additional_query."AND CAST(spotter_archive.longitude as double precision) between ($origLon-$dist/ABS(cos(radians($origLat))*69)) and ($origLon+$dist/ABS(cos(radians($origLat))*69)) and CAST(spotter_archive.latitude as double precision) between ($origLat-($dist/69)) and ($origLat+($dist/69)) 
789
                          AND (3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - ABS(CAST(spotter_archive.latitude as double precision)))*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(ABS(CAST(spotter_archive.latitude as double precision))*pi()/180)*POWER(SIN(($origLon-CAST(spotter_archive.longitude as double precision))*pi()/180/2),2)))) < $dist".$filter_query." ORDER BY distance";
790
	} else {
791
		if ($sort != "")
792
		{
793
			$search_orderby_array = $Spotter->getOrderBy();
794
			$orderby_query = $search_orderby_array[$sort]['sql'];
795
		} else {
796
			$orderby_query = " ORDER BY spotter_archive_output.date DESC";
797
		}
798
	
799
		if ($includegeodata == "true")
800
		{
801
			$additional_query .= " AND (spotter_archive_output.waypoints <> '')";
802
		}
803
804
		$query  = "SELECT spotter_archive_output.* FROM spotter_archive_output 
805
		    WHERE spotter_archive_output.ident <> '' 
806
		    ".$additional_query."
807
		    ".$filter_query.$orderby_query;
808
	}
809
	$spotter_array = $Spotter->getDataFromDB($query, $query_values,$limit_query);
810
811
	return $spotter_array;
812
    }
813
814
    public function deleteSpotterArchiveData()
815
    {
816
		global $globalArchiveKeepMonths, $globalDBdriver;
817
                date_default_timezone_set('UTC');
818
                if ($globalDBdriver == 'mysql') {
819
			$query = 'DELETE FROM spotter_archive_output WHERE spotter_archive_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$globalArchiveKeepMonths.' MONTH)';
820
		} else {
821
			$query = "DELETE FROM spotter_archive_output WHERE spotter_archive_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$globalArchiveKeepMonths." MONTH'";
822
		}
823
                try {
824
                        $sth = $this->db->prepare($query);
825
                        $sth->execute();
826
                } catch(PDOException $e) {
827
                        return "error";
828
                }
829
	}
830
831
    /**
832
    * Gets all the spotter information based on the callsign
833
    *
834
    * @return Array the spotter information
835
    *
836
    */
837
    public function getSpotterDataByIdent($ident = '', $limit = '', $sort = '')
838
    {
839
	$global_query = "SELECT spotter_archive_output.* FROM spotter_archive_output";
840
	
841
	date_default_timezone_set('UTC');
842
	$Spotter = new Spotter($this->db);
843
	
844
	$query_values = array();
845
	$limit_query = '';
846
	$additional_query = '';
847
	
848
	if ($ident != "")
849
	{
850
	    if (!is_string($ident))
851
	    {
852
		return false;
853
	    } else {
854
		$additional_query = " AND (spotter_archive_output.ident = :ident)";
855
		$query_values = array(':ident' => $ident);
856
	    }
857
	}
858
	
859
	if ($limit != "")
860
	{
861
	    $limit_array = explode(",", $limit);
862
	    
863
	    $limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
864
	    $limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
865
	    
866
	    if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
867
	    {
868
		//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
869
		$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
870
	    }
871
	}
872
873
	if ($sort != "")
874
	{
875
	    $search_orderby_array = $Spotter->getOrderBy();
876
	    $orderby_query = $search_orderby_array[$sort]['sql'];
877
	} else {
878
	    $orderby_query = " ORDER BY spotter_archive_output.date DESC";
879
	}
880
881
	$query = $global_query." WHERE spotter_archive_output.ident <> '' ".$additional_query." ".$orderby_query;
882
883
	$spotter_array = $Spotter->getDataFromDB($query, $query_values, $limit_query);
884
885
	return $spotter_array;
886
    }
887
888
    /**
889
    * Gets all number of flight over countries
890
    *
891
    * @return Array the airline country list
892
    *
893
    */
894
    public function countAllFlightOverCountries($limit = true,$olderthanmonths = 0,$sincedate = '')
895
    {
896
	global $globalDBdriver;
897
	/*
898
	$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
899
		    FROM countries c, spotter_archive s
900
		    WHERE Within(GeomFromText(CONCAT('POINT(',s.longitude,' ',s.latitude,')')), ogc_geom) ";
901
	*/
902
	$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb
903
		    FROM countries c, spotter_archive s
904
		    WHERE c.iso2 = s.over_country ";
905
                if ($olderthanmonths > 0) {
906
            		if ($globalDBdriver == 'mysql') {
907
				$query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
908
			} else {
909
				$query .= "AND date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
910
			}
911
		}
912
                if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
913
	$query .= "GROUP BY c.name, c.iso3, c.iso2 ORDER BY nb DESC";
914
	if ($limit) $query .= " LIMIT 0,10";
915
      
916
	
917
	$sth = $this->db->prepare($query);
918
	$sth->execute();
919
 
920
	$flight_array = array();
921
	$temp_array = array();
922
        
923
	while($row = $sth->fetch(PDO::FETCH_ASSOC))
924
	{
925
	    $temp_array['flight_count'] = $row['nb'];
926
	    $temp_array['flight_country'] = $row['name'];
927
	    $temp_array['flight_country_iso3'] = $row['iso3'];
928
	    $temp_array['flight_country_iso2'] = $row['iso2'];
929
	    $flight_array[] = $temp_array;
930
	}
931
	return $flight_array;
932
    }
933
934
}
935
?>