SpotterArchive::addSpotterArchiveData()   A
last analyzed

Complexity

Conditions 5
Paths 24

Size

Total Lines 27

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
nc 24
nop 38
dl 0
loc 27
rs 9.1768
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
		if ($this->db === null) die('Error: No DB connection. (SpotterArchive)');
10
	}
11
12
    /**
13
     * Get SQL query part for filter used
14
     * @param array $filter the filter
15
     * @param bool $where
16
     * @param bool $and
17
     * @return string the SQL part
18
     */
19
	public function getFilter($filter = array(),$where = false,$and = false) {
20
		global $globalFilter, $globalStatsFilters, $globalFilterName, $globalDBdriver;
21
		$filters = array();
22
		if (is_array($globalStatsFilters) && isset($globalStatsFilters[$globalFilterName])) {
23
			if (isset($globalStatsFilters[$globalFilterName][0]['source'])) {
24
				$filters = $globalStatsFilters[$globalFilterName];
25
			} else {
26
				$filter = array_merge($filter,$globalStatsFilters[$globalFilterName]);
27
			}
28
		}
29
		if (isset($filter[0]['source'])) {
30
			$filters = array_merge($filters,$filter);
31
		}
32
		if (is_array($globalFilter)) $filter = array_merge($filter,$globalFilter);
33
		$filter_query_join = '';
34
		$filter_query_where = '';
35
		foreach($filters as $flt) {
36
			if (isset($flt['airlines']) && !empty($flt['airlines'])) {
37
				if ($flt['airlines'][0] != '' && $flt['airlines'][0] != 'all') {
38
					if (isset($flt['source'])) {
39
						$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_archive_output WHERE spotter_archive_output.airline_icao IN ('".implode("','",$flt['airlines'])."') AND spotter_archive_output.format_source IN ('".implode("','",$flt['source'])."')) saff ON saff.flightaware_id = spotter_archive_output.flightaware_id";
40
					} else {
41
						$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_archive_output WHERE spotter_archive_output.airline_icao IN ('".implode("','",$flt['airlines'])."')) saff ON saff.flightaware_id = spotter_archive_output.flightaware_id";
42
					}
43
				}
44
			}
45
			if (isset($flt['pilots_id']) && !empty($flt['pilots_id'])) {
46
				if (isset($flt['source'])) {
47
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_archive_output WHERE spotter_archive_output.pilot_id IN ('".implode("','",$flt['pilots_id'])."') AND spotter_archive_output.format_source IN ('".implode("','",$flt['source'])."')) sp ON sp.flightaware_id = spotter_archive_output.flightaware_id";
48
				} else {
49
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_archive_output WHERE spotter_archive_output.pilot_id IN ('".implode("','",$flt['pilots_id'])."')) sp ON sp.flightaware_id = spotter_archive_output.flightaware_id";
50
				}
51
			}
52
			if (isset($flt['idents']) && !empty($flt['idents'])) {
53
				if (isset($flt['source'])) {
54
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_archive_output WHERE spotter_archive_output.ident IN ('".implode("','",$flt['idents'])."') AND spotter_archive_output.format_source IN ('".implode("','",$flt['source'])."')) spi ON spi.flightaware_id = spotter_archive_output.flightaware_id";
55
				} else {
56
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_archive_output WHERE spotter_archive_output.ident IN ('".implode("','",$flt['idents'])."')) spi ON spi.flightaware_id = spotter_archive_output.flightaware_id";
57
				}
58
			}
59
			if (isset($flt['registrations']) && !empty($flt['registrations'])) {
60
				if (isset($flt['source'])) {
61
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_archive_output WHERE spotter_archive_output.registration IN ('".implode("','",$flt['registrations'])."') AND spotter_archive_output.format_source IN ('".implode("','",$flt['source'])."')) sre ON sre.flightaware_id = spotter_archive_output.flightaware_id";
62
				} else {
63
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_archive_output WHERE spotter_archive_output.registration IN ('".implode("','",$flt['registrations'])."')) sre ON sre.flightaware_id = spotter_archive_output.flightaware_id";
64
				}
65
			}
66
			if ((isset($flt['airlines']) && empty($flt['airlines']) && isset($flt['pilots_id']) && empty($flt['pilots_id']) && isset($flt['idents']) && empty($flt['idents']) && isset($flt['registrations']) && empty($flt['registrations'])) || (!isset($flt['airlines']) && !isset($flt['pilots_id']) && !isset($flt['idents']) && !isset($flt['registrations']))) {
67
				if (isset($flt['source'])) {
68
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_archive_output WHERE spotter_output.format_source IN ('".implode("','",$flt['source'])."')) saa ON saa.flightaware_id = spotter_archive_output.flightaware_id";
69
				}
70
			}
71
		}
72
		if (isset($filter['airlines']) && !empty($filter['airlines'])) {
73
			if ($filter['airlines'][0] != '' && $filter['airlines'][0] != 'all') {
74
				$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_archive_output WHERE spotter_archive_output.airline_icao IN ('".implode("','",$filter['airlines'])."')) saf ON saf.flightaware_id = spotter_archive_output.flightaware_id";
75
			}
76
		}
77
		if (isset($filter['airlinestype']) && !empty($filter['airlinestype'])) {
78
			$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 ";
79
		}
80
		if (isset($filter['pilots_id']) && !empty($filter['pilots_id'])) {
81
			$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_archive_output WHERE spotter_archive_output.pilot_id IN ('".implode("','",$filter['pilots_id'])."')) spi ON spi.flightaware_id = spotter_archive_output.flightaware_id";
82
		}
83
		if (isset($filter['source']) && !empty($filter['source'])) {
84
			if (count($filter['source']) == 1) {
85
				$filter_query_where .= " AND format_source = '".$filter['source'][0]."'";
86
			} else {
87
				$filter_query_where .= " AND format_source IN ('".implode("','",$filter['source'])."')";
88
			}
89
		}
90
		if (isset($filter['ident']) && !empty($filter['ident'])) {
91
			$filter_query_where .= " AND ident = '".$filter['ident']."'";
92
		}
93
		if (isset($filter['id']) && !empty($filter['id'])) {
94
			$filter_query_where .= " AND flightaware_id = '".$filter['id']."'";
95
		}
96
		if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
97
			$filter_query_where .= " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
98
		}
99
		if ((isset($filter['year']) && $filter['year'] != '') || (isset($filter['month']) && $filter['month'] != '') || (isset($filter['day']) && $filter['day'] != '')) {
100
			$filter_query_date = '';
101
			if (isset($filter['year']) && $filter['year'] != '') {
102
				if ($globalDBdriver == 'mysql') {
103
					$filter_query_date .= " AND YEAR(spotter_archive_output.date) = '".$filter['year']."'";
104
				} else {
105
					$filter_query_date .= " AND EXTRACT(YEAR FROM spotter_archive_output.date) = '".$filter['year']."'";
106
				}
107
			}
108
			if (isset($filter['month']) && $filter['month'] != '') {
109
				if ($globalDBdriver == 'mysql') {
110
					$filter_query_date .= " AND MONTH(spotter_archive_output.date) = '".$filter['month']."'";
111
				} else {
112
					$filter_query_date .= " AND EXTRACT(MONTH FROM spotter_archive_output.date) = '".$filter['month']."'";
113
				}
114
			}
115
			if (isset($filter['day']) && $filter['day'] != '') {
116
				if ($globalDBdriver == 'mysql') {
117
					$filter_query_date .= " AND DAY(spotter_archive_output.date) = '".$filter['day']."'";
118
				} else {
119
					$filter_query_date .= " AND EXTRACT(DAY FROM spotter_archive_output.date) = '".$filter['day']."'";
120
				}
121
			}
122
			$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_archive_output".preg_replace('/^ AND/',' WHERE',$filter_query_date).") sd ON sd.flightaware_id = spotter_archive_output.flightaware_id";
123
		}
124
		if ($filter_query_where == '' && $where) $filter_query_where = ' WHERE';
125
		elseif ($filter_query_where != '' && $and) $filter_query_where .= ' AND';
126
		if ($filter_query_where != '') {
127
			$filter_query_where = preg_replace('/^ AND/',' WHERE',$filter_query_where);
128
		}
129
		$filter_query = $filter_query_join.$filter_query_where;
130
		return $filter_query;
131
	}
132
133
	// Spotter_archive
134
	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 = '', $real_altitude = '',$heading = '', $ground_speed = '', $squawk = '', $ModeS = '', $pilot_id = '', $pilot_name = '',$verticalrate = '',$format_source = '', $source_name = '', $over_country = '') {
135
		require_once(dirname(__FILE__).'/class.Spotter.php');
136
		if ($over_country == '') {
137
			$Spotter = new Spotter($this->db);
138
			$data_country = $Spotter->getCountryFromLatitudeLongitude($latitude,$longitude);
139
			if (!empty($data_country)) $country = $data_country['iso2'];
140
			else $country = '';
141
		} else $country = $over_country;
142
		if ($airline_type === NULL) $airline_type ='';
143
144
		//if ($country == '') echo "\n".'************ UNKNOW COUNTRY ****************'."\n";
145
		//else echo "\n".'*/*/*/*/*/*/*/ Country : '.$country.' */*/*/*/*/*/*/*/*/'."\n";
146
147
		// Route is not added in spotter_archive
148
		$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,real_altitude)
149
		          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,:real_altitude)";
150
151
		$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,':real_altitude' => $real_altitude);
152
		try {
153
			$sth = $this->db->prepare($query);
154
			$sth->execute($query_values);
155
			$sth->closeCursor();
156
		} catch(PDOException $e) {
157
			return "error : ".$e->getMessage();
158
		}
159
		return "success";
160
	}
161
162
163
    /**
164
     * Gets all the spotter information based on a particular callsign
165
     *
166
     * @param $ident
167
     * @return array the spotter information
168
     */
169
	public function getLastArchiveSpotterDataByIdent($ident) {
170
		$Spotter = new Spotter($this->db);
171
		date_default_timezone_set('UTC');
172
173
		$ident = filter_var($ident, FILTER_SANITIZE_STRING);
174
		//$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";
175
		$query  = "SELECT spotter_archive.* FROM spotter_archive WHERE ident = :ident ORDER BY date DESC LIMIT 1";
176
177
		$spotter_array = $Spotter->getDataFromDB($query,array(':ident' => $ident));
178
179
		return $spotter_array;
180
	}
181
182
183
    /**
184
     * Gets last the spotter information based on a particular id
185
     *
186
     * @param $id
187
     * @return array the spotter information
188
     */
189
	public function getLastArchiveSpotterDataById($id) {
190
		$Spotter = new Spotter($this->db);
191
		date_default_timezone_set('UTC');
192
		$id = filter_var($id, FILTER_SANITIZE_STRING);
193
		//$query  = SpotterArchive->$global_query." WHERE spotter_archive.flightaware_id = :id";
194
		//$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";
195
		$query  = "SELECT * FROM spotter_archive WHERE flightaware_id = :id ORDER BY date DESC LIMIT 1";
196
197
//              $spotter_array = Spotter->getDataFromDB($query,array(':id' => $id));
198
		/*
199
		try {
200
		      $Connection = new Connection();
201
		      $sth = Connection->$db->prepare($query);
202
		      $sth->execute(array(':id' => $id));
203
		} catch(PDOException $e) {
204
		      return "error";
205
		}
206
		$spotter_array = $sth->fetchAll(PDO->FETCH_ASSOC);
207
		*/
208
		$spotter_array = $Spotter->getDataFromDB($query,array(':id' => $id));
209
210
		return $spotter_array;
211
	}
212
213
    /**
214
     * Gets all the spotter information based on a particular id
215
     *
216
     * @param $id
217
     * @return array the spotter information
218
     */
219
	public function getAllArchiveSpotterDataById($id) {
220
		date_default_timezone_set('UTC');
221
		$id = filter_var($id, FILTER_SANITIZE_STRING);
222
		$query  = $this->global_query." WHERE spotter_archive.flightaware_id = :id ORDER BY date";
223
224
//              $spotter_array = Spotter->getDataFromDB($query,array(':id' => $id));
225
226
		try {
227
			$sth = $this->db->prepare($query);
228
			$sth->execute(array(':id' => $id));
229
		} catch(PDOException $e) {
230
			echo $e->getMessage();
231
			die;
232
		}
233
		$spotter_array = $sth->fetchAll(PDO::FETCH_ASSOC);
234
235
		return $spotter_array;
236
	}
237
238
    /**
239
     * Gets coordinate & time spotter information based on a particular id
240
     *
241
     * @param $id
242
     * @return array the spotter information
243
     */
244
	public function getCoordArchiveSpotterDataById($id) {
245
		date_default_timezone_set('UTC');
246
		$id = filter_var($id, FILTER_SANITIZE_STRING);
247
		$query  = "SELECT spotter_archive.latitude, spotter_archive.longitude, spotter_archive.date FROM spotter_archive WHERE spotter_archive.flightaware_id = :id ORDER by spotter_archive.date ASC";
248
		try {
249
			$sth = $this->db->prepare($query);
250
			$sth->execute(array(':id' => $id));
251
		} catch(PDOException $e) {
252
			echo $e->getMessage();
253
			die;
254
		}
255
		$spotter_array = $sth->fetchAll(PDO::FETCH_ASSOC);
256
		return $spotter_array;
257
	}
258
259
    /**
260
     * Gets coordinate & time spotter information based on a particular id
261
     *
262
     * @param $id
263
     * @param $begindate
264
     * @param $enddate
265
     * @return array the spotter information
266
     */
267
	public function getCoordArchiveSpotterDataByIdDate($id,$begindate,$enddate) {
268
		date_default_timezone_set('UTC');
269
		$id = filter_var($id, FILTER_SANITIZE_STRING);
270
		$query  = "SELECT spotter_archive.latitude, spotter_archive.longitude, spotter_archive.date FROM spotter_archive WHERE spotter_archive.flightaware_id = :id AND spotter_archive.date BETWEEN :begindate AND :enddate ORDER by spotter_archive.date ASC";
271
		try {
272
			$sth = $this->db->prepare($query);
273
			$sth->execute(array(':id' => $id,':begindate' => $begindate,':enddate' => $enddate));
274
		} catch(PDOException $e) {
275
			echo $e->getMessage();
276
			die;
277
		}
278
		$spotter_array = $sth->fetchAll(PDO::FETCH_ASSOC);
279
		return $spotter_array;
280
	}
281
282
283
    /**
284
     * Gets altitude information based on a particular callsign
285
     *
286
     * @param $ident
287
     * @return array the spotter information
288
     */
289
	public function getAltitudeArchiveSpotterDataByIdent($ident) {
290
291
		date_default_timezone_set('UTC');
292
293
		$ident = filter_var($ident, FILTER_SANITIZE_STRING);
294
		$query  = "SELECT spotter_archive.altitude, spotter_archive.date FROM spotter_archive WHERE spotter_archive.ident = :ident AND spotter_archive.latitude <> 0 AND spotter_archive.longitude <> 0 ORDER BY date";
295
296
		try {
297
			$sth = $this->db->prepare($query);
298
			$sth->execute(array(':ident' => $ident));
299
		} catch(PDOException $e) {
300
			echo $e->getMessage();
301
			die;
302
		}
303
		$spotter_array = $sth->fetchAll(PDO::FETCH_ASSOC);
304
305
		return $spotter_array;
306
	}
307
308
    /**
309
     * Gets altitude information based on a particular id
310
     *
311
     * @param $id
312
     * @return array the spotter information
313
     */
314
	public function getAltitudeArchiveSpotterDataById($id) {
315
316
		date_default_timezone_set('UTC');
317
318
		$id = filter_var($id, FILTER_SANITIZE_STRING);
319
		$query  = "SELECT spotter_archive.altitude, spotter_archive.date FROM spotter_archive WHERE spotter_archive.flightaware_id = :id AND spotter_archive.latitude <> 0 AND spotter_archive.longitude <> 0 ORDER BY date";
320
321
		try {
322
			$sth = $this->db->prepare($query);
323
			$sth->execute(array(':id' => $id));
324
		} catch(PDOException $e) {
325
			echo $e->getMessage();
326
			die;
327
		}
328
		$spotter_array = $sth->fetchAll(PDO::FETCH_ASSOC);
329
330
		return $spotter_array;
331
	}
332
333
    /**
334
     * Gets altitude & speed information based on a particular id
335
     *
336
     * @param $id
337
     * @return array the spotter information
338
     */
339
	public function getAltitudeSpeedArchiveSpotterDataById($id) {
340
		date_default_timezone_set('UTC');
341
		$id = filter_var($id, FILTER_SANITIZE_STRING);
342
		$query  = "SELECT spotter_archive.altitude, spotter_archive.real_altitude,spotter_archive.ground_speed, spotter_archive.date FROM spotter_archive WHERE spotter_archive.flightaware_id = :id ORDER BY date";
343
		try {
344
			$sth = $this->db->prepare($query);
345
			$sth->execute(array(':id' => $id));
346
		} catch(PDOException $e) {
347
			echo $e->getMessage();
348
			die;
349
		}
350
		$spotter_array = $sth->fetchAll(PDO::FETCH_ASSOC);
351
		return $spotter_array;
352
	}
353
354
    /**
355
     * Gets altitude information based on a particular callsign
356
     *
357
     * @param $ident
358
     * @return array the spotter information
359
     */
360
	public function getLastAltitudeArchiveSpotterDataByIdent($ident) {
361
		date_default_timezone_set('UTC');
362
		$ident = filter_var($ident, FILTER_SANITIZE_STRING);
363
		$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";
364
//                $query  = "SELECT spotter_archive.altitude, spotter_archive.date FROM spotter_archive WHERE spotter_archive.ident = :ident";
365
		try {
366
			$sth = $this->db->prepare($query);
367
			$sth->execute(array(':ident' => $ident));
368
		} catch(PDOException $e) {
369
			echo $e->getMessage();
370
			die;
371
		}
372
		$spotter_array = $sth->fetchAll(PDO::FETCH_ASSOC);
373
		return $spotter_array;
374
	}
375
376
377
    /**
378
     * Gets all the archive spotter information
379
     *
380
     * @param $ident
381
     * @param $flightaware_id
382
     * @param $date
383
     * @return array the spotter information
384
     */
385
	public function getSpotterArchiveData($ident,$flightaware_id,$date) {
386
		$Spotter = new Spotter($this->db);
387
		$ident = filter_var($ident, FILTER_SANITIZE_STRING);
388
		$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";
389
		$spotter_array = $Spotter->getDataFromDB($query,array(':ident' => $ident,':flightaware_id' => $flightaware_id,':date' => $date.'%'));
390
		return $spotter_array;
391
	}
392
393
	public function deleteSpotterArchiveTrackData() {
394
		global $globalArchiveKeepTrackMonths, $globalDBdriver;
395
		if ($globalDBdriver == 'mysql') {
396
			$query = 'DELETE FROM spotter_archive WHERE spotter_archive.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$globalArchiveKeepTrackMonths.' MONTH) LIMIT 10000';
397
		} else {
398
			$query = "DELETE FROM spotter_archive WHERE spotter_archive_id IN (SELECT spotter_archive_id FROM spotter_archive WHERE spotter_archive.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$globalArchiveKeepTrackMonths." MONTH' LIMIT 10000)";
399
		}
400
		try {
401
			$sth = $this->db->prepare($query);
402
			$sth->execute();
403
		} catch(PDOException $e) {
404
			echo $e->getMessage();
405
			die;
406
		}
407
	}
408
409
    /**
410
     * Delete row in spotter_archive table based on flightaware_id
411
     * @param $id flightaware_id
412
     */
413
    public function deleteSpotterArchiveTrackDataByID($id) {
414
		global $globalArchiveKeepTrackMonths, $globalDBdriver;
415
		$query = 'DELETE FROM spotter_archive WHERE spotter_archive.flightaware_id = :id';
416
		try {
417
			$sth = $this->db->prepare($query);
418
			$sth->execute(array(':id' => $id));
419
		} catch(PDOException $e) {
420
			echo $e->getMessage();
421
			die;
422
		}
423
	}
424
425
    /**
426
     * Gets Minimal Live Spotter data
427
     *
428
     * @param $begindate
429
     * @param $enddate
430
     * @param array $filter
431
     * @param int $part
432
     * @return array the spotter information
433
     */
434
	public function getMinLiveSpotterData($begindate,$enddate,$filter = array(),$part = 0) {
435
		global $globalDBdriver;
436
		date_default_timezone_set('UTC');
437
		//$filter_query = $this->getFilter($filter,true,true);
438
439
		$filter_query = '';
440
		if (isset($filter['source']) && !empty($filter['source'])) {
441
			$filter_query .= " AND format_source IN ('".implode("','",$filter['source'])."') ";
442
		}
443
		// Use spotter_output also ?
444
		if (isset($filter['airlines']) && !empty($filter['airlines'])) {
445
			$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 ";
446
		}
447
		if (isset($filter['airlinestype']) && !empty($filter['airlinestype'])) {
448
			$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 ";
449
		}
450
		if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
451
			$filter_query = " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
452
		}
453
454
		$limit = '';
455
		if ($part != 0) {
456
			$limit = ' LIMIT 100 OFFSET '.($part-1)*100;
457
		}
458
		if ($globalDBdriver == 'mysql') {
459
			$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
460
			          FROM spotter_archive
461
			          INNER JOIN aircraft a on spotter_archive.aircraft_icao = a.icao
462
			          WHERE spotter_archive.date BETWEEN '."'".$begindate."'".' AND '."'".$enddate."'".'
463
			          '.$filter_query.' ORDER BY flightaware_id'.$limit;
464
		} else {
465
			
466
			$query  = 'SELECT spotter_archive.flightaware_id, spotter_archive.date, 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
467
			          FROM spotter_archive
468
			          INNER JOIN aircraft a on spotter_archive.aircraft_icao = a.icao
469
			          WHERE spotter_archive.date BETWEEN '."'".$begindate."'".' AND '."'".$enddate."'".'
470
			          '.$filter_query.' ORDER BY flightaware_id'.$limit;
471
		}
472
473
		try {
474
			$sth = $this->db->prepare($query);
475
			$sth->execute();
476
		} catch(PDOException $e) {
477
			echo $e->getMessage();
478
			die;
479
		}
480
		$spotter_array = $sth->fetchAll(PDO::FETCH_ASSOC);
481
		return $spotter_array;
482
	}
483
484
    /**
485
     * Gets Minimal Live Spotter data
486
     *
487
     * @param $begindate
488
     * @param $enddate
489
     * @param array $filter
490
     * @return array the spotter information
491
     */
492
	public function getMinLiveSpotterDataPlayback($begindate,$enddate,$filter = array()) {
493
		global $globalDBdriver;
494
		date_default_timezone_set('UTC');
495
496
		//$filter_query = $this->getFilter($filter,true,true);
497
498
		$filter_query = '';
499
		if (isset($filter['source']) && !empty($filter['source'])) {
500
			$filter_query .= " AND format_source IN ('".implode("','",$filter['source'])."') ";
501
		}
502
		// Use spotter_output also ?
503
		if (isset($filter['airlines']) && !empty($filter['airlines'])) {
504
			$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 ";
505
		}
506
		if (isset($filter['airlinestype']) && !empty($filter['airlinestype'])) {
507
			$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 ";
508
		}
509
		if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
510
			$filter_query = " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
511
		}
512
513
514
		//if (!isset($globalLiveInterval)) $globalLiveInterval = '200';
515
		if ($globalDBdriver == 'mysql') {
516
			/*
517
			$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
518
				    FROM spotter_archive
519
				    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';
520
			*/
521
			$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
522
			          FROM spotter_archive_output
523
			          LEFT JOIN (SELECT aircraft_shadow,icao FROM aircraft) a ON spotter_archive_output.aircraft_icao = a.icao
524
			          WHERE (spotter_archive_output.date BETWEEN '."'".$begindate."'".' AND '."'".$enddate."'".')
525
			          '.$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';
526
527
		} else {
528
			//$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';
529
			/*
530
			 $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
531
			 	    FROM spotter_archive_output
532
			 	    INNER JOIN (SELECT * FROM aircraft) a on spotter_archive_output.aircraft_icao = a.icao
533
			 	    WHERE spotter_archive_output.date >= '."'".$begindate."'".' AND spotter_archive_output.date <= '."'".$enddate."'".'
534
			 	    '.$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';
535
			 */
536
			$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
537
			          FROM spotter_archive_output
538
			          INNER JOIN (SELECT * FROM aircraft) a on spotter_archive_output.aircraft_icao = a.icao
539
			          WHERE spotter_archive_output.date >= '."'".$begindate."'".' AND spotter_archive_output.date <= '."'".$enddate."'".'
540
			          '.$filter_query.' LIMIT 200 OFFSET 0';
541
//                        	    .' 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';
542
543
		}
544
		//echo $query;
545
		try {
546
			$sth = $this->db->prepare($query);
547
			$sth->execute();
548
		} catch(PDOException $e) {
549
			echo $e->getMessage();
550
			die;
551
		}
552
		$spotter_array = $sth->fetchAll(PDO::FETCH_ASSOC);
553
554
		return $spotter_array;
555
	}
556
557
    /**
558
     * Gets count Live Spotter data
559
     *
560
     * @param $begindate
561
     * @param $enddate
562
     * @param array $filter
563
     * @return array the spotter information
564
     */
565
	public function getLiveSpotterCount($begindate,$enddate,$filter = array()) {
566
		global $globalDBdriver, $globalLiveInterval;
567
		date_default_timezone_set('UTC');
568
569
		$filter_query = '';
570
		if (isset($filter['source']) && !empty($filter['source'])) {
571
			$filter_query .= " AND format_source IN ('".implode("','",$filter['source'])."') ";
572
		}
573
		if (isset($filter['airlines']) && !empty($filter['airlines'])) {
574
			$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 ";
575
		}
576
		if (isset($filter['airlinestype']) && !empty($filter['airlinestype'])) {
577
			$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 ";
578
		}
579
		if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
580
			$filter_query = " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
581
		}
582
583
		//if (!isset($globalLiveInterval)) $globalLiveInterval = '200';
584
		if ($globalDBdriver == 'mysql') {
585
			$query = 'SELECT COUNT(DISTINCT flightaware_id) as nb
586
			         FROM spotter_archive l
587
			         WHERE (l.date BETWEEN DATE_SUB('."'".$begindate."'".',INTERVAL '.$globalLiveInterval.' SECOND) AND '."'".$begindate."'".')'.$filter_query;
588
		} else {
589
			$query = 'SELECT COUNT(DISTINCT flightaware_id) as nb FROM spotter_archive l WHERE (l.date BETWEEN '."'".$begindate."' - INTERVAL '".$globalLiveInterval." SECONDS' AND "."'".$enddate."'".')'.$filter_query;
590
		}
591
		//echo $query;
592
		try {
593
			$sth = $this->db->prepare($query);
594
			$sth->execute();
595
		} catch(PDOException $e) {
596
			echo $e->getMessage();
597
			die;
598
		}
599
		$result = $sth->fetch(PDO::FETCH_ASSOC);
600
		$sth->closeCursor();
601
		return $result['nb'];
602
603
	}
604
605
606
607
	// Spotter_Archive_output
608
609
    /**
610
     * Gets all the spotter information
611
     *
612
     * @param string $q
613
     * @param string $registration
614
     * @param string $aircraft_icao
615
     * @param string $aircraft_manufacturer
616
     * @param string $highlights
617
     * @param string $airline_icao
618
     * @param string $airline_country
619
     * @param string $airline_type
620
     * @param string $airport
621
     * @param string $airport_country
622
     * @param string $callsign
623
     * @param string $departure_airport_route
624
     * @param string $arrival_airport_route
625
     * @param string $owner
626
     * @param string $pilot_id
627
     * @param string $pilot_name
628
     * @param string $altitude
629
     * @param string $date_posted
630
     * @param string $limit
631
     * @param string $sort
632
     * @param string $includegeodata
633
     * @param string $origLat
634
     * @param string $origLon
635
     * @param string $dist
636
     * @param array $filters
637
     * @return array the spotter information
638
     */
639
	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()) {
640
		global $globalTimezone, $globalDBdriver;
641
		require_once(dirname(__FILE__).'/class.Translation.php');
642
		$Translation = new Translation($this->db);
643
		$Spotter = new Spotter($this->db);
644
645
		date_default_timezone_set('UTC');
646
647
		$query_values = array();
648
		$additional_query = '';
649
		$limit_query = '';
650
		$filter_query = $this->getFilter($filters);
651
		if ($q != "") {
652
			if (!is_string($q)) {
653
				return array();
654
			} else {
655
656
				$q_array = explode(" ", $q);
657
658
				foreach ($q_array as $q_item) {
659
					$additional_query .= " AND (";
660
					$additional_query .= "(spotter_archive_output.spotter_id like '%".$q_item."%') OR ";
661
					$additional_query .= "(spotter_archive_output.aircraft_icao like '%".$q_item."%') OR ";
662
					$additional_query .= "(spotter_archive_output.aircraft_name like '%".$q_item."%') OR ";
663
					$additional_query .= "(spotter_archive_output.aircraft_manufacturer like '%".$q_item."%') OR ";
664
					$additional_query .= "(spotter_archive_output.airline_icao like '%".$q_item."%') OR ";
665
					$additional_query .= "(spotter_archive_output.airline_name like '%".$q_item."%') OR ";
666
					$additional_query .= "(spotter_archive_output.airline_country like '%".$q_item."%') OR ";
667
					$additional_query .= "(spotter_archive_output.departure_airport_icao like '%".$q_item."%') OR ";
668
					$additional_query .= "(spotter_archive_output.departure_airport_name like '%".$q_item."%') OR ";
669
					$additional_query .= "(spotter_archive_output.departure_airport_city like '%".$q_item."%') OR ";
670
					$additional_query .= "(spotter_archive_output.departure_airport_country like '%".$q_item."%') OR ";
671
					$additional_query .= "(spotter_archive_output.arrival_airport_icao like '%".$q_item."%') OR ";
672
					$additional_query .= "(spotter_archive_output.arrival_airport_name like '%".$q_item."%') OR ";
673
					$additional_query .= "(spotter_archive_output.arrival_airport_city like '%".$q_item."%') OR ";
674
					$additional_query .= "(spotter_archive_output.arrival_airport_country like '%".$q_item."%') OR ";
675
					$additional_query .= "(spotter_archive_output.registration like '%".$q_item."%') OR ";
676
					$additional_query .= "(spotter_archive_output.owner_name like '%".$q_item."%') OR ";
677
					$additional_query .= "(spotter_archive_output.pilot_id like '%".$q_item."%') OR ";
678
					$additional_query .= "(spotter_archive_output.pilot_name like '%".$q_item."%') OR ";
679
					$additional_query .= "(spotter_archive_output.ident like '%".$q_item."%') OR ";
680
					$translate = $Translation->ident2icao($q_item);
681
					if ($translate != $q_item) $additional_query .= "(spotter_archive_output.ident like '%".$translate."%') OR ";
682
					$additional_query .= "(spotter_archive_output.highlight like '%".$q_item."%')";
683
					$additional_query .= ")";
684
				}
685
			}
686
		}
687
688
		if ($registration != "") {
689
			$registration = filter_var($registration,FILTER_SANITIZE_STRING);
690
			if (!is_string($registration)) {
691
				return array();
692
			} else {
693
				$additional_query .= " AND (spotter_archive_output.registration = '".$registration."')";
694
			}
695
		}
696
697
		if ($aircraft_icao != "") {
698
			$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
699
			if (!is_string($aircraft_icao)) {
700
				return array();
701
			} else {
702
				$additional_query .= " AND (spotter_archive_output.aircraft_icao = '".$aircraft_icao."')";
703
			}
704
		}
705
706
		if ($aircraft_manufacturer != "") {
707
			$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
708
			if (!is_string($aircraft_manufacturer)) {
709
				return array();
710
			} else {
711
				$additional_query .= " AND (spotter_archive_output.aircraft_manufacturer = '".$aircraft_manufacturer."')";
712
			}
713
		}
714
715
		if ($highlights == "true") {
716
			if (!is_string($highlights)) {
717
				return array();
718
			} else {
719
				$additional_query .= " AND (spotter_archive_output.highlight <> '')";
720
			}
721
		}
722
723
		if ($airline_icao != "") {
724
			$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
725
			if (!is_string($airline_icao)) {
726
				return array();
727
			} else {
728
				$additional_query .= " AND (spotter_archive_output.airline_icao = '".$airline_icao."')";
729
			}
730
		}
731
732
		if ($airline_country != "") {
733
			$airline_country = filter_var($airline_country,FILTER_SANITIZE_STRING);
734
			if (!is_string($airline_country)) {
735
				return array();
736
			} else {
737
				$additional_query .= " AND (spotter_archive_output.airline_country = '".$airline_country."')";
738
			}
739
		}
740
741
		if ($airline_type != "") {
742
			$airline_type = filter_var($airline_type,FILTER_SANITIZE_STRING);
743
			if (!is_string($airline_type)) {
744
				return array();
745
			} else {
746
				if ($airline_type == "passenger") {
747
					$additional_query .= " AND (spotter_archive_output.airline_type = 'passenger')";
748
				}
749
				if ($airline_type == "cargo") {
750
					$additional_query .= " AND (spotter_archive_output.airline_type = 'cargo')";
751
				}
752
				if ($airline_type == "military") {
753
					$additional_query .= " AND (spotter_archive_output.airline_type = 'military')";
754
				}
755
			}
756
		}
757
758
		if ($airport != "") {
759
			$airport = filter_var($airport,FILTER_SANITIZE_STRING);
760
			if (!is_string($airport)) {
761
				return array();
762
			} else {
763
				$additional_query .= " AND ((spotter_archive_output.departure_airport_icao = '".$airport."') OR (spotter_archive_output.arrival_airport_icao = '".$airport."'))";
764
			}
765
		}
766
767
		if ($airport_country != "") {
768
			$airport_country = filter_var($airport_country,FILTER_SANITIZE_STRING);
769
			if (!is_string($airport_country)) {
770
				return array();
771
			} else {
772
				$additional_query .= " AND ((spotter_archive_output.departure_airport_country = '".$airport_country."') OR (spotter_archive_output.arrival_airport_country = '".$airport_country."'))";
773
			}
774
		}
775
776
		if ($callsign != "") {
777
			$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
778
			if (!is_string($callsign)) {
779
				return array();
780
			} else {
781
				$translate = $Translation->ident2icao($callsign);
782
				if ($translate != $callsign) {
783
					$additional_query .= " AND (spotter_archive_output.ident = :callsign OR spotter_archive_output.ident = :translate)";
784
					$query_values = array_merge($query_values,array(':callsign' => $callsign,':translate' => $translate));
785
				} else {
786
					$additional_query .= " AND (spotter_archive_output.ident = '".$callsign."')";
787
				}
788
			}
789
		}
790
791
		if ($owner != "") {
792
			$owner = filter_var($owner,FILTER_SANITIZE_STRING);
793
			if (!is_string($owner)) {
794
				return array();
795
			} else {
796
				$additional_query .= " AND (spotter_archive_output.owner_name = '".$owner."')";
797
			}
798
		}
799
800
		if ($pilot_name != "") {
801
			$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
802
			if (!is_string($pilot_name)) {
803
				return array();
804
			} else {
805
				$additional_query .= " AND (spotter_archive_output.pilot_name = '".$pilot_name."')";
806
			}
807
		}
808
809
		if ($pilot_id != "") {
810
			$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_NUMBER_INT);
811
			if (!is_string($pilot_id)) {
812
				return array();
813
			} else {
814
				$additional_query .= " AND (spotter_archive_output.pilot_id = '".$pilot_id."')";
815
			}
816
		}
817
818
		if ($departure_airport_route != "") {
819
			$departure_airport_route = filter_var($departure_airport_route,FILTER_SANITIZE_STRING);
820
			if (!is_string($departure_airport_route)) {
821
				return array();
822
			} else {
823
				$additional_query .= " AND (spotter_archive_output.departure_airport_icao = '".$departure_airport_route."')";
824
			}
825
		}
826
827
		if ($arrival_airport_route != "") {
828
			$arrival_airport_route = filter_var($arrival_airport_route,FILTER_SANITIZE_STRING);
829
			if (!is_string($arrival_airport_route)) {
830
				return array();
831
			} else {
832
				$additional_query .= " AND (spotter_archive_output.arrival_airport_icao = '".$arrival_airport_route."')";
833
			}
834
		}
835
836
		if ($altitude != "") {
837
			$altitude_array = explode(",", $altitude);
838
839
			$altitude_array[0] = filter_var($altitude_array[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
840
			$altitude_array[1] = filter_var($altitude_array[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
841
842
843
			if ($altitude_array[1] != "") {
844
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
845
				$altitude_array[1] = substr($altitude_array[1], 0, -2);
846
				$additional_query .= " AND altitude BETWEEN '".$altitude_array[0]."' AND '".$altitude_array[1]."' ";
847
			} else {
848
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
849
				$additional_query .= " AND altitude <= '".$altitude_array[0]."' ";
850
			}
851
		}
852
853
		if ($date_posted != "") {
854
			$date_array = explode(",", $date_posted);
855
			$date_array[0] = filter_var($date_array[0],FILTER_SANITIZE_STRING);
856
			$date_array[1] = filter_var($date_array[1],FILTER_SANITIZE_STRING);
857
			if ($globalTimezone != '') {
858
				date_default_timezone_set($globalTimezone);
859
				$datetime = new DateTime();
860
				$offset = $datetime->format('P');
861
			} else $offset = '+00:00';
862
			if ($date_array[1] != "") {
863
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
864
				$date_array[1] = date("Y-m-d H:i:s", strtotime($date_array[1]));
865
				if ($globalDBdriver == 'mysql') {
866
					$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]."' ";
867
				} else {
868
					$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) ";
869
				}
870
			} else {
871
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
872
				if ($globalDBdriver == 'mysql') {
873
					$additional_query .= " AND TIMESTAMP(CONVERT_TZ(spotter_archive_output.date,'+00:00', '".$offset."')) >= '".$date_array[0]."' ";
874
				} else {
875
					$additional_query .= " AND spotter_archive_output.date::timestamp AT TIME ZONE INTERVAL ".$offset." >= CAST('".$date_array[0]."' AS TIMESTAMP) ";
876
				}
877
			}
878
		}
879
		if ($limit != "") {
880
			$limit_array = explode(",", $limit);
881
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
882
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
883
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0) {
884
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
885
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
886
			}
887
		}
888
		if ($origLat != "" && $origLon != "" && $dist != "") {
889
			$dist = number_format($dist*0.621371,2,'.','');
890
			$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
891
			       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))
892
			       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";
893
		} else {
894
			if ($sort != "") {
895
				$search_orderby_array = $Spotter->getOrderBy();
896
				$orderby_query = $search_orderby_array[$sort]['sql'];
897
			} else {
898
				$orderby_query = " ORDER BY spotter_archive_output.date DESC";
899
			}
900
			if ($includegeodata == "true") {
901
				$additional_query .= " AND (spotter_archive_output.waypoints <> '')";
902
			}
903
904
			$query  = "SELECT spotter_archive_output.* FROM spotter_archive_output
905
			          WHERE spotter_archive_output.ident <> ''
906
			          ".$additional_query."
907
			          ".$filter_query.$orderby_query;
908
		}
909
		$spotter_array = $Spotter->getDataFromDB($query, $query_values,$limit_query);
910
		return $spotter_array;
911
	}
912
913
	public function deleteSpotterArchiveData() {
914
		global $globalArchiveKeepMonths, $globalDBdriver;
915
		date_default_timezone_set('UTC');
916
		if ($globalDBdriver == 'mysql') {
917
			$query = 'DELETE FROM spotter_archive_output WHERE spotter_archive_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$globalArchiveKeepMonths.' MONTH) LIMIT 10000';
918
		} else {
919
			$query = "DELETE FROM spotter_archive_output WHERE spotter_archive_id IN (SELECT spotter_archive_id FROM spotter_archive_output WHERE spotter_archive_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$globalArchiveKeepMonths." MONTH' LIMIT 10000)";
920
		}
921
		try {
922
			$sth = $this->db->prepare($query);
923
			$sth->execute();
924
			return '';
925
		} catch(PDOException $e) {
926
			return "error";
927
		}
928
	}
929
930
    /**
931
     * Gets all the spotter information based on the callsign
932
     *
933
     * @param string $ident
934
     * @param string $limit
935
     * @param string $sort
936
     * @return array the spotter information
937
     */
938
	public function getSpotterDataByIdent($ident = '', $limit = '', $sort = '') {
939
		$global_query = "SELECT spotter_archive_output.* FROM spotter_archive_output";
940
941
		date_default_timezone_set('UTC');
942
		$Spotter = new Spotter($this->db);
943
944
		$query_values = array();
945
		$limit_query = '';
946
		$additional_query = '';
947
948
		if ($ident != "") {
949
			if (!is_string($ident)) {
950
				return array();
951
			} else {
952
				$additional_query = " AND spotter_archive_output.ident = :ident";
953
				$query_values = array(':ident' => $ident);
954
			}
955
		}
956
957
		if ($limit != "") {
958
			$limit_array = explode(",", $limit);
959
960
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
961
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
962
963
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0) {
964
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
965
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
966
			}
967
		}
968
969
		if ($sort != "") {
970
			$search_orderby_array = $Spotter->getOrderBy();
971
			$orderby_query = $search_orderby_array[$sort]['sql'];
972
		} else {
973
			$orderby_query = " ORDER BY spotter_archive_output.date DESC";
974
		}
975
976
		$query = $global_query." WHERE spotter_archive_output.ident <> '' ".$additional_query." ".$orderby_query;
977
978
		$spotter_array = $Spotter->getDataFromDB($query, $query_values, $limit_query);
979
980
		return $spotter_array;
981
	}
982
983
984
    /**
985
     * Gets all the spotter information based on the owner
986
     *
987
     * @param string $owner
988
     * @param string $limit
989
     * @param string $sort
990
     * @param array $filter
991
     * @return array the spotter information
992
     */
993
	public function getSpotterDataByOwner($owner = '', $limit = '', $sort = '', $filter = array()) {
994
		$global_query = "SELECT spotter_archive_output.* FROM spotter_archive_output";
995
996
		date_default_timezone_set('UTC');
997
		$Spotter = new Spotter($this->db);
998
999
		$query_values = array();
1000
		$limit_query = '';
1001
		$additional_query = '';
1002
		$filter_query = $this->getFilter($filter,true,true);
1003
1004
		if ($owner != "") {
1005
			if (!is_string($owner)) {
1006
				return array();
1007
			} else {
1008
				$additional_query = " AND (spotter_archive_output.owner_name = :owner)";
1009
				$query_values = array(':owner' => $owner);
1010
			}
1011
		}
1012
1013
		if ($limit != "") {
1014
			$limit_array = explode(",", $limit);
1015
1016
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1017
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1018
1019
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0 && $limit_array[0] != '' && $limit_array[1] != '') {
1020
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1021
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1022
			}
1023
		}
1024
1025
		if ($sort != "") {
1026
			$search_orderby_array = $Spotter->getOrderBy();
1027
			$orderby_query = $search_orderby_array[$sort]['sql'];
1028
		} else {
1029
			$orderby_query = " ORDER BY spotter_archive_output.date DESC";
1030
		}
1031
1032
		$query = $global_query.$filter_query." spotter_archive_output.owner_name <> '' ".$additional_query." ".$orderby_query;
1033
1034
		$spotter_array = $Spotter->getDataFromDB($query, $query_values, $limit_query);
1035
1036
		return $spotter_array;
1037
	}
1038
1039
    /**
1040
     * Gets all the spotter information based on the pilot
1041
     *
1042
     * @param string $pilot
1043
     * @param string $limit
1044
     * @param string $sort
1045
     * @param array $filter
1046
     * @return array the spotter information
1047
     */
1048
	public function getSpotterDataByPilot($pilot = '', $limit = '', $sort = '', $filter = array()) {
1049
		$global_query = "SELECT spotter_archive_output.* FROM spotter_archive_output";
1050
1051
		date_default_timezone_set('UTC');
1052
		$Spotter = new Spotter($this->db);
1053
1054
		$query_values = array();
1055
		$limit_query = '';
1056
		$additional_query = '';
1057
		$filter_query = $this->getFilter($filter,true,true);
1058
1059
		if ($pilot != "") {
1060
			$additional_query = " AND (spotter_archive_output.pilot_id = :pilot OR spotter_archive_output.pilot_name = :pilot)";
1061
			$query_values = array(':pilot' => $pilot);
1062
		}
1063
1064
		if ($limit != "") {
1065
			$limit_array = explode(",", $limit);
1066
1067
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1068
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1069
1070
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0) {
1071
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1072
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1073
			}
1074
		}
1075
1076
		if ($sort != "") {
1077
			$search_orderby_array = $Spotter->getOrderBy();
1078
			$orderby_query = $search_orderby_array[$sort]['sql'];
1079
		} else {
1080
			$orderby_query = " ORDER BY spotter_archive_output.date DESC";
1081
		}
1082
1083
		$query = $global_query.$filter_query." spotter_archive_output.pilot_name <> '' ".$additional_query." ".$orderby_query;
1084
1085
		$spotter_array = $Spotter->getDataFromDB($query, $query_values, $limit_query);
1086
1087
		return $spotter_array;
1088
	}
1089
1090
    /**
1091
     * Gets all number of flight over countries
1092
     *
1093
     * @param bool $limit
1094
     * @param int $olderthanmonths
1095
     * @param string $sincedate
1096
     * @return array the airline country list
1097
     */
1098
	public function countAllFlightOverCountries($limit = true,$olderthanmonths = 0,$sincedate = '') {
1099
		global $globalDBdriver;
1100
		/*
1101
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb
1102
			    FROM countries c, spotter_archive s
1103
			    WHERE Within(GeomFromText(CONCAT('POINT(',s.longitude,' ',s.latitude,')')), ogc_geom) ";
1104
		*/
1105
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb
1106
		         FROM countries c, spotter_archive s
1107
		         WHERE c.iso2 = s.over_country ";
1108
		if ($olderthanmonths > 0) {
1109
			if ($globalDBdriver == 'mysql') {
1110
				$query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
1111
			} else {
1112
				$query .= "AND date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
1113
			}
1114
		}
1115
		if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
1116
		$query .= "GROUP BY c.name, c.iso3, c.iso2 ORDER BY nb DESC";
1117
		if ($limit) $query .= " LIMIT 0,10";
1118
1119
1120
		$sth = $this->db->prepare($query);
1121
		$sth->execute();
1122
1123
		$flight_array = array();
1124
		$temp_array = array();
1125
1126
		while($row = $sth->fetch(PDO::FETCH_ASSOC)) {
1127
			$temp_array['flight_count'] = $row['nb'];
1128
			$temp_array['flight_country'] = $row['name'];
1129
			$temp_array['flight_country_iso3'] = $row['iso3'];
1130
			$temp_array['flight_country_iso2'] = $row['iso2'];
1131
			$flight_array[] = $temp_array;
1132
		}
1133
		return $flight_array;
1134
	}
1135
1136
    /**
1137
     * Gets all number of flight over countries
1138
     *
1139
     * @param bool $limit
1140
     * @param int $olderthanmonths
1141
     * @param string $sincedate
1142
     * @return array the airline country list
1143
     */
1144
	public function countAllFlightOverCountriesByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '') {
1145
		global $globalDBdriver;
1146
		/*
1147
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb
1148
			    FROM countries c, spotter_archive s
1149
			    WHERE Within(GeomFromText(CONCAT('POINT(',s.longitude,' ',s.latitude,')')), ogc_geom) ";
1150
		*/
1151
		$query = "SELECT o.airline_icao,c.name, c.iso3, c.iso2, count(c.name) as nb
1152
		         FROM countries c, spotter_archive s, spotter_output o
1153
		         WHERE c.iso2 = s.over_country AND o.airline_icao <> '' AND o.flightaware_id = s.flightaware_id ";
1154
		if ($olderthanmonths > 0) {
1155
			if ($globalDBdriver == 'mysql') {
1156
				$query .= 'AND s.date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
1157
			} else {
1158
				$query .= "AND s.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
1159
			}
1160
		}
1161
		if ($sincedate != '') $query .= "AND s.date > '".$sincedate."' ";
1162
		$query .= "GROUP BY o.airline_icao,c.name, c.iso3, c.iso2 ORDER BY nb DESC";
1163
		if ($limit) $query .= " LIMIT 0,10";
1164
1165
1166
		$sth = $this->db->prepare($query);
1167
		$sth->execute();
1168
1169
		$flight_array = array();
1170
		$temp_array = array();
1171
1172
		while($row = $sth->fetch(PDO::FETCH_ASSOC)) {
1173
			$temp_array['airline_icao'] = $row['airline_icao'];
1174
			$temp_array['flight_count'] = $row['nb'];
1175
			$temp_array['flight_country'] = $row['name'];
1176
			$temp_array['flight_country_iso3'] = $row['iso3'];
1177
			$temp_array['flight_country_iso2'] = $row['iso2'];
1178
			$flight_array[] = $temp_array;
1179
		}
1180
		return $flight_array;
1181
	}
1182
1183
    /**
1184
     * Gets all aircraft types that have flown over by owner
1185
     *
1186
     * @param $owner
1187
     * @param array $filters
1188
     * @return array the aircraft list
1189
     */
1190
	public function countAllAircraftTypesByOwner($owner,$filters = array())
1191
	{
1192
		$filter_query = $this->getFilter($filters,true,true);
1193
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
1194
		$query  = "SELECT DISTINCT spotter_archive_output.aircraft_icao, COUNT(spotter_archive_output.aircraft_icao) AS aircraft_icao_count, spotter_archive_output.aircraft_name, spotter_archive_output.aircraft_manufacturer 
1195
		    FROM spotter_archive_output".$filter_query." spotter_archive_output.owner_name = :owner";
1196
		$query_values = array();
1197
		$query .= " GROUP BY spotter_archive_output.aircraft_name, spotter_archive_output.aircraft_manufacturer, spotter_archive_output.aircraft_icao
1198
		    ORDER BY aircraft_icao_count DESC";
1199
		$query_values = array_merge($query_values,array(':owner' => $owner));
1200
		$sth = $this->db->prepare($query);
1201
		$sth->execute($query_values);
1202
		return $sth->fetchAll(PDO::FETCH_ASSOC);
1203
	}
1204
1205
    /**
1206
     * Gets all airlines by owner
1207
     *
1208
     * @param $owner
1209
     * @param array $filters
1210
     * @return array the airline list
1211
     */
1212
	public function countAllAirlinesByOwner($owner,$filters = array())
1213
	{
1214
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
1215
		$filter_query = $this->getFilter($filters,true,true);
1216
		$query  = "SELECT DISTINCT spotter_archive_output.airline_name, spotter_archive_output.airline_icao, spotter_archive_output.airline_country, COUNT(spotter_archive_output.airline_name) AS airline_count
1217
		    FROM spotter_archive_output".$filter_query." spotter_archive_output.owner_name = :owner  
1218
		    GROUP BY spotter_archive_output.airline_icao, spotter_archive_output.airline_name, spotter_archive_output.airline_country
1219
		    ORDER BY airline_count DESC";
1220
	
1221
		$sth = $this->db->prepare($query);
1222
		$sth->execute(array(':owner' => $owner));
1223
		return $sth->fetchAll(PDO::FETCH_ASSOC);
1224
	}
1225
1226
    /**
1227
     * Gets all arrival airports by country of the airplanes that have flown over based on a owner
1228
     *
1229
     * @param $owner
1230
     * @param array $filters
1231
     * @return array the airport list
1232
     */
1233
	public function countAllArrivalAirportCountriesByOwner($owner, $filters = array())
1234
	{
1235
		$filter_query = $this->getFilter($filters,true,true);
1236
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
1237
		$query  = "SELECT DISTINCT spotter_archive_output.arrival_airport_country, COUNT(spotter_archive_output.arrival_airport_country) AS airport_arrival_country_count, countries.iso3 AS airport_arrival_country_iso3 
1238
		    FROM countries, spotter_archive_output".$filter_query." spotter_archive_output.arrival_airport_country <> '' AND spotter_archive_output.owner_name = :owner AND countries.name = spotter_archive_output.arrival_airport_country 
1239
		    GROUP BY spotter_archive_output.arrival_airport_country, countries.iso3
1240
		    ORDER BY airport_arrival_country_count DESC";
1241
		$sth = $this->db->prepare($query);
1242
		$sth->execute(array(':owner' => $owner));
1243
		return $sth->fetchAll(PDO::FETCH_ASSOC);
1244
	}
1245
1246
    /**
1247
     * Gets all arrival airports of the airplanes that have flown over based on a owner
1248
     *
1249
     * @param $owner
1250
     * @param array $filters
1251
     * @return array the airport list
1252
     */
1253
	public function countAllArrivalAirportsByOwner($owner,$filters = array())
1254
	{
1255
		$filter_query = $this->getFilter($filters,true,true);
1256
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
1257
		$query  = "SELECT DISTINCT spotter_archive_output.arrival_airport_icao, COUNT(spotter_archive_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_archive_output.arrival_airport_name, spotter_archive_output.arrival_airport_city, spotter_archive_output.arrival_airport_country 
1258
		    FROM spotter_archive_output".$filter_query." spotter_archive_output.arrival_airport_name <> '' AND spotter_archive_output.arrival_airport_icao <> 'NA' AND spotter_archive_output.arrival_airport_icao <> '' AND spotter_archive_output.owner_name = :owner 
1259
		    GROUP BY spotter_archive_output.arrival_airport_icao, spotter_archive_output.arrival_airport_name, spotter_archive_output.arrival_airport_city, spotter_archive_output.arrival_airport_country
1260
		    ORDER BY airport_arrival_icao_count DESC";
1261
		$sth = $this->db->prepare($query);
1262
		$sth->execute(array(':owner' => $owner));
1263
		$airport_array = array();
1264
		$temp_array = array();
1265
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1266
		{
1267
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
1268
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
1269
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
1270
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
1271
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
1272
			$airport_array[] = $temp_array;
1273
		}
1274
		return $airport_array;
1275
	}
1276
1277
    /**
1278
     * Gets all departure airports by country of the airplanes that have flown over based on owner
1279
     *
1280
     * @param $owner
1281
     * @param array $filters
1282
     * @return array the airport list
1283
     */
1284
	public function countAllDepartureAirportCountriesByOwner($owner,$filters = array())
1285
	{
1286
		$filter_query = $this->getFilter($filters,true,true);
1287
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
1288
		$query  = "SELECT DISTINCT spotter_archive_output.departure_airport_country, COUNT(spotter_archive_output.departure_airport_country) AS airport_departure_country_count, countries.iso3 AS airport_departure_country_iso3
1289
		    FROM spotter_archive_output,countries".$filter_query." spotter_archive_output.departure_airport_country <> '' AND spotter_archive_output.owner_name = :owner  AND countries.name = spotter_archive_output.departure_airport_country 
1290
		    GROUP BY spotter_archive_output.departure_airport_country, countries.iso3
1291
		    ORDER BY airport_departure_country_count DESC";
1292
		$sth = $this->db->prepare($query);
1293
		$sth->execute(array(':owner' => $owner));
1294
		return $sth->fetchAll(PDO::FETCH_ASSOC);
1295
	}
1296
1297
    /**
1298
     * Gets all departure airports of the airplanes that have flown over based on a owner
1299
     *
1300
     * @param $owner
1301
     * @param array $filters
1302
     * @return array the airport list
1303
     */
1304
	public function countAllDepartureAirportsByOwner($owner,$filters = array())
1305
	{
1306
		$filter_query = $this->getFilter($filters,true,true);
1307
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
1308
		$query  = "SELECT DISTINCT spotter_archive_output.departure_airport_icao, COUNT(spotter_archive_output.departure_airport_icao) AS airport_departure_icao_count, spotter_archive_output.departure_airport_name, spotter_archive_output.departure_airport_city, spotter_archive_output.departure_airport_country, airport.latitude, airport.longitude 
1309
		    FROM spotter_archive_output,airport".$filter_query." spotter_archive_output.departure_airport_name <> '' AND spotter_archive_output.departure_airport_icao <> 'NA' AND spotter_archive_output.departure_airport_icao <> '' AND spotter_archive_output.owner_name = :owner AND airport.icao = spotter_archive_output.departure_airport_icao 
1310
		    GROUP BY spotter_archive_output.departure_airport_icao, spotter_archive_output.departure_airport_name, spotter_archive_output.departure_airport_city, spotter_archive_output.departure_airport_country, airport.latitude, airport.longitude
1311
		    ORDER BY airport_departure_icao_count DESC";
1312
		$sth = $this->db->prepare($query);
1313
		$sth->execute(array(':owner' => $owner));
1314
		$airport_array = array();
1315
		$temp_array = array();
1316
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1317
		{
1318
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
1319
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
1320
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
1321
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
1322
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
1323
			$temp_array['airport_departure_latitude'] = $row['latitude'];
1324
			$temp_array['airport_departure_longitude'] = $row['longitude'];
1325
			$airport_array[] = $temp_array;
1326
		}
1327
		return $airport_array;
1328
	}
1329
1330
    /**
1331
     * Gets all aircraft manufacturer that have flown over by owner
1332
     *
1333
     * @param $owner
1334
     * @param array $filters
1335
     * @return array the aircraft manufacturer list
1336
     */
1337
	public function countAllAircraftManufacturerByOwner($owner,$filters = array())
1338
	{
1339
		$filter_query = $this->getFilter($filters,true,true);
1340
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
1341
		$query  = "SELECT DISTINCT spotter_archive_output.aircraft_manufacturer, COUNT(spotter_archive_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
1342
		    FROM spotter_archive_output".$filter_query." spotter_archive_output.aircraft_manufacturer <> '' AND spotter_archive_output.owner_name = :owner";
1343
		$query_values = array();
1344
		$query_values = array_merge($query_values,array(':owner' => $owner));
1345
		$query .= " GROUP BY spotter_archive_output.aircraft_manufacturer 
1346
		    ORDER BY aircraft_manufacturer_count DESC";
1347
		$sth = $this->db->prepare($query);
1348
		$sth->execute($query_values);
1349
		return $sth->fetchAll(PDO::FETCH_ASSOC);
1350
	}
1351
1352
    /**
1353
     * Gets all aircraft registration that have flown over by owner
1354
     *
1355
     * @param $owner
1356
     * @param array $filters
1357
     * @return array the aircraft list
1358
     */
1359
	public function countAllAircraftRegistrationByOwner($owner,$filters = array())
1360
	{
1361
		$filter_query = $this->getFilter($filters,true,true);
1362
		$Image = new Image($this->db);
1363
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
1364
		$query  = "SELECT DISTINCT spotter_archive_output.aircraft_icao, COUNT(spotter_archive_output.registration) AS registration_count, spotter_archive_output.aircraft_name, spotter_archive_output.aircraft_manufacturer, spotter_archive_output.registration, spotter_archive_output.airline_name  
1365
		    FROM spotter_archive_output".$filter_query." spotter_archive_output.registration <> '' AND spotter_archive_output.owner_name = :owner";
1366
		$query_values = array();
1367
		$query_values = array_merge($query_values,array(':owner' => $owner));
1368
		$query .= " GROUP BY spotter_archive_output.registration,spotter_archive_output.aircraft_icao, spotter_archive_output.aircraft_name, spotter_archive_output.aircraft_manufacturer, spotter_archive_output.airline_name
1369
		    ORDER BY registration_count DESC";
1370
		$sth = $this->db->prepare($query);
1371
		$sth->execute($query_values);
1372
		$aircraft_array = array();
1373
		$temp_array = array();
1374
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1375
		{
1376
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
1377
			$temp_array['aircraft_name'] = $row['aircraft_name'];
1378
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
1379
			$temp_array['registration'] = $row['registration'];
1380
			$temp_array['airline_name'] = $row['airline_name'];
1381
			$temp_array['image_thumbnail'] = "";
1382
			if($row['registration'] != "")
1383
			{
1384
				$image_array = $Image->getSpotterImage($row['registration']);
1385
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
1386
				else $temp_array['image_thumbnail'] = '';
1387
			}
1388
			$temp_array['registration_count'] = $row['registration_count'];
1389
			$aircraft_array[] = $temp_array;
1390
		}
1391
		return $aircraft_array;
1392
	}
1393
1394
    /**
1395
     * Gets all route combinations based on an owner
1396
     *
1397
     * @param $owner
1398
     * @param array $filters
1399
     * @return array the route list
1400
     */
1401
	public function countAllRoutesByOwner($owner,$filters = array())
1402
	{
1403
		$filter_query = $this->getFilter($filters,true,true);
1404
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
1405
		$query  = "SELECT DISTINCT concat(spotter_archive_output.departure_airport_icao, ' - ',  spotter_archive_output.arrival_airport_icao) AS route, count(concat(spotter_archive_output.departure_airport_icao, ' - ', spotter_archive_output.arrival_airport_icao)) AS route_count, spotter_archive_output.departure_airport_icao, spotter_archive_output.departure_airport_name AS airport_departure_name, spotter_archive_output.departure_airport_city AS airport_departure_city, spotter_archive_output.departure_airport_country AS airport_departure_country, spotter_archive_output.arrival_airport_icao, spotter_archive_output.arrival_airport_name AS airport_arrival_name, spotter_archive_output.arrival_airport_city AS airport_arrival_city, spotter_archive_output.arrival_airport_country AS airport_arrival_country
1406
		    FROM spotter_archive_output".$filter_query." spotter_archive_output.ident <> '' AND spotter_archive_output.owner_name = :owner 
1407
		    GROUP BY route, spotter_archive_output.departure_airport_icao, spotter_archive_output.departure_airport_name, spotter_archive_output.departure_airport_city, spotter_archive_output.departure_airport_country, spotter_archive_output.arrival_airport_icao, spotter_archive_output.arrival_airport_name, spotter_archive_output.arrival_airport_city, spotter_archive_output.arrival_airport_country
1408
		    ORDER BY route_count DESC";
1409
		$sth = $this->db->prepare($query);
1410
		$sth->execute(array(':owner' => $owner));
1411
		$routes_array = array();
1412
		$temp_array = array();
1413
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1414
		{
1415
			$temp_array['route_count'] = $row['route_count'];
1416
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
1417
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
1418
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
1419
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
1420
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
1421
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
1422
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
1423
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
1424
			$routes_array[] = $temp_array;
1425
		}
1426
		return $routes_array;
1427
	}
1428
1429
    /**
1430
     * Counts all hours by a owner
1431
     *
1432
     * @param $owner
1433
     * @param array $filters
1434
     * @return array the hour list
1435
     */
1436
	public function countAllHoursByOwner($owner, $filters = array())
1437
	{
1438
		global $globalTimezone, $globalDBdriver;
1439
		$filter_query = $this->getFilter($filters,true,true);
1440
		$owner = filter_var($owner,FILTER_SANITIZE_STRING);
1441
		if ($globalTimezone != '') {
1442
			date_default_timezone_set($globalTimezone);
1443
			$datetime = new DateTime();
1444
			$offset = $datetime->format('P');
1445
		} else $offset = '+00:00';
1446
		if ($globalDBdriver == 'mysql') {
1447
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_archive_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
1448
			    FROM spotter_archive_output".$filter_query." spotter_archive_output.owner_name = :owner 
1449
			    GROUP BY hour_name 
1450
			    ORDER BY hour_name ASC";
1451
		} else {
1452
			$query  = "SELECT EXTRACT(HOUR FROM spotter_archive_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
1453
			    FROM spotter_archive_output".$filter_query." spotter_archive_output.owner_name = :owner 
1454
			    GROUP BY hour_name 
1455
			    ORDER BY hour_name ASC";
1456
		}
1457
		$sth = $this->db->prepare($query);
1458
		$sth->execute(array(':owner' => $owner,':offset' => $offset));
1459
		$hour_array = array();
1460
		$temp_array = array();
1461
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1462
		{
1463
			$temp_array['hour_name'] = $row['hour_name'];
1464
			$temp_array['hour_count'] = $row['hour_count'];
1465
			$hour_array[] = $temp_array;
1466
		}
1467
		return $hour_array;
1468
	}
1469
1470
    /**
1471
     * Gets last spotter information based on a particular callsign
1472
     *
1473
     * @param $id
1474
     * @param $date
1475
     * @return array the spotter information
1476
     */
1477
	public function getDateArchiveSpotterDataById($id,$date) {
1478
		$Spotter = new Spotter($this->db);
1479
		date_default_timezone_set('UTC');
1480
		$id = filter_var($id, FILTER_SANITIZE_STRING);
1481
		$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';
1482
		$date = date('c',$date);
1483
		$spotter_array = $Spotter->getDataFromDB($query,array(':id' => $id,':date' => $date));
1484
		return $spotter_array;
1485
	}
1486
1487
    /**
1488
     * Gets all the spotter information based on a particular callsign
1489
     *
1490
     * @param $ident
1491
     * @param $date
1492
     * @return array the spotter information
1493
     */
1494
	public function getDateArchiveSpotterDataByIdent($ident,$date) {
1495
		$Spotter = new Spotter($this->db);
1496
		date_default_timezone_set('UTC');
1497
		$ident = filter_var($ident, FILTER_SANITIZE_STRING);
1498
		$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';
1499
		$date = date('c',$date);
1500
		$spotter_array = $Spotter->getDataFromDB($query,array(':ident' => $ident,':date' => $date));
1501
		return $spotter_array;
1502
	}
1503
1504
    /**
1505
     * Gets all the spotter information based on the airport
1506
     *
1507
     * @param string $airport
1508
     * @param string $limit
1509
     * @param string $sort
1510
     * @param array $filters
1511
     * @return array the spotter information
1512
     */
1513
	public function getSpotterDataByAirport($airport = '', $limit = '', $sort = '',$filters = array()) {
1514
		global $global_query;
1515
		$Spotter = new Spotter($this->db);
1516
		date_default_timezone_set('UTC');
1517
		$query_values = array();
1518
		$limit_query = '';
1519
		$additional_query = '';
1520
		$filter_query = $this->getFilter($filters,true,true);
1521
1522
		if ($airport != "") {
1523
			if (!is_string($airport)) {
1524
				return array();
1525
			} else {
1526
				$additional_query .= " AND ((spotter_archive_output.departure_airport_icao = :airport) OR (spotter_archive_output.arrival_airport_icao = :airport))";
1527
				$query_values = array(':airport' => $airport);
1528
			}
1529
		}
1530
1531
		if ($limit != "") {
1532
			$limit_array = explode(",", $limit);
1533
1534
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1535
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1536
1537
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0) {
1538
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1539
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1540
			}
1541
		}
1542
1543
		if ($sort != "") {
1544
			$search_orderby_array = $Spotter->getOrderBy();
1545
			$orderby_query = $search_orderby_array[$sort]['sql'];
1546
		} else {
1547
			$orderby_query = " ORDER BY spotter_archive_output.date DESC";
1548
		}
1549
1550
		$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;
1551
1552
		$spotter_array = $Spotter->getDataFromDB($query, $query_values, $limit_query);
1553
1554
		return $spotter_array;
1555
	}
1556
}
1557
?>