Completed
Push — master ( 465dcf...e879ed )
by Yannick
05:41
created

SpotterArchive::getFilter()   F

Complexity

Conditions 22
Paths 1728

Size

Total Lines 36
Code Lines 26

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 22
eloc 26
nc 1728
nop 3
dl 0
loc 36
rs 2.6652
c 0
b 0
f 0

How to fix   Complexity   

Long Method

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

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

Commonly applied refactorings include:

1
<?php
2
class SpotterArchive {
3
	public $global_query = "SELECT spotter_archive.* FROM spotter_archive";
4
	public $db;
5
6
	public function __construct($dbc = null) {
7
		$Connection = new Connection($dbc);
8
		$this->db = $Connection->db;
9
	}
10
11
    /**
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
?>