Completed
Push — master ( 5ac10e...30ddc4 )
by Yannick
07:31
created

getLastAltitudeArchiveSpotterDataByIdent()   A

Complexity

Conditions 2
Paths 3

Size

Total Lines 20
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 12
nc 3
nop 1
dl 0
loc 20
rs 9.4285
c 0
b 0
f 0
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['ident']) && !empty($filter['ident'])) {
23
			$filter_query_where = " WHERE ident =  '".$filter['ident']."'";
0 ignored issues
show
Unused Code introduced by
$filter_query_where is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
24
		}
25
		if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
26
			$filter_query = " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
27
		}
28
		if (isset($filter['pilots_id']) && !empty($filter['pilots_id'])) {
29
			$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";
30
		}
31
		return $filter_query;
32
	}
33
34
	// Spotter_archive
35
	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 = '') {
36
		require_once(dirname(__FILE__).'/class.Spotter.php');
37
		if ($over_country == '') {
38
			$Spotter = new Spotter($this->db);
39
			$data_country = $Spotter->getCountryFromLatitudeLongitude($latitude,$longitude);
40
			if (!empty($data_country)) $country = $data_country['iso2'];
41
			else $country = '';
42
		} else $country = $over_country;
43
		if ($airline_type === NULL) $airline_type ='';
44
	
45
		//if ($country == '') echo "\n".'************ UNKNOW COUNTRY ****************'."\n";
46
		//else echo "\n".'*/*/*/*/*/*/*/ Country : '.$country.' */*/*/*/*/*/*/*/*/'."\n";
47
48
		// Route is not added in spotter_archive
49
		$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)
50
		        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)";
51
52
		$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);
53
		try {
54
			$sth = $this->db->prepare($query);
55
			$sth->execute($query_values);
56
		} catch(PDOException $e) {
57
			return "error : ".$e->getMessage();
58
		}
59
		return "success";
60
	}
61
62
63
        /**
64
        * Gets all the spotter information based on a particular callsign
65
        *
66
        * @return Array the spotter information
67
        *
68
        */
69
        public function getLastArchiveSpotterDataByIdent($ident)
70
        {
71
		$Spotter = new Spotter($this->db);
72
                date_default_timezone_set('UTC');
73
74
                $ident = filter_var($ident, FILTER_SANITIZE_STRING);
75
                //$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";
76
                $query  = "SELECT spotter_archive.* FROM spotter_archive WHERE ident = :ident ORDER BY date DESC LIMIT 1";
77
78
                $spotter_array = $Spotter->getDataFromDB($query,array(':ident' => $ident));
79
80
                return $spotter_array;
81
        }
82
83
84
        /**
85
        * Gets last the spotter information based on a particular id
86
        *
87
        * @return Array the spotter information
88
        *
89
        */
90
        public function getLastArchiveSpotterDataById($id)
91
        {
92
    		$Spotter = new Spotter($this->db);
93
                date_default_timezone_set('UTC');
94
                $id = filter_var($id, FILTER_SANITIZE_STRING);
95
                //$query  = SpotterArchive->$global_query." WHERE spotter_archive.flightaware_id = :id";
96
                //$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";
97
                $query  = "SELECT * FROM spotter_archive WHERE flightaware_id = :id ORDER BY date DESC LIMIT 1";
98
99
//              $spotter_array = Spotter->getDataFromDB($query,array(':id' => $id));
100
                  /*
101
                try {
102
                        $Connection = new Connection();
103
                        $sth = Connection->$db->prepare($query);
104
                        $sth->execute(array(':id' => $id));
105
                } catch(PDOException $e) {
106
                        return "error";
107
                }
108
                $spotter_array = $sth->fetchAll(PDO->FETCH_ASSOC);
109
                */
110
                $spotter_array = $Spotter->getDataFromDB($query,array(':id' => $id));
111
112
                return $spotter_array;
113
        }
114
115
        /**
116
        * Gets all the spotter information based on a particular id
117
        *
118
        * @return Array the spotter information
119
        *
120
        */
121
        public function getAllArchiveSpotterDataById($id)
122
        {
123
                date_default_timezone_set('UTC');
124
                $id = filter_var($id, FILTER_SANITIZE_STRING);
125
                $query  = $this->global_query." WHERE spotter_archive.flightaware_id = :id";
126
127
//              $spotter_array = Spotter->getDataFromDB($query,array(':id' => $id));
128
129
                try {
130
                        $sth = $this->db->prepare($query);
131
                        $sth->execute(array(':id' => $id));
132
                } catch(PDOException $e) {
133
                        echo $e->getMessage();
134
                        die;
135
                }
136
                $spotter_array = $sth->fetchAll(PDO::FETCH_ASSOC);
137
138
                return $spotter_array;
139
        }
140
141
        /**
142
        * Gets coordinate & time spotter information based on a particular id
143
        *
144
        * @return Array the spotter information
145
        *
146
        */
147
        public function getCoordArchiveSpotterDataById($id)
148
        {
149
                date_default_timezone_set('UTC');
150
                $id = filter_var($id, FILTER_SANITIZE_STRING);
151
                $query  = "SELECT spotter_archive.latitude, spotter_archive.longitude, spotter_archive.date FROM spotter_archive WHERE spotter_archive.flightaware_id = :id";
152
153
//              $spotter_array = Spotter->getDataFromDB($query,array(':id' => $id));
154
155
                try {
156
                        $sth = $this->db->prepare($query);
157
                        $sth->execute(array(':id' => $id));
158
                } catch(PDOException $e) {
159
                        echo $e->getMessage();
160
                        die;
161
                }
162
                $spotter_array = $sth->fetchAll(PDO::FETCH_ASSOC);
163
164
                return $spotter_array;
165
        }
166
167
168
        /**
169
        * Gets altitude information based on a particular callsign
170
        *
171
        * @return Array the spotter information
172
        *
173
        */
174
        public function getAltitudeArchiveSpotterDataByIdent($ident)
175
        {
176
177
                date_default_timezone_set('UTC');
178
179
                $ident = filter_var($ident, FILTER_SANITIZE_STRING);
180
                $query  = "SELECT spotter_archive.altitude, spotter_archive.date FROM spotter_archive WHERE spotter_archive.ident = :ident";
181
182
                try {
183
                        $sth = $this->db->prepare($query);
184
                        $sth->execute(array(':ident' => $ident));
185
                } catch(PDOException $e) {
186
                        echo $e->getMessage();
187
                        die;
188
                }
189
                $spotter_array = $sth->fetchAll(PDO::FETCH_ASSOC);
190
191
                return $spotter_array;
192
        }
193
194
        /**
195
        * Gets altitude information based on a particular id
196
        *
197
        * @return Array the spotter information
198
        *
199
        */
200
        public function getAltitudeArchiveSpotterDataById($id)
201
        {
202
203
                date_default_timezone_set('UTC');
204
205
                $id = filter_var($id, FILTER_SANITIZE_STRING);
206
                $query  = "SELECT spotter_archive.altitude, spotter_archive.date FROM spotter_archive WHERE spotter_archive.flightaware_id = :id ORDER BY date";
207
208
                try {
209
                        $sth = $this->db->prepare($query);
210
                        $sth->execute(array(':id' => $id));
211
                } catch(PDOException $e) {
212
                        echo $e->getMessage();
213
                        die;
214
                }
215
                $spotter_array = $sth->fetchAll(PDO::FETCH_ASSOC);
216
217
                return $spotter_array;
218
        }
219
220
        /**
221
        * Gets altitude & speed information based on a particular id
222
        *
223
        * @return Array the spotter information
224
        *
225
        */
226
        public function getAltitudeSpeedArchiveSpotterDataById($id)
227
        {
228
229
                date_default_timezone_set('UTC');
230
231
                $id = filter_var($id, FILTER_SANITIZE_STRING);
232
                $query  = "SELECT spotter_archive.altitude, spotter_archive.ground_speed, spotter_archive.date FROM spotter_archive WHERE spotter_archive.flightaware_id = :id ORDER BY date";
233
234
                try {
235
                        $sth = $this->db->prepare($query);
236
                        $sth->execute(array(':id' => $id));
237
                } catch(PDOException $e) {
238
                        echo $e->getMessage();
239
                        die;
240
                }
241
                $spotter_array = $sth->fetchAll(PDO::FETCH_ASSOC);
242
243
                return $spotter_array;
244
        }
245
246
247
        /**
248
        * Gets altitude information based on a particular callsign
249
        *
250
        * @return Array the spotter information
251
        *
252
        */
253
        public function getLastAltitudeArchiveSpotterDataByIdent($ident)
254
        {
255
256
                date_default_timezone_set('UTC');
257
258
                $ident = filter_var($ident, FILTER_SANITIZE_STRING);
259
                $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";
260
//                $query  = "SELECT spotter_archive.altitude, spotter_archive.date FROM spotter_archive WHERE spotter_archive.ident = :ident";
261
262
                try {
263
                        $sth = $this->db->prepare($query);
264
                        $sth->execute(array(':ident' => $ident));
265
                } catch(PDOException $e) {
266
                        echo $e->getMessage();
267
                        die;
268
                }
269
                $spotter_array = $sth->fetchAll(PDO::FETCH_ASSOC);
270
271
                return $spotter_array;
272
        }
273
274
275
276
       /**
277
        * Gets all the archive spotter information
278
        *
279
        * @return Array the spotter information
280
        *
281
        */
282
        public function getSpotterArchiveData($ident,$flightaware_id,$date)
283
        {
284
    		$Spotter = new Spotter($this->db);
285
                $ident = filter_var($ident, FILTER_SANITIZE_STRING);
286
                $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";
287
288
                $spotter_array = $Spotter->getDataFromDB($query,array(':ident' => $ident,':flightaware_id' => $flightaware_id,':date' => $date.'%'));
289
290
                return $spotter_array;
291
        }
292
        
293
        public function deleteSpotterArchiveTrackData()
294
        {
295
		global $globalArchiveKeepTrackMonths;
296
                date_default_timezone_set('UTC');
297
		$query = 'DELETE FROM spotter_archive WHERE spotter_archive.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$globalArchiveKeepTrackMonths.' MONTH)';
298
                try {
299
                        $sth = $this->db->prepare($query);
300
                        $sth->execute();
301
                } catch(PDOException $e) {
302
                        echo $e->getMessage();
303
                        die;
304
                }
305
	}
306
307
	/**
308
        * Gets Minimal Live Spotter data
309
        *
310
        * @return Array the spotter information
311
        *
312
        */
313
        public function getMinLiveSpotterData($begindate,$enddate,$filter = array())
314
        {
315
                global $globalDBdriver, $globalLiveInterval;
316
                date_default_timezone_set('UTC');
317
318
                $filter_query = '';
319
                if (isset($filter['source']) && !empty($filter['source'])) {
320
                        $filter_query .= " AND format_source IN ('".implode("','",$filter['source'])."') ";
321
                }
322
                // Use spotter_output also ?
323
                if (isset($filter['airlines']) && !empty($filter['airlines'])) {
324
                        $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 ";
325
                }
326
                if (isset($filter['airlinestype']) && !empty($filter['airlinestype'])) {
327
                        $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 ";
328
                }
329
                if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
330
                        $filter_query = " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
331
                }
332
333
                //if (!isset($globalLiveInterval)) $globalLiveInterval = '200';
334
                if ($globalDBdriver == 'mysql') {
335
                        /*
336
                        $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 
337
                    		    FROM spotter_archive 
338
                    		    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';
339
			*/
340
/*
341
			$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 
342
				    FROM spotter_archive 
343
				    INNER JOIN (SELECT l.flightaware_id, max(l.date) as maxdate 
344
						FROM spotter_archive l 
345
						WHERE (l.date BETWEEN DATE_SUB('."'".$begindate."'".',INTERVAL '.$globalLiveInterval.' SECOND) AND '."'".$begindate."'".') 
346
						GROUP BY l.flightaware_id) s on spotter_archive.flightaware_id = s.flightaware_id 
347
				    AND spotter_archive.date = s.maxdate '.$filter_query.'LEFT JOIN (SELECT aircraft_shadow,icao FROM aircraft) a ON spotter_archive.aircraft_icao = a.icao';
348
*/
349
			$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 
350
				    FROM spotter_archive 
351
				    INNER JOIN (SELECT l.flightaware_id, max(l.date) as maxdate 
352
						FROM spotter_archive l 
353
						WHERE (l.date BETWEEN '."'".$begindate."'".' AND '."'".$begindate."'".') 
354
						GROUP BY l.flightaware_id) s on spotter_archive.flightaware_id = s.flightaware_id 
355
				    AND spotter_archive.date = s.maxdate '.$filter_query.'LEFT JOIN (SELECT aircraft_shadow,icao FROM aircraft) a ON spotter_archive.aircraft_icao = a.icao';
356
                } else {
357
                        //$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';
358
                        $query  = 'SELECT spotter_archive.date,spotter_archive.flightaware_id, spotter_archive.ident, 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,a.engine_type, a.engine_count, a.wake_category 
359
                        	    FROM spotter_archive 
360
                        	    INNER JOIN (SELECT * FROM aircraft) a on spotter_archive.aircraft_icao = a.icao
361
                        	    WHERE spotter_archive.date >= '."'".$begindate."'".' AND spotter_archive.date <= '."'".$enddate."'".'
362
                        	    '.$filter_query.' ORDER BY flightaware_id LIMIT 3500 OFFSET 0';
363
                }
364
                //echo $query;
365
                try {
366
                        $sth = $this->db->prepare($query);
367
                        $sth->execute();
368
                } catch(PDOException $e) {
369
                        echo $e->getMessage();
370
                        die;
371
                }
372
                $spotter_array = $sth->fetchAll(PDO::FETCH_ASSOC);
373
374
                return $spotter_array;
375
        }
376
377
	/**
378
        * Gets Minimal Live Spotter data
379
        *
380
        * @return Array the spotter information
381
        *
382
        */
383
        public function getMinLiveSpotterDataPlayback($begindate,$enddate,$filter = array())
384
        {
385
                global $globalDBdriver, $globalLiveInterval;
386
                date_default_timezone_set('UTC');
387
388
                $filter_query = '';
389
                if (isset($filter['source']) && !empty($filter['source'])) {
390
                        $filter_query .= " AND format_source IN ('".implode("','",$filter['source'])."') ";
391
                }
392
                // Should use spotter_output also ?
393
                if (isset($filter['airlines']) && !empty($filter['airlines'])) {
394
                        $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 ";
395
                }
396
                if (isset($filter['airlinestype']) && !empty($filter['airlinestype'])) {
397
                        $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 ";
398
                }
399
                if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
400
                        $filter_query = " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
401
                }
402
403
                //if (!isset($globalLiveInterval)) $globalLiveInterval = '200';
404
                if ($globalDBdriver == 'mysql') {
405
                        /*
406
                        $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 
407
                    		    FROM spotter_archive 
408
                    		    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';
409
			*/
410
			$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 
411
				    FROM spotter_archive_output 
412
				    LEFT JOIN (SELECT aircraft_shadow,icao FROM aircraft) a ON spotter_archive_output.aircraft_icao = a.icao 
413
				    WHERE (spotter_archive_output.date BETWEEN '."'".$begindate."'".' AND '."'".$enddate."'".') 
414
                        	    '.$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';
415
416
                } else {
417
                        //$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';
418
                       /*
419
                        $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
420
                        	    FROM spotter_archive_output 
421
                        	    INNER JOIN (SELECT * FROM aircraft) a on spotter_archive_output.aircraft_icao = a.icao
422
                        	    WHERE spotter_archive_output.date >= '."'".$begindate."'".' AND spotter_archive_output.date <= '."'".$enddate."'".'
423
                        	    '.$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';
424
                        */
425
                        $query  = 'SELECT DISTINCT spotter_archive_output.flightaware_id, spotter_archive_output.ident, 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
426
                        	    FROM spotter_archive_output 
427
                        	    INNER JOIN (SELECT * FROM aircraft) a on spotter_archive_output.aircraft_icao = a.icao
428
                        	    WHERE spotter_archive_output.date >= '."'".$begindate."'".' AND spotter_archive_output.date <= '."'".$enddate."'".'
429
                        	    '.$filter_query.' LIMIT 200 OFFSET 0';
430
//                        	    .' 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';
431
                        	    
432
                }
433
                //echo $query;
434
                try {
435
                        $sth = $this->db->prepare($query);
436
                        $sth->execute();
437
                } catch(PDOException $e) {
438
                        echo $e->getMessage();
439
                        die;
440
                }
441
                $spotter_array = $sth->fetchAll(PDO::FETCH_ASSOC);
442
443
                return $spotter_array;
444
        }
445
446
	 /**
447
        * Gets count Live Spotter data
448
        *
449
        * @return Array the spotter information
450
        *
451
        */
452
        public function getLiveSpotterCount($begindate,$enddate,$filter = array())
453
        {
454
                global $globalDBdriver, $globalLiveInterval;
455
                date_default_timezone_set('UTC');
456
457
                $filter_query = '';
458
                if (isset($filter['source']) && !empty($filter['source'])) {
459
                        $filter_query .= " AND format_source IN ('".implode("','",$filter['source'])."') ";
460
                }
461
                if (isset($filter['airlines']) && !empty($filter['airlines'])) {
462
                        $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 ";
463
                }
464
                if (isset($filter['airlinestype']) && !empty($filter['airlinestype'])) {
465
                        $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 ";
466
                }
467
                if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
468
                        $filter_query = " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
469
                }
470
471
                //if (!isset($globalLiveInterval)) $globalLiveInterval = '200';
472
                if ($globalDBdriver == 'mysql') {
473
			$query = 'SELECT COUNT(DISTINCT flightaware_id) as nb 
474
			FROM spotter_archive l 
475
			WHERE (l.date BETWEEN DATE_SUB('."'".$begindate."'".',INTERVAL '.$globalLiveInterval.' SECOND) AND '."'".$begindate."'".')'.$filter_query;
476
                } else {
477
			$query = 'SELECT COUNT(DISTINCT flightaware_id) as nb FROM spotter_archive l WHERE (l.date BETWEEN '."'".$begindate."' - INTERVAL '".$globalLiveInterval." SECONDS' AND "."'".$enddate."'".')'.$filter_query;
478
                }
479
                //echo $query;
480
                try {
481
                        $sth = $this->db->prepare($query);
482
                        $sth->execute();
483
                } catch(PDOException $e) {
484
                        echo $e->getMessage();
485
                        die;
486
                }
487
		$result = $sth->fetch(PDO::FETCH_ASSOC);
488
		$sth->closeCursor();
489
                return $result['nb'];
490
491
        }
492
493
494
495
	// Spotter_Archive_output
496
	
497
    /**
498
    * Gets all the spotter information
499
    *
500
    * @return Array the spotter information
501
    *
502
    */
503
    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())
504
    {
505
	global $globalTimezone, $globalDBdriver;
506
	require_once(dirname(__FILE__).'/class.Translation.php');
507
	$Translation = new Translation();
508
	$Spotter = new Spotter($this->db);
509
510
	date_default_timezone_set('UTC');
511
	
512
	$query_values = array();
513
	$additional_query = '';
514
	$limit_query = '';
515
	$filter_query = $this->getFilter($filter);
516
	if ($q != "")
517
	{
518
	    if (!is_string($q))
519
	    {
520
		return false;
521
	    } else {
522
	        
523
		$q_array = explode(" ", $q);
524
		
525
		foreach ($q_array as $q_item){
526
		    $additional_query .= " AND (";
527
		    $additional_query .= "(spotter_archive_output.spotter_id like '%".$q_item."%') OR ";
528
		    $additional_query .= "(spotter_archive_output.aircraft_icao like '%".$q_item."%') OR ";
529
		    $additional_query .= "(spotter_archive_output.aircraft_name like '%".$q_item."%') OR ";
530
		    $additional_query .= "(spotter_archive_output.aircraft_manufacturer like '%".$q_item."%') OR ";
531
		    $additional_query .= "(spotter_archive_output.airline_icao like '%".$q_item."%') OR ";
532
		    $additional_query .= "(spotter_archive_output.airline_name like '%".$q_item."%') OR ";
533
		    $additional_query .= "(spotter_archive_output.airline_country like '%".$q_item."%') OR ";
534
		    $additional_query .= "(spotter_archive_output.departure_airport_icao like '%".$q_item."%') OR ";
535
		    $additional_query .= "(spotter_archive_output.departure_airport_name like '%".$q_item."%') OR ";
536
		    $additional_query .= "(spotter_archive_output.departure_airport_city like '%".$q_item."%') OR ";
537
		    $additional_query .= "(spotter_archive_output.departure_airport_country like '%".$q_item."%') OR ";
538
		    $additional_query .= "(spotter_archive_output.arrival_airport_icao like '%".$q_item."%') OR ";
539
		    $additional_query .= "(spotter_archive_output.arrival_airport_name like '%".$q_item."%') OR ";
540
		    $additional_query .= "(spotter_archive_output.arrival_airport_city like '%".$q_item."%') OR ";
541
		    $additional_query .= "(spotter_archive_output.arrival_airport_country like '%".$q_item."%') OR ";
542
		    $additional_query .= "(spotter_archive_output.registration like '%".$q_item."%') OR ";
543
		    $additional_query .= "(spotter_archive_output.owner_name like '%".$q_item."%') OR ";
544
		    $additional_query .= "(spotter_archive_output.pilot_id like '%".$q_item."%') OR ";
545
		    $additional_query .= "(spotter_archive_output.pilot_name like '%".$q_item."%') OR ";
546
		    $additional_query .= "(spotter_archive_output.ident like '%".$q_item."%') OR ";
547
		    $translate = $Translation->ident2icao($q_item);
548
		    if ($translate != $q_item) $additional_query .= "(spotter_archive_output.ident like '%".$translate."%') OR ";
549
		    $additional_query .= "(spotter_archive_output.highlight like '%".$q_item."%')";
550
		    $additional_query .= ")";
551
		}
552
	    }
553
	}
554
	
555
	if ($registration != "")
556
	{
557
	    $registration = filter_var($registration,FILTER_SANITIZE_STRING);
558
	    if (!is_string($registration))
559
	    {
560
		return false;
561
	    } else {
562
		$additional_query .= " AND (spotter_archive_output.registration = '".$registration."')";
563
	    }
564
	}
565
	
566
	if ($aircraft_icao != "")
567
	{
568
	    $aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
569
	    if (!is_string($aircraft_icao))
570
	    {
571
		return false;
572
	    } else {
573
		$additional_query .= " AND (spotter_archive_output.aircraft_icao = '".$aircraft_icao."')";
574
	    }
575
	}
576
	
577
	if ($aircraft_manufacturer != "")
578
	{
579
	    $aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
580
	    if (!is_string($aircraft_manufacturer))
581
	    {
582
		return false;
583
	    } else {
584
		$additional_query .= " AND (spotter_archive_output.aircraft_manufacturer = '".$aircraft_manufacturer."')";
585
	    }
586
	}
587
	
588
	if ($highlights == "true")
589
	{
590
	    if (!is_string($highlights))
591
	    {
592
		return false;
593
	    } else {
594
		$additional_query .= " AND (spotter_archive_output.highlight <> '')";
595
	    }
596
	}
597
	
598
	if ($airline_icao != "")
599
	{
600
	    $airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
601
	    if (!is_string($airline_icao))
602
	    {
603
		return false;
604
	    } else {
605
		$additional_query .= " AND (spotter_archive_output.airline_icao = '".$airline_icao."')";
606
	    }
607
	}
608
	
609
	if ($airline_country != "")
610
	{
611
	    $airline_country = filter_var($airline_country,FILTER_SANITIZE_STRING);
612
	    if (!is_string($airline_country))
613
	    {
614
		return false;
615
	    } else {
616
		$additional_query .= " AND (spotter_archive_output.airline_country = '".$airline_country."')";
617
	    }
618
	}
619
	
620
	if ($airline_type != "")
621
	{
622
	    $airline_type = filter_var($airline_type,FILTER_SANITIZE_STRING);
623
	    if (!is_string($airline_type))
624
	    {
625
		return false;
626
	    } else {
627
		if ($airline_type == "passenger")
628
		{
629
		    $additional_query .= " AND (spotter_archive_output.airline_type = 'passenger')";
630
		}
631
		if ($airline_type == "cargo")
632
		{
633
		    $additional_query .= " AND (spotter_archive_output.airline_type = 'cargo')";
634
		}
635
		if ($airline_type == "military")
636
		{
637
		    $additional_query .= " AND (spotter_archive_output.airline_type = 'military')";
638
		}
639
	    }
640
	}
641
	
642
	if ($airport != "")
643
	{
644
	    $airport = filter_var($airport,FILTER_SANITIZE_STRING);
645
	    if (!is_string($airport))
646
	    {
647
		return false;
648
	    } else {
649
		$additional_query .= " AND ((spotter_archive_output.departure_airport_icao = '".$airport."') OR (spotter_archive_output.arrival_airport_icao = '".$airport."'))";
650
	    }
651
	}
652
	
653
	if ($airport_country != "")
654
	{
655
	    $airport_country = filter_var($airport_country,FILTER_SANITIZE_STRING);
656
	    if (!is_string($airport_country))
657
	    {
658
		return false;
659
	    } else {
660
		$additional_query .= " AND ((spotter_archive_output.departure_airport_country = '".$airport_country."') OR (spotter_archive_output.arrival_airport_country = '".$airport_country."'))";
661
	    }
662
	}
663
    
664
	if ($callsign != "")
665
	{
666
	    $callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
667
	    if (!is_string($callsign))
668
	    {
669
		return false;
670
	    } else {
671
		$translate = $Translation->ident2icao($callsign);
672
		if ($translate != $callsign) {
673
			$additional_query .= " AND (spotter_archive_output.ident = :callsign OR spotter_archive_output.ident = :translate)";
674
			$query_values = array_merge($query_values,array(':callsign' => $callsign,':translate' => $translate));
675
		} else {
676
			$additional_query .= " AND (spotter_archive_output.ident = '".$callsign."')";
677
		}
678
	    }
679
	}
680
681
	if ($owner != "")
682
	{
683
	    $owner = filter_var($owner,FILTER_SANITIZE_STRING);
684
	    if (!is_string($owner))
685
	    {
686
		return false;
687
	    } else {
688
		$additional_query .= " AND (spotter_archive_output.owner_name = '".$owner."')";
689
	    }
690
	}
691
692
	if ($pilot_name != "")
693
	{
694
	    $pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
695
	    if (!is_string($pilot_name))
696
	    {
697
		return false;
698
	    } else {
699
		$additional_query .= " AND (spotter_archive_output.pilot_name = '".$pilot_name."')";
700
	    }
701
	}
702
	
703
	if ($pilot_id != "")
704
	{
705
	    $pilot_id = filter_var($pilot_id,FILTER_SANITIZE_NUMBER_INT);
706
	    if (!is_string($pilot_id))
707
	    {
708
		return false;
709
	    } else {
710
		$additional_query .= " AND (spotter_archive_output.pilot_id = '".$pilot_id."')";
711
	    }
712
	}
713
	
714
	if ($departure_airport_route != "")
715
	{
716
	    $departure_airport_route = filter_var($departure_airport_route,FILTER_SANITIZE_STRING);
717
	    if (!is_string($departure_airport_route))
718
	    {
719
		return false;
720
	    } else {
721
		$additional_query .= " AND (spotter_archive_output.departure_airport_icao = '".$departure_airport_route."')";
722
	    }
723
	}
724
	
725
	if ($arrival_airport_route != "")
726
	{
727
	    $arrival_airport_route = filter_var($arrival_airport_route,FILTER_SANITIZE_STRING);
728
	    if (!is_string($arrival_airport_route))
729
	    {
730
		return false;
731
	    } else {
732
		$additional_query .= " AND (spotter_archive_output.arrival_airport_icao = '".$arrival_airport_route."')";
733
	    }
734
	}
735
	
736
	if ($altitude != "")
737
	{
738
	    $altitude_array = explode(",", $altitude);
739
	    
740
	    $altitude_array[0] = filter_var($altitude_array[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
741
	    $altitude_array[1] = filter_var($altitude_array[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
742
	    
743
744
	    if ($altitude_array[1] != "")
745
	    {                
746
		$altitude_array[0] = substr($altitude_array[0], 0, -2);
747
		$altitude_array[1] = substr($altitude_array[1], 0, -2);
748
		$additional_query .= " AND altitude BETWEEN '".$altitude_array[0]."' AND '".$altitude_array[1]."' ";
749
	    } else {
750
		$altitude_array[0] = substr($altitude_array[0], 0, -2);
751
		$additional_query .= " AND altitude <= '".$altitude_array[0]."' ";
752
	    }
753
	}
754
	
755
	if ($date_posted != "")
756
	{
757
	    $date_array = explode(",", $date_posted);
758
	    
759
	    $date_array[0] = filter_var($date_array[0],FILTER_SANITIZE_STRING);
760
	    $date_array[1] = filter_var($date_array[1],FILTER_SANITIZE_STRING);
761
	    
762
	    if ($globalTimezone != '') {
763
		date_default_timezone_set($globalTimezone);
764
		$datetime = new DateTime();
765
		$offset = $datetime->format('P');
766
	    } else $offset = '+00:00';
767
768
769
	    if ($date_array[1] != "")
770
	    {                
771
		$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
772
		$date_array[1] = date("Y-m-d H:i:s", strtotime($date_array[1]));
773
		if ($globalDBdriver == 'mysql') {
774
			$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]."' ";
775
		} else {
776
			$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) ";
777
		}
778
	    } else {
779
		$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
780
                if ($globalDBdriver == 'mysql') {
781
			$additional_query .= " AND TIMESTAMP(CONVERT_TZ(spotter_archive_output.date,'+00:00', '".$offset."')) >= '".$date_array[0]."' ";
782
		} else {
783
			$additional_query .= " AND spotter_archive_output.date::timestamp AT TIME ZONE INTERVAL ".$offset." >= CAST('".$date_array[0]."' AS TIMESTAMP) ";
784
		}
785
	    }
786
	}
787
	
788
	if ($limit != "")
789
	{
790
	    $limit_array = explode(",", $limit);
791
	    
792
	    $limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
793
	    $limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
794
	    
795
	    if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
796
	    {
797
		//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
798
		$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
799
	    }
800
	}
801
	
802
803
	if ($origLat != "" && $origLon != "" && $dist != "") {
804
		$dist = number_format($dist*0.621371,2,'.','');
805
		$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 
806
                          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)) 
807
                          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";
808
	} else {
809
		if ($sort != "")
810
		{
811
			$search_orderby_array = $Spotter->getOrderBy();
812
			$orderby_query = $search_orderby_array[$sort]['sql'];
813
		} else {
814
			$orderby_query = " ORDER BY spotter_archive_output.date DESC";
815
		}
816
	
817
		if ($includegeodata == "true")
818
		{
819
			$additional_query .= " AND (spotter_archive_output.waypoints <> '')";
820
		}
821
822
		$query  = "SELECT spotter_archive_output.* FROM spotter_archive_output 
823
		    WHERE spotter_archive_output.ident <> '' 
824
		    ".$additional_query."
825
		    ".$filter_query.$orderby_query;
826
	}
827
	$spotter_array = $Spotter->getDataFromDB($query, $query_values,$limit_query);
828
829
	return $spotter_array;
830
    }
831
832
    public function deleteSpotterArchiveData()
833
    {
834
		global $globalArchiveKeepMonths, $globalDBdriver;
835
                date_default_timezone_set('UTC');
836
                if ($globalDBdriver == 'mysql') {
837
			$query = 'DELETE FROM spotter_archive_output WHERE spotter_archive_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$globalArchiveKeepMonths.' MONTH)';
838
		} else {
839
			$query = "DELETE FROM spotter_archive_output WHERE spotter_archive_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$globalArchiveKeepMonths." MONTH'";
840
		}
841
                try {
842
                        $sth = $this->db->prepare($query);
843
                        $sth->execute();
844
                } catch(PDOException $e) {
845
                        return "error";
846
                }
847
	}
848
849
    /**
850
    * Gets all the spotter information based on the callsign
851
    *
852
    * @return Array the spotter information
853
    *
854
    */
855
    public function getSpotterDataByIdent($ident = '', $limit = '', $sort = '')
856
    {
857
	$global_query = "SELECT spotter_archive_output.* FROM spotter_archive_output";
858
	
859
	date_default_timezone_set('UTC');
860
	$Spotter = new Spotter($this->db);
861
	
862
	$query_values = array();
863
	$limit_query = '';
864
	$additional_query = '';
865
	
866
	if ($ident != "")
867
	{
868
	    if (!is_string($ident))
869
	    {
870
		return false;
871
	    } else {
872
		$additional_query = " AND (spotter_archive_output.ident = :ident)";
873
		$query_values = array(':ident' => $ident);
874
	    }
875
	}
876
	
877
	if ($limit != "")
878
	{
879
	    $limit_array = explode(",", $limit);
880
	    
881
	    $limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
882
	    $limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
883
	    
884
	    if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
885
	    {
886
		//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
887
		$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
888
	    }
889
	}
890
891
	if ($sort != "")
892
	{
893
	    $search_orderby_array = $Spotter->getOrderBy();
894
	    $orderby_query = $search_orderby_array[$sort]['sql'];
895
	} else {
896
	    $orderby_query = " ORDER BY spotter_archive_output.date DESC";
897
	}
898
899
	$query = $global_query." WHERE spotter_archive_output.ident <> '' ".$additional_query." ".$orderby_query;
900
901
	$spotter_array = $Spotter->getDataFromDB($query, $query_values, $limit_query);
902
903
	return $spotter_array;
904
    }
905
906
    /**
907
    * Gets all number of flight over countries
908
    *
909
    * @return Array the airline country list
910
    *
911
    */
912
    public function countAllFlightOverCountries($limit = true,$olderthanmonths = 0,$sincedate = '')
913
    {
914
	global $globalDBdriver;
915
	/*
916
	$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
917
		    FROM countries c, spotter_archive s
918
		    WHERE Within(GeomFromText(CONCAT('POINT(',s.longitude,' ',s.latitude,')')), ogc_geom) ";
919
	*/
920
	$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb
921
		    FROM countries c, spotter_archive s
922
		    WHERE c.iso2 = s.over_country ";
923
                if ($olderthanmonths > 0) {
924
            		if ($globalDBdriver == 'mysql') {
925
				$query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
926
			} else {
927
				$query .= "AND date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
928
			}
929
		}
930
                if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
931
	$query .= "GROUP BY c.name, c.iso3, c.iso2 ORDER BY nb DESC";
932
	if ($limit) $query .= " LIMIT 0,10";
933
      
934
	
935
	$sth = $this->db->prepare($query);
936
	$sth->execute();
937
 
938
	$flight_array = array();
939
	$temp_array = array();
940
        
941
	while($row = $sth->fetch(PDO::FETCH_ASSOC))
942
	{
943
	    $temp_array['flight_count'] = $row['nb'];
944
	    $temp_array['flight_country'] = $row['name'];
945
	    $temp_array['flight_country_iso3'] = $row['iso3'];
946
	    $temp_array['flight_country_iso2'] = $row['iso2'];
947
	    $flight_array[] = $temp_array;
948
	}
949
	return $flight_array;
950
    }
951
952
    /**
953
    * Gets last spotter information based on a particular callsign
954
    *
955
    * @return Array the spotter information
956
    *
957
    */
958
    public function getDateArchiveSpotterDataById($id,$date)
959
    {
960
	$Spotter = new Spotter($this->db);
961
	date_default_timezone_set('UTC');
962
	$id = filter_var($id, FILTER_SANITIZE_STRING);
963
	$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 AND l.date <= :date GROUP BY l.flightaware_id) s on spotter_archive.flightaware_id = s.flightaware_id AND spotter_archive.date = s.maxdate ORDER BY spotter_archive.date DESC';
964
	$date = date('c',$date);
965
	$spotter_array = $Spotter->getDataFromDB($query,array(':id' => $id,':date' => $date));
966
	return $spotter_array;
967
    }
968
969
    /**
970
    * Gets all the spotter information based on a particular callsign
971
    *
972
    * @return Array the spotter information
973
    *
974
    */
975
    public function getDateArchiveSpotterDataByIdent($ident,$date)
976
    {
977
	$Spotter = new Spotter($this->db);
978
	date_default_timezone_set('UTC');
979
	$ident = filter_var($ident, FILTER_SANITIZE_STRING);
980
	$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 AND l.date <= :date GROUP BY l.flightaware_id) s on spotter_archive.flightaware_id = s.flightaware_id AND spotter_archive.date = s.maxdate ORDER BY spotter_archive.date DESC';
981
	$date = date('c',$date);
982
	$spotter_array = $Spotter->getDataFromDB($query,array(':ident' => $ident,':date' => $date));
983
	return $spotter_array;
984
    }
985
986
987
}
988
?>