Completed
Push — master ( 460c94...2c5525 )
by Yannick
33:06
created

require/class.MarineImport.php (2 issues)

Labels
Severity

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
require_once(dirname(__FILE__).'/class.Connection.php');
3
require_once(dirname(__FILE__).'/class.AIS.php');
4
require_once(dirname(__FILE__).'/class.Marine.php');
5
require_once(dirname(__FILE__).'/class.MarineLive.php');
6
require_once(dirname(__FILE__).'/class.MarineArchive.php');
7
require_once(dirname(__FILE__).'/class.Scheduler.php');
8
require_once(dirname(__FILE__).'/class.Translation.php');
9
require_once(dirname(__FILE__).'/class.Stats.php');
10
require_once(dirname(__FILE__).'/class.Source.php');
11
if (isset($globalServerAPRS) && $globalServerAPRS) {
12
    require_once(dirname(__FILE__).'/class.APRS.php');
13
}
14
15
class MarineImport {
16
    private $all_tracked = 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, $APRSMarine, $globalNoDB;
27
	if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
28
	    $Connection = new Connection($dbc);
29
	    $this->db = $Connection->db();
30
	    date_default_timezone_set('UTC');
31
	}
32
	// Get previous source stats
33
	/*
34
	$Stats = new Stats($dbc);
35
	$currentdate = date('Y-m-d');
36
	$sourcestat = $Stats->getStatsSource($currentdate);
37
	if (!empty($sourcestat)) {
38
	    foreach($sourcestat as $srcst) {
39
	    	$type = $srcst['stats_type'];
40
		if ($type == 'polar' || $type == 'hist') {
41
		    $source = $srcst['source_name'];
42
		    $data = $srcst['source_data'];
43
		    $this->stats[$currentdate][$source][$type] = json_decode($data,true);
44
	        }
45
	    }
46
	}
47
	*/
48
	if (isset($globalServerAPRS) && $globalServerAPRS) {
49
	    $APRSMarine = new APRSMarine();
50
	    //$APRSSpotter->connect();
51
	}
52
    }
53
54
    public function checkAll() {
55
	global $globalDebug, $globalNoDB;
56
	if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
57
	    if ($globalDebug) echo "Update last seen tracked data...\n";
58
	    foreach ($this->all_tracked as $key => $flight) {
59
		if (isset($this->all_tracked[$key]['id'])) {
60
		    //echo $this->all_tracked[$key]['id'].' - '.$this->all_tracked[$key]['latitude'].'  '.$this->all_tracked[$key]['longitude']."\n";
61
    		    $Marine = new Marine($this->db);
62
    		    $Marine->updateLatestMarineData($this->all_tracked[$key]['id'],$this->all_tracked[$key]['ident'],$this->all_tracked[$key]['latitude'],$this->all_tracked[$key]['longitude'],$this->all_tracked[$key]['speed'],$this->all_tracked[$key]['datetime']);
63
		}
64
	    }
65
	}
66
    }
67
68
    public function del() {
69
	global $globalDebug, $globalNoDB, $globalNoImport;
70
	// Delete old infos
71
	if ($globalDebug) echo 'Delete old values and update latest data...'."\n";
72
	foreach ($this->all_tracked as $key => $flight) {
73
    	    if (isset($flight['lastupdate'])) {
74
        	if ($flight['lastupdate'] < (time()-3000)) {
75
            	    if ((!isset($globalNoImport) || $globalNoImport !== TRUE) && (!isset($globalNoDB) || $globalNoDB !== TRUE)) {
76
            		if (isset($this->all_tracked[$key]['id'])) {
77
            		    if ($globalDebug) echo "--- Delete old values with id ".$this->all_tracked[$key]['id']."\n";
78
			    /*
79
			    $MarineLive = new MarineLive();
80
            		    $MarineLive->deleteLiveMarineDataById($this->all_tracked[$key]['id']);
81
			    $MarineLive->db = null;
82
			    */
83
            		    //$real_arrival = $this->arrival($key);
84
            		    $Marine = new Marine($this->db);
85
            		    if ($this->all_tracked[$key]['latitude'] != '' && $this->all_tracked[$key]['longitude'] != '') {
86
				$result = $Marine->updateLatestMarineData($this->all_tracked[$key]['id'],$this->all_tracked[$key]['ident'],$this->all_tracked[$key]['latitude'],$this->all_tracked[$key]['longitude'],$this->all_tracked[$key]['speed'],$this->all_tracked[$key]['datetime'],$this->all_tracked[$id]['distance'],$this->all_tracked[$id]['race_rank'],$this->all_tracked[$id]['race_time']);
0 ignored issues
show
The variable $id 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...
87
				if ($globalDebug && $result != 'success') echo '!!! ERROR : '.$result."\n";
88
			    }
89
			    // Put in archive
90
//				$Marine->db = null;
91
			}
92
            	    }
93
            	    unset($this->all_tracked[$key]);
94
    	        }
95
	    }
96
        }
97
    }
98
99
    public function add($line) {
100
	global $globalFork, $globalDistanceIgnore, $globalDaemon, $globalDebug, $globalCoordMinChange, $globalDebugTimeElapsed, $globalCenterLatitude, $globalCenterLongitude, $globalBeta, $globalSourcesupdate, $globalAllTracked, $globalNoImport, $globalNoDB, $globalServerAPRS,$APRSMarine, $globalLiveInterval;
101
	if (!isset($globalCoordMinChange) || $globalCoordMinChange == '') $globalCoordMinChange = '0.02';
102
	date_default_timezone_set('UTC');
103
	$dataFound = false;
104
	$send = false;
105
	
106
	// SBS format is CSV format
107
	if(is_array($line) && (isset($line['mmsi']) || isset($line['id']))) {
108
	    //print_r($line);
109
  	    if (isset($line['mmsi']) || isset($line['id'])) {
110
111
		
112
		// Increment message number
113
		if (isset($line['sourcestats']) && $line['sourcestats'] == TRUE) {
114
		    $current_date = date('Y-m-d');
115
		    if (isset($line['source_name'])) $source = $line['source_name'];
116
		    else $source = '';
117
		    if ($source == '' || $line['format_source'] == 'aprs') $source = $line['format_source'];
118
		    if (!isset($this->stats[$current_date][$source]['msg'])) {
119
		    	$this->stats[$current_date][$source]['msg']['date'] = time();
120
		    	$this->stats[$current_date][$source]['msg']['nb'] = 1;
121
		    } else $this->stats[$current_date][$source]['msg']['nb'] += 1;
122
		}
123
		
124
		
125
		$Common = new Common();
126
		$AIS = new AIS();
127
	        if (!isset($line['id'])) $id = trim($line['mmsi']);
128
	        else $id = trim($line['id']);
129
		
130
		if (!isset($this->all_tracked[$id])) {
131
		    $this->all_tracked[$id] = array();
132
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('addedMarine' => 0));
133
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('ident' => '','latitude' => '', 'longitude' => '', 'speed' => '0', 'heading' => '', 'format_source' => '','source_name' => '','comment'=> '','type' => '','typeid' => '','noarchive' => false,'putinarchive' => true,'over_country' => '','mmsi' => '','status' => '','status_id' => '','imo' => '','callsign' => '','arrival_code' => '','arrival_date' => '','mmsi_type' => '','captain_id' => '','captain_name' => '','race_id' => '','race_name' => '','distance' => NULL));
134
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('lastupdate' => time()));
135
		    if (!isset($line['id'])) {
136
			if (!isset($globalDaemon)) $globalDaemon = TRUE;
137
			$this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('id' => $id.'-'.date('YmdHi')));
138
		     } else $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('id' => $line['id']));
139
		    if ($globalAllTracked !== FALSE) $dataFound = true;
140
		}
141
		
142
		if (isset($line['mmsi']) && $line['mmsi'] != '' && $line['mmsi'] != $this->all_tracked[$id]['mmsi']) {
143
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('mmsi' => $line['mmsi']));
144
		    if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
145
			$Marine = new Marine($this->db);
146
			$identity = $Marine->getIdentity($line['mmsi']);
147
			if (!empty($identity)) {
148
			    $this->all_tracked[$id]['ident'] = $identity['ship_name'];
149
			    $this->all_tracked[$id]['type'] = $identity['type'];
150
			    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('typeid' => $AIS->getShipTypeID($identity['type'])));
151
			}
152
			//print_r($identity);
153
			unset($Marine);
154
			//$dataFound = true;
155
		    }
156
		}
157
		if (isset($line['type_id'])) {
158
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('type' => $AIS->getShipType($line['type_id'])));
159
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('typeid' => $line['type_id']));
160
		}
161
		if (isset($line['type']) && $line['type'] != '' && $this->all_tracked[$id]['type'] == '') {
162
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('type' => $line['type']));
163
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('typeid' => $AIS->getShipTypeID($line['type'])));
164
		} elseif (isset($line['type']) && $line['type'] != '' && $this->all_tracked[$id]['type'] != '') {
165
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('type' => $line['type']));
166
		}
167
		if (isset($line['status']) && $line['status'] != '') {
168
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('status' => $line['status']));
169
		}
170
		if (isset($line['status_id']) && (!isset($this->all_tracked[$id]['status_id']) || $this->all_tracked[$id]['status_id'] != $line['status_id'])) {
171
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('status_id' => $line['status_id']));
172
		    if ($this->all_tracked[$id]['addedMarine'] == 1) {
173
			if (!isset($globalNoImport) || $globalNoImport !== TRUE) {
174
			    if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
175
				$Marine = new Marine($this->db);
176
				$Marine->updateStatusMarineData($this->all_tracked[$id]['id'],$this->all_tracked[$id]['status_id'],$this->all_tracked[$id]['status']);
177
				unset($Marine);
178
			    }
179
			}
180
		    }
181
		}
182
183
184
		if (isset($line['mmsi_type']) && $line['mmsi_type'] != '') {
185
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('mmsi_type' => $line['mmsi_type']));
186
		}
187
		if (isset($line['imo']) && $line['imo'] != '') {
188
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('imo' => $line['imo']));
189
		}
190
		if (isset($line['callsign']) && $line['callsign'] != '') {
191
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('callsign' => $line['callsign']));
192
		}
193
		if (isset($line['arrival_code']) && $line['arrival_code'] != '') {
194
		    if (!isset($this->all_tracked[$id]['arrival_code'])) {
195
			$this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('arrival_code' => $line['arrival_code']));
196
			if ($globalDebug) echo $this->all_tracked[$id]['id'].' => New arrival: '.$line['arrival_code']."\n";
197
			if ($this->all_tracked[$id]['addedMarine'] != 0) {
198
			    if (!isset($globalNoImport) || $globalNoImport !== TRUE) {
199
				if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
200
				    $Marine = new Marine($this->db);
201
				    $fromsource = NULL;
202
				    $Marine->updateArrivalPortNameMarineData($this->all_tracked[$id]['id'],$this->all_tracked[$id]['arrival_code'],$fromsource);
203
				    $Marine->db = null;
204
				}
205
			    }
206
			}
207
		    } elseif ($this->all_tracked[$id]['arrival_code'] != $line['arrival_code']) {
208
			$this->all_tracked[$id]['arrival_code'] = $line['arrival_code'];
209
			if ($globalDebug) echo $this->all_tracked[$id]['id'].' => New arrival: '.$line['arrival_code']."\n";
210
			if (!isset($line['id'])) {
211
				$this->all_tracked[$id]['id'] = $id.'-'.date('YmdHi');
212
				$this->all_tracked[$id]['forcenew'] = 1;
213
				$this->all_tracked[$id]['addedMarine'] = 0;
214
			}
215
		    }
216
		}
217
		if (isset($line['arrival_date']) && $line['arrival_date'] != '') {
218
		    if (strtotime($line['arrival_date']) > time()) $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('arrival_date' => $line['arrival_date']));
219
		}
220
		if (isset($line['captain_id']) && $line['captain_id'] != '') {
221
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('captain_id' => $line['captain_id']));
222
		}
223
		if (isset($line['captain_name']) && $line['captain_name'] != '') {
224
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('captain_name' => $line['captain_name']));
225
		}
226
		if (isset($line['race_id']) && $line['race_id'] != '') {
227
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('race_id' => $line['race_id']));
228
		}
229
		if (isset($line['race_name']) && $line['race_name'] != '') {
230
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('race_name' => $line['race_name']));
231
		}
232
		if (isset($line['race_rank']) && $line['race_rank'] != '') {
233
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('race_rank' => $line['race_rank']));
234
		}
235
		if (isset($line['race_time']) && $line['race_time'] != '') {
236
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('race_time' => $line['race_time']));
237
		}
238
		if (isset($line['distance']) && $line['distance'] != '') {
239
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('distance' => $line['distance']));
240
		}
241
242
		//if (isset($line['ident']) && $line['ident'] != '' && $line['ident'] != '????????' && $line['ident'] != '00000000' && ($this->all_tracked[$id]['ident'] != trim($line['ident'])) && preg_match('/^[a-zA-Z0-9-]+$/', $line['ident'])) {
243
		if (isset($line['ident']) && $line['ident'] != '' && $line['ident'] != '????????' && $line['ident'] != '00000000' && ($this->all_tracked[$id]['ident'] != trim($line['ident']))) {
244
		    if (!isset($globalNoImport) || $globalNoImport !== TRUE) {
245
			if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
246
			    $timeelapsed = microtime(true);
247
			    $Marine = new Marine($this->db);
248
			    $Marine->addIdentity($this->all_tracked[$id]['mmsi'],$this->all_tracked[$id]['imo'],$this->all_tracked[$id]['ident'],$this->all_tracked[$id]['callsign'],$this->all_tracked[$id]['type']);
249
			    $Marine->db = null;
250
			}
251
		    }
252
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('ident' => trim($line['ident'])));
253
		    if ($this->all_tracked[$id]['addedMarine'] == 1) {
254
			if (!isset($globalNoImport) || $globalNoImport !== TRUE) {
255
			    if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
256
				$timeelapsed = microtime(true);
257
				$Marine = new Marine($this->db);
258
				$fromsource = NULL;
259
				$result = $Marine->updateIdentMarineData($this->all_tracked[$id]['id'],$this->all_tracked[$id]['ident'],$fromsource);
260
				if ($globalDebug && $result != 'success') echo '!!! ERROR : '.$result."\n";
261
				$Marine->db = null;
262
				if ($globalDebugTimeElapsed) echo 'Time elapsed for update identspotterdata : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
263
			    }
264
			}
265
		    }
266
		    if (!isset($this->all_tracked[$id]['id'])) $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('id' => $this->all_tracked[$id]['ident']));
267
		}
268
269
		if (isset($line['datetime']) && strtotime($line['datetime']) > time()-30*60 && strtotime($line['datetime']) < time()+20*60) {
270
		    if (!isset($this->all_tracked[$id]['datetime']) || strtotime($line['datetime']) > strtotime($this->all_tracked[$id]['datetime'])) {
271
			$this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('datetime' => $line['datetime']));
272
		    } else {
273
				if (strtotime($line['datetime']) == strtotime($this->all_tracked[$id]['datetime']) && $globalDebug) echo "!!! Date is the same as previous data for ".$this->all_tracked[$id]['mmsi']."\n";
274
				elseif (strtotime($line['datetime']) > strtotime($this->all_tracked[$id]['datetime']) && $globalDebug) echo "!!! Date previous latest data (".$line['datetime']." > ".$this->all_tracked[$id]['datetime'].") !!! for ".$this->all_tracked[$id]['hex']." - format : ".$line['format_source']."\n";
275
				return '';
276
		    }
277
		} elseif (isset($line['datetime']) && strtotime($line['datetime']) <= time()-30*60) {
278
			if ($globalDebug) echo "!!! Date is too old ".$this->all_tracked[$id]['mmsi']." - format : ".$line['format_source']."!!!\n";
279
			return '';
280
		} elseif (isset($line['datetime']) && strtotime($line['datetime']) >= time()+20*60) {
281
			if ($globalDebug) echo "!!! Date is in the future ".$this->all_tracked[$id]['mmsi']." - format : ".$line['format_source']."!!!\n";
282
			return '';
283
		} elseif (!isset($line['datetime'])) {
284
			date_default_timezone_set('UTC');
285
			$this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('datetime' => date('Y-m-d H:i:s')));
286
		} else {
287
			if ($globalDebug) echo "!!! Unknow date error ".$this->all_tracked[$id]['mmsi']." date: ".$line['datetime']." - format : ".$line['format_source']."!!!\n";
288
			return '';
289
		}
290
291
292
		if (isset($line['speed'])) {
293
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('speed' => round($line['speed'],2)));
294
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('speed_fromsrc' => true));
295
		} else if (!isset($this->all_tracked[$id]['speed_fromsrc']) && isset($this->all_tracked[$id]['time_last_coord']) && $this->all_tracked[$id]['time_last_coord'] != time() && isset($line['latitude']) && isset($line['longitude'])) {
296
		    $distance = $Common->distance($line['latitude'],$line['longitude'],$this->all_tracked[$id]['latitude'],$this->all_tracked[$id]['longitude'],'m');
297
		    if ($distance > 1000 && $distance < 10000) {
298
			$speed = $distance/(time() - $this->all_tracked[$id]['time_last_coord']);
299
			$speed = $speed*3.6;
300
			if ($speed < 1000) $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('speed' => round($speed,2)));
301
  			if ($globalDebug) echo "ø Calculated Speed for ".$this->all_tracked[$id]['hex']." : ".$speed." - distance : ".$distance."\n";
302
		    }
303
		}
304
305
	        if (isset($line['latitude']) && isset($line['longitude']) && $line['latitude'] != '' && $line['longitude'] != '' && is_numeric($line['latitude']) && is_numeric($line['longitude'])) {
306
	    	    if (isset($this->all_tracked[$id]['time_last_coord'])) $timediff = round(time()-$this->all_tracked[$id]['time_last_coord']);
307
	    	    else unset($timediff);
308
	    	    if ($this->tmd > 5 ||
309
	    		!isset($timediff) ||
310
	    		$timediff > $globalLiveInterval ||
311
	    		(
312
	    		    $timediff > 30 && 
313
	    		    isset($this->all_tracked[$id]['latitude']) &&
314
	    		    isset($this->all_tracked[$id]['longitude']) &&
315
	    		    $Common->withinThreshold($timediff,$Common->distance($line['latitude'],$line['longitude'],$this->all_tracked[$id]['latitude'],$this->all_tracked[$id]['longitude'],'m'))
316
	    		)
317
	    		) {
318
			if (isset($this->all_tracked[$id]['archive_latitude']) && isset($this->all_tracked[$id]['archive_longitude']) && isset($this->all_tracked[$id]['livedb_latitude']) && isset($this->all_tracked[$id]['livedb_longitude'])) {
319
			    if (!$Common->checkLine($this->all_tracked[$id]['archive_latitude'],$this->all_tracked[$id]['archive_longitude'],$this->all_tracked[$id]['livedb_latitude'],$this->all_tracked[$id]['livedb_longitude'],$line['latitude'],$line['longitude'])) {
320
				$this->all_tracked[$id]['archive_latitude'] = $line['latitude'];
321
				$this->all_tracked[$id]['archive_longitude'] = $line['longitude'];
322
				$this->all_tracked[$id]['putinarchive'] = true;
323
				
324
				if ($globalDebug) echo "\n".' ------- Check Country for '.$this->all_tracked[$id]['ident'].' with latitude : '.$line['latitude'].' and longitude : '.$line['longitude'].'.... ';
325
				$timeelapsed = microtime(true);
326
				if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
327
				    $Marine = new Marine($this->db);
328
				    $all_country = $Marine->getCountryFromLatitudeLongitude($line['latitude'],$line['longitude']);
329
				    if (!empty($all_country)) $this->all_tracked[$id]['over_country'] = $all_country['iso2'];
330
				    $Marine->db = null;
331
				    if ($globalDebugTimeElapsed) echo 'Time elapsed for update getCountryFromlatitudeLongitude : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
332
				}
333
				$this->tmd = 0;
334
				if ($globalDebug) echo 'FOUND : '.$this->all_tracked[$id]['over_country'].' ---------------'."\n";
335
			    }
336
			}
337
338
			if (isset($line['latitude']) && $line['latitude'] != '' && $line['latitude'] != 0 && $line['latitude'] < 91 && $line['latitude'] > -90) {
339
				if (!isset($this->all_tracked[$id]['archive_latitude'])) $this->all_tracked[$id]['archive_latitude'] = $line['latitude'];
340
				if (!isset($this->all_tracked[$id]['livedb_latitude']) || abs($this->all_tracked[$id]['livedb_latitude']-$line['latitude']) > $globalCoordMinChange || $this->all_tracked[$id]['format_source'] == 'aprs') {
341
				    $this->all_tracked[$id]['livedb_latitude'] = $line['latitude'];
342
				    $dataFound = true;
343
				    $this->all_tracked[$id]['time_last_coord'] = time();
344
				}
345
				$this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('latitude' => $line['latitude']));
346
			}
347
			if (isset($line['longitude']) && $line['longitude'] != '' && $line['longitude'] != 0 && $line['longitude'] < 360 && $line['longitude'] > -180) {
348
			    if ($line['longitude'] > 180) $line['longitude'] = $line['longitude'] - 360;
349
				if (!isset($this->all_tracked[$id]['archive_longitude'])) $this->all_tracked[$id]['archive_longitude'] = $line['longitude'];
350
				if (!isset($this->all_tracked[$id]['livedb_longitude']) || abs($this->all_tracked[$id]['livedb_longitude']-$line['longitude']) > $globalCoordMinChange || $this->all_tracked[$id]['format_source'] == 'aprs') {
351
				    $this->all_tracked[$id]['livedb_longitude'] = $line['longitude'];
352
				    $dataFound = true;
353
				    $this->all_tracked[$id]['time_last_coord'] = time();
354
				}
355
				$this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('longitude' => $line['longitude']));
356
			}
357
358
		    } else if ($globalDebug && $timediff > 20) {
359
			$this->tmd = $this->tmd + 1;
360
			echo '!!! Too much distance in short time... for '.$this->all_tracked[$id]['ident']."\n";
361
			echo 'Time : '.$timediff.'s - Distance : '.$Common->distance($line['latitude'],$line['longitude'],$this->all_tracked[$id]['latitude'],$this->all_tracked[$id]['longitude'],'m')."m -";
362
			echo 'Speed : '.(($Common->distance($line['latitude'],$line['longitude'],$this->all_tracked[$id]['latitude'],$this->all_tracked[$id]['longitude'],'m')/$timediff)*3.6)." km/h - ";
363
			echo 'Lat : '.$line['latitude'].' - long : '.$line['longitude'].' - prev lat : '.$this->all_tracked[$id]['latitude'].' - prev long : '.$this->all_tracked[$id]['longitude']." \n";
364
		    }
365
		}
366
		if (isset($line['last_update']) && $line['last_update'] != '') {
367
		    if (isset($this->all_tracked[$id]['last_update']) && $this->all_tracked[$id]['last_update'] != $line['last_update']) $dataFound = true;
368
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('last_update' => $line['last_update']));
369
		}
370
		if (isset($line['format_source']) && $line['format_source'] != '') {
371
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('format_source' => $line['format_source']));
372
		}
373
		if (isset($line['source_name']) && $line['source_name'] != '') {
374
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('source_name' => $line['source_name']));
375
		}
376
		if (isset($line['noarchive']) && $line['noarchive'] === true) {
377
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('noarchive' => true));
378
		}
379
		
380
		if (isset($line['heading']) && $line['heading'] != '') {
381
		    if (is_int($this->all_tracked[$id]['heading']) && abs($this->all_tracked[$id]['heading']-round($line['heading'])) > 10) $this->all_tracked[$id]['putinarchive'] = true;
382
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('heading' => round($line['heading'])));
383
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('heading_fromsrc' => true));
384
		    //$dataFound = true;
385
  		} elseif (!isset($this->all_tracked[$id]['heading_fromsrc']) && isset($this->all_tracked[$id]['archive_latitude']) && $this->all_tracked[$id]['archive_latitude'] != $this->all_tracked[$id]['latitude'] && isset($this->all_tracked[$id]['archive_longitude']) && $this->all_tracked[$id]['archive_longitude'] != $this->all_tracked[$id]['longitude']) {
386
  		    $heading = $Common->getHeading($this->all_tracked[$id]['archive_latitude'],$this->all_tracked[$id]['archive_longitude'],$this->all_tracked[$id]['latitude'],$this->all_tracked[$id]['longitude']);
387
		    $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('heading' => round($heading)));
388
		    if (abs($this->all_tracked[$id]['heading']-round($heading)) > 10) $this->all_tracked[$id]['putinarchive'] = true;
389
  		    if ($globalDebug) echo "ø Calculated Heading for ".$this->all_tracked[$id]['ident']." : ".$heading."\n";
390
  		}
391
		//if (isset($globalSourcesupdate) && $globalSourcesupdate != '' && isset($this->all_tracked[$id]['lastupdate']) && time()-$this->all_tracked[$id]['lastupdate'] < $globalSourcesupdate) $dataFound = false;
392
393
394
395
		if ($dataFound === true && (isset($this->all_tracked[$id]['mmsi']) || isset($this->all_tracked[$id]['id']))) {
396
		    $this->all_tracked[$id]['lastupdate'] = time();
397
		    if ($this->all_tracked[$id]['addedMarine'] == 0) {
398
		        if (!isset($globalDistanceIgnore['latitude']) || $this->all_tracked[$id]['longitude'] == ''  || $this->all_tracked[$id]['latitude'] == '' || (isset($globalDistanceIgnore['latitude']) && $Common->distance($this->all_tracked[$id]['latitude'],$this->all_tracked[$id]['longitude'],$globalDistanceIgnore['latitude'],$globalDistanceIgnore['longitude']) < $globalDistanceIgnore['distance'])) {
399
			    if (!isset($this->all_tracked[$id]['forcenew']) || $this->all_tracked[$id]['forcenew'] == 0) {
400
				if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
401
				    if ($globalDebug) echo "Check if vessel is already in DB...";
402
				    $timeelapsed = microtime(true);
403
				    $MarineLive = new MarineLive($this->db);
404
				    if (isset($line['id']) && isset($globalVM) && $globalVM) {
0 ignored issues
show
The variable $globalVM 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...
405
					$Marine = new Marine($this->db);
406
					$recent_ident = $Marine->checkId($line['id']);
407
					if ($globalDebugTimeElapsed) echo 'Time elapsed for update checkId : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
408
					$Marine->db=null;
409
				    } elseif (isset($line['id'])) {
410
					$recent_ident = $MarineLive->checkIdRecent($line['id']);
411
					if ($globalDebugTimeElapsed) echo 'Time elapsed for update checkIdRecent : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
412
				    } elseif (isset($this->all_tracked[$id]['mmsi']) && $this->all_tracked[$id]['mmsi'] != '') {
413
					$recent_ident = $MarineLive->checkMMSIRecent($this->all_tracked[$id]['mmsi']);
414
					if ($globalDebugTimeElapsed) echo 'Time elapsed for update checkIdentRecent : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
415
				    } elseif (isset($this->all_tracked[$id]['ident']) && $this->all_tracked[$id]['ident'] != '') {
416
					$recent_ident = $MarineLive->checkIdentRecent($this->all_tracked[$id]['ident']);
417
					if ($globalDebugTimeElapsed) echo 'Time elapsed for update checkIdentRecent : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
418
				    } else $recent_ident = '';
419
				    $MarineLive->db=null;
420
				    if ($globalDebug && $recent_ident == '') echo " Not in DB.\n";
421
				    elseif ($globalDebug && $recent_ident != '') echo " Already in DB.\n";
422
				} else $recent_ident = '';
423
			    } else {
424
				$recent_ident = '';
425
				$this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('forcenew' => 0));
426
			    }
427
			    //if there was no vessel with the same callsign within the last hour and go post it into the archive
428
			    if($recent_ident == "" && $this->all_tracked[$id]['latitude'] != '' && $this->all_tracked[$id]['longitude'] != '')
429
			    {
430
				if ($globalDebug) {
431
					if ($this->all_tracked[$id]['mmsi'] == '') echo "\o/ Add ".$this->all_tracked[$id]['mmsi']." in archive DB : ";
432
					else echo "\o/ Add ".$this->all_tracked[$id]['ident']." in archive DB : ";
433
				}
434
				//adds the spotter data for the archive
435
				    $highlight = '';
436
				    if (!isset($this->all_tracked[$id]['id'])) $this->all_tracked[$id] = array_merge($this->all_tracked[$id],array('id' => $this->all_tracked[$id]['mmsi'].'-'.date('YmdHi')));
437
				    if (!isset($globalNoImport) || $globalNoImport !== TRUE) {
438
					if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
439
					    $timeelapsed = microtime(true);
440
					    $Marine = new Marine($this->db);
441
					    $result = $Marine->addMarineData($this->all_tracked[$id]['id'], $this->all_tracked[$id]['ident'], $this->all_tracked[$id]['latitude'], $this->all_tracked[$id]['longitude'], $this->all_tracked[$id]['heading'], $this->all_tracked[$id]['speed'], $this->all_tracked[$id]['datetime'], $this->all_tracked[$id]['mmsi'], $this->all_tracked[$id]['type'],$this->all_tracked[$id]['typeid'],$this->all_tracked[$id]['imo'],$this->all_tracked[$id]['callsign'],$this->all_tracked[$id]['arrival_code'],$this->all_tracked[$id]['arrival_date'], $this->all_tracked[$id]['status'], $this->all_tracked[$id]['status_id'],$this->all_tracked[$id]['format_source'],$this->all_tracked[$id]['source_name'],$this->all_tracked[$id]['captain_id'],$this->all_tracked[$id]['captain_name'],$this->all_tracked[$id]['race_id'],$this->all_tracked[$id]['race_name'],$this->all_tracked[$id]['distance'],$this->all_tracked[$id]['race_rank'],$this->all_tracked[$id]['race_time']);
442
					    $Marine->db = null;
443
					    if ($globalDebug && isset($result)) echo $result."\n";
444
					    if ($globalDebugTimeElapsed) echo 'Time elapsed for update addspotterdata : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
445
					}
446
				    }
447
				    if (isset($line['sourcestats']) && $line['sourcestats'] == TRUE && $this->all_tracked[$id]['latitude'] != '' && $this->all_tracked[$id]['longitude'] != '') {
448
					// Add source stat in DB
449
					$Stats = new Stats($this->db);
450
					if (!empty($this->stats)) {
451
					    if ($globalDebug) echo 'Add source stats : ';
452
				    	    foreach($this->stats as $date => $data) {
453
						foreach($data as $source => $sourced) {
454
					    	    //print_r($sourced);
455
				    	    	    if (isset($sourced['polar'])) echo $Stats->addStatSource(json_encode($sourced['polar']),$source,'polar_marine',$date);
456
				    	    	    if (isset($sourced['hist'])) echo $Stats->addStatSource(json_encode($sourced['hist']),$source,'hist_marine',$date);
457
				    		    if (isset($sourced['msg'])) {
458
				    			if (time() - $sourced['msg']['date'] > 10) {
459
				    		    	    $nbmsg = round($sourced['msg']['nb']/(time() - $sourced['msg']['date']));
460
				    		    	    echo $Stats->addStatSource($nbmsg,$source,'msg_marine',$date);
461
			    			    	    unset($this->stats[$date][$source]['msg']);
462
			    				}
463
			    			    }
464
			    			}
465
			    			if ($date != date('Y-m-d')) {
466
			    			    unset($this->stats[$date]);
467
			    			}
468
				    	    }
469
				    	    if ($globalDebug) echo 'Done'."\n";
470
					}
471
					$Stats->db = null;
472
				    }
473
				    
474
				    $this->del();
475
				//$ignoreImport = false;
476
				$this->all_tracked[$id]['addedMarine'] = 1;
477
				//print_r($this->all_tracked[$id]);
478
				if ($this->last_delete == 0 || time() - $this->last_delete > 1800) {
479
				    if ($globalDebug) echo "---- Deleting Live Marine data older than 9 hours...";
480
				    //MarineLive->deleteLiveMarineDataNotUpdated();
481
				    if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
482
					$MarineLive = new MarineLive($this->db);
483
					$MarineLive->deleteLiveMarineData();
484
					$MarineLive->db=null;
485
					if ($globalDebug) echo " Done\n";
486
				    }
487
				    $this->last_delete = time();
488
				}
489
			    } elseif ($recent_ident != '') {
490
				$this->all_tracked[$id]['id'] = $recent_ident;
491
				$this->all_tracked[$id]['addedMarine'] = 1;
492
				if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
493
				    if (isset($globalDaemon) && !$globalDaemon) {
494
					$Marine = new Marine($this->db);
495
					$Marine->updateLatestMarineData($this->all_tracked[$id]['id'],$this->all_tracked[$id]['ident'],$this->all_tracked[$id]['latitude'],$this->all_tracked[$id]['longitude'],$this->all_tracked[$id]['speed'],$this->all_tracked[$id]['datetime'],$this->all_tracked[$id]['distance'],$this->all_tracked[$id]['race_rank'],$this->all_tracked[$id]['race_time']);
496
					$Marine->db = null;
497
				    }
498
				}
499
				
500
			    }
501
			}
502
		    }
503
		    //adds the spotter LIVE data
504
		    if ($globalDebug) {
505
			echo 'DATA : ident : '.$this->all_tracked[$id]['ident'].' - type : '.$this->all_tracked[$id]['type'].' - Latitude : '.$this->all_tracked[$id]['latitude'].' - Longitude : '.$this->all_tracked[$id]['longitude'].' - Heading : '.$this->all_tracked[$id]['heading'].' - Speed : '.$this->all_tracked[$id]['speed']."\n";
506
		    }
507
		    $ignoreImport = false;
508
509
		    if (!$ignoreImport) {
510
			if (!isset($globalDistanceIgnore['latitude']) || (isset($globalDistanceIgnore['latitude']) && $Common->distance($this->all_tracked[$id]['latitude'],$this->all_tracked[$id]['longitude'],$globalDistanceIgnore['latitude'],$globalDistanceIgnore['longitude']) < $globalDistanceIgnore['distance'])) {
511
				if ($globalDebug) echo "\o/ Add ".$this->all_tracked[$id]['ident']." from ".$this->all_tracked[$id]['format_source']." in Live DB : ";
512
				if (!isset($globalNoImport) || $globalNoImport !== TRUE) {
513
				    if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
514
					$timeelapsed = microtime(true);
515
					$MarineLive = new MarineLive($this->db);
516
					$result = $MarineLive->addLiveMarineData($this->all_tracked[$id]['id'], $this->all_tracked[$id]['ident'], $this->all_tracked[$id]['latitude'], $this->all_tracked[$id]['longitude'], $this->all_tracked[$id]['heading'], $this->all_tracked[$id]['speed'],$this->all_tracked[$id]['datetime'], $this->all_tracked[$id]['putinarchive'],$this->all_tracked[$id]['mmsi'],$this->all_tracked[$id]['type'],$this->all_tracked[$id]['typeid'],$this->all_tracked[$id]['imo'],$this->all_tracked[$id]['callsign'],$this->all_tracked[$id]['arrival_code'],$this->all_tracked[$id]['arrival_date'],$this->all_tracked[$id]['status'],$this->all_tracked[$id]['status_id'],$this->all_tracked[$id]['noarchive'],$this->all_tracked[$id]['format_source'],$this->all_tracked[$id]['source_name'],$this->all_tracked[$id]['over_country'],$this->all_tracked[$id]['captain_id'],$this->all_tracked[$id]['captain_name'],$this->all_tracked[$id]['race_id'],$this->all_tracked[$id]['race_name'],$this->all_tracked[$id]['distance'],$this->all_tracked[$id]['race_rank'],$this->all_tracked[$id]['race_time']);
517
					$MarineLive->db = null;
518
					if ($globalDebug) echo $result."\n";
519
					if ($globalDebugTimeElapsed) echo 'Time elapsed for update addlivespotterdata : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
520
				    }
521
				}
522
				if (isset($globalServerAPRS) && $globalServerAPRS && $this->all_tracked[$id]['putinarchive']) {
523
					$APRSMarine->addLiveMarineData($this->all_tracked[$id]['id'], $this->all_tracked[$id]['ident'], $this->all_tracked[$id]['latitude'], $this->all_tracked[$id]['longitude'], $this->all_tracked[$id]['heading'], $this->all_tracked[$id]['speed'],$this->all_tracked[$id]['datetime'], $this->all_tracked[$id]['putinarchive'],$this->all_tracked[$id]['mmsi'],$this->all_tracked[$id]['type'],$this->all_tracked[$id]['typeid'],$this->all_tracked[$id]['imo'],$this->all_tracked[$id]['callsign'],$this->all_tracked[$id]['arrival_code'],$this->all_tracked[$id]['arrival_date'],$this->all_tracked[$id]['status'],$this->all_tracked[$id]['status_id'],$this->all_tracked[$id]['noarchive'],$this->all_tracked[$id]['format_source'],$this->all_tracked[$id]['source_name'],$this->all_tracked[$id]['over_country']);
524
				}
525
				$this->all_tracked[$id]['putinarchive'] = false;
526
527
				// Put statistics in $this->stats variable
528
				
529
				if (isset($line['sourcestats']) && $line['sourcestats'] == TRUE && $line['format_source'] != 'aprs' && $this->all_tracked[$id]['latitude'] != '' && $this->all_tracked[$id]['longitude'] != '') {
530
					$source = $this->all_tracked[$id]['source_name'];
531
					if ($source == '') $source = $this->all_tracked[$id]['format_source'];
532
					if (!isset($this->source_location[$source])) {
533
						$Location = new Source($this->db);
534
						$coord = $Location->getLocationInfobySourceName($source);
535
						if (count($coord) > 0) {
536
							$latitude = $coord[0]['latitude'];
537
							$longitude = $coord[0]['longitude'];
538
						} else {
539
							$latitude = $globalCenterLatitude;
540
							$longitude = $globalCenterLongitude;
541
						}
542
						$this->source_location[$source] = array('latitude' => $latitude,'longitude' => $longitude);
543
					} else {
544
						$latitude = $this->source_location[$source]['latitude'];
545
						$longitude = $this->source_location[$source]['longitude'];
546
					}
547
					$stats_heading = $Common->getHeading($latitude,$longitude,$this->all_tracked[$id]['latitude'],$this->all_tracked[$id]['longitude']);
548
					//$stats_heading = $stats_heading%22.5;
549
					$stats_heading = round($stats_heading/22.5);
550
					$stats_distance = $Common->distance($latitude,$longitude,$this->all_tracked[$id]['latitude'],$this->all_tracked[$id]['longitude']);
551
					$current_date = date('Y-m-d');
552
					if ($stats_heading == 16) $stats_heading = 0;
553
					if (!isset($this->stats[$current_date][$source]['polar'][1])) {
554
						for ($i=0;$i<=15;$i++) {
555
						    $this->stats[$current_date][$source]['polar'][$i] = 0;
556
						}
557
						$this->stats[$current_date][$source]['polar'][$stats_heading] = $stats_distance;
558
					} else {
559
						if ($this->stats[$current_date][$source]['polar'][$stats_heading] < $stats_distance) {
560
							$this->stats[$current_date][$source]['polar'][$stats_heading] = $stats_distance;
561
						}
562
					}
563
					$distance = (round($stats_distance/10)*10);
564
					//echo '$$$$$$$$$$ DISTANCE : '.$distance.' - '.$source."\n";
565
					//var_dump($this->stats);
566
					if (!isset($this->stats[$current_date][$source]['hist'][$distance])) {
567
						if (isset($this->stats[$current_date][$source]['hist'][0])) {
568
						    end($this->stats[$current_date][$source]['hist']);
569
						    $mini = key($this->stats[$current_date][$source]['hist'])+10;
570
						} else $mini = 0;
571
						for ($i=$mini;$i<=$distance;$i+=10) {
572
						    $this->stats[$current_date][$source]['hist'][$i] = 0;
573
						}
574
						$this->stats[$current_date][$source]['hist'][$distance] = 1;
575
					} else {
576
						$this->stats[$current_date][$source]['hist'][$distance] += 1;
577
					}
578
				}
579
				
580
581
				$this->all_tracked[$id]['lastupdate'] = time();
582
				if ($this->all_tracked[$id]['putinarchive']) $send = true;
583
			} elseif (isset($this->all_tracked[$id]['latitude']) && isset($globalDistanceIgnore['latitude']) && $globalDebug) echo "!! Too far -> Distance : ".$Common->distance($this->all_tracked[$id]['latitude'],$this->all_tracked[$id]['longitude'],$globalDistanceIgnore['latitude'],$globalDistanceIgnore['longitude'])."\n";
584
			//$this->del();
585
			
586
			
587
			if ($this->last_delete_hourly == 0 || time() - $this->last_delete_hourly > 900) {
588
			    if (!isset($globalNoDB) || $globalNoDB !== TRUE) {
589
				if ($globalDebug) echo "---- Deleting Live Marine data Not updated since 2 hour...";
590
				$MarineLive = new MarineLive($this->db);
591
				$MarineLive->deleteLiveMarineDataNotUpdated();
592
				$MarineLive->db = null;
593
				//MarineLive->deleteLiveMarineData();
594
				if ($globalDebug) echo " Done\n";
595
			    }
596
			    $this->last_delete_hourly = time();
597
			}
598
			
599
		    }
600
		    //$ignoreImport = false;
601
		}
602
		//if (function_exists('pcntl_fork') && $globalFork) pcntl_signal(SIGCHLD, SIG_IGN);
603
		if ($send) return $this->all_tracked[$id];
604
	    }
605
	}
606
    }
607
}
608
?>
609