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

SpotterArchive::getLiveSpotterCount()   C

Complexity

Conditions 11
Paths 96

Size

Total Lines 39
Code Lines 25

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 11
eloc 25
nc 96
nop 3
dl 0
loc 39
rs 5.2653
c 0
b 0
f 0

How to fix   Complexity   

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:

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
?>