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

SpotterArchive::addSpotterArchiveData()   B

Complexity

Conditions 5
Paths 18

Size

Total Lines 26
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 17
nc 18
nop 37
dl 0
loc 26
rs 8.439
c 0
b 0
f 0

How to fix   Many Parameters   

Many Parameters

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

There are several approaches to avoid long parameter lists:

1
<?php
2
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
?>