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