Completed
Push — master ( 53c6bc...9752bc )
by Yannick
09:01
created

SpotterImport::del()   B

Complexity

Conditions 5
Paths 8

Size

Total Lines 12
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 7
nc 8
nop 0
dl 0
loc 12
rs 8.8571
c 0
b 0
f 0
1
<?php
2
require_once(dirname(__FILE__).'/class.Connection.php');
3
require_once(dirname(__FILE__).'/class.Spotter.php');
4
require_once(dirname(__FILE__).'/class.SpotterLive.php');
5
require_once(dirname(__FILE__).'/class.SpotterArchive.php');
6
require_once(dirname(__FILE__).'/class.Scheduler.php');
7
require_once(dirname(__FILE__).'/class.Translation.php');
8
require_once(dirname(__FILE__).'/class.Stats.php');
9
require_once(dirname(__FILE__).'/class.Source.php');
10
if (isset($globalServerAPRS) && $globalServerAPRS) {
11
    require_once(dirname(__FILE__).'/class.APRS.php');
12
}
13
14
class SpotterImport {
15
    private $all_flights = array();
16
    private $last_delete_hourly = 0;
17
    private $last_delete = 0;
18
    private $stats = array();
19
    private $tmd = 0;
20
    private $source_location = array();
21
    public $db = null;
22
    public $nb = 0;
23
24
    public function __construct($dbc = null) {
25
	global $globalBeta, $globalServerAPRS, $APRSSpotter, $globalNoDB;
26
	if (!(isset($globalNoDB) && $globalNoDB)) {
27
		$Connection = new Connection($dbc);
28
		$this->db = $Connection->db();
29
		date_default_timezone_set('UTC');
30
31
		// Get previous source stats
32
		$Stats = new Stats($dbc);
33
		$currentdate = date('Y-m-d');
34
		$sourcestat = $Stats->getStatsSource($currentdate);
35
		if (!empty($sourcestat)) {
36
		    foreach($sourcestat as $srcst) {
37
		    	$type = $srcst['stats_type'];
38
			if ($type == 'polar' || $type == 'hist') {
39
			    $source = $srcst['source_name'];
40
			    $data = $srcst['source_data'];
41
			    $this->stats[$currentdate][$source][$type] = json_decode($data,true);
42
	    		}
43
		    }
44
		}
45
	}
46
	if (isset($globalServerAPRS) && $globalServerAPRS) {
47
		$APRSSpotter = new APRSSpotter();
48
		//$APRSSpotter->connect();
49
	}
50
51
    }
52
53
    public function get_Schedule($id,$ident) {
54
	global $globalDebug, $globalFork, $globalSchedulesFetch;
55
	// Get schedule here, so it's done only one time
56
	
57
	/*
58
	if ($globalFork) {
59
		$Connection = new Connection();
60
		$dbc = $Connection->db;
61
	} else $dbc = $this->db;
62
	*/
63
	$dbc = $this->db;
64
	$this->all_flights[$id]['schedule_check'] = true;
65
	if ($globalSchedulesFetch) {
66
	if ($globalDebug) echo 'Getting schedule info...'."\n";
67
	$Spotter = new Spotter($dbc);
68
	$Schedule = new Schedule($dbc);
69
	$Translation = new Translation($dbc);
70
	$operator = $Spotter->getOperator($ident);
71
	$scheduleexist = false;
72
	if ($Schedule->checkSchedule($operator) == 0) {
73
	    $operator = $Translation->checkTranslation($ident);
74
	    if ($Schedule->checkSchedule($operator) == 0) {
75
		$schedule = $Schedule->fetchSchedule($operator);
76
		if (count($schedule) > 0 && isset($schedule['DepartureTime']) && isset($schedule['ArrivalTime'])) {
77
		    if ($globalDebug) echo "-> Schedule info for ".$operator." (".$ident.")\n";
78
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('departure_airport_time' => $schedule['DepartureTime']));
79
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('arrival_airport_time' => $schedule['ArrivalTime']));
80
		    // Should also check if route schedule = route from DB
81
		    if ($schedule['DepartureAirportIATA'] != '') {
82
			if ($this->all_flights[$id]['departure_airport'] != $Spotter->getAirportIcao($schedule['DepartureAirportIATA'])) {
83
			    $airport_icao = $Spotter->getAirportIcao($schedule['DepartureAirportIATA']);
84
			    if (trim($airport_icao) != '') {
85
				$this->all_flights[$id]['departure_airport'] = $airport_icao;
86
				if ($globalDebug) echo "-> Change departure airport to ".$airport_icao." for ".$ident."\n";
87
			    }
88
			}
89
		    }
90
		    if ($schedule['ArrivalAirportIATA'] != '') {
91
			if ($this->all_flights[$id]['arrival_airport'] != $Spotter->getAirportIcao($schedule['ArrivalAirportIATA'])) {
92
			    $airport_icao = $Spotter->getAirportIcao($schedule['ArrivalAirportIATA']);
93
			    if (trim($airport_icao) != '') {
94
				$this->all_flights[$id]['arrival_airport'] = $airport_icao;
95
				if ($globalDebug) echo "-> Change arrival airport to ".$airport_icao." for ".$ident."\n";
96
			    }
97
			}
98
		    }
99
		    $Schedule->addSchedule($operator,$this->all_flights[$id]['departure_airport'],$this->all_flights[$id]['departure_airport_time'],$this->all_flights[$id]['arrival_airport'],$this->all_flights[$id]['arrival_airport_time'],$schedule['Source']);
100
		}
101
	    } else $scheduleexist = true;
102
	} else $scheduleexist = true;
103
	// close connection, at least one way will work ?
104
       if ($scheduleexist) {
105
		if ($globalDebug) echo "-> get arrival/departure airport info for ".$ident."\n";
106
    		$sch = $Schedule->getSchedule($operator);
107
		$this->all_flights[$id] = array_merge($this->all_flights[$id],array('arrival_airport' => $sch['arrival_airport_icao'],'departure_airport' => $sch['departure_airport_icao'],'departure_airport_time' => $sch['departure_airport_time'],'arrival_airport_time' => $sch['arrival_airport_time']));
108
       }
109
	$Spotter->db = null;
110
	$Schedule->db = null;
111
	$Translation->db = null;
112
	unset($Spotter->db);
113
	unset($Schedule->db);
114
	unset($Translation->db);
115
116
	/*
117
	if ($globalFork) {
118
	    $Connection->db = null;
119
	    unset($Connection->db);
120
	}
121
	  */
122
	}
123
    }
124
125
    public function checkAll() {
126
	global $globalDebug, $globalNoImport;
127
	if ($globalDebug) echo "Update last seen flights data...\n";
128
	if (!isset($globalNoImport) || $globalNoImport === FALSE) {
129
	    foreach ($this->all_flights as $key => $flight) {
130
		if (isset($this->all_flights[$key]['id'])) {
131
		    //echo $this->all_flights[$key]['id'].' - '.$this->all_flights[$key]['latitude'].'  '.$this->all_flights[$key]['longitude']."\n";
132
    		    $Spotter = new Spotter($this->db);
133
        	    $real_arrival = $this->arrival($key);
134
        	    if (isset($this->all_flights[$key]['altitude'])) $Spotter->updateLatestSpotterData($this->all_flights[$key]['id'],$this->all_flights[$key]['ident'],$this->all_flights[$key]['latitude'],$this->all_flights[$key]['longitude'],$this->all_flights[$key]['altitude'],$this->all_flights[$key]['ground'],$this->all_flights[$key]['speed'],$this->all_flights[$key]['datetime'],$real_arrival['airport_icao'],$real_arrival['airport_time']);
135
        	}
136
	    }
137
	}
138
    }
139
140
    public function arrival($key) {
141
	global $globalClosestMinDist, $globalDebug;
142
	if ($globalDebug) echo 'Update arrival...'."\n";
143
	$Spotter = new Spotter($this->db);
144
        $airport_icao = '';
145
        $airport_time = '';
146
        if (!isset($globalClosestMinDist) || $globalClosestMinDist == '') $globalClosestMinDist = 50;
147
	if ($this->all_flights[$key]['latitude'] != '' && $this->all_flights[$key]['longitude'] != '') {
148
	    $closestAirports = $Spotter->closestAirports($this->all_flights[$key]['latitude'],$this->all_flights[$key]['longitude'],$globalClosestMinDist);
149
    	    if (isset($closestAirports[0])) {
150
        	if (isset($this->all_flights[$key]['arrival_airport']) && $this->all_flights[$key]['arrival_airport'] == $closestAirports[0]['icao']) {
151
        	    $airport_icao = $closestAirports[0]['icao'];
152
        	    $airport_time = $this->all_flights[$key]['datetime'];
153
        	    if ($globalDebug) echo "---++ Find arrival airport. airport_icao : ".$airport_icao."\n";
154
        	} elseif (count($closestAirports > 1) && isset($this->all_flights[$key]['arrival_airport']) && $this->all_flights[$key]['arrival_airport'] != '') {
155
        	    foreach ($closestAirports as $airport) {
156
        		if ($this->all_flights[$key]['arrival_airport'] == $airport['icao']) {
157
        		    $airport_icao = $airport['icao'];
158
        		    $airport_time = $this->all_flights[$key]['datetime'];
159
        		    if ($globalDebug) echo "---++ Find arrival airport. airport_icao : ".$airport_icao."\n";
160
        		    break;
161
        		}
162
        	    }
163
        	} elseif ($this->all_flights[$key]['altitude'] == 0 || ($this->all_flights[$key]['altitude_real'] != '' && ($closestAirports[0]['altitude'] < $this->all_flights[$key]['altitude_real'] && $this->all_flights[$key]['altitude_real'] < $closestAirports[0]['altitude']+5000))) {
164
        		$airport_icao = $closestAirports[0]['icao'];
165
        		$airport_time = $this->all_flights[$key]['datetime'];
166
        	} else {
167
        		if ($globalDebug) echo "----- Can't find arrival airport. Airport altitude : ".$closestAirports[0]['altitude'].' - flight altitude : '.$this->all_flights[$key]['altitude_real']."\n";
168
        	}
169
    	    } else {
170
    		    if ($globalDebug) echo "----- No Airport near last coord. Latitude : ".$this->all_flights[$key]['latitude'].' - Longitude : '.$this->all_flights[$key]['longitude'].' - MinDist : '.$globalClosestMinDist."\n";
171
    	    }
172
173
        } else {
174
        	if ($globalDebug) echo "---- No latitude or longitude. Ident : ".$this->all_flights[$key]['ident']."\n";
175
        }
176
        return array('airport_icao' => $airport_icao,'airport_time' => $airport_time);
177
    }
178
179
180
181
    public function del() {
182
	global $globalDebug, $globalNoImport, $globalNoDB;
183
	// Delete old infos
184
	if ($globalDebug) echo 'Delete old values and update latest data...'."\n";
185
	foreach ($this->all_flights as $key => $flight) {
186
	    if (isset($flight['lastupdate'])) {
187
		if ($flight['lastupdate'] < (time()-5900)) {
188
		    $this->delKey($key);
189
		}
190
	    }
191
	}
192
    }
193
194
    public function delKey($key) {
195
	global $globalDebug, $globalNoImport, $globalNoDB;
196
	// Delete old infos
197
	if (isset($this->all_flights[$key]['id'])) {
198
		if ($globalDebug) echo "--- Delete old values with id ".$this->all_flights[$key]['id']."\n";
199
		if ((!isset($globalNoImport) || $globalNoImport === FALSE) && (!isset($globalNoDB) || $globalNoDB !== TRUE)) {
200
			$real_arrival = $this->arrival($key);
201
			$Spotter = new Spotter($this->db);
202
			if ($this->all_flights[$key]['latitude'] != '' && $this->all_flights[$key]['longitude'] != '') {
203
				$result = $Spotter->updateLatestSpotterData($this->all_flights[$key]['id'],$this->all_flights[$key]['ident'],$this->all_flights[$key]['latitude'],$this->all_flights[$key]['longitude'],$this->all_flights[$key]['altitude'],$this->all_flights[$key]['ground'],$this->all_flights[$key]['speed'],$this->all_flights[$key]['datetime'],$real_arrival['airport_icao'],$real_arrival['airport_time']);
204
				if ($globalDebug && $result != 'success') echo '!!! ERROR : '.$result."\n";
205
			}
206
		}
207
	}
208
	unset($this->all_flights[$key]);
209
    }
210
211
    public function add($line) {
212
	global $globalPilotIdAccept, $globalAirportAccept, $globalAirlineAccept, $globalAirlineIgnore, $globalAirportIgnore, $globalFork, $globalDistanceIgnore, $globalDaemon, $globalSBS1update, $globalDebug, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalCoordMinChange, $globalDebugTimeElapsed, $globalCenterLatitude, $globalCenterLongitude, $globalBeta, $globalSourcesupdate, $globalAirlinesSource, $globalVAM, $globalAllFlights, $globalServerAPRS, $APRSSpotter, $globalNoImport, $globalNoDB, $globalVA, $globalAircraftMaxUpdate;
213
	//if (!isset($globalDebugTimeElapsed) || $globalDebugTimeElapsed == '') $globalDebugTimeElapsed = FALSE;
214
	if (!isset($globalCoordMinChange) || $globalCoordMinChange == '') $globalCoordMinChange = '0.02';
215
	if (!isset($globalAircraftMaxUpdate) || $globalAircraftMaxUpdate == '') $globalAircraftMaxUpdate = 2300;
216
/*
217
	$Spotter = new Spotter();
218
	$dbc = $Spotter->db;
219
	$SpotterLive = new SpotterLive($dbc);
220
	$Common = new Common();
221
	$Schedule = new Schedule($dbc);
222
*/
223
	date_default_timezone_set('UTC');
224
	// signal handler - playing nice with sockets and dump1090
225
	// pcntl_signal_dispatch();
226
227
	// get the time (so we can figure the timeout)
228
	//$time = time();
229
230
	//pcntl_signal_dispatch();
231
	$dataFound = false;
232
	//$putinarchive = false;
233
	$send = false;
234
	
235
	// SBS format is CSV format
236
	if(is_array($line) && (isset($line['hex']) || isset($line['id']))) {
237
	    //print_r($line);
238
  	    if (isset($line['id']) || (isset($line['hex']) && $line['hex'] != '' && $line['hex'] != '00000' && $line['hex'] != '000000' && $line['hex'] != '111111' && ctype_xdigit($line['hex']) && strlen($line['hex']) === 6)) {
239
240
		// Increment message number
241
		if (isset($line['sourcestats']) && $line['sourcestats'] == TRUE) {
242
		    $current_date = date('Y-m-d');
243
		    if (isset($line['source_name'])) $source = $line['source_name'];
244
		    else $source = '';
245
		    if ($source == '' || $line['format_source'] == 'aprs') $source = $line['format_source'];
246
		    if (!isset($this->stats[$current_date][$source]['msg'])) {
247
		    	$this->stats[$current_date][$source]['msg']['date'] = time();
248
		    	$this->stats[$current_date][$source]['msg']['nb'] = 1;
249
		    } else $this->stats[$current_date][$source]['msg']['nb'] += 1;
250
		}
251
		
252
		/*
253
		$dbc = $this->db;
254
		$Connection = new Connection($dbc);
255
		$Connection->connectionExists();
256
		$dbc = $Connection->db;
257
		*/
258
		//$Spotter = new Spotter($dbc);
259
		//$SpotterLive = new SpotterLive($dbc);
260
		$Common = new Common();
261
//		echo $this->nb++."\n";
262
		//$this->db = $dbc;
263
264
		//$hex = trim($line['hex']);
265
	        if (!isset($line['id'])) $id = trim($line['hex']);
266
	        else $id = trim($line['id']);
267
		
268
		if (!isset($this->all_flights[$id])) {
269
		    $this->all_flights[$id] = array();
270
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('addedSpotter' => 0));
271
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('ident' => '','departure_airport' => '', 'arrival_airport' => '','latitude' => '', 'longitude' => '', 'speed' => '', 'altitude' => '','altitude_real' => '','altitude_previous' => '', 'heading' => '','departure_airport_time' => '','arrival_airport_time' => '','squawk' => '','route_stop' => '','registration' => '','pilot_id' => '','pilot_name' => '','waypoints' => '','ground' => '0', 'format_source' => '','source_name' => '','over_country' => '','verticalrate' => '','noarchive' => false,'putinarchive' => true,'source_type' => ''));
272
		    if (isset($globalDaemon) && $globalDaemon === FALSE) $this->all_flights[$id] = array_merge($this->all_flights[$id],array('lastupdate' => time()));
273
		    if (!isset($line['id'])) {
274
			if (!isset($globalDaemon)) $globalDaemon = TRUE;
275
//			if (isset($line['format_source']) && ($line['format_source'] == 'sbs' || $line['format_source'] == 'tsv' || $line['format_source'] == 'raw') && $globalDaemon) $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $this->all_flights[$id]['hex'].'-'.$this->all_flights[$id]['ident'].'-'.date('YmdGi')));
276
//			if (isset($line['format_source']) && ($line['format_source'] === 'sbs' || $line['format_source'] === 'tsv' || $line['format_source'] === 'raw' || $line['format_source'] === 'deltadbtxt' || $line['format_source'] === 'planeupdatefaa' || $line['format_source'] === 'aprs') && $globalDaemon) $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $this->all_flights[$id]['hex'].'-'.date('YmdHi')));
277
			if (isset($line['format_source']) && ($line['format_source'] === 'sbs' || $line['format_source'] === 'tsv' || $line['format_source'] === 'raw' || $line['format_source'] === 'deltadbtxt' || $line['format_source'] === 'planeupdatefaa' || $line['format_source'] === 'aprs' || $line['format_source'] === 'aircraftlistjson' || $line['format_source'] === 'radarvirtueljson' || $line['format_source'] === 'famaprs')) $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $id.'-'.date('YmdHi')));
278
		        //else $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $this->all_flights[$id]['hex'].'-'.$this->all_flights[$id]['ident']));
279
		     } else $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $line['id']));
280
		    if ($globalAllFlights !== FALSE) $dataFound = true;
281
		}
282
		if (isset($line['source_type']) && $line['source_type'] != '') {
283
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('source_type' => $line['source_type']));
284
		}
285
		
286
		//print_r($this->all_flights);
287
		if (isset($line['hex']) && !isset($this->all_flights[$id]['hex']) && ctype_xdigit($line['hex'])) {
288
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('hex' => trim($line['hex'])));
289
		    //if (isset($line['datetime']) && preg_match('/^(\d{4}(?:\-\d{2}){2} \d{2}(?:\:\d{2}){2})$/',$line['datetime'])) {
290
			//$this->all_flights[$id] = array_merge($this->all_flights[$id],array('datetime' => $line['datetime']));
291
		    //} else $this->all_flights[$id] = array_merge($this->all_flights[$id],array('datetime' => date('Y-m-d H:i:s')));
292
		    if (!isset($line['aircraft_name']) && (!isset($line['aircraft_icao']) || $line['aircraft_icao'] == '????') && $line['format_source'] != 'whazzup' && $line['format_source'] != 'vatsimtxt' && $line['format_source'] != 'pireps' && $line['format_source'] != 'phpvmacars' && $line['format_source'] != 'vam' && $line['format_source'] != 'flightgearsp' && $line['format_source'] != 'flightgearmp') {
293
			$timeelapsed = microtime(true);
294
			if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
295
			    $Spotter = new Spotter($this->db);
296
			    if (isset($this->all_flights[$id]['source_type'])) {
297
				$aircraft_icao = $Spotter->getAllAircraftType(trim($line['hex']),$this->all_flights[$id]['source_type']);
298
			    } else {
299
				$aircraft_icao = $Spotter->getAllAircraftType(trim($line['hex']));
300
			    }
301
			    $Spotter->db = null;
302
			    if ($globalDebugTimeElapsed) echo 'Time elapsed for update getallaircrattype : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
303
			    if ($aircraft_icao != '') $this->all_flights[$id] = array_merge($this->all_flights[$id],array('aircraft_icao' => $aircraft_icao));
304
			}
305
		    }
306
		    if ($globalAllFlights !== FALSE) $dataFound = true;
307
		    if ($globalDebug) echo "*********** New aircraft hex : ".$line['hex']." ***********\n";
308
		}
309
		if (isset($line['aircraft_icao']) && $line['aircraft_icao'] != '') {
310
			$icao = $line['aircraft_icao'];
311
			$Spotter = new Spotter($this->db);
312
			if (isset($Spotter->aircraft_correct_icaotype[$icao])) $icao = $Spotter->aircraft_correct_icaotype[$icao];
313
			$Spotter->db = null;
314
			$this->all_flights[$id] = array_merge($this->all_flights[$id],array('aircraft_icao' => $icao));
315
		}
316
		if (!isset($this->all_flights[$id]['aircraft_icao']) && isset($line['aircraft_name'])) {
317
			if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
318
				// Get aircraft ICAO from aircraft name
319
				$Spotter = new Spotter($this->db);
320
				$aircraft_icao = $Spotter->getAircraftIcao($line['aircraft_name']);
321
				$Spotter->db = null;
322
				if ($aircraft_icao != '') $this->all_flights[$id] = array_merge($this->all_flights[$id],array('aircraft_icao' => $aircraft_icao));
323
			}
324
		}
325
		if (!isset($this->all_flights[$id]['aircraft_icao']) && isset($line['aircraft_type'])) {
326
			if ($line['aircraft_type'] == 'PARA_GLIDER') $aircraft_icao = 'GLID';
327
			elseif ($line['aircraft_type'] == 'HELICOPTER_ROTORCRAFT') $aircraft_icao = 'UHEL';
328
			elseif ($line['aircraft_type'] == 'TOW_PLANE') $aircraft_icao = 'TOWPLANE';
329
			elseif ($line['aircraft_type'] == 'POWERED_AIRCRAFT') $aircraft_icao = 'POWAIRC';
330
			if (isset($aircraft_icao)) $this->all_flights[$id] = array_merge($this->all_flights[$id],array('aircraft_icao' => $aircraft_icao));
331
		}
332
		if (!isset($this->all_flights[$id]['aircraft_icao'])) {
333
			$this->all_flights[$id] = array_merge($this->all_flights[$id],array('aircraft_icao' => 'NA'));
334
		}
335
		//if (isset($line['datetime']) && preg_match('/^(\d{4}(?:\-\d{2}){2} \d{2}(?:\:\d{2}){2})$/',$line['datetime'])) {
336
		if (isset($line['datetime']) && strtotime($line['datetime']) > time()-20*60 && strtotime($line['datetime']) < time()+20*60) {
337
		    if (!isset($this->all_flights[$id]['datetime']) || strtotime($line['datetime']) >= strtotime($this->all_flights[$id]['datetime'])) {
338
			$this->all_flights[$id] = array_merge($this->all_flights[$id],array('datetime' => $line['datetime']));
339
		    } else {
340
				if (strtotime($line['datetime']) == strtotime($this->all_flights[$id]['datetime']) && $globalDebug) echo "!!! Date is the same as previous data for ".$this->all_flights[$id]['hex']." - format : ".$line['format_source']."\n";
341
				elseif (strtotime($line['datetime']) > strtotime($this->all_flights[$id]['datetime']) && $globalDebug) echo "!!! Date previous latest data (".$line['datetime']." > ".$this->all_flights[$id]['datetime'].") !!! for ".$this->all_flights[$id]['hex']." - format : ".$line['format_source']."\n";
342
				/*
343
				echo strtotime($line['datetime']).' > '.strtotime($this->all_flights[$id]['datetime']);
344
				print_r($this->all_flights[$id]);
345
				print_r($line);
346
				*/
347
				return '';
348
		    }
349
		} elseif (isset($line['datetime']) && strtotime($line['datetime']) < time()-20*60) {
350
			if ($globalDebug) echo "!!! Date is too old ".$this->all_flights[$id]['hex']." - format : ".$line['format_source']."!!!";
351
			return '';
352
		} elseif (isset($line['datetime']) && strtotime($line['datetime']) > time()+20*60) {
353
			if ($globalDebug) echo "!!! Date is in the future ".$this->all_flights[$id]['hex']." - format : ".$line['format_source']."!!!";
354
			return '';
355
		} elseif (!isset($line['datetime'])) {
356
			date_default_timezone_set('UTC');
357
			$this->all_flights[$id] = array_merge($this->all_flights[$id],array('datetime' => date('Y-m-d H:i:s')));
358
		} else {
359
			if ($globalDebug) echo "!!! Unknow date error ".$this->all_flights[$id]['hex']." - format : ".$line['format_source']."!!!";
360
			return '';
361
		}
362
363
		if (isset($line['registration']) && $line['registration'] != '' && $line['registration'] != 'z.NO-REG') {
364
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('registration' => $line['registration']));
365
		}
366
		if (isset($line['waypoints']) && $line['waypoints'] != '') {
367
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('waypoints' => $line['waypoints']));
368
		}
369
		if (isset($line['pilot_id']) && $line['pilot_id'] != '') {
370
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('pilot_id' => trim($line['pilot_id'])));
371
		}
372
		if (isset($line['pilot_name']) && $line['pilot_name'] != '') {
373
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('pilot_name' => trim($line['pilot_name'])));
374
		}
375
 
376
		if (isset($line['ident']) && $line['ident'] != '' && $line['ident'] != '????????' && $line['ident'] != '00000000' && ($this->all_flights[$id]['ident'] != trim($line['ident'])) && preg_match('/^[a-zA-Z0-9]+$/', $line['ident'])) {
377
378
		    if ($this->all_flights[$id]['addedSpotter'] == 1) {
379
			if ($globalVA !== TRUE && $globalIVAO !== TRUE && $globalVATSIM !== TRUE && $globalphpVMS !== TRUE && $globalVAM !== TRUE && $this->all_flights[$id]['lastupdate'] < time() - 2300) {
380
				if ($globalDebug) echo '---!!!! New ident, reset aircraft data...'."\n";
381
				$this->all_flights[$id] = array_merge($this->all_flights[$id],array('addedSpotter' => 0));
382
				$this->all_flights[$id] = array_merge($this->all_flights[$id],array('forcenew' => 1));
383
				if (isset($line['format_source']) && ($line['format_source'] === 'sbs' || $line['format_source'] === 'tsv' || $line['format_source'] === 'raw' || $line['format_source'] === 'deltadbtxt' || $line['format_source'] === 'planeupdatefaa' || $line['format_source'] === 'aprs' || $line['format_source'] === 'aircraftlistjson' || $line['format_source'] === 'radarvirtueljson' || $line['format_source'] === 'famaprs')) $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $id.'-'.date('YmdHi')));
384
				elseif (isset($line['id'])) $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $line['id']));
385
				elseif (isset($this->all_flights[$id]['ident'])) $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $this->all_flights[$id]['hex'].'-'.$this->all_flights[$id]['ident']));
386
			} else {
387
			    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('ident' => trim($line['ident'])));
388
			    if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
389
				$timeelapsed = microtime(true);
390
            			$Spotter = new Spotter($this->db);
391
            			$fromsource = NULL;
392
            			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
393
            			elseif (isset($line['format_source']) && $line['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
394
				elseif (isset($line['format_source']) && $line['format_source'] == 'whazzup') $fromsource = 'ivao';
395
				elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
396
				elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
397
            			$result = $Spotter->updateIdentSpotterData($this->all_flights[$id]['id'],$this->all_flights[$id]['ident'],$fromsource);
398
				if ($globalDebug && $result != 'success') echo '!!! ERROR : '.$result."\n";
399
				$Spotter->db = null;
400
				if ($globalDebugTimeElapsed) echo 'Time elapsed for update identspotterdata : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
401
			    }
402
			}
403
		    } else $this->all_flights[$id] = array_merge($this->all_flights[$id],array('ident' => trim($line['ident'])));
404
		    
405
/*
406
		    if (!isset($line['id'])) {
407
			if (!isset($globalDaemon)) $globalDaemon = TRUE;
408
//			if (isset($line['format_source']) && ($line['format_source'] == 'sbs' || $line['format_source'] == 'tsv' || $line['format_source'] == 'raw') && $globalDaemon) $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $this->all_flights[$id]['hex'].'-'.$this->all_flights[$id]['ident'].'-'.date('YmdGi')));
409
			if (isset($line['format_source']) && ($line['format_source'] == 'sbs' || $line['format_source'] == 'tsv' || $line['format_source'] == 'raw') && $globalDaemon) $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $this->all_flights[$id]['hex'].'-'.date('YmdGi')));
410
		        else $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $this->all_flights[$id]['hex'].'-'.$this->all_flights[$id]['ident']));
411
		     } else $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $line['id']));
412
  */
413
		    if (!isset($this->all_flights[$id]['id'])) $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $this->all_flights[$id]['hex'].'-'.$this->all_flights[$id]['ident']));
414
415
		    //$putinarchive = true;
416
		    if (isset($line['departure_airport_time']) && $line['departure_airport_time'] != 0) {
417
			$this->all_flights[$id] = array_merge($this->all_flights[$id],array('departure_airport_time' => $line['departure_airport_time']));
418
		    }
419
		    if (isset($line['arrival_airport_time']) && $line['arrival_airport_time'] != 0) {
420
			$this->all_flights[$id] = array_merge($this->all_flights[$id],array('arrival_airport_time' => $line['arrival_airport_time']));
421
		    }
422
		    if (isset($line['departure_airport_icao']) && isset($line['arrival_airport_icao'])) {
423
		    		$this->all_flights[$id] = array_merge($this->all_flights[$id],array('departure_airport' => $line['departure_airport_icao'],'arrival_airport' => $line['arrival_airport_icao'],'route_stop' => ''));
424
		    } elseif (isset($line['departure_airport_iata']) && isset($line['arrival_airport_iata'])) {
425
			$timeelapsed = microtime(true);
426
			if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
427
				$Spotter = new Spotter($this->db);
428
				$line['departure_airport_icao'] = $Spotter->getAirportIcao($line['departure_airport_iata']);
429
				$line['arrival_airport_icao'] = $Spotter->getAirportIcao($line['arrival_airport_iata']);
430
		    		$this->all_flights[$id] = array_merge($this->all_flights[$id],array('departure_airport' => $line['departure_airport_icao'],'arrival_airport' => $line['arrival_airport_icao'],'route_stop' => ''));
431
				if ($globalDebugTimeElapsed) echo 'Time elapsed for update getAirportICAO : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
432
                        }
433
		    } elseif (!isset($line['format_source']) || $line['format_source'] != 'aprs') {
434
			$timeelapsed = microtime(true);
435
			if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
436
			    $Spotter = new Spotter($this->db);
437
			    $route = $Spotter->getRouteInfo(trim($line['ident']));
438
			    if (!isset($route['fromairport_icao']) && !isset($route['toairport_icao'])) {
439
				$Translation = new Translation($this->db);
440
				$ident = $Translation->checkTranslation(trim($line['ident']));
441
				$route = $Spotter->getRouteInfo($ident);
442
				$Translation->db = null;
443
			    }
444
			    $Spotter->db = null;
445
			    if ($globalDebugTimeElapsed) echo 'Time elapsed for update getrouteinfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
446
                    	}
447
			if (isset($route['fromairport_icao']) && isset($route['toairport_icao'])) {
448
			    //if ($route['FromAirport_ICAO'] != $route['ToAirport_ICAO']) {
449
			    if ($route['fromairport_icao'] != $route['toairport_icao']) {
450
				//    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('departure_airport' => $route['FromAirport_ICAO'],'arrival_airport' => $route['ToAirport_ICAO'],'route_stop' => $route['RouteStop']));
451
		    		$this->all_flights[$id] = array_merge($this->all_flights[$id],array('departure_airport' => $route['fromairport_icao'],'arrival_airport' => $route['toairport_icao'],'route_stop' => $route['routestop']));
452
		    	    }
453
			}
454
			if (!isset($globalFork)) $globalFork = TRUE;
455
			if (!$globalVA && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM && (!isset($line['format_source']) || $line['format_source'] != 'aprs')) {
456
				if (!isset($this->all_flights[$id]['schedule_check']) || $this->all_flights[$id]['schedule_check'] === false) $this->get_Schedule($id,trim($line['ident']));
457
			}
458
		    }
459
		}
460
461
		if (isset($line['speed']) && $line['speed'] != '') {
462
		//    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('speed' => $line[12]));
463
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('speed' => round($line['speed'])));
464
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('speed_fromsrc' => true));
465
		    //$dataFound = true;
466
		} else if (!isset($this->all_flights[$id]['speed_fromsrc']) && isset($this->all_flights[$id]['time_last_coord']) && $this->all_flights[$id]['time_last_coord'] != time() && isset($line['latitude']) && isset($line['longitude'])) {
467
		    $distance = $Common->distance($line['latitude'],$line['longitude'],$this->all_flights[$id]['latitude'],$this->all_flights[$id]['longitude'],'m');
468
		    if ($distance > 1000 && $distance < 10000) {
469
		    // use datetime
470
			$speed = $distance/(time() - $this->all_flights[$id]['time_last_coord']);
471
			$speed = $speed*3.6;
472
			if ($speed < 1000) $this->all_flights[$id] = array_merge($this->all_flights[$id],array('speed' => round($speed)));
473
  			if ($globalDebug) echo "ø Calculated Speed for ".$this->all_flights[$id]['hex']." : ".round($speed)." - distance : ".$distance."\n";
474
		    }
475
		}
476
477
478
479
	        if (isset($line['latitude']) && isset($line['longitude']) && $line['latitude'] != '' && $line['longitude'] != '' && is_numeric($line['latitude']) && is_numeric($line['longitude']) && !is_int($line['latitude']) && !is_int($line['longitude'])) {
480
	    	    if (isset($this->all_flights[$id]['time_last_coord'])) $timediff = round(time()-$this->all_flights[$id]['time_last_coord']);
481
	    	    else unset($timediff);
482
	    	    if ($this->tmd > 5 || (isset($globalVA) && $globalVA) || (isset($globalIVAO) && $globalIVAO) || (isset($globalVATSIM) && $globalVATSIM) || (isset($globalphpVMS) && $globalphpVMS) || (isset($globalVAM) && $globalVAM) || !isset($timediff) || $timediff > 2000 || ($timediff > 30 && isset($this->all_flights[$id]['latitude']) && isset($this->all_flights[$id]['longitude']) && $Common->withinThreshold($timediff,$Common->distance($line['latitude'],$line['longitude'],$this->all_flights[$id]['latitude'],$this->all_flights[$id]['longitude'],'m')))) {
483
			if (isset($this->all_flights[$id]['archive_latitude']) && isset($this->all_flights[$id]['archive_longitude']) && isset($this->all_flights[$id]['livedb_latitude']) && isset($this->all_flights[$id]['livedb_longitude'])) {
484
			    if ($timediff > $globalAircraftMaxUpdate || !$Common->checkLine($this->all_flights[$id]['archive_latitude'],$this->all_flights[$id]['archive_longitude'],$this->all_flights[$id]['livedb_latitude'],$this->all_flights[$id]['livedb_longitude'],$line['latitude'],$line['longitude'])) {
0 ignored issues
show
Bug introduced by
The variable $timediff does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
485
				$this->all_flights[$id]['archive_latitude'] = $line['latitude'];
486
				$this->all_flights[$id]['archive_longitude'] = $line['longitude'];
487
				$this->all_flights[$id]['putinarchive'] = true;
488
				$this->tmd = 0;
489
				if (!isset($globalNoImport) || $globalNoImport === FALSE) {
490
				    if ($globalDebug) echo "\n".' ------- Check Country for '.$this->all_flights[$id]['ident'].' with latitude : '.$line['latitude'].' and longitude : '.$line['longitude'].'.... ';
491
				    $timeelapsed = microtime(true);
492
				    if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
493
					$Spotter = new Spotter($this->db);
494
					$all_country = $Spotter->getCountryFromLatitudeLongitude($line['latitude'],$line['longitude']);
495
					if (!empty($all_country)) $this->all_flights[$id]['over_country'] = $all_country['iso2'];
496
					else $this->all_flights[$id]['over_country'] = '';
497
					$Spotter->db = null;
498
					if ($globalDebugTimeElapsed) echo 'Time elapsed for update getCountryFromlatitudeLongitude : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
499
					if ($globalDebug) echo 'FOUND : '.$this->all_flights[$id]['over_country'].' ---------------'."\n";
500
				    }
501
				}
502
			    }
503
			}
504
505
			if (isset($line['latitude']) && $line['latitude'] != '' && $line['latitude'] != 0 && $line['latitude'] < 91 && $line['latitude'] > -90) {
506
			    //if (!isset($this->all_flights[$id]['latitude']) || $this->all_flights[$id]['latitude'] == '' || abs($this->all_flights[$id]['latitude']-$line['latitude']) < 3 || $line['format_source'] != 'sbs' || time() - $this->all_flights[$id]['lastupdate'] > 30) {
507
				if (!isset($this->all_flights[$id]['archive_latitude'])) $this->all_flights[$id]['archive_latitude'] = $line['latitude'];
508
				if (!isset($this->all_flights[$id]['livedb_latitude']) || abs($this->all_flights[$id]['livedb_latitude']-$line['latitude']) > $globalCoordMinChange || $this->all_flights[$id]['format_source'] == 'aprs') {
509
				    $this->all_flights[$id]['livedb_latitude'] = $line['latitude'];
510
				    $dataFound = true;
511
				    $this->all_flights[$id]['time_last_coord'] = time();
512
				}
513
				// elseif ($globalDebug) echo '!*!*! Ignore data, too close to previous one'."\n";
514
				$this->all_flights[$id] = array_merge($this->all_flights[$id],array('latitude' => $line['latitude']));
515
				/*
516
				if (abs($this->all_flights[$id]['archive_latitude']-$this->all_flights[$id]['latitude']) > 0.3) {
517
				    $this->all_flights[$id]['archive_latitude'] = $line['latitude'];
518
				    $this->all_flights[$id]['putinarchive'] = true;
519
				    //$putinarchive = true;
520
				}
521
				*/
522
			    /*
523
			    } elseif (isset($this->all_flights[$id]['latitude'])) {
524
				if ($globalDebug) echo '!!! Strange latitude value - diff : '.abs($this->all_flights[$id]['latitude']-$line['latitude']).'- previous lat : '.$this->all_flights[$id]['latitude'].'- new lat : '.$line['latitude']."\n";
525
			    }
526
			    */
527
			}
528
			if (isset($line['longitude']) && $line['longitude'] != '' && $line['longitude'] != 0 && $line['longitude'] < 360 && $line['longitude'] > -180) {
529
			    if ($line['longitude'] > 180) $line['longitude'] = $line['longitude'] - 360;
530
			    //if (!isset($this->all_flights[$id]['longitude']) || $this->all_flights[$id]['longitude'] == ''  || abs($this->all_flights[$id]['longitude']-$line['longitude']) < 2 || $line['format_source'] != 'sbs' || time() - $this->all_flights[$id]['lastupdate'] > 30) {
531
				if (!isset($this->all_flights[$id]['archive_longitude'])) $this->all_flights[$id]['archive_longitude'] = $line['longitude'];
532
				if (!isset($this->all_flights[$id]['livedb_longitude']) || abs($this->all_flights[$id]['livedb_longitude']-$line['longitude']) > $globalCoordMinChange || $this->all_flights[$id]['format_source'] == 'aprs') {
533
				    $this->all_flights[$id]['livedb_longitude'] = $line['longitude'];
534
				    $dataFound = true;
535
				    $this->all_flights[$id]['time_last_coord'] = time();
536
				}
537
				// elseif ($globalDebug) echo '!*!*! Ignore data, too close to previous one'."\n";
538
				$this->all_flights[$id] = array_merge($this->all_flights[$id],array('longitude' => $line['longitude']));
539
				/*
540
				if (abs($this->all_flights[$id]['archive_longitude']-$this->all_flights[$id]['longitude']) > 0.3) {
541
				    $this->all_flights[$id]['archive_longitude'] = $line['longitude'];
542
				    $this->all_flights[$id]['putinarchive'] = true;
543
				    //$putinarchive = true;
544
				}
545
				*/
546
			/*
547
			    } elseif (isset($this->all_flights[$id]['longitude'])) {
548
				if ($globalDebug) echo '!!! Strange longitude value - diff : '.abs($this->all_flights[$id]['longitude']-$line['longitude']).'- previous lat : '.$this->all_flights[$id]['longitude'].'- new lat : '.$line['longitude']."\n";
549
			    }
550
			    */
551
			}
552
553
		    } else if ($globalDebug && $timediff > 30) {
554
			$this->tmd = $this->tmd + 1;
555
			echo '!!! Too much distance in short time... for '.$this->all_flights[$id]['ident']."\n";
556
			echo 'Time : '.$timediff.'s - Distance : '.$Common->distance($line['latitude'],$line['longitude'],$this->all_flights[$id]['latitude'],$this->all_flights[$id]['longitude'],'m')."m -";
557
			echo 'Speed : '.(($Common->distance($line['latitude'],$line['longitude'],$this->all_flights[$id]['latitude'],$this->all_flights[$id]['longitude'],'m')/$timediff)*3.6)." km/h - ";
558
			echo 'Lat : '.$line['latitude'].' - long : '.$line['longitude'].' - prev lat : '.$this->all_flights[$id]['latitude'].' - prev long : '.$this->all_flights[$id]['longitude']." \n";
559
		    }
560
		}
561
		if (isset($line['last_update']) && $line['last_update'] != '') {
562
		    if (isset($this->all_flights[$id]['last_update']) && $this->all_flights[$id]['last_update'] != $line['last_update']) $dataFound = true;
563
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('last_update' => $line['last_update']));
564
		}
565
		if (isset($line['verticalrate']) && $line['verticalrate'] != '') {
566
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('verticalrate' => $line['verticalrate']));
567
		    //$dataFound = true;
568
		}
569
		if (isset($line['format_source']) && $line['format_source'] != '') {
570
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('format_source' => $line['format_source']));
571
		}
572
		if (isset($line['source_name']) && $line['source_name'] != '') {
573
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('source_name' => $line['source_name']));
574
		}
575
		if (isset($line['emergency']) && $line['emergency'] != '') {
576
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('emergency' => $line['emergency']));
577
		    //$dataFound = true;
578
		}
579
		if (isset($line['ground']) && $line['ground'] != '') {
580
		    if (isset($this->all_flights[$id]['ground']) && $this->all_flights[$id]['ground'] == 1 && $line['ground'] == 0) {
581
			// Here we force archive of flight because after ground it's a new one (or should be)
582
			$this->all_flights[$id] = array_merge($this->all_flights[$id],array('addedSpotter' => 0));
583
			$this->all_flights[$id] = array_merge($this->all_flights[$id],array('forcenew' => 1));
584
			if (isset($line['format_source']) && ($line['format_source'] === 'sbs' || $line['format_source'] === 'tsv' || $line['format_source'] === 'raw' || $line['format_source'] === 'deltadbtxt' || $line['format_source'] === 'planeupdatefaa' || $line['format_source'] === 'aprs' || $line['format_source'] === 'aircraftlistjson' || $line['format_source'] === 'radarvirtueljson' || $line['format_source'] === 'famaprs')) $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $id.'-'.date('YmdHi')));
585
		        elseif (isset($line['id'])) $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $line['id']));
586
			elseif (isset($this->all_flights[$id]['ident'])) $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $this->all_flights[$id]['hex'].'-'.$this->all_flights[$id]['ident']));
587
		    }
588
		    if ($line['ground'] != 1) $line['ground'] = 0;
589
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('ground' => $line['ground']));
590
		    //$dataFound = true;
591
		}
592
		if (isset($line['squawk']) && $line['squawk'] != '') {
593
		    if (isset($this->all_flights[$id]['squawk']) && $this->all_flights[$id]['squawk'] != '7500' && $this->all_flights[$id]['squawk'] != '7600' && $this->all_flights[$id]['squawk'] != '7700' && isset($this->all_flights[$id]['id'])) {
594
			    if ($this->all_flights[$id]['squawk'] != $line['squawk']) $this->all_flights[$id]['putinarchive'] = true;
595
			    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('squawk' => $line['squawk']));
596
			    $highlight = '';
597
			    if ($this->all_flights[$id]['squawk'] == '7500') $highlight = 'Squawk 7500 : Hijack at '.date('Y-m-d G:i').' UTC';
598
			    if ($this->all_flights[$id]['squawk'] == '7600') $highlight = 'Squawk 7600 : Lost Comm (radio failure) at '.date('Y-m-d G:i').' UTC';
599
			    if ($this->all_flights[$id]['squawk'] == '7700') $highlight = 'Squawk 7700 : Emergency at '.date('Y-m-d G:i').' UTC';
600
			    if ($highlight != '') {
601
				$timeelapsed = microtime(true);
602
				if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
603
				    $Spotter = new Spotter($this->db);
604
				    $Spotter->setHighlightFlight($this->all_flights[$id]['id'],$highlight);
605
				    $Spotter->db = null;
606
				    if ($globalDebugTimeElapsed) echo 'Time elapsed for update sethighlightflight : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
607
				}
608
				//$putinarchive = true;
609
				//$highlight = '';
610
			    }
611
			    
612
		    } else $this->all_flights[$id] = array_merge($this->all_flights[$id],array('squawk' => $line['squawk']));
613
		    //$dataFound = true;
614
		}
615
616
		if (isset($line['altitude']) && $line['altitude'] != '') {
617
		    //if (!isset($this->all_flights[$id]['altitude']) || $this->all_flights[$id]['altitude'] == '' || ($this->all_flights[$id]['altitude'] > 0 && $line['altitude'] != 0)) {
618
			if (is_int($this->all_flights[$id]['altitude']) && abs(round($line['altitude']/100)-$this->all_flights[$id]['altitude']) > 3) $this->all_flights[$id]['putinarchive'] = true;
619
			$this->all_flights[$id] = array_merge($this->all_flights[$id],array('altitude' => round($line['altitude']/100)));
620
			$this->all_flights[$id] = array_merge($this->all_flights[$id],array('altitude_real' => $line['altitude']));
621
			//$dataFound = true;
622
		    //} elseif ($globalDebug) echo "!!! Strange altitude data... not added.\n";
623
		    if ($globalVA !== TRUE && $globalIVAO !== TRUE && $globalVATSIM !== TRUE && $globalphpVMS !== TRUE && $globalVAM !== TRUE) {
624
			if (isset($this->all_flights[$id]['over_country']) && $this->all_flights[$id]['over_country'] != '' && isset($this->all_flights[$id]['altitude_previous']) && $this->all_flights[$id]['altitude_previous'] != '' && $this->all_flights[$id]['altitude_previous'] < $this->all_flights[$id]['altitude_real'] && isset($this->all_flights[$id]['lastupdate']) && $this->all_flights[$id]['lastupdate'] < time() - 2300) {
625
				if ($globalDebug) echo '--- Reset because of altitude'."\n";
626
				$this->all_flights[$id] = array_merge($this->all_flights[$id],array('addedSpotter' => 0));
627
				$this->all_flights[$id] = array_merge($this->all_flights[$id],array('forcenew' => 1));
628
				if (isset($line['format_source']) && ($line['format_source'] === 'sbs' || $line['format_source'] === 'tsv' || $line['format_source'] === 'raw' || $line['format_source'] === 'deltadbtxt' || $line['format_source'] === 'planeupdatefaa' || $line['format_source'] === 'aprs' || $line['format_source'] === 'aircraftlistjson' || $line['format_source'] === 'radarvirtueljson' || $line['format_source'] === 'famaprs')) $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $id.'-'.date('YmdHi')));
629
				elseif (isset($line['id'])) $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $line['id']));
630
				elseif (isset($this->all_flights[$id]['ident'])) $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $this->all_flights[$id]['hex'].'-'.$this->all_flights[$id]['ident']));
631
			}
632
		    }
633
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('altitude_previous' => $line['altitude']));
634
		}
635
636
		if (isset($line['noarchive']) && $line['noarchive'] === true) {
637
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('noarchive' => true));
638
		}
639
		
640
		if (isset($line['heading']) && $line['heading'] != '') {
641
		    if (is_int($this->all_flights[$id]['heading']) && abs($this->all_flights[$id]['heading']-round($line['heading'])) > 10) $this->all_flights[$id]['putinarchive'] = true;
642
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('heading' => round($line['heading'])));
643
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('heading_fromsrc' => true));
644
		    //$dataFound = true;
645
  		} elseif (!isset($this->all_flights[$id]['heading_fromsrc']) && isset($this->all_flights[$id]['archive_latitude']) && $this->all_flights[$id]['archive_latitude'] != $this->all_flights[$id]['latitude'] && isset($this->all_flights[$id]['archive_longitude']) && $this->all_flights[$id]['archive_longitude'] != $this->all_flights[$id]['longitude']) {
646
  		    $heading = $Common->getHeading($this->all_flights[$id]['archive_latitude'],$this->all_flights[$id]['archive_longitude'],$this->all_flights[$id]['latitude'],$this->all_flights[$id]['longitude']);
647
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('heading' => round($heading)));
648
		    if (abs($this->all_flights[$id]['heading']-round($heading)) > 10) $this->all_flights[$id]['putinarchive'] = true;
649
  		    if ($globalDebug) echo "ø Calculated Heading for ".$this->all_flights[$id]['hex']." : ".$heading."\n";
650
  		} elseif (isset($this->all_flights[$id]['format_source']) && $this->all_flights[$id]['format_source'] == 'ACARS') {
651
  		    // If not enough messages and ACARS set heading to 0
652
  		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('heading' => 0));
653
  		}
654
		if ($globalDaemon === TRUE && isset($globalSourcesupdate) && $globalSourcesupdate != '' && isset($this->all_flights[$id]['lastupdate']) && time()-$this->all_flights[$id]['lastupdate'] < $globalSourcesupdate) $dataFound = false;
655
		elseif ($globalDaemon === TRUE && isset($globalSBS1update) && $globalSBS1update != '' && isset($this->all_flights[$id]['lastupdate']) && time()-$this->all_flights[$id]['lastupdate'] < $globalSBS1update) $dataFound = false;
656
		elseif ($globalDaemon === TRUE && isset($globalMinupdate) && $globalMinupdate != '' && isset($this->all_flights[$id]['lastupdate']) && time()-$this->all_flights[$id]['lastupdate'] < $globalMinupdate) $dataFound = false;
0 ignored issues
show
Bug introduced by
The variable $globalMinupdate seems to never exist, and therefore isset should always return false. Did you maybe rename this variable?

This check looks for calls to isset(...) or empty() on variables that are yet undefined. These calls will always produce the same result and can be removed.

This is most likely caused by the renaming of a variable or the removal of a function/method parameter.

Loading history...
657
658
//		print_r($this->all_flights[$id]);
659
		//gets the callsign from the last hour
660
		//if (time()-$this->all_flights[$id]['lastupdate'] > 30 && $dataFound == true && $this->all_flights[$id]['ident'] != '' && $this->all_flights[$id]['latitude'] != '' && $this->all_flights[$id]['longitude'] != '') {
661
		//if ($dataFound == true && isset($this->all_flights[$id]['hex']) && $this->all_flights[$id]['ident'] != '' && $this->all_flights[$id]['latitude'] != '' && $this->all_flights[$id]['longitude'] != '') {
662
		//if ($dataFound === true && isset($this->all_flights[$id]['hex']) && $this->all_flights[$id]['heading'] != '' && $this->all_flights[$id]['latitude'] != '' && $this->all_flights[$id]['longitude'] != '') {
663
		if ($dataFound === true && isset($this->all_flights[$id]['hex'])) {
664
		    $this->all_flights[$id]['lastupdate'] = time();
665
		    if ((!isset($globalNoImport) || $globalNoImport === FALSE) && $this->all_flights[$id]['addedSpotter'] == 0) {
666
		        if (!isset($globalDistanceIgnore['latitude']) || $this->all_flights[$id]['longitude'] == ''  || $this->all_flights[$id]['latitude'] == '' || (isset($globalDistanceIgnore['latitude']) && $Common->distance($this->all_flights[$id]['latitude'],$this->all_flights[$id]['longitude'],$globalDistanceIgnore['latitude'],$globalDistanceIgnore['longitude']) < $globalDistanceIgnore['distance'])) {
667
			    //print_r($this->all_flights);
668
			    //echo $this->all_flights[$id]['id'].' - '.$this->all_flights[$id]['addedSpotter']."\n";
669
			    //$last_hour_ident = Spotter->getIdentFromLastHour($this->all_flights[$id]['ident']);
670
			    if (!isset($this->all_flights[$id]['forcenew']) || $this->all_flights[$id]['forcenew'] == 0) {
671
				if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
672
				    if ($globalDebug) echo "Check if aircraft is already in DB...";
673
				    $timeelapsed = microtime(true);
674
				    $SpotterLive = new SpotterLive($this->db);
675
				    if (isset($line['format_source']) && ($line['format_source'] === 'sbs' || $line['format_source'] === 'tsv' || $line['format_source'] === 'raw' || $line['format_source'] === 'deltadbtxt' || $line['format_source'] === 'planeupdatefaa' || $line['format_source'] === 'aprs' || $line['format_source'] === 'aircraftlistjson' || $line['format_source'] === 'radarvirtueljson' || $line['format_source'] === 'famaprs')) {
676
					$recent_ident = $SpotterLive->checkModeSRecent($this->all_flights[$id]['hex']);
677
					if ($globalDebugTimeElapsed) echo 'Time elapsed for update checkModeSRecent : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
678
				    } elseif (isset($line['id'])) {
679
					$recent_ident = $SpotterLive->checkIdRecent($line['id']);
680
					if ($globalDebugTimeElapsed) echo 'Time elapsed for update checkIdRecent : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
681
				    } elseif (isset($this->all_flights[$id]['ident']) && $this->all_flights[$id]['ident'] != '') {
682
					$recent_ident = $SpotterLive->checkIdentRecent($this->all_flights[$id]['ident']);
683
					if ($globalDebugTimeElapsed) echo 'Time elapsed for update checkIdentRecent : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
684
				    } else $recent_ident = '';
685
				    $SpotterLive->db=null;
686
				    if ($globalDebug && $recent_ident == '') echo " Not in DB.\n";
687
				    elseif ($globalDebug && $recent_ident != '') echo " Already in DB.\n";
688
				} else $recent_ident = '';
689
			    } else {
690
				$recent_ident = '';
691
				$this->all_flights[$id] = array_merge($this->all_flights[$id],array('forcenew' => 0));
692
			    }
693
			    //if there was no aircraft with the same callsign within the last hour and go post it into the archive
694
			    if($recent_ident == "")
695
			    {
696
				if ($globalDebug) echo "\o/ Add ".$this->all_flights[$id]['ident']." in archive DB : ";
697
				if ($this->all_flights[$id]['departure_airport'] == "") { $this->all_flights[$id]['departure_airport'] = "NA"; }
698
				if ($this->all_flights[$id]['arrival_airport'] == "") { $this->all_flights[$id]['arrival_airport'] = "NA"; }
699
				//adds the spotter data for the archive
700
				$ignoreImport = false;
701
				foreach($globalAirportIgnore as $airportIgnore) {
702
				    if (($this->all_flights[$id]['departure_airport'] == $airportIgnore) || ($this->all_flights[$id]['arrival_airport'] == $airportIgnore)) {
703
					$ignoreImport = true;
704
				    }
705
				}
706
				if (count($globalAirportAccept) > 0) {
707
				    $ignoreImport = true;
708
				    foreach($globalAirportIgnore as $airportIgnore) {
709
					if (($this->all_flights[$id]['departure_airport'] == $airportIgnore) || ($this->all_flights[$id]['arrival_airport'] == $airportIgnore)) {
710
					    $ignoreImport = false;
711
					}
712
				    }
713
				}
714
				if (isset($globalAirlineIgnore) && is_array($globalAirlineIgnore)) {
715
				    foreach($globalAirlineIgnore as $airlineIgnore) {
716
					if ((is_numeric(substr(substr($this->all_flights[$id]['ident'],0,4),-1,1)) && substr($this->all_flights[$id]['ident'],0,3) == $airlineIgnore) || (is_numeric(substr(substr($this->all_flights[$id]['ident'],0,3),-1,1)) && substr($this->all_flights[$id]['ident'],0,2) == $airlineIgnore)) {
717
					    $ignoreImport = true;
718
					}
719
				    }
720
				}
721
				if (isset($globalAirlineAccept) && count($globalAirlineAccept) > 0) {
722
				    $ignoreImport = true;
723
				    foreach($globalAirlineAccept as $airlineAccept) {
724
					if ((is_numeric(substr(substr($this->all_flights[$id]['ident'],0,4),-1,1)) && substr($this->all_flights[$id]['ident'],0,3) == $airlineAccept) || (is_numeric(substr(substr($this->all_flights[$id]['ident'],0,3),-1,1)) && substr($this->all_flights[$id]['ident'],0,2) == $airlineAccept)) {
725
					    $ignoreImport = false;
726
					}
727
				    }
728
				}
729
				if (isset($globalPilotIdAccept) && count($globalPilotIdAccept) > 0) {
730
				    $ignoreImport = true;
731
				    foreach($globalPilotIdAccept as $pilotIdAccept) {
732
					if ($this->all_flights[$id]['pilot_id'] == $pilotIdAccept) {
733
					    $ignoreImport = false;
734
					}
735
				    }
736
				}
737
				
738
				if (!$ignoreImport) {
739
				    $highlight = '';
740
				    if ($this->all_flights[$id]['squawk'] == '7500') $highlight = 'Squawk 7500 : Hijack';
741
				    if ($this->all_flights[$id]['squawk'] == '7600') $highlight = 'Squawk 7600 : Lost Comm (radio failure)';
742
				    if ($this->all_flights[$id]['squawk'] == '7700') $highlight = 'Squawk 7700 : Emergency';
743
				    if (!isset($this->all_flights[$id]['id'])) $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $this->all_flights[$id]['hex'].'-'.date('YmdHi')));
744
				    $timeelapsed = microtime(true);
745
				    if (!isset($globalNoImport) || $globalNoImport === FALSE) {
746
					if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
747
					    $Spotter = new Spotter($this->db);
748
					    $result = $Spotter->addSpotterData($this->all_flights[$id]['id'], $this->all_flights[$id]['ident'], $this->all_flights[$id]['aircraft_icao'], $this->all_flights[$id]['departure_airport'], $this->all_flights[$id]['arrival_airport'], $this->all_flights[$id]['latitude'], $this->all_flights[$id]['longitude'], $this->all_flights[$id]['waypoints'], $this->all_flights[$id]['altitude'],$this->all_flights[$id]['altitude_real'], $this->all_flights[$id]['heading'], $this->all_flights[$id]['speed'], $this->all_flights[$id]['datetime'], $this->all_flights[$id]['departure_airport_time'], $this->all_flights[$id]['arrival_airport_time'],$this->all_flights[$id]['squawk'],$this->all_flights[$id]['route_stop'],$highlight,$this->all_flights[$id]['hex'],$this->all_flights[$id]['registration'],$this->all_flights[$id]['pilot_id'],$this->all_flights[$id]['pilot_name'],$this->all_flights[$id]['verticalrate'],$this->all_flights[$id]['ground'],$this->all_flights[$id]['format_source'],$this->all_flights[$id]['source_name'],$this->all_flights[$id]['source_type']);
749
					    $Spotter->db = null;
750
					    if ($globalDebug && isset($result)) echo $result."\n";
751
					}
752
				    }
753
				    if ($globalDebugTimeElapsed) echo 'Time elapsed for update addspotterdata : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
754
				    if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
755
756
				    // Add source stat in DB
757
				    $Stats = new Stats($this->db);
758
				    if (!empty($this->stats)) {
759
					if ($globalDebug) echo 'Add source stats : ';
760
				        foreach($this->stats as $date => $data) {
761
					    foreach($data as $source => $sourced) {
762
					        //print_r($sourced);
763
				    	        if (isset($sourced['polar'])) echo $Stats->addStatSource(json_encode($sourced['polar']),$source,'polar',$date);
764
				    	        if (isset($sourced['hist'])) echo $Stats->addStatSource(json_encode($sourced['hist']),$source,'hist',$date);
765
				    		if (isset($sourced['msg'])) {
766
				    		    if (time() - $sourced['msg']['date'] > 10) {
767
				    		        $nbmsg = round($sourced['msg']['nb']/(time() - $sourced['msg']['date']));
768
				    		        echo $Stats->addStatSource($nbmsg,$source,'msg',$date);
769
			    			        unset($this->stats[$date][$source]['msg']);
770
			    			    }
771
			    			}
772
			    		    }
773
			    		    if ($date != date('Y-m-d')) {
774
			    			unset($this->stats[$date]);
775
			    		    }
776
				    	}
777
				    	if ($globalDebug) echo 'Done'."\n";
778
779
				    }
780
				    $Stats->db = null;
781
				    }
782
				    $this->del();
783
				} elseif ($globalDebug) echo 'Ignore data'."\n";
784
				//$ignoreImport = false;
785
				$this->all_flights[$id]['addedSpotter'] = 1;
786
				//print_r($this->all_flights[$id]);
787
			/*
788
			if (isset($globalArchive) && $globalArchive) {
789
			    $archives_ident = SpotterLive->getAllLiveSpotterDataByIdent($this->all_flights[$id]['ident']);
790
			    foreach ($archives_ident as $archive) {
791
				SpotterArchive->addSpotterArchiveData($archive['flightaware_id'], $archive['ident'], $archive['registration'],$archive['airline_name'],$archive['airline_icao'],$archive['airline_country'],$archive['airline_type'],$archive['aircraft_icao'],$archive['aircraft_shadow'],$archive['aircraft_name'],$archive['aircraft_manufacturer'], $archive['departure_airport_icao'],$archive['departure_airport_name'],$archive['departure_airport_city'],$archive['departure_airport_country'],$archive['departure_airport_time'],
792
				$archive['arrival_airport_icao'],$archive['arrival_airport_name'],$archive['arrival_airport_city'],$archive['arrival_airport_country'],$archive['arrival_airport_time'],
793
				$archive['route_stop'],$archive['date'],$archive['latitude'], $archive['longitude'], $archive['waypoints'], $archive['altitude'], $archive['heading'], $archive['ground_speed'],
794
				$archive['squawk'],$archive['ModeS']);
795
			    }
796
			}
797
			*/
798
			//SpotterLive->deleteLiveSpotterDataByIdent($this->all_flights[$id]['ident']);
799
				if ($this->last_delete == 0 || time() - $this->last_delete > 1800) {
800
				    if ($globalDebug) echo "---- Deleting Live Spotter data older than 9 hours...";
801
				    //SpotterLive->deleteLiveSpotterDataNotUpdated();
802
				    if (!isset($globalNoImport) || $globalNoImport === FALSE) {
803
					if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
804
					    $SpotterLive = new SpotterLive($this->db);
805
					    $SpotterLive->deleteLiveSpotterData();
806
					    $SpotterLive->db=null;
807
					}
808
				    }
809
				    if ($globalDebug) echo " Done\n";
810
				    $this->last_delete = time();
811
				}
812
			    } else {
813
				if (isset($line['format_source']) && ($line['format_source'] === 'sbs' || $line['format_source'] === 'tsv' || $line['format_source'] === 'raw' || $line['format_source'] === 'deltadbtxt'|| $line['format_source'] === 'planeupdatefaa'  || $line['format_source'] === 'aprs' || $line['format_source'] === 'aircraftlistjson' || $line['format_source'] === 'famaprs')) {
814
				    $this->all_flights[$id]['id'] = $recent_ident;
815
				    $this->all_flights[$id]['addedSpotter'] = 1;
816
				}
817
				if (isset($globalDaemon) && !$globalDaemon) {
818
				    if (!isset($globalNoImport) || $globalNoImport === FALSE) {
819
					if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
820
					    $Spotter = new Spotter($this->db);
821
					    $Spotter->updateLatestSpotterData($this->all_flights[$id]['id'],$this->all_flights[$id]['ident'],$this->all_flights[$id]['latitude'],$this->all_flights[$id]['longitude'],$this->all_flights[$id]['altitude'],$this->all_flights[$id]['altitude_real'],$this->all_flights[$id]['ground'],$this->all_flights[$id]['speed'],$this->all_flights[$id]['datetime'],$this->all_flights[$id]['arrival_airport'],$this->all_flights[$id]['arrival_airport_time']);
822
					    $Spotter->db = null;
823
					}
824
				    }
825
				}
826
				
827
			    }
828
			}
829
		    }
830
		    //adds the spotter LIVE data
831
		    //SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
832
		    //echo "\nAdd in Live !! \n";
833
		    //echo "{$line[8]} {$line[7]} - MODES:{$line[4]}  CALLSIGN:{$line[10]}   ALT:{$line[11]}   VEL:{$line[12]}   HDG:{$line[13]}   LAT:{$line[14]}   LON:{$line[15]}   VR:{$line[16]}   SQUAWK:{$line[17]}\n";
834
		    if ($globalDebug) {
835
			if ((isset($globalVA) && $globalVA) || (isset($globalIVAO) && $globalIVAO) || (isset($globalVATSIM) && $globalVATSIM) || (isset($globalphpVMS) && $globalphpVMS) || (isset($globalVAM) && $globalVAM)) {
836
				if (isset($this->all_flights[$id]['source_name'])) echo 'DATA : hex : '.$this->all_flights[$id]['hex'].' - ident : '.$this->all_flights[$id]['ident'].' - ICAO : '.$this->all_flights[$id]['aircraft_icao'].' - Departure Airport : '.$this->all_flights[$id]['departure_airport'].' - Arrival Airport : '.$this->all_flights[$id]['arrival_airport'].' - Latitude : '.$this->all_flights[$id]['latitude'].' - Longitude : '.$this->all_flights[$id]['longitude'].' - waypoints : '.$this->all_flights[$id]['waypoints'].' - Altitude : '.$this->all_flights[$id]['altitude'].' - Heading : '.$this->all_flights[$id]['heading'].' - Speed : '.$this->all_flights[$id]['speed'].' - Departure Airport Time : '.$this->all_flights[$id]['departure_airport_time'].' - Arrival Airport time : '.$this->all_flights[$id]['arrival_airport_time'].' - Pilot : '.$this->all_flights[$id]['pilot_name'].' - Source name : '.$this->all_flights[$id]['source_name']."\n";
837
				else echo 'DATA : hex : '.$this->all_flights[$id]['hex'].' - ident : '.$this->all_flights[$id]['ident'].' - ICAO : '.$this->all_flights[$id]['aircraft_icao'].' - Departure Airport : '.$this->all_flights[$id]['departure_airport'].' - Arrival Airport : '.$this->all_flights[$id]['arrival_airport'].' - Latitude : '.$this->all_flights[$id]['latitude'].' - Longitude : '.$this->all_flights[$id]['longitude'].' - waypoints : '.$this->all_flights[$id]['waypoints'].' - Altitude : '.$this->all_flights[$id]['altitude'].' - Heading : '.$this->all_flights[$id]['heading'].' - Speed : '.$this->all_flights[$id]['speed'].' - Departure Airport Time : '.$this->all_flights[$id]['departure_airport_time'].' - Arrival Airport time : '.$this->all_flights[$id]['arrival_airport_time'].' - Pilot : '.$this->all_flights[$id]['pilot_name']."\n";
838
			} else {
839
				if (isset($this->all_flights[$id]['source_name'])) echo 'DATA : hex : '.$this->all_flights[$id]['hex'].' - ident : '.$this->all_flights[$id]['ident'].' - ICAO : '.$this->all_flights[$id]['aircraft_icao'].' - Departure Airport : '.$this->all_flights[$id]['departure_airport'].' - Arrival Airport : '.$this->all_flights[$id]['arrival_airport'].' - Latitude : '.$this->all_flights[$id]['latitude'].' - Longitude : '.$this->all_flights[$id]['longitude'].' - waypoints : '.$this->all_flights[$id]['waypoints'].' - Altitude : '.$this->all_flights[$id]['altitude'].' - Heading : '.$this->all_flights[$id]['heading'].' - Speed : '.$this->all_flights[$id]['speed'].' - Departure Airport Time : '.$this->all_flights[$id]['departure_airport_time'].' - Arrival Airport time : '.$this->all_flights[$id]['arrival_airport_time'].' - Source Name : '.$this->all_flights[$id]['source_name']."\n";
840
				else echo 'DATA : hex : '.$this->all_flights[$id]['hex'].' - ident : '.$this->all_flights[$id]['ident'].' - ICAO : '.$this->all_flights[$id]['aircraft_icao'].' - Departure Airport : '.$this->all_flights[$id]['departure_airport'].' - Arrival Airport : '.$this->all_flights[$id]['arrival_airport'].' - Latitude : '.$this->all_flights[$id]['latitude'].' - Longitude : '.$this->all_flights[$id]['longitude'].' - waypoints : '.$this->all_flights[$id]['waypoints'].' - Altitude : '.$this->all_flights[$id]['altitude'].' - Heading : '.$this->all_flights[$id]['heading'].' - Speed : '.$this->all_flights[$id]['speed'].' - Departure Airport Time : '.$this->all_flights[$id]['departure_airport_time'].' - Arrival Airport time : '.$this->all_flights[$id]['arrival_airport_time']."\n";
841
			}
842
		    }
843
		    $ignoreImport = false;
844
		    if ($this->all_flights[$id]['departure_airport'] == "") { $this->all_flights[$id]['departure_airport'] = "NA"; }
845
		    if ($this->all_flights[$id]['arrival_airport'] == "") { $this->all_flights[$id]['arrival_airport'] = "NA"; }
846
847
		    foreach($globalAirportIgnore as $airportIgnore) {
848
		        if (($this->all_flights[$id]['departure_airport'] == $airportIgnore) || ($this->all_flights[$id]['arrival_airport'] == $airportIgnore)) {
849
			    $ignoreImport = true;
850
			}
851
		    }
852
		    if (count($globalAirportAccept) > 0) {
853
		        $ignoreImport = true;
854
		        foreach($globalAirportIgnore as $airportIgnore) {
855
			    if (($this->all_flights[$id]['departure_airport'] == $airportIgnore) || ($this->all_flights[$id]['arrival_airport'] == $airportIgnore)) {
856
				$ignoreImport = false;
857
			    }
858
			}
859
		    }
860
		    if (isset($globalAirlineIgnore) && is_array($globalAirlineIgnore)) {
861
			foreach($globalAirlineIgnore as $airlineIgnore) {
862
			    if ((is_numeric(substr(substr($this->all_flights[$id]['ident'],0,4),-1,1)) && substr($this->all_flights[$id]['ident'],0,3) == $airlineIgnore) || (is_numeric(substr(substr($this->all_flights[$id]['ident'],0,3),-1,1)) && substr($this->all_flights[$id]['ident'],0,2) == $airlineIgnore)) {
863
				$ignoreImport = true;
864
			    }
865
			}
866
		    }
867
		    if (isset($globalAirlineAccept) && count($globalAirlineAccept) > 0) {
868
			$ignoreImport = true;
869
			foreach($globalAirlineAccept as $airlineAccept) {
870
			    if ((is_numeric(substr(substr($this->all_flights[$id]['ident'],0,4),-1,1)) && substr($this->all_flights[$id]['ident'],0,3) == $airlineAccept) || (is_numeric(substr(substr($this->all_flights[$id]['ident'],0,3),-1,1)) && substr($this->all_flights[$id]['ident'],0,2) == $airlineAccept)) {
871
				$ignoreImport = false;
872
			    }
873
			}
874
		    }
875
		    if (isset($globalPilotIdAccept) && count($globalPilotIdAccept) > 0) {
876
			$ignoreImport = true;
877
			foreach($globalPilotIdAccept as $pilotIdAccept) {
878
			    if ($this->all_flights[$id]['pilot_id'] == $pilotIdAccept) {
879
			        $ignoreImport = false;
880
			    }
881
			}
882
		    }
883
884
		    if (!$ignoreImport) {
885
			if (!isset($globalDistanceIgnore['latitude']) || (isset($globalDistanceIgnore['latitude']) && $Common->distance($this->all_flights[$id]['latitude'],$this->all_flights[$id]['longitude'],$globalDistanceIgnore['latitude'],$globalDistanceIgnore['longitude']) < $globalDistanceIgnore['distance'])) {
886
				if (!isset($this->all_flights[$id]['id'])) $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $this->all_flights[$id]['hex'].'-'.date('YmdHi')));
887
				$timeelapsed = microtime(true);
888
				if (!isset($globalNoImport) || $globalNoImport === FALSE) {
889
				    if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
890
					if ($globalDebug) echo "\o/ Add ".$this->all_flights[$id]['ident']." from ".$this->all_flights[$id]['format_source']." in Live DB : ";
891
					$SpotterLive = new SpotterLive($this->db);
892
					$result = $SpotterLive->addLiveSpotterData($this->all_flights[$id]['id'], $this->all_flights[$id]['ident'], $this->all_flights[$id]['aircraft_icao'], $this->all_flights[$id]['departure_airport'], $this->all_flights[$id]['arrival_airport'], $this->all_flights[$id]['latitude'], $this->all_flights[$id]['longitude'], $this->all_flights[$id]['waypoints'], $this->all_flights[$id]['altitude'],$this->all_flights[$id]['altitude_real'], $this->all_flights[$id]['heading'], $this->all_flights[$id]['speed'],$this->all_flights[$id]['datetime'], $this->all_flights[$id]['departure_airport_time'], $this->all_flights[$id]['arrival_airport_time'], $this->all_flights[$id]['squawk'],$this->all_flights[$id]['route_stop'],$this->all_flights[$id]['hex'],$this->all_flights[$id]['putinarchive'],$this->all_flights[$id]['registration'],$this->all_flights[$id]['pilot_id'],$this->all_flights[$id]['pilot_name'], $this->all_flights[$id]['verticalrate'], $this->all_flights[$id]['noarchive'], $this->all_flights[$id]['ground'],$this->all_flights[$id]['format_source'],$this->all_flights[$id]['source_name'],$this->all_flights[$id]['over_country']);
893
					$SpotterLive->db = null;
894
					if ($globalDebug) echo $result."\n";
895
				    }
896
				}
897
				if (isset($globalServerAPRS) && $globalServerAPRS && $this->all_flights[$id]['putinarchive']) {
898
					$APRSSpotter->addLiveSpotterData($this->all_flights[$id]['id'], $this->all_flights[$id]['ident'], $this->all_flights[$id]['aircraft_icao'], $this->all_flights[$id]['departure_airport'], $this->all_flights[$id]['arrival_airport'], $this->all_flights[$id]['latitude'], $this->all_flights[$id]['longitude'], $this->all_flights[$id]['waypoints'], $this->all_flights[$id]['altitude'], $this->all_flights[$id]['altitude_real'], $this->all_flights[$id]['heading'], $this->all_flights[$id]['speed'],$this->all_flights[$id]['datetime'], $this->all_flights[$id]['departure_airport_time'], $this->all_flights[$id]['arrival_airport_time'], $this->all_flights[$id]['squawk'],$this->all_flights[$id]['route_stop'],$this->all_flights[$id]['hex'],$this->all_flights[$id]['putinarchive'],$this->all_flights[$id]['registration'],$this->all_flights[$id]['pilot_id'],$this->all_flights[$id]['pilot_name'], $this->all_flights[$id]['verticalrate'], $this->all_flights[$id]['noarchive'], $this->all_flights[$id]['ground'],$this->all_flights[$id]['format_source'],$this->all_flights[$id]['source_name'],$this->all_flights[$id]['over_country']);
899
				}
900
				$this->all_flights[$id]['putinarchive'] = false;
901
				if ($globalDebugTimeElapsed) echo 'Time elapsed for update addlivespotterdata : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
902
903
				// Put statistics in $this->stats variable
904
				//if ($line['format_source'] != 'aprs') {
905
				//if (isset($line['format_source']) && ($line['format_source'] === 'sbs' || $line['format_source'] === 'tsv' || $line['format_source'] === 'raw' || $line['format_source'] === 'deltadbtxt')) {
906
				if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
907
				    if (isset($line['sourcestats']) && $line['sourcestats'] == TRUE && $this->all_flights[$id]['latitude'] != '' && $this->all_flights[$id]['longitude'] != '') {
908
					$source = $this->all_flights[$id]['source_name'];
909
					if ($source == '') $source = $this->all_flights[$id]['format_source'];
910
					if (!isset($this->source_location[$source])) {
911
						$Location = new Source();
912
						$coord = $Location->getLocationInfobySourceName($source);
913
						if (count($coord) > 0) {
914
							$latitude = $coord[0]['latitude'];
915
							$longitude = $coord[0]['longitude'];
916
						} else {
917
							$latitude = $globalCenterLatitude;
918
							$longitude = $globalCenterLongitude;
919
						}
920
						$this->source_location[$source] = array('latitude' => $latitude,'longitude' => $longitude);
921
					} else {
922
						$latitude = $this->source_location[$source]['latitude'];
923
						$longitude = $this->source_location[$source]['longitude'];
924
					}
925
					$stats_heading = $Common->getHeading($latitude,$longitude,$this->all_flights[$id]['latitude'],$this->all_flights[$id]['longitude']);
926
					//$stats_heading = $stats_heading%22.5;
927
					$stats_heading = round($stats_heading/22.5);
928
					$stats_distance = $Common->distance($latitude,$longitude,$this->all_flights[$id]['latitude'],$this->all_flights[$id]['longitude']);
929
					$current_date = date('Y-m-d');
930
					if ($stats_heading == 16) $stats_heading = 0;
931
					if (!isset($this->stats[$current_date][$source]['polar'][1])) {
932
						for ($i=0;$i<=15;$i++) {
933
						    $this->stats[$current_date][$source]['polar'][$i] = 0;
934
						}
935
						$this->stats[$current_date][$source]['polar'][$stats_heading] = $stats_distance;
936
					} else {
937
						if ($this->stats[$current_date][$source]['polar'][$stats_heading] < $stats_distance) {
938
							$this->stats[$current_date][$source]['polar'][$stats_heading] = $stats_distance;
939
						}
940
					}
941
					$distance = (round($stats_distance/10)*10);
942
					//echo '$$$$$$$$$$ DISTANCE : '.$distance.' - '.$source."\n";
943
					//var_dump($this->stats);
944
					if (!isset($this->stats[$current_date][$source]['hist'][$distance])) {
945
						if (isset($this->stats[$current_date][$source]['hist'][0])) {
946
						    end($this->stats[$current_date][$source]['hist']);
947
						    $mini = key($this->stats[$current_date][$source]['hist'])+10;
948
						} else $mini = 0;
949
						for ($i=$mini;$i<=$distance;$i+=10) {
950
						    $this->stats[$current_date][$source]['hist'][$i] = 0;
951
						}
952
						$this->stats[$current_date][$source]['hist'][$distance] = 1;
953
					} else {
954
						$this->stats[$current_date][$source]['hist'][$distance] += 1;
955
					}
956
				    }
957
				}
958
959
				$this->all_flights[$id]['lastupdate'] = time();
960
				if ($this->all_flights[$id]['putinarchive']) $send = true;
961
				//if ($globalDebug) echo "Distance : ".Common->distance($this->all_flights[$id]['latitude'],$this->all_flights[$id]['longitude'],$globalDistanceIgnore['latitude'],$globalDistanceIgnore['longitude'])."\n";
962
			} elseif (isset($this->all_flights[$id]['latitude']) && isset($globalDistanceIgnore['latitude']) && $globalDebug) echo "!! Too far -> Distance : ".$Common->distance($this->all_flights[$id]['latitude'],$this->all_flights[$id]['longitude'],$globalDistanceIgnore['latitude'],$globalDistanceIgnore['longitude'])."\n";
963
			//$this->del();
964
			
965
			if ($this->last_delete_hourly == 0 || time() - $this->last_delete_hourly > 900) {
966
			    if ((!isset($globalNoImport) || $globalNoImport === FALSE) && (!isset($globalNoDB) || $globalNoDB !== TRUE)) {
967
				if ($globalDebug) echo "---- Deleting Live Spotter data Not updated since 2 hour...";
968
				$SpotterLive = new SpotterLive($this->db);
969
				$SpotterLive->deleteLiveSpotterDataNotUpdated();
970
				$SpotterLive->db = null;
971
				//SpotterLive->deleteLiveSpotterData();
972
				if ($globalDebug) echo " Done\n";
973
				$this->last_delete_hourly = time();
974
			    } else {
975
				$this->del();
976
				$this->last_delete_hourly = time();
977
			    }
978
			}
979
			
980
		    }
981
		    //$ignoreImport = false;
982
		}
983
		//if (function_exists('pcntl_fork') && $globalFork) pcntl_signal(SIGCHLD, SIG_IGN);
984
		if ($send) return $this->all_flights[$id];
985
	    }
986
	}
987
    }
988
}
989
?>
990