Completed
Push — master ( 057712...43b720 )
by Yannick
10:00
created

SpotterImport::arrival()   D

Complexity

Conditions 23
Paths 52

Size

Total Lines 38
Code Lines 31

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 23
eloc 31
nc 52
nop 1
dl 0
loc 38
rs 4.7895
c 0
b 0
f 0

How to fix   Complexity   

Long Method

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

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

Commonly applied refactorings include:

1
<?php
2
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
require_once(dirname(__FILE__).'/class.GeoidHeight.php');
11
if (isset($globalServerAPRS) && $globalServerAPRS) {
12
    require_once(dirname(__FILE__).'/class.APRS.php');
13
}
14
15
class SpotterImport {
16
    private $all_flights = array();
17
    private $last_delete_hourly = 0;
18
    private $last_delete = 0;
19
    private $stats = array();
20
    private $tmd = 0;
21
    private $source_location = array();
22
    public $db = null;
23
    public $nb = 0;
24
25
    public function __construct($dbc = null) {
26
	global $globalBeta, $globalServerAPRS, $APRSSpotter, $globalNoDB, $GeoidClass, $globalDebug, $globalGeoid;
27
	if (!(isset($globalNoDB) && $globalNoDB)) {
28
		$Connection = new Connection($dbc);
29
		$this->db = $Connection->db();
30
		date_default_timezone_set('UTC');
31
32
		// Get previous source stats
33
		$Stats = new Stats($dbc);
34
		$currentdate = date('Y-m-d');
35
		$sourcestat = $Stats->getStatsSource($currentdate);
36
		if (!empty($sourcestat)) {
37
		    foreach($sourcestat as $srcst) {
38
		    	$type = $srcst['stats_type'];
39
			if ($type == 'polar' || $type == 'hist') {
40
			    $source = $srcst['source_name'];
41
			    $data = $srcst['source_data'];
42
			    $this->stats[$currentdate][$source][$type] = json_decode($data,true);
43
	    		}
44
		    }
45
		}
46
	}
47
	if (isset($globalServerAPRS) && $globalServerAPRS) {
48
		$APRSSpotter = new APRSSpotter();
49
		//$APRSSpotter->connect();
50
	}
51
	if (isset($globalGeoid) && $globalGeoid) {
52
		try {
53
			$GeoidClass = new GeoidHeight();
54
		} catch(Exception $e) {
55
			if ($globalDebug) echo "Can't calculate geoid : $e \n";
56
			$GeoidClass = FALSE;
57
		}
58
	}
59
    }
60
61
    public function get_Schedule($id,$ident) {
62
	global $globalDebug, $globalFork, $globalSchedulesFetch;
63
	// Get schedule here, so it's done only one time
64
	
65
	/*
66
	if ($globalFork) {
67
		$Connection = new Connection();
68
		$dbc = $Connection->db;
69
	} else $dbc = $this->db;
70
	*/
71
	$dbc = $this->db;
72
	$this->all_flights[$id]['schedule_check'] = true;
73
	if ($globalSchedulesFetch) {
74
	if ($globalDebug) echo 'Getting schedule info...'."\n";
75
	$Spotter = new Spotter($dbc);
76
	$Schedule = new Schedule($dbc);
77
	$Translation = new Translation($dbc);
78
	$operator = $Spotter->getOperator($ident);
79
	$scheduleexist = false;
80
	if ($Schedule->checkSchedule($operator) == 0) {
81
	    $operator = $Translation->checkTranslation($ident);
82
	    if ($Schedule->checkSchedule($operator) == 0) {
83
		$schedule = $Schedule->fetchSchedule($operator);
84
		if (count($schedule) > 0 && isset($schedule['DepartureTime']) && isset($schedule['ArrivalTime'])) {
85
		    if ($globalDebug) echo "-> Schedule info for ".$operator." (".$ident.")\n";
86
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('departure_airport_time' => $schedule['DepartureTime']));
87
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('arrival_airport_time' => $schedule['ArrivalTime']));
88
		    // Should also check if route schedule = route from DB
89
		    if ($schedule['DepartureAirportIATA'] != '') {
90
			if ($this->all_flights[$id]['departure_airport'] != $Spotter->getAirportIcao($schedule['DepartureAirportIATA'])) {
91
			    $airport_icao = $Spotter->getAirportIcao($schedule['DepartureAirportIATA']);
92
			    if (trim($airport_icao) != '') {
93
				$this->all_flights[$id]['departure_airport'] = $airport_icao;
94
				if ($globalDebug) echo "-> Change departure airport to ".$airport_icao." for ".$ident."\n";
95
			    }
96
			}
97
		    }
98
		    if ($schedule['ArrivalAirportIATA'] != '') {
99
			if ($this->all_flights[$id]['arrival_airport'] != $Spotter->getAirportIcao($schedule['ArrivalAirportIATA'])) {
100
			    $airport_icao = $Spotter->getAirportIcao($schedule['ArrivalAirportIATA']);
101
			    if (trim($airport_icao) != '') {
102
				$this->all_flights[$id]['arrival_airport'] = $airport_icao;
103
				if ($globalDebug) echo "-> Change arrival airport to ".$airport_icao." for ".$ident."\n";
104
			    }
105
			}
106
		    }
107
		    $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']);
108
		}
109
	    } else $scheduleexist = true;
110
	} else $scheduleexist = true;
111
	// close connection, at least one way will work ?
112
       if ($scheduleexist) {
113
		if ($globalDebug) echo "-> get arrival/departure airport info for ".$ident."\n";
114
    		$sch = $Schedule->getSchedule($operator);
115
		$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']));
116
       }
117
	$Spotter->db = null;
118
	$Schedule->db = null;
119
	$Translation->db = null;
120
	unset($Spotter->db);
121
	unset($Schedule->db);
122
	unset($Translation->db);
123
124
	/*
125
	if ($globalFork) {
126
	    $Connection->db = null;
127
	    unset($Connection->db);
128
	}
129
	  */
130
	}
131
    }
132
133
    public function checkAll() {
134
	global $globalDebug, $globalNoImport;
135
	if ($globalDebug) echo "Update last seen flights data...\n";
136
	if (!isset($globalNoImport) || $globalNoImport === FALSE) {
137
	    foreach ($this->all_flights as $key => $flight) {
138
		if (isset($this->all_flights[$key]['id'])) {
139
		    //echo $this->all_flights[$key]['id'].' - '.$this->all_flights[$key]['latitude'].'  '.$this->all_flights[$key]['longitude']."\n";
140
    		    $Spotter = new Spotter($this->db);
141
        	    $real_arrival = $this->arrival($key);
142
        	    if (isset($this->all_flights[$key]['altitude']) && isset($this->all_flights[$key]['datetime'])) $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']);
143
        	}
144
	    }
145
	}
146
    }
147
148
    public function arrival($key) {
149
	global $globalClosestMinDist, $globalDebug;
150
	if ($globalDebug) echo 'Update arrival...'."\n";
151
	$Spotter = new Spotter($this->db);
152
        $airport_icao = '';
153
        $airport_time = '';
154
        if (!isset($globalClosestMinDist) || $globalClosestMinDist == '') $globalClosestMinDist = 50;
155
	if ($this->all_flights[$key]['latitude'] != '' && $this->all_flights[$key]['longitude'] != '') {
156
	    $closestAirports = $Spotter->closestAirports($this->all_flights[$key]['latitude'],$this->all_flights[$key]['longitude'],$globalClosestMinDist);
157
    	    if (isset($closestAirports[0])) {
158
        	if (isset($this->all_flights[$key]['arrival_airport']) && $this->all_flights[$key]['arrival_airport'] == $closestAirports[0]['icao']) {
159
        	    $airport_icao = $closestAirports[0]['icao'];
160
        	    $airport_time = $this->all_flights[$key]['datetime'];
161
        	    if ($globalDebug) echo "---++ Find arrival airport. airport_icao : ".$airport_icao."\n";
162
        	} elseif (count($closestAirports > 1) && isset($this->all_flights[$key]['arrival_airport']) && $this->all_flights[$key]['arrival_airport'] != '') {
163
        	    foreach ($closestAirports as $airport) {
164
        		if ($this->all_flights[$key]['arrival_airport'] == $airport['icao']) {
165
        		    $airport_icao = $airport['icao'];
166
        		    $airport_time = $this->all_flights[$key]['datetime'];
167
        		    if ($globalDebug) echo "---++ Find arrival airport. airport_icao : ".$airport_icao."\n";
168
        		    break;
169
        		}
170
        	    }
171
        	} 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))) {
172
        		$airport_icao = $closestAirports[0]['icao'];
173
        		$airport_time = $this->all_flights[$key]['datetime'];
174
        	} else {
175
        		if ($globalDebug) echo "----- Can't find arrival airport. Airport altitude : ".$closestAirports[0]['altitude'].' - flight altitude : '.$this->all_flights[$key]['altitude_real']."\n";
176
        	}
177
    	    } else {
178
    		    if ($globalDebug) echo "----- No Airport near last coord. Latitude : ".$this->all_flights[$key]['latitude'].' - Longitude : '.$this->all_flights[$key]['longitude'].' - MinDist : '.$globalClosestMinDist."\n";
179
    	    }
180
181
        } else {
182
        	if ($globalDebug) echo "---- No latitude or longitude. Ident : ".$this->all_flights[$key]['ident']."\n";
183
        }
184
        return array('airport_icao' => $airport_icao,'airport_time' => $airport_time);
185
    }
186
187
188
189
    public function del() {
190
	global $globalDebug, $globalNoImport, $globalNoDB;
191
	// Delete old infos
192
	if ($globalDebug) echo 'Delete old values and update latest data...'."\n";
193
	foreach ($this->all_flights as $key => $flight) {
194
	    if (isset($flight['lastupdate'])) {
195
		if ($flight['lastupdate'] < (time()-5900)) {
196
		    $this->delKey($key);
197
		}
198
	    }
199
	}
200
    }
201
202
    public function delKey($key) {
203
	global $globalDebug, $globalNoImport, $globalNoDB;
204
	// Delete old infos
205
	if (isset($this->all_flights[$key]['id'])) {
206
		if ($globalDebug) echo "--- Delete old values with id ".$this->all_flights[$key]['id']."\n";
207
		if ((!isset($globalNoImport) || $globalNoImport === FALSE) && (!isset($globalNoDB) || $globalNoDB !== TRUE)) {
208
			$real_arrival = $this->arrival($key);
209
			$Spotter = new Spotter($this->db);
210
			if ($this->all_flights[$key]['latitude'] != '' && $this->all_flights[$key]['longitude'] != '') {
211
				$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']);
212
				if ($globalDebug && $result != 'success') echo '!!! ERROR : '.$result."\n";
213
			}
214
		}
215
	}
216
	unset($this->all_flights[$key]);
217
    }
218
219
    public function add($line) {
220
	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, $globalAircraftMinUpdate, $globalLiveInterval, $GeoidClass;
221
	//if (!isset($globalDebugTimeElapsed) || $globalDebugTimeElapsed == '') $globalDebugTimeElapsed = FALSE;
222
	if (!isset($globalCoordMinChange) || $globalCoordMinChange == '') $globalCoordMinChange = '0.02';
223
	if (!isset($globalAircraftMaxUpdate) || $globalAircraftMaxUpdate == '') $globalAircraftMaxUpdate = 3000;
224
/*
225
	$Spotter = new Spotter();
226
	$dbc = $Spotter->db;
227
	$SpotterLive = new SpotterLive($dbc);
228
	$Common = new Common();
229
	$Schedule = new Schedule($dbc);
230
*/
231
	date_default_timezone_set('UTC');
232
	// signal handler - playing nice with sockets and dump1090
233
	// pcntl_signal_dispatch();
234
235
	// get the time (so we can figure the timeout)
236
	//$time = time();
237
238
	//pcntl_signal_dispatch();
239
	$dataFound = false;
240
	//$putinarchive = false;
241
	$send = false;
242
	
243
	// SBS format is CSV format
244
	if(is_array($line) && (isset($line['hex']) || isset($line['id']))) {
245
	    //print_r($line);
246
	    if (isset($line['hex'])) $line['hex'] = strtoupper($line['hex']);
247
  	    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)) {
248
249
		// Increment message number
250
		if (isset($line['sourcestats']) && $line['sourcestats'] === TRUE) {
251
		    $current_date = date('Y-m-d');
252
		    if (isset($line['source_name'])) $source = $line['source_name'];
253
		    else $source = '';
254
		    if ($source == '' || $line['format_source'] == 'aprs') $source = $line['format_source'];
255
		    if (!isset($this->stats[$current_date][$source]['msg'])) {
256
		    	$this->stats[$current_date][$source]['msg']['date'] = time();
257
		    	$this->stats[$current_date][$source]['msg']['nb'] = 1;
258
		    } else $this->stats[$current_date][$source]['msg']['nb'] += 1;
259
		}
260
		
261
		/*
262
		$dbc = $this->db;
263
		$Connection = new Connection($dbc);
264
		$Connection->connectionExists();
265
		$dbc = $Connection->db;
266
		*/
267
		//$Spotter = new Spotter($dbc);
268
		//$SpotterLive = new SpotterLive($dbc);
269
		$Common = new Common();
270
//		echo $this->nb++."\n";
271
		//$this->db = $dbc;
272
273
		//$hex = trim($line['hex']);
274
	        if (!isset($line['id'])) $id = trim($line['hex']);
275
	        else $id = trim($line['id']);
276
		
277
		if (!isset($this->all_flights[$id])) {
278
		    if ($globalDebug) echo 'New flight...'."\n";
279
		    $this->all_flights[$id] = array();
280
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('addedSpotter' => 0));
281
		    $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' => ''));
282
		    if (isset($globalDaemon) && $globalDaemon === FALSE) $this->all_flights[$id] = array_merge($this->all_flights[$id],array('lastupdate' => time()));
283
		    if (!isset($line['id'])) {
284
			if (!isset($globalDaemon)) $globalDaemon = TRUE;
285
//			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')));
286
//			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')));
287
			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')));
288
		        //else $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $this->all_flights[$id]['hex'].'-'.$this->all_flights[$id]['ident']));
289
		     } else $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $line['id']));
290
		    if ($globalAllFlights !== FALSE) $dataFound = true;
291
		}
292
		if (isset($line['source_type']) && $line['source_type'] != '') {
293
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('source_type' => $line['source_type']));
294
		}
295
		
296
		//print_r($this->all_flights);
297
		if (isset($line['hex']) && !isset($this->all_flights[$id]['hex']) && ctype_xdigit($line['hex'])) {
298
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('hex' => trim($line['hex'])));
299
		    //if (isset($line['datetime']) && preg_match('/^(\d{4}(?:\-\d{2}){2} \d{2}(?:\:\d{2}){2})$/',$line['datetime'])) {
300
			//$this->all_flights[$id] = array_merge($this->all_flights[$id],array('datetime' => $line['datetime']));
301
		    //} else $this->all_flights[$id] = array_merge($this->all_flights[$id],array('datetime' => date('Y-m-d H:i:s')));
302
		    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') {
303
			$timeelapsed = microtime(true);
304
			if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
305
			    $Spotter = new Spotter($this->db);
306
			    if (isset($this->all_flights[$id]['source_type'])) {
307
				$aircraft_icao = $Spotter->getAllAircraftType(trim($line['hex']),$this->all_flights[$id]['source_type']);
308
			    } else {
309
				$aircraft_icao = $Spotter->getAllAircraftType(trim($line['hex']));
310
			    }
311
			    $Spotter->db = null;
312
			    if ($globalDebugTimeElapsed) echo 'Time elapsed for update getallaircrattype : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
313
			    if ($aircraft_icao != '') $this->all_flights[$id] = array_merge($this->all_flights[$id],array('aircraft_icao' => $aircraft_icao));
314
			}
315
		    }
316
		    if ($globalAllFlights !== FALSE) $dataFound = true;
317
		    if ($globalDebug) echo "*********** New aircraft hex : ".$line['hex']." ***********\n";
318
		}
319
	        if (isset($line['id']) && !isset($line['hex'])) {
320
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('hex' => ''));
321
	        }
322
		if (isset($line['aircraft_icao']) && $line['aircraft_icao'] != '') {
323
			$icao = $line['aircraft_icao'];
324
			$Spotter = new Spotter($this->db);
325
			if (isset($Spotter->aircraft_correct_icaotype[$icao])) $icao = $Spotter->aircraft_correct_icaotype[$icao];
326
			$Spotter->db = null;
327
			$this->all_flights[$id] = array_merge($this->all_flights[$id],array('aircraft_icao' => $icao));
328
		}
329
		if (!isset($this->all_flights[$id]['aircraft_icao']) && isset($line['aircraft_name'])) {
330
			if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
331
				// Get aircraft ICAO from aircraft name
332
				$Spotter = new Spotter($this->db);
333
				$aircraft_icao = $Spotter->getAircraftIcao($line['aircraft_name']);
334
				$Spotter->db = null;
335
				if ($aircraft_icao != '') $this->all_flights[$id] = array_merge($this->all_flights[$id],array('aircraft_icao' => $aircraft_icao));
336
			}
337
		}
338
		if (!isset($this->all_flights[$id]['aircraft_icao']) && isset($line['aircraft_type'])) {
339
			if ($line['aircraft_type'] == 'PARA_GLIDER') $aircraft_icao = 'GLID';
340
			elseif ($line['aircraft_type'] == 'HELICOPTER_ROTORCRAFT') $aircraft_icao = 'UHEL';
341
			elseif ($line['aircraft_type'] == 'TOW_PLANE') $aircraft_icao = 'TOWPLANE';
342
			elseif ($line['aircraft_type'] == 'POWERED_AIRCRAFT') $aircraft_icao = 'POWAIRC';
343
			if (isset($aircraft_icao)) $this->all_flights[$id] = array_merge($this->all_flights[$id],array('aircraft_icao' => $aircraft_icao));
344
		}
345
		if (!isset($this->all_flights[$id]['aircraft_icao'])) {
346
			$this->all_flights[$id] = array_merge($this->all_flights[$id],array('aircraft_icao' => 'NA'));
347
		}
348
		//if (isset($line['datetime']) && preg_match('/^(\d{4}(?:\-\d{2}){2} \d{2}(?:\:\d{2}){2})$/',$line['datetime'])) {
349
		if (isset($line['datetime']) && strtotime($line['datetime']) > time()-20*60 && strtotime($line['datetime']) < time()+20*60) {
350
		    if (!isset($this->all_flights[$id]['datetime']) || strtotime($line['datetime']) >= strtotime($this->all_flights[$id]['datetime'])) {
351
			$this->all_flights[$id] = array_merge($this->all_flights[$id],array('datetime' => $line['datetime']));
352
		    } else {
353
				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";
354
				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";
355
				/*
356
				echo strtotime($line['datetime']).' > '.strtotime($this->all_flights[$id]['datetime']);
357
				print_r($this->all_flights[$id]);
358
				print_r($line);
359
				*/
360
				return '';
361
		    }
362
		} elseif (isset($line['datetime']) && strtotime($line['datetime']) < time()-20*60) {
363
			if ($globalDebug) echo "!!! Date is too old ".$line['datetime']." for ".$this->all_flights[$id]['id']." - format : ".$line['format_source']."!!!\n";
364
			return '';
365
		} elseif (isset($line['datetime']) && strtotime($line['datetime']) > time()+20*60) {
366
			if ($globalDebug) echo "!!! Date is in the future ".$line['datetime']." for ".$this->all_flights[$id]['id']." - format : ".$line['format_source']."!!!\n";
367
			return '';
368
		} elseif (!isset($line['datetime'])) {
369
			date_default_timezone_set('UTC');
370
			$this->all_flights[$id] = array_merge($this->all_flights[$id],array('datetime' => date('Y-m-d H:i:s')));
371
		} else {
372
			if ($globalDebug) echo "!!! Unknow date error ".$this->all_flights[$id]['hex']." - format : ".$line['format_source']."!!!";
373
			return '';
374
		}
375
376
		if (isset($line['registration']) && $line['registration'] != '' && $line['registration'] != 'z.NO-REG') {
377
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('registration' => $line['registration']));
378
		}
379
		if (isset($line['waypoints']) && $line['waypoints'] != '') {
380
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('waypoints' => $line['waypoints']));
381
		}
382
		if (isset($line['pilot_id']) && $line['pilot_id'] != '') {
383
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('pilot_id' => trim($line['pilot_id'])));
384
		}
385
		if (isset($line['pilot_name']) && $line['pilot_name'] != '') {
386
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('pilot_name' => trim($line['pilot_name'])));
387
		}
388
 
389
		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'])) {
390
391
		    if ($this->all_flights[$id]['addedSpotter'] == 1) {
392
			if ($globalVA !== TRUE && $globalIVAO !== TRUE && $globalVATSIM !== TRUE && $globalphpVMS !== TRUE && $globalVAM !== TRUE && $this->all_flights[$id]['lastupdate'] < time() - 1600) {
393
				if ($globalDebug) echo '---!!!! New ident, reset aircraft data...'."\n";
394
				$this->all_flights[$id] = array_merge($this->all_flights[$id],array('addedSpotter' => 0));
395
				$this->all_flights[$id] = array_merge($this->all_flights[$id],array('forcenew' => 1));
396
				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')));
397
				elseif (isset($line['id'])) $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $line['id']));
398
				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']));
399
			} else {
400
			    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('ident' => trim($line['ident'])));
401
			    if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
402
				$timeelapsed = microtime(true);
403
            			$Spotter = new Spotter($this->db);
404
            			$fromsource = NULL;
405
            			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
406
            			elseif (isset($line['format_source']) && $line['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
407
				elseif (isset($line['format_source']) && $line['format_source'] == 'whazzup') $fromsource = 'ivao';
408
				elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
409
				elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
410
            			$result = $Spotter->updateIdentSpotterData($this->all_flights[$id]['id'],$this->all_flights[$id]['ident'],$fromsource);
411
				if ($globalDebug && $result != 'success') echo '!!! ERROR : '.$result."\n";
412
				$Spotter->db = null;
413
				if ($globalDebugTimeElapsed) echo 'Time elapsed for update identspotterdata : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
414
			    }
415
			}
416
		    } else $this->all_flights[$id] = array_merge($this->all_flights[$id],array('ident' => trim($line['ident'])));
417
		    
418
/*
419
		    if (!isset($line['id'])) {
420
			if (!isset($globalDaemon)) $globalDaemon = TRUE;
421
//			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')));
422
			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')));
423
		        else $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $this->all_flights[$id]['hex'].'-'.$this->all_flights[$id]['ident']));
424
		     } else $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $line['id']));
425
  */
426
		    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']));
427
428
		    //$putinarchive = true;
429
		    if (isset($line['departure_airport_time']) && $line['departure_airport_time'] != 0) {
430
			$this->all_flights[$id] = array_merge($this->all_flights[$id],array('departure_airport_time' => $line['departure_airport_time']));
431
		    }
432
		    if (isset($line['arrival_airport_time']) && $line['arrival_airport_time'] != 0) {
433
			$this->all_flights[$id] = array_merge($this->all_flights[$id],array('arrival_airport_time' => $line['arrival_airport_time']));
434
		    }
435
		    if (isset($line['departure_airport_icao']) && isset($line['arrival_airport_icao'])) {
436
		    		$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' => ''));
437
		    } elseif (isset($line['departure_airport_iata']) && isset($line['arrival_airport_iata'])) {
438
			$timeelapsed = microtime(true);
439
			if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
440
				$Spotter = new Spotter($this->db);
441
				$line['departure_airport_icao'] = $Spotter->getAirportIcao($line['departure_airport_iata']);
442
				$line['arrival_airport_icao'] = $Spotter->getAirportIcao($line['arrival_airport_iata']);
443
		    		$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' => ''));
444
				if ($globalDebugTimeElapsed) echo 'Time elapsed for update getAirportICAO : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
445
                        }
446
		    } elseif (!isset($line['format_source']) || $line['format_source'] != 'aprs') {
447
			$timeelapsed = microtime(true);
448
			if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
449
			    $Spotter = new Spotter($this->db);
450
			    $route = $Spotter->getRouteInfo(trim($line['ident']));
451
			    if (!isset($route['fromairport_icao']) && !isset($route['toairport_icao'])) {
452
				$Translation = new Translation($this->db);
453
				$ident = $Translation->checkTranslation(trim($line['ident']));
454
				$route = $Spotter->getRouteInfo($ident);
455
				$Translation->db = null;
456
			    }
457
			    $Spotter->db = null;
458
			    if ($globalDebugTimeElapsed) echo 'Time elapsed for update getrouteinfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
459
                    	}
460
			if (isset($route['fromairport_icao']) && isset($route['toairport_icao'])) {
461
			    //if ($route['FromAirport_ICAO'] != $route['ToAirport_ICAO']) {
462
			    if ($route['fromairport_icao'] != $route['toairport_icao']) {
463
				//    $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']));
464
		    		$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']));
465
		    	    }
466
			}
467
			if (!isset($globalFork)) $globalFork = TRUE;
468
			if (!$globalVA && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM && (!isset($line['format_source']) || $line['format_source'] != 'aprs')) {
469
				if (!isset($this->all_flights[$id]['schedule_check']) || $this->all_flights[$id]['schedule_check'] === false) $this->get_Schedule($id,trim($line['ident']));
470
			}
471
		    }
472
		}
473
474
		if (isset($line['speed']) && $line['speed'] != '' && $line['speed'] != 0) {
475
		//    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('speed' => $line[12]));
476
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('speed' => round($line['speed'])));
477
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('speed_fromsrc' => true));
478
		    //$dataFound = true;
479
		} 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'])) {
480
		    $distance = $Common->distance($line['latitude'],$line['longitude'],$this->all_flights[$id]['latitude'],$this->all_flights[$id]['longitude'],'m');
481
		    if ($distance > 1000 && $distance < 10000) {
482
		    // use datetime
483
			$speed = $distance/(time() - $this->all_flights[$id]['time_last_coord']);
484
			$speed = $speed*3.6;
485
			if ($speed < 1000) {
486
				$this->all_flights[$id] = array_merge($this->all_flights[$id],array('speed' => round($speed)));
487
	  			if ($globalDebug) echo "ø Calculated Speed for ".$this->all_flights[$id]['hex']." : ".round($speed)." - distance : ".$distance."\n";
488
	  		} else {
489
	  			if ($globalDebug) echo "ø IGNORED : Calculated Speed for ".$this->all_flights[$id]['hex']." : ".round($speed)." - distance : ".$distance."\n";
490
	  		}
491
		    }
492
		}
493
494
495
496
	        if (isset($line['latitude']) && isset($line['longitude']) && $line['latitude'] != '' && $line['longitude'] != '' && is_numeric($line['latitude']) && is_numeric($line['longitude'])) {
497
	    	    if (ctype_digit(strval($line['latitude'])) || ctype_digit(strval($line['longitude']))) {
498
	    	    	if ($globalDebug) echo "/!\ Invalid latitude or/and longitude data : lat: ".$line['latitude']." - lng: ".$line['longitude']."\n";
499
	    	    	return false;
500
	    	    }
501
	    	    if (isset($this->all_flights[$id]['time_last_coord'])) $timediff = round(time()-$this->all_flights[$id]['time_last_coord']);
502
	    	    else unset($timediff);
503
	    	    if (isset($this->all_flights[$id]['time_last_archive_coord'])) $timediff_archive = round(time()-$this->all_flights[$id]['time_last_archive_coord']);
504
	    	    else unset($timediff_archive);
505
	    	    if ($this->tmd > 5
506
	    	        || (isset($line['format_source']) 
507
	    	    	    && $line['format_source'] == 'airwhere' 
508
	    	    	    && ((!isset($this->all_flights[$id]['latitude']) 
509
	    	    		|| !isset($this->all_flights[$id]['longitude'])) 
510
	    	    		|| (isset($this->all_flights[$id]['latitude']) 
511
	    	    		    && isset($this->all_flights[$id]['longitude']) 
512
	    	    		    && $this->all_flights[$id]['latitude'] != $line['latitude'] 
513
	    	    		    && $this->all_flights[$id]['longitude'] != $line['longitude']
514
	    	    		)
515
	    	    	    )
516
	    	    	)
517
	    		|| (isset($globalVA) && $globalVA) 
518
	    	    	|| (isset($globalIVAO) && $globalIVAO)
519
	    	    	|| (isset($globalVATSIM) && $globalVATSIM)
520
	    	    	|| (isset($globalphpVMS) && $globalphpVMS)
521
	    	    	|| (isset($globalVAM) && $globalVAM)
522
	    	    	|| !isset($timediff)
523
	    	    	|| $timediff > $globalLiveInterval
524
	    	    	|| ($timediff > 30 
525
	    	    	    && isset($this->all_flights[$id]['latitude']) 
526
	    	    	    && isset($this->all_flights[$id]['longitude']) 
527
	    	    	    && $Common->withinThreshold($timediff,$Common->distance($line['latitude'],$line['longitude'],$this->all_flights[$id]['latitude'],$this->all_flights[$id]['longitude'],'m'))
528
	    	    	    )
529
	    	    	) {
530
531
			if ((isset($timediff) && !isset($timediff_archive)) || (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']))) {
532
			    if ((isset($timediff_archive) && $timediff_archive > $globalAircraftMaxUpdate)
0 ignored issues
show
Bug introduced by
The variable $timediff_archive 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...
533
				|| (isset($line['format_source']) && $line['format_source'] == 'airwhere') 
534
				|| !$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'])) {
535
				$this->all_flights[$id]['archive_latitude'] = $line['latitude'];
536
				$this->all_flights[$id]['archive_longitude'] = $line['longitude'];
537
				$this->all_flights[$id]['putinarchive'] = true;
538
				$this->tmd = 0;
539
				if (!isset($globalNoImport) || $globalNoImport === FALSE) {
540
				    if ($globalDebug) echo "\n".' ------- Check Country for '.$this->all_flights[$id]['ident'].' with latitude : '.$line['latitude'].' and longitude : '.$line['longitude'].'.... ';
541
				    $timeelapsed = microtime(true);
542
				    if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
543
					$Spotter = new Spotter($this->db);
544
					$all_country = $Spotter->getCountryFromLatitudeLongitude($line['latitude'],$line['longitude']);
545
					if (!empty($all_country)) $this->all_flights[$id]['over_country'] = $all_country['iso2'];
546
					else $this->all_flights[$id]['over_country'] = '';
547
					$Spotter->db = null;
548
					if ($globalDebugTimeElapsed) echo 'Time elapsed for update getCountryFromlatitudeLongitude : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
549
					if ($globalDebug) echo 'FOUND : '.$this->all_flights[$id]['over_country'].' ---------------'."\n";
550
				    }
551
				}
552
				$this->all_flights[$id]['time_last_archive_coord'] = time();
553
			    } 
554
			    /*
555
			    else {
556
				if (!isset($timediff)) echo 'NO TIMEDIFF';
557
				else {
558
				echo 'timediff : '.$timediff.' - maxupdate : '.$globalAircraftMaxUpdate."\n";
559
				var_dump($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']));
560
				echo 'lat1: '.$this->all_flights[$id]['archive_latitude'].' lon1: '.$this->all_flights[$id]['archive_longitude'].' - lat2: '.$this->all_flights[$id]['livedb_latitude'].' lon2: '.$this->all_flights[$id]['livedb_longitude'].' - lat3: '.$line['latitude'].' lon3: '.$line['longitude']."\n";
561
				}
562
				echo 'NOT OK HERE';
563
			    }
564
			    */
565
			}
566
567
			if (isset($line['latitude']) && $line['latitude'] != '' && $line['latitude'] != 0 && $line['latitude'] < 91 && $line['latitude'] > -90) {
568
			    //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) {
569
				if (!isset($this->all_flights[$id]['archive_latitude'])) {
570
					$this->all_flights[$id]['archive_latitude'] = $line['latitude'];
571
					$this->all_flights[$id]['time_last_coord'] = time();
572
				}
573
				//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' || ($this->all_flights[$id]['format_source'] == 'airwhere' && abs($this->all_flights[$id]['livedb_latitude']-$line['latitude']) > 0.0001)) {
574
				if (!isset($this->all_flights[$id]['livedb_latitude']) || abs($this->all_flights[$id]['livedb_latitude']-$line['latitude']) > $globalCoordMinChange || ($this->all_flights[$id]['format_source'] == 'airwhere' && abs($this->all_flights[$id]['livedb_latitude']-$line['latitude']) > 0.0001)) {
575
				    $this->all_flights[$id]['livedb_latitude'] = $line['latitude'];
576
				    $dataFound = true;
577
				    $this->all_flights[$id]['time_last_coord'] = time();
578
				}
579
				// elseif ($globalDebug) echo '!*!*! Ignore data, too close to previous one'."\n";
580
				$this->all_flights[$id] = array_merge($this->all_flights[$id],array('latitude' => $line['latitude']));
581
				/*
582
				if (abs($this->all_flights[$id]['archive_latitude']-$this->all_flights[$id]['latitude']) > 0.3) {
583
				    $this->all_flights[$id]['archive_latitude'] = $line['latitude'];
584
				    $this->all_flights[$id]['putinarchive'] = true;
585
				    //$putinarchive = true;
586
				}
587
				*/
588
			    /*
589
			    } elseif (isset($this->all_flights[$id]['latitude'])) {
590
				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";
591
			    }
592
			    */
593
			}
594
			if (isset($line['longitude']) && $line['longitude'] != '' && $line['longitude'] != 0 && $line['longitude'] < 360 && $line['longitude'] > -180) {
595
			    if ($line['longitude'] > 180) $line['longitude'] = $line['longitude'] - 360;
596
			    //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) {
597
				if (!isset($this->all_flights[$id]['archive_longitude'])) {
598
					$this->all_flights[$id]['archive_longitude'] = $line['longitude'];
599
					$this->all_flights[$id]['time_last_coord'] = time();
600
				}
601
				//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' || ($this->all_flights[$id]['format_source'] == 'airwhere' && abs($this->all_flights[$id]['livedb_longitude']-$line['longitude']) > 0.0001)) {
602
				if (!isset($this->all_flights[$id]['livedb_longitude']) || abs($this->all_flights[$id]['livedb_longitude']-$line['longitude']) > $globalCoordMinChange || ($this->all_flights[$id]['format_source'] == 'airwhere' && abs($this->all_flights[$id]['livedb_longitude']-$line['longitude']) > 0.0001)) {
603
				    $this->all_flights[$id]['livedb_longitude'] = $line['longitude'];
604
				    $dataFound = true;
605
				    $this->all_flights[$id]['time_last_coord'] = time();
606
				}
607
				// elseif ($globalDebug) echo '!*!*! Ignore data, too close to previous one'."\n";
608
				$this->all_flights[$id] = array_merge($this->all_flights[$id],array('longitude' => $line['longitude']));
609
				/*
610
				if (abs($this->all_flights[$id]['archive_longitude']-$this->all_flights[$id]['longitude']) > 0.3) {
611
				    $this->all_flights[$id]['archive_longitude'] = $line['longitude'];
612
				    $this->all_flights[$id]['putinarchive'] = true;
613
				    //$putinarchive = true;
614
				}
615
				*/
616
			/*
617
			    } elseif (isset($this->all_flights[$id]['longitude'])) {
618
				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";
619
			    }
620
			    */
621
			}
622
623
		    } else if ($globalDebug && $timediff > 30) {
624
			$this->tmd = $this->tmd + 1;
625
			echo '!!! Too much distance in short time... for '.$this->all_flights[$id]['ident']."\n";
626
			echo 'Time : '.$timediff.'s - Distance : '.$Common->distance($line['latitude'],$line['longitude'],$this->all_flights[$id]['latitude'],$this->all_flights[$id]['longitude'],'m')."m -";
627
			echo 'Speed : '.(($Common->distance($line['latitude'],$line['longitude'],$this->all_flights[$id]['latitude'],$this->all_flights[$id]['longitude'],'m')/$timediff)*3.6)." km/h - ";
628
			echo 'Lat : '.$line['latitude'].' - long : '.$line['longitude'].' - prev lat : '.$this->all_flights[$id]['latitude'].' - prev long : '.$this->all_flights[$id]['longitude']." \n";
629
		    }
630
		}
631
		if (isset($line['last_update']) && $line['last_update'] != '') {
632
		    if (isset($this->all_flights[$id]['last_update']) && $this->all_flights[$id]['last_update'] != $line['last_update']) $dataFound = true;
633
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('last_update' => $line['last_update']));
634
		}
635
		if (isset($line['verticalrate']) && $line['verticalrate'] != '') {
636
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('verticalrate' => $line['verticalrate']));
637
		    //$dataFound = true;
638
		}
639
		if (isset($line['format_source']) && $line['format_source'] != '') {
640
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('format_source' => $line['format_source']));
641
		}
642
		if (isset($line['source_name']) && $line['source_name'] != '') {
643
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('source_name' => $line['source_name']));
644
		}
645
		if (isset($line['emergency']) && $line['emergency'] != '') {
646
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('emergency' => $line['emergency']));
647
		    //$dataFound = true;
648
		}
649
		if (isset($line['ground']) && $line['ground'] != '') {
650
		    if (isset($this->all_flights[$id]['ground']) && $this->all_flights[$id]['ground'] == 1 && $line['ground'] == 0) {
651
			// Here we force archive of flight because after ground it's a new one (or should be)
652
			$this->all_flights[$id] = array_merge($this->all_flights[$id],array('addedSpotter' => 0));
653
			$this->all_flights[$id] = array_merge($this->all_flights[$id],array('forcenew' => 1));
654
			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')));
655
		        elseif (isset($line['id'])) $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $line['id']));
656
			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']));
657
		    }
658
		    if ($line['ground'] != 1) $line['ground'] = 0;
659
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('ground' => $line['ground']));
660
		    //$dataFound = true;
661
		}
662
		if (isset($line['squawk']) && $line['squawk'] != '') {
663
		    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'])) {
664
			    if ($this->all_flights[$id]['squawk'] != $line['squawk']) $this->all_flights[$id]['putinarchive'] = true;
665
			    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('squawk' => $line['squawk']));
666
			    $highlight = '';
667
			    if ($this->all_flights[$id]['squawk'] == '7500') $highlight = 'Squawk 7500 : Hijack at '.date('Y-m-d G:i').' UTC';
668
			    if ($this->all_flights[$id]['squawk'] == '7600') $highlight = 'Squawk 7600 : Lost Comm (radio failure) at '.date('Y-m-d G:i').' UTC';
669
			    if ($this->all_flights[$id]['squawk'] == '7700') $highlight = 'Squawk 7700 : Emergency at '.date('Y-m-d G:i').' UTC';
670
			    if ($highlight != '') {
671
				$timeelapsed = microtime(true);
672
				if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
673
				    $Spotter = new Spotter($this->db);
674
				    $Spotter->setHighlightFlight($this->all_flights[$id]['id'],$highlight);
675
				    $Spotter->db = null;
676
				    if ($globalDebugTimeElapsed) echo 'Time elapsed for update sethighlightflight : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
677
				}
678
				//$putinarchive = true;
679
				//$highlight = '';
680
			    }
681
			    
682
		    } else $this->all_flights[$id] = array_merge($this->all_flights[$id],array('squawk' => $line['squawk']));
683
		    //$dataFound = true;
684
		}
685
686
		if (isset($line['altitude']) && $line['altitude'] != '') {
687
			if (isset($line['altitude_relative']) && isset($GeoidClass) && is_object($GeoidClass)) {
688
				if ($line['altitude_relative'] == 'AMSL' || $line['altitude_relative'] == 'MSL') {
689
					$geoid = round($GeoidClass->get($this->all_flights[$id]['livedb_latitude'],$this->all_flights[$id]['livedb_longitude'])*3.28084,2);
690
					//if ($globalDebug) echo '=> Set altitude to WGS84 Ellipsoid, add '.$geoid.' to '.$line['altitude']."\n";
691
					$line['altitude'] = $line['altitude'] + $geoid;
692
				}
693
			}
694
		    //if (!isset($this->all_flights[$id]['altitude']) || $this->all_flights[$id]['altitude'] == '' || ($this->all_flights[$id]['altitude'] > 0 && $line['altitude'] != 0)) {
695
			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;
696
			$this->all_flights[$id] = array_merge($this->all_flights[$id],array('altitude' => round($line['altitude']/100)));
697
			$this->all_flights[$id] = array_merge($this->all_flights[$id],array('altitude_real' => $line['altitude']));
698
			//$dataFound = true;
699
		    //} elseif ($globalDebug) echo "!!! Strange altitude data... not added.\n";
700
		    if ($globalVA !== TRUE && $globalIVAO !== TRUE && $globalVATSIM !== TRUE && $globalphpVMS !== TRUE && $globalVAM !== TRUE) {
701
			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() - 1600) {
702
				if ($globalDebug) echo '--- Reset because of altitude'."\n";
703
				$this->all_flights[$id] = array_merge($this->all_flights[$id],array('addedSpotter' => 0));
704
				$this->all_flights[$id] = array_merge($this->all_flights[$id],array('forcenew' => 1));
705
				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')));
706
				elseif (isset($line['id'])) $this->all_flights[$id] = array_merge($this->all_flights[$id],array('id' => $line['id']));
707
				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']));
708
			}
709
		    }
710
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('altitude_previous' => $line['altitude']));
711
		}
712
713
		if (isset($line['noarchive']) && $line['noarchive'] === true) {
714
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('noarchive' => true));
715
		}
716
		
717
		if (isset($line['heading']) && $line['heading'] != '') {
718
		    if (is_int($this->all_flights[$id]['heading']) && abs($this->all_flights[$id]['heading']-round($line['heading'])) > 10) $this->all_flights[$id]['putinarchive'] = true;
719
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('heading' => round($line['heading'])));
720
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('heading_fromsrc' => true));
721
		    //$dataFound = true;
722
  		} 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']) {
723
  		    $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']);
724
		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('heading' => round($heading)));
725
		    if (abs($this->all_flights[$id]['heading']-round($heading)) > 10) $this->all_flights[$id]['putinarchive'] = true;
726
  		    if ($globalDebug) echo "ø Calculated Heading for ".$this->all_flights[$id]['id']." : ".$heading."\n";
727
  		} elseif (isset($this->all_flights[$id]['format_source']) && $this->all_flights[$id]['format_source'] == 'ACARS') {
728
  		    // If not enough messages and ACARS set heading to 0
729
  		    $this->all_flights[$id] = array_merge($this->all_flights[$id],array('heading' => 0));
730
  		}
731
		if ($globalDaemon === TRUE && isset($globalSourcesupdate) && $globalSourcesupdate != '' && isset($this->all_flights[$id]['lastupdate']) && time()-$this->all_flights[$id]['lastupdate'] < $globalSourcesupdate) $dataFound = false;
732
		elseif ($globalDaemon === TRUE && isset($globalSBS1update) && $globalSBS1update != '' && isset($this->all_flights[$id]['lastupdate']) && time()-$this->all_flights[$id]['lastupdate'] < $globalSBS1update) $dataFound = false;
733
		elseif ($globalDaemon === TRUE && isset($globalAircraftMinUpdate) && $globalAircraftMinUpdate != '' && 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 does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
734
735
//		print_r($this->all_flights[$id]);
736
		//gets the callsign from the last hour
737
		//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'] != '') {
738
		//if ($dataFound == true && isset($this->all_flights[$id]['hex']) && $this->all_flights[$id]['ident'] != '' && $this->all_flights[$id]['latitude'] != '' && $this->all_flights[$id]['longitude'] != '') {
739
		//if ($dataFound === true && isset($this->all_flights[$id]['hex']) && $this->all_flights[$id]['heading'] != '' && $this->all_flights[$id]['latitude'] != '' && $this->all_flights[$id]['longitude'] != '') {
740
		//if ($dataFound === true && isset($this->all_flights[$id]['hex'])) {
741
		if ($dataFound === true && isset($this->all_flights[$id]['id'])) {
742
		    $this->all_flights[$id]['lastupdate'] = time();
743
		    if ((!isset($globalNoImport) || $globalNoImport === FALSE) && $this->all_flights[$id]['addedSpotter'] == 0) {
744
		        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'])) {
745
			    //print_r($this->all_flights);
746
			    //echo $this->all_flights[$id]['id'].' - '.$this->all_flights[$id]['addedSpotter']."\n";
747
			    //$last_hour_ident = Spotter->getIdentFromLastHour($this->all_flights[$id]['ident']);
748
			    if (!isset($this->all_flights[$id]['forcenew']) || $this->all_flights[$id]['forcenew'] == 0) {
749
				if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
750
				    if ($globalDebug) echo "Check if aircraft is already in DB...";
751
				    $timeelapsed = microtime(true);
752
				    $SpotterLive = new SpotterLive($this->db);
753
				    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')) {
754
					$recent_ident = $SpotterLive->checkModeSRecent($this->all_flights[$id]['hex']);
755
					if ($globalDebugTimeElapsed) echo 'Time elapsed for update checkModeSRecent : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
756
				    } elseif (isset($line['id'])) {
757
					$recent_ident = $SpotterLive->checkIdRecent($line['id']);
758
					if ($globalDebugTimeElapsed) echo 'Time elapsed for update checkIdRecent : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
759
				    } elseif (isset($this->all_flights[$id]['ident']) && $this->all_flights[$id]['ident'] != '') {
760
					$recent_ident = $SpotterLive->checkIdentRecent($this->all_flights[$id]['ident']);
761
					if ($globalDebugTimeElapsed) echo 'Time elapsed for update checkIdentRecent : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
762
				    } else $recent_ident = '';
763
				    $SpotterLive->db=null;
764
				    if ($globalDebug && $recent_ident == '') echo " Not in DB.\n";
765
				    elseif ($globalDebug && $recent_ident != '') echo " Already in DB.\n";
766
				} else $recent_ident = '';
767
			    } else {
768
				$recent_ident = '';
769
				$this->all_flights[$id] = array_merge($this->all_flights[$id],array('forcenew' => 0));
770
			    }
771
			    //if there was no aircraft with the same callsign within the last hour and go post it into the archive
772
			    if($recent_ident == "")
773
			    {
774
				if ($globalDebug) echo "\o/ Add ".$this->all_flights[$id]['ident']." in archive DB : ";
775
				if ($this->all_flights[$id]['departure_airport'] == "") { $this->all_flights[$id]['departure_airport'] = "NA"; }
776
				if ($this->all_flights[$id]['arrival_airport'] == "") { $this->all_flights[$id]['arrival_airport'] = "NA"; }
777
				//adds the spotter data for the archive
778
				$ignoreImport = false;
779
				foreach($globalAirportIgnore as $airportIgnore) {
780
				    if (($this->all_flights[$id]['departure_airport'] == $airportIgnore) || ($this->all_flights[$id]['arrival_airport'] == $airportIgnore)) {
781
					$ignoreImport = true;
782
				    }
783
				}
784
				if (count($globalAirportAccept) > 0) {
785
				    $ignoreImport = true;
786
				    foreach($globalAirportIgnore as $airportIgnore) {
787
					if (($this->all_flights[$id]['departure_airport'] == $airportIgnore) || ($this->all_flights[$id]['arrival_airport'] == $airportIgnore)) {
788
					    $ignoreImport = false;
789
					}
790
				    }
791
				}
792
				if (isset($globalAirlineIgnore) && is_array($globalAirlineIgnore)) {
793
				    foreach($globalAirlineIgnore as $airlineIgnore) {
794
					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)) {
795
					    $ignoreImport = true;
796
					}
797
				    }
798
				}
799
				if (isset($globalAirlineAccept) && count($globalAirlineAccept) > 0) {
800
				    $ignoreImport = true;
801
				    foreach($globalAirlineAccept as $airlineAccept) {
802
					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)) {
803
					    $ignoreImport = false;
804
					}
805
				    }
806
				}
807
				if (isset($globalPilotIdAccept) && count($globalPilotIdAccept) > 0) {
808
				    $ignoreImport = true;
809
				    foreach($globalPilotIdAccept as $pilotIdAccept) {
810
					if ($this->all_flights[$id]['pilot_id'] == $pilotIdAccept) {
811
					    $ignoreImport = false;
812
					}
813
				    }
814
				}
815
				
816
				if (!$ignoreImport) {
817
				    $highlight = '';
818
				    if ($this->all_flights[$id]['squawk'] == '7500') $highlight = 'Squawk 7500 : Hijack';
819
				    if ($this->all_flights[$id]['squawk'] == '7600') $highlight = 'Squawk 7600 : Lost Comm (radio failure)';
820
				    if ($this->all_flights[$id]['squawk'] == '7700') $highlight = 'Squawk 7700 : Emergency';
821
				    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')));
822
				    $timeelapsed = microtime(true);
823
				    if (!isset($globalNoImport) || $globalNoImport === FALSE) {
824
					if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
825
					    $Spotter = new Spotter($this->db);
826
					    $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']);
827
					    $Spotter->db = null;
828
					    if ($globalDebug && isset($result)) echo $result."\n";
829
					}
830
				    }
831
				    if ($globalDebugTimeElapsed) echo 'Time elapsed for update addspotterdata : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
832
				    if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
833
834
				    // Add source stat in DB
835
				    $Stats = new Stats($this->db);
836
				    if (!empty($this->stats)) {
837
					if ($globalDebug) echo 'Add source stats : ';
838
				        foreach($this->stats as $date => $data) {
839
					    foreach($data as $source => $sourced) {
840
					        //print_r($sourced);
841
				    	        if (isset($sourced['polar'])) echo $Stats->addStatSource(json_encode($sourced['polar']),$source,'polar',$date);
842
				    	        if (isset($sourced['hist'])) echo $Stats->addStatSource(json_encode($sourced['hist']),$source,'hist',$date);
843
				    		if (isset($sourced['msg'])) {
844
				    		    if (time() - $sourced['msg']['date'] > 10) {
845
				    		        $nbmsg = round($sourced['msg']['nb']/(time() - $sourced['msg']['date']));
846
				    		        echo $Stats->addStatSource($nbmsg,$source,'msg',$date);
847
			    			        unset($this->stats[$date][$source]['msg']);
848
			    			    }
849
			    			}
850
			    		    }
851
			    		    if ($date != date('Y-m-d')) {
852
			    			unset($this->stats[$date]);
853
			    		    }
854
				    	}
855
				    	if ($globalDebug) echo 'Done'."\n";
856
857
				    }
858
				    $Stats->db = null;
859
				    }
860
				    $this->del();
861
				} elseif ($globalDebug) echo 'Ignore data'."\n";
862
				//$ignoreImport = false;
863
				$this->all_flights[$id]['addedSpotter'] = 1;
864
				//print_r($this->all_flights[$id]);
865
			/*
866
			if (isset($globalArchive) && $globalArchive) {
867
			    $archives_ident = SpotterLive->getAllLiveSpotterDataByIdent($this->all_flights[$id]['ident']);
868
			    foreach ($archives_ident as $archive) {
869
				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'],
870
				$archive['arrival_airport_icao'],$archive['arrival_airport_name'],$archive['arrival_airport_city'],$archive['arrival_airport_country'],$archive['arrival_airport_time'],
871
				$archive['route_stop'],$archive['date'],$archive['latitude'], $archive['longitude'], $archive['waypoints'], $archive['altitude'], $archive['heading'], $archive['ground_speed'],
872
				$archive['squawk'],$archive['ModeS']);
873
			    }
874
			}
875
			*/
876
			//SpotterLive->deleteLiveSpotterDataByIdent($this->all_flights[$id]['ident']);
877
				if ($this->last_delete == 0 || time() - $this->last_delete > 1800) {
878
				    if ($globalDebug) echo "---- Deleting Live Spotter data older than 9 hours...";
879
				    //SpotterLive->deleteLiveSpotterDataNotUpdated();
880
				    if (!isset($globalNoImport) || $globalNoImport === FALSE) {
881
					if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
882
					    $SpotterLive = new SpotterLive($this->db);
883
					    $SpotterLive->deleteLiveSpotterData();
884
					    $SpotterLive->db=null;
885
					}
886
				    }
887
				    if ($globalDebug) echo " Done\n";
888
				    $this->last_delete = time();
889
				}
890
			    } else {
891
				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' || $line['format_source'] === 'airwhere')) {
892
				    $this->all_flights[$id]['id'] = $recent_ident;
893
				    $this->all_flights[$id]['addedSpotter'] = 1;
894
				}
895
				if (isset($globalDaemon) && !$globalDaemon) {
896
				    if (!isset($globalNoImport) || $globalNoImport === FALSE) {
897
					if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
898
					    $Spotter = new Spotter($this->db);
899
					    $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']);
900
					    $Spotter->db = null;
901
					}
902
				    }
903
				}
904
				
905
			    }
906
			}
907
		    }
908
		    //adds the spotter LIVE data
909
		    //SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
910
		    //echo "\nAdd in Live !! \n";
911
		    //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";
912
		    if ($globalDebug) {
913
			if ((isset($globalVA) && $globalVA) || (isset($globalIVAO) && $globalIVAO) || (isset($globalVATSIM) && $globalVATSIM) || (isset($globalphpVMS) && $globalphpVMS) || (isset($globalVAM) && $globalVAM)) {
914
				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";
915
				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";
916
			} else {
917
				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";
918
				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";
919
			}
920
		    }
921
		    $ignoreImport = false;
922
		    if ($this->all_flights[$id]['departure_airport'] == "") { $this->all_flights[$id]['departure_airport'] = "NA"; }
923
		    if ($this->all_flights[$id]['arrival_airport'] == "") { $this->all_flights[$id]['arrival_airport'] = "NA"; }
924
925
		    foreach($globalAirportIgnore as $airportIgnore) {
926
		        if (($this->all_flights[$id]['departure_airport'] == $airportIgnore) || ($this->all_flights[$id]['arrival_airport'] == $airportIgnore)) {
927
			    $ignoreImport = true;
928
			}
929
		    }
930
		    if (count($globalAirportAccept) > 0) {
931
		        $ignoreImport = true;
932
		        foreach($globalAirportIgnore as $airportIgnore) {
933
			    if (($this->all_flights[$id]['departure_airport'] == $airportIgnore) || ($this->all_flights[$id]['arrival_airport'] == $airportIgnore)) {
934
				$ignoreImport = false;
935
			    }
936
			}
937
		    }
938
		    if (isset($globalAirlineIgnore) && is_array($globalAirlineIgnore)) {
939
			foreach($globalAirlineIgnore as $airlineIgnore) {
940
			    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)) {
941
				$ignoreImport = true;
942
			    }
943
			}
944
		    }
945
		    if (isset($globalAirlineAccept) && count($globalAirlineAccept) > 0) {
946
			$ignoreImport = true;
947
			foreach($globalAirlineAccept as $airlineAccept) {
948
			    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)) {
949
				$ignoreImport = false;
950
			    }
951
			}
952
		    }
953
		    if (isset($globalPilotIdAccept) && count($globalPilotIdAccept) > 0) {
954
			$ignoreImport = true;
955
			foreach($globalPilotIdAccept as $pilotIdAccept) {
956
			    if ($this->all_flights[$id]['pilot_id'] == $pilotIdAccept) {
957
			        $ignoreImport = false;
958
			    }
959
			}
960
		    }
961
962
		    if (!$ignoreImport) {
963
			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'])) {
964
				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')));
965
				$timeelapsed = microtime(true);
966
				if (!isset($globalNoImport) || $globalNoImport === FALSE) {
967
				    if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
968
					if ($globalDebug) echo "\o/ Add ".$this->all_flights[$id]['ident']." from ".$this->all_flights[$id]['format_source']." in Live DB : ";
969
					$SpotterLive = new SpotterLive($this->db);
970
					$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']);
971
					$SpotterLive->db = null;
972
					if ($globalDebug) echo $result."\n";
973
				    }
974
				}
975
				if (isset($globalServerAPRS) && $globalServerAPRS && $this->all_flights[$id]['putinarchive']) {
976
					$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']);
977
				}
978
				$this->all_flights[$id]['putinarchive'] = false;
979
				if ($globalDebugTimeElapsed) echo 'Time elapsed for update addlivespotterdata : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
980
981
				// Put statistics in $this->stats variable
982
				//if ($line['format_source'] != 'aprs') {
983
				//if (isset($line['format_source']) && ($line['format_source'] === 'sbs' || $line['format_source'] === 'tsv' || $line['format_source'] === 'raw' || $line['format_source'] === 'deltadbtxt')) {
984
				if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
985
				    if (isset($line['sourcestats']) && $line['sourcestats'] == TRUE && $this->all_flights[$id]['latitude'] != '' && $this->all_flights[$id]['longitude'] != '') {
986
					$source = $this->all_flights[$id]['source_name'];
987
					if ($source == '') $source = $this->all_flights[$id]['format_source'];
988
					if (!isset($this->source_location[$source])) {
989
						$Location = new Source();
990
						$coord = $Location->getLocationInfobySourceName($source);
991
						if (count($coord) > 0) {
992
							$latitude = $coord[0]['latitude'];
993
							$longitude = $coord[0]['longitude'];
994
						} else {
995
							$latitude = $globalCenterLatitude;
996
							$longitude = $globalCenterLongitude;
997
						}
998
						$this->source_location[$source] = array('latitude' => $latitude,'longitude' => $longitude);
999
					} else {
1000
						$latitude = $this->source_location[$source]['latitude'];
1001
						$longitude = $this->source_location[$source]['longitude'];
1002
					}
1003
					$stats_heading = $Common->getHeading($latitude,$longitude,$this->all_flights[$id]['latitude'],$this->all_flights[$id]['longitude']);
1004
					//$stats_heading = $stats_heading%22.5;
1005
					$stats_heading = round($stats_heading/22.5);
1006
					$stats_distance = $Common->distance($latitude,$longitude,$this->all_flights[$id]['latitude'],$this->all_flights[$id]['longitude']);
1007
					$current_date = date('Y-m-d');
1008
					if ($stats_heading == 16) $stats_heading = 0;
1009
					if (!isset($this->stats[$current_date][$source]['polar'][1])) {
1010
						for ($i=0;$i<=15;$i++) {
1011
						    $this->stats[$current_date][$source]['polar'][$i] = 0;
1012
						}
1013
						$this->stats[$current_date][$source]['polar'][$stats_heading] = $stats_distance;
1014
					} else {
1015
						if ($this->stats[$current_date][$source]['polar'][$stats_heading] < $stats_distance) {
1016
							$this->stats[$current_date][$source]['polar'][$stats_heading] = $stats_distance;
1017
						}
1018
					}
1019
					$distance = (round($stats_distance/10)*10);
1020
					//echo '$$$$$$$$$$ DISTANCE : '.$distance.' - '.$source."\n";
1021
					//var_dump($this->stats);
1022
					if (!isset($this->stats[$current_date][$source]['hist'][$distance])) {
1023
						if (isset($this->stats[$current_date][$source]['hist'][0])) {
1024
						    end($this->stats[$current_date][$source]['hist']);
1025
						    $mini = key($this->stats[$current_date][$source]['hist'])+10;
1026
						} else $mini = 0;
1027
						for ($i=$mini;$i<=$distance;$i+=10) {
1028
						    $this->stats[$current_date][$source]['hist'][$i] = 0;
1029
						}
1030
						$this->stats[$current_date][$source]['hist'][$distance] = 1;
1031
					} else {
1032
						$this->stats[$current_date][$source]['hist'][$distance] += 1;
1033
					}
1034
				    }
1035
				}
1036
1037
				$this->all_flights[$id]['lastupdate'] = time();
1038
				if ($this->all_flights[$id]['putinarchive']) $send = true;
1039
				//if ($globalDebug) echo "Distance : ".Common->distance($this->all_flights[$id]['latitude'],$this->all_flights[$id]['longitude'],$globalDistanceIgnore['latitude'],$globalDistanceIgnore['longitude'])."\n";
1040
			} 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";
1041
			//$this->del();
1042
			
1043
			if ($this->last_delete_hourly == 0 || time() - $this->last_delete_hourly > 900) {
1044
			    if ((!isset($globalNoImport) || $globalNoImport === FALSE) && (!isset($globalNoDB) || $globalNoDB !== TRUE)) {
1045
				if ($globalDebug) echo "---- Deleting Live Spotter data Not updated since 2 hour...";
1046
				$SpotterLive = new SpotterLive($this->db);
1047
				$SpotterLive->deleteLiveSpotterDataNotUpdated();
1048
				$SpotterLive->db = null;
1049
				//SpotterLive->deleteLiveSpotterData();
1050
				if ($globalDebug) echo " Done\n";
1051
				$this->last_delete_hourly = time();
1052
			    } else {
1053
				$this->del();
1054
				$this->last_delete_hourly = time();
1055
			    }
1056
			}
1057
			
1058
		    }
1059
		    //$ignoreImport = false;
1060
		}
1061
		//if (function_exists('pcntl_fork') && $globalFork) pcntl_signal(SIGCHLD, SIG_IGN);
1062
		if ($send) return $this->all_flights[$id];
1063
	    }
1064
	}
1065
    }
1066
}
1067
?>
1068