Completed
Push — master ( 393714...be2566 )
by Yannick
31:28
created

Schedule::getIberia()   B

Complexity

Conditions 5
Paths 5

Size

Total Lines 27
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 23
nc 5
nop 2
dl 0
loc 27
rs 8.439
c 0
b 0
f 0
1
<?php
2
require_once(dirname(__FILE__).'/libs/simple_html_dom.php');
3
require_once(dirname(__FILE__).'/settings.php');
4
require_once(dirname(__FILE__).'/class.Connection.php');
5
require_once(dirname(__FILE__).'/class.Translation.php');
6
require_once(dirname(__FILE__).'/class.Common.php');
7
require_once(dirname(__FILE__).'/libs/uagent/uagent.php');
8
9
class Schedule {
10
	protected $cookies = array();
11
        public $db;
12
	public function __construct($dbc = null) {
13
		$Connection = new Connection($dbc);
14
		$this->db = $Connection->db();
15
		if ($this->db === null) die('Error: No DB connection.');
16
	}
17
	
18
	/**
19
	* Add schedule data to database
20
	* @param String $ident aircraft ident
21
	* @param String $departure_airport_icao departure airport icao
22
	* @param String $departure_airport_time departure airport time
23
	* @param String $arrival_airport_icao arrival airport icao
24
	* @param String $arrival_airport_time arrival airport time
25
	/ @param String $source source of data
26
	*/
27
	
28
	public function addSchedule($ident,$departure_airport_icao,$departure_airport_time,$arrival_airport_icao,$arrival_airport_time,$source = 'website') {
29
		date_default_timezone_set('UTC');
30
		$date = date("Y-m-d H:i:s",time());
31
	        //if ($departure_airport_time == '' && $arrival_airport_time == '') exit;
32
	        //$query = "SELECT COUNT(*) FROM schedule WHERE ident = :ident";
33
	        $query = "SELECT COUNT(*) FROM routes WHERE CallSign = :ident";
34
	        $query_values = array(':ident' => $ident);
35
		 try {
36
			$sth = $this->db->prepare($query);
37
			$sth->execute($query_values);
38
		} catch(PDOException $e) {
39
			return "error : ".$e->getMessage();
40
		}
41
		if ($sth->fetchColumn() > 0) {
42
			if ($departure_airport_time == '' && $arrival_airport_time == '') {
43
			    $query = "SELECT COUNT(*) FROM routes WHERE CallSign = :ident AND FromAirport_ICAO = :departure_airport_icao AND ToAirport_ICAO = :arrival_airport_icao";
44
			    $query_values = array(':ident' => $ident,':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao);
45
			} elseif ($arrival_airport_time == '') {
46
			    $query = "SELECT COUNT(*) FROM routes WHERE CallSign = :ident AND FromAirport_ICAO = :departure_airport_icao AND FromAirport_Time = :departure_airport_time AND ToAirport_ICAO = :arrival_airport_icao";
47
			    $query_values = array(':ident' => $ident,':departure_airport_icao' => $departure_airport_icao,':departure_airport_time' => $departure_airport_time,':arrival_airport_icao' => $arrival_airport_icao);
48
			} elseif ($departure_airport_time == '') {
49
			    $query = "SELECT COUNT(*) FROM routes WHERE CallSign = :ident AND FromAirport_ICAO = :departure_airport_icao AND ToAirport_ICAO = :arrival_airport_icao AND ToAirport_Time = :arrival_airport_time";
50
			    $query_values = array(':ident' => $ident,':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao,':arrival_airport_time' => $arrival_airport_time);
51
			} else {
52
			    //$query = "SELECT COUNT(*) FROM schedule WHERE ident = :ident AND departure_airport_icao = :departure_airport_icao AND departure_airport_time = :departure_airport_time AND arrival_airport_icao = :arrival_airport_icao AND arrival_airport_time = :arrival_airport_time";
53
			    $query = "SELECT COUNT(*) FROM routes WHERE CallSign = :ident AND FromAirport_ICAO = :departure_airport_icao AND FromAirport_Time = :departure_airport_time AND ToAirport_ICAO = :arrival_airport_icao AND ToAirport_Time = :arrival_airport_time";
54
			    $query_values = array(':ident' => $ident,':departure_airport_icao' => $departure_airport_icao,':departure_airport_time' => $departure_airport_time,':arrival_airport_icao' => $arrival_airport_icao,':arrival_airport_time' => $arrival_airport_time);
55
			}
56
			try {
57
				$sth = $this->db->prepare($query);
58
				$sth->execute($query_values);
59
			} catch(PDOException $e) {
60
				return "error : ".$e->getMessage();
61
			}
62
			if ($sth->fetchColumn() == 0) {
63
				//$query = 'UPDATE schedule SET departure_airport_icao = :departure_airport_icao, departure_airport_time = :departure_airport_time, arrival_airport_icao = :arrival_airport_icao, arrival_airport_time = :arrival_airport_time, date_modified = :date, source = :source WHERE ident = :ident';
64
				if ($departure_airport_time == '' && $arrival_airport_time == '') {
65
                            	    $query = 'UPDATE routes SET FromAirport_ICAO = :departure_airport_icao, ToAirport_ICAO = :arrival_airport_icao, date_modified = :date, Source = :source WHERE CallSign = :ident';
66
				    $query_values = array(':ident' => $ident,':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao, ':date' => $date, ':source' => $source);
67
				} elseif ($arrival_airport_time == '') {
68
                            	    $query = 'UPDATE routes SET FromAirport_ICAO = :departure_airport_icao, FromAiport_Time = :departure_airport_time, ToAirport_ICAO = :arrival_airport_icao, date_modified = :date, Source = :source WHERE CallSign = :ident';
69
				    $query_values = array(':ident' => $ident,':departure_airport_icao' => $departure_airport_icao,':departure_airport_time' => $departure_airport_time,':arrival_airport_icao' => $arrival_airport_icao, ':date' => $date, ':source' => $source);
70
				} elseif ($departure_airport_time == '') {
71
                            	    $query = 'UPDATE routes SET FromAirport_ICAO = :departure_airport_icao, ToAirport_ICAO = :arrival_airport_icao, ToAirport_Time = :arrival_airport_time, date_modified = :date, Source = :source WHERE CallSign = :ident';
72
				    $query_values = array(':ident' => $ident,':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao,':arrival_airport_time' => $arrival_airport_time, ':date' => $date, ':source' => $source);
73
				} else {
74
                            	    $query = 'UPDATE routes SET FromAirport_ICAO = :departure_airport_icao, FromAiport_Time = :departure_airport_time, ToAirport_ICAO = :arrival_airport_icao, ToAirport_Time = :arrival_airport_time, date_modified = :date, Source = :source WHERE CallSign = :ident';
75
				    $query_values = array(':ident' => $ident,':departure_airport_icao' => $departure_airport_icao,':departure_airport_time' => $departure_airport_time,':arrival_airport_icao' => $arrival_airport_icao,':arrival_airport_time' => $arrival_airport_time, ':date' => $date, ':source' => $source);
76
				}
77
				 try {
78
					$sth = $this->db->prepare($query);
79
					$sth->execute($query_values);
80
				} catch(PDOException $e) {
81
					return "error : ".$e->getMessage();
82
				}
83
			} else {
84
				//$query = 'UPDATE schedule SET date_lastseen = :date WHERE ident = :ident';
85
				$query = 'UPDATE routes SET date_lastseen = :date WHERE CallSign = :ident';
86
				$query_values = array(':ident' => $ident,':date' => $date);
87
				 try {
88
					$sth = $this->db->prepare($query);
89
					$sth->execute($query_values);
90
				} catch(PDOException $e) {
91
					return "error : ".$e->getMessage();
92
				}
93
			}
94
		} else {
95
			$query = 'INSERT INTO  routes (CallSign,FromAirport_ICAO, FromAirport_Time, ToAirport_ICAO, ToAirport_Time,date_added,source)  VALUES (:ident,:departure_airport_icao,:departure_airport_time,:arrival_airport_icao,:arrival_airport_time,:date,:source)';
96
			$query_values = array(':ident' => $ident,':departure_airport_icao' => $departure_airport_icao,':departure_airport_time' => $departure_airport_time,':arrival_airport_icao' => $arrival_airport_icao,':arrival_airport_time' => $arrival_airport_time, ':date' => $date, ':source' => $source);
97
			 try {
98
				$sth = $this->db->prepare($query);
99
				$sth->execute($query_values);
100
			} catch(PDOException $e) {
101
				return "error : ".$e->getMessage();
102
			}
103
		}
104
        
105
	}
106
107
	public function getSchedule($ident) {
108
	        $Translation = new Translation($this->db);
109
	        $operator = $Translation->checkTranslation($ident,false);
110
	        if ($ident != $operator) {
111
	    		$query = "SELECT FromAirport_ICAO as departure_airport_icao, ToAirport_ICAO as arrival_airport_icao, FromAirport_Time as departure_airport_time, ToAirport_Time as arrival_airport_time FROM routes WHERE FromAirport_ICAO <> '' AND ToAirport_ICAO <> '' AND CallSign = :operator OR CallSign = :ident LIMIT 1";
112
	    		$query_values = array(':ident' => $ident,'operator' => $operator);
113
	    	} else {
114
		        $query = "SELECT FromAirport_ICAO as departure_airport_icao, ToAirport_ICAO as arrival_airport_icao, FromAirport_Time as departure_airport_time, ToAirport_Time as arrival_airport_time FROM routes WHERE FromAirport_ICAO <> '' AND ToAirport_ICAO <> '' AND CallSign = :ident LIMIT 1";
115
	    		$query_values = array(':ident' => $ident);
116
	    	}
117
		 try {
118
			$sth = $this->db->prepare($query);
119
			$sth->execute($query_values);
120
		} catch(PDOException $e) {
121
			return "error : ".$e->getMessage();
122
		}
123
		$row = $sth->fetch(PDO::FETCH_ASSOC);
124
		$sth->closeCursor();
125
		if (count($row) > 0) {
126
			return $row;
127
		} else return array();
128
	}
129
130
	public function checkSchedule($ident) {
131
		global $globalDBdriver;
132
	        //$query = "SELECT COUNT(*) as nb FROM schedule WHERE ident = :ident AND date_added > DATE_SUB(CURDATE(), INTERVAL 8 DAY) - 8 LIMIT 1";
133
	        if ($globalDBdriver == 'mysql') {
134
			$query = "SELECT COUNT(*) as nb FROM routes WHERE FromAirport_ICAO <> '' AND ToAirport_ICAO <> '' AND CallSign = :ident AND ((date_added BETWEEN DATE(DATE_SUB(CURDATE(), INTERVAL 1 MONTH)) AND DATE(NOW()) and date_modified IS NULL) OR (date_modified BETWEEN DATE(DATE_SUB(CURDATE(), INTERVAL 15 DAY)) AND DATE(NOW()))) LIMIT 1";
135
		} else {
136
			$query = "SELECT COUNT(*) as nb FROM routes WHERE FromAirport_ICAO <> '' AND ToAirport_ICAO <> '' AND CallSign = :ident 
137
			AND ((date_added::timestamp BETWEEN CURRENT_TIMESTAMP - INTERVAL '1 MONTH' AND CURRENT_TIMESTAMP) and date_modified::timestamp IS NULL)
138
			     OR (date_modified::timestamp BETWEEN CURRENT_TIMESTAMP - INTERVAL '1 MONTH' AND CURRENT_TIMESTAMP) LIMIT 1";
139
		}
140
	        $query_values = array(':ident' => $ident);
141
		 try {
142
			$sth = $this->db->prepare($query);
143
			$sth->execute($query_values);
144
		} catch(PDOException $e) {
145
			return "error : ".$e->getMessage();
146
		}
147
		$row = $sth->fetch(PDO::FETCH_ASSOC);
148
		$sth->closeCursor();
149
		return $row['nb'];
150
	}
151
152
	/**
153
	* Get flight info from Air France
154
	* @param String $callsign The callsign
155
	* @param String $date date we want flight number info
156
	* @param String $carrier IATA code
157
	* @return Flight departure and arrival airports and time
158
	*/
159
	private function getAirFrance($callsign, $date = 'NOW',$carrier = 'AF') {
160
		$Common = new Common();
161
		$check_date = new Datetime($date);
162
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
163
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
164
		$url = "http://www.airfrance.fr/cgi-bin/AF/FR/fr/local/resainfovol/infovols/detailsVolJson.do?codeCompagnie[0]=".$carrier."&numeroVol[0]=".$numvol."&dayFlightDate=".$check_date->format('d')."&yearMonthFlightDate=".$check_date->format('Ym');
165
		$json = $Common->getData($url);
166
	
167
		$parsed_json = json_decode($json);
168
		if (property_exists($parsed_json,'errors') === false) {
169
			//$originLong = $parsed_json->{'flightsList'}[0]->{'segmentsList'}[0]->{'originLong'};
170
			$originShort = $parsed_json->{'flightsList'}[0]->{'segmentsList'}[0]->{'originShort'};
171
			//$departureDateMedium = $parsed_json->{'flightsList'}[0]->{'segmentsList'}[0]->{'departureDateMedium'};
172
			$departureTime = $parsed_json->{'flightsList'}[0]->{'segmentsList'}[0]->{'departureTime'};
173
			//$destinationLong = $parsed_json->{'flightsList'}[0]->{'segmentsList'}[0]->{'destinationLong'};
174
			$destinationShort = $parsed_json->{'flightsList'}[0]->{'segmentsList'}[0]->{'destinationShort'};
175
			//$arrivalDateMedium = $parsed_json->{'flightsList'}[0]->{'segmentsList'}[0]->{'arrivalDateMedium'};
176
			$arrivalTime = $parsed_json->{'flightsList'}[0]->{'segmentsList'}[0]->{'arrivalTime'};
177
178
			preg_match('/\((.*?)\)/',$originShort,$originiata);
179
			$DepartureAirportIata = $originiata[1];
180
			preg_match('/\((.*?)\)/',$destinationShort,$destinationiata);
181
			$ArrivalAirportIata = $destinationiata[1];
182
183
			/*
184
			date_default_timezone_set('Europe/Paris');
185
			$departureTime = gmdate('H:i',strtotime($departureTime));
186
			$arrivalTime = gmdate('H:i',strtotime($arrivalTime));
187
			*/
188
		
189
			return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_airfrance');
190
		} else return array();
191
	}
192
193
	/**
194
	* Get flight info from EasyJet
195
	* @param String $callsign The callsign
196
	* @param String $date date we want flight number info
197
	* @return Flight departure and arrival airports and time
198
	*/
199
	private function getEasyJet($callsign, $date = 'NOW') {
200
		global $globalTimezone;
201
		$Common = new Common();
202
		date_default_timezone_set($globalTimezone);
203
		$check_date = new Datetime($date);
204
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
205
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
206
		$url = "http://www.easyjet.com/ft/api/flights?date=".$check_date->format('Y-m-d')."&fn=".$callsign;
207
		$json = $Common->getData($url);
208
		$parsed_json = json_decode($json);
209
210
		$flights = $parsed_json->{'flights'};
211
		if (count($flights) > 0) {
212
			$DepartureAirportIata = $parsed_json->{'flights'}[0]->{'airports'}->{'pda'}->{'iata'}; //name
213
			$ArrivalAirportIata = $parsed_json->{'flights'}[0]->{'airports'}->{'paa'}->{'iata'}; //name
214
			$departureTime = $parsed_json->{'flights'}[0]->{'dates'}->{'fstd'};
215
			$arrivalTime = $parsed_json->{'flights'}[0]->{'dates'}->{'fsta'};
216
217
			return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_easyjet');
218
		} else return array();
219
	}
220
221
	/**
222
	* Get flight info from Ryanair
223
	* @param String $callsign The callsign
224
	* @return Flight departure and arrival airports and time
225
	*/
226
	private function getRyanair($callsign) {
227
		$Common = new Common();
228
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
229
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
230
		$url = "http://www.ryanair.com/fr/api/2/flight-info/0/50/";
231
		$post = '{"flight":"'.$numvol.'","minDepartureTime":"00:00","maxDepartureTime":"23:59"}';
232
		$headers = array('Content-Type: application/json','Content-Length: ' . strlen($post));
233
		$json = $Common->getData($url,'post',$post,$headers);
234
		$parsed_json = json_decode($json);
235
		if (isset($parsed_json->{'flightInfo'})) {
236
			$flights = $parsed_json->{'flightInfo'};
237
			if (count($flights) > 0) {
238
				$DepartureAirportIata = $parsed_json->{'flightInfo'}[0]->{'departureAirport'}->{'iata'}; //name
239
				$ArrivalAirportIata = $parsed_json->{'flightInfo'}[0]->{'arrivalAirport'}->{'iata'}; //name
240
				$departureTime = $parsed_json->{'flightInfo'}[0]->{'departureTime'};
241
				$arrivalTime = $parsed_json->{'flightInfo'}[0]->{'arrivalTime'};
242
				return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime, 'Source' => 'website_ryanair');
243
			} else return array();
244
		} else return array();
245
	}
246
247
	/**
248
	* Get flight info from Swiss
249
	* @param String $callsign The callsign
250
	* @return Flight departure and arrival airports and time
251
	*/
252
	private function getSwiss($callsign) {
253
		$Common = new Common();
254
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
255
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
256
		$url = "http://www.world-of-swiss.com/fr/routenetwork.json";
257
		$json = $Common->getData($url);
258
		$parsed_json = json_decode($json);
259
260
261
		$flights = $parsed_json->{'flights'};
262
		if (count($flights) > 0) {
263
			$departureTime = '';
264
			$arrivalTime = '';
265
			foreach ($flights as $flight) {
266
				if ($flight->{'no'} == "Vol LX ".$numvol) {
267
					$DepartureAirportIata = $flight->{'from'}->{'code'}; //city
268
					$ArrivalAirportIata = $flight->{'to'}->{'code'}; //city
269
					$departureTime = substr($flight->{'from'}->{'hour'},0,5);
270
					$arrivalTime = substr($flight->{'to'}->{'hour'},0,5);
271
				}
272
			}
273
			if (isset($DepartureAirportIata) && isset($ArrivalAirportIata)) {
274
				return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_swiss');
275
			} else return array();
276
		} else return array();
277
	}
278
	
279
	/**
280
	* Get flight info from British Airways API
281
	* @param String $callsign The callsign
282
	* @param String $date date we want flight number info
283
	* @return Flight departure and arrival airports and time
284
	*/
285
	public function getBritishAirways($callsign, $date = 'NOW') {
286
		global $globalBritishAirwaysKey;
287
		$Common = new Common();
288
		$check_date = new Datetime($date);
289
		$numvol = sprintf('%04d',preg_replace('/^[A-Z]*/','',$callsign));
290
		if (!filter_var(preg_replace('/^[A-Z]*/','',$callsign),FILTER_VALIDATE_INT)) return array();
291
		if ($globalBritishAirwaysKey == '') return array();
292
		$url = "https://api.ba.com/rest-v1/v1/flights;flightNumber=".$numvol.";scheduledDepartureDate=".$check_date->format('Y-m-d').".json";
293
		$headers = array('Client-Key: '.$globalBritishAirwaysKey);
294
		$json = $Common->getData($url,'get','',$headers);
295
		if ($json == '') return array();
296
		$parsed_json = json_decode($json);
297
		$flights = $parsed_json->{'FlightsResponse'};
298
		if (count($flights) > 0) {
299
			$DepartureAirportIata = $parsed_json->{'FlightsResponse'}->{'Flight'}->{'Sector'}->{'DepartureAirport'};
300
			$ArrivalAirportIata = $parsed_json->{'FlightsResponse'}->{'Flight'}->{'Sector'}->{'ArrivalAirport'};
301
			$departureTime = date('H:i',strtotime($parsed_json->{'FlightsResponse'}->{'Flight'}->{'Sector'}->{'ScheduledDepartureDateTime'}));
302
			$arrivalTime = date('H:i',strtotime($parsed_json->{'FlightsResponse'}->{'Flight'}->{'Sector'}->{'ScheduledArrivalDateTime'}));
303
			return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_britishairways');
304
		} else return array();
305
	}
306
307
	/**
308
	* Get flight info from Lutfhansa API
309
	* @param String $callsign The callsign
310
	* @param String $date date we want flight number info
311
	* @return Flight departure and arrival airports and time
312
	*/
313
	public function getLufthansa($callsign, $date = 'NOW') {
314
		global $globalLufthansaKey;
315
		$Common = new Common();
316
		$check_date = new Datetime($date);
317
		$numvol = sprintf('%04d',preg_replace('/^[A-Z]*/','',$callsign));
318
		if (!filter_var(preg_replace('/^[A-Z]*/','',$callsign),FILTER_VALIDATE_INT)) return array();
319
		if (!isset($globalLufthansaKey) || $globalLufthansaKey == '' || !isset($globalLufthansaKey['key']) || $globalLufthansaKey['key'] == '') return array();
320
		$url = "https://api.lufthansa.com/v1/oauth/token";
321
		$post = array('client_id' => $globalLufthansaKey['key'],'client_secret' => $globalLufthansaKey['secret'],'grant_type' => 'client_credentials');
322
		$data = $Common->getData($url,'post',$post);
323
		$parsed_data = json_decode($data);
324
		if (!isset($parsed_data->{'access_token'})) return array();
325
		$token = $parsed_data->{'access_token'};
326
		
327
		$url = "https://api.lufthansa.com/v1/operations/flightstatus/LH".$numvol."/".$check_date->format('Y-m-d');
328
		$headers = array('Authorization: Bearer '.$token,'Accept: application/json');
329
		$json = $Common->getData($url,'get','',$headers);
330
		if ($json == '') return array();
331
		$parsed_json = json_decode($json);
332
		if (isset($parsed_json->{'FlightStatusResource'}) && count($parsed_json->{'FlightStatusResource'}) > 0) {
333
			$DepartureAirportIata = $parsed_json->{'FlightStatusResource'}->{'Flights'}->{'Flight'}->{'Departure'}->{'AirportCode'};
334
			$departureTime = date('H:i',strtotime($parsed_json->{'FlightStatusResource'}->{'Flights'}->{'Flight'}->{'Departure'}->{'ScheduledTimeLocal'}->{'DateTime'}));
335
			$ArrivalAirportIata = $parsed_json->{'FlightStatusResource'}->{'Flights'}->{'Flight'}->{'Arrival'}->{'AirportCode'};
336
			$arrivalTime = date('H:i',strtotime($parsed_json->{'FlightStatusResource'}->{'Flights'}->{'Flight'}->{'Arrival'}->{'ScheduledTimeLocal'}->{'DateTime'}));
337
			return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_lufthansa');
338
		} else return array();
339
	}
340
341
	/**
342
	* Get flight info from Transavia API
343
	* @param String $callsign The callsign
344
	* @param String $date date we want flight number info
345
	* @return Flight departure and arrival airports and time
346
	*/
347
	public function getTransavia($callsign, $date = 'NOW') {
348
		global $globalTransaviaKey;
349
		$Common = new Common();
350
		$check_date = new Datetime($date);
351
		$numvol = sprintf('%04d',preg_replace('/^[A-Z]*/','',$callsign));
352
		if (!filter_var(preg_replace('/^[A-Z]*/','',$callsign),FILTER_VALIDATE_INT)) return array();
353
		if ($globalTransaviaKey == '') return array();
354
		$url = "https://tst.api.transavia.com/v1/flightstatus/departuredate/".$check_date->format('Ymd').'/flightnumber/HV'.$numvol;
355
		//$url = "https://api.transavia.com/v1/flightstatus/departuredate/".$check_date->format('Ymd').'/flightnumber/HV'.$numvol;
356
		$headers = array('apikey: '.$globalTransaviaKey);
357
		$json = $Common->getData($url,'get','',$headers);
358
		//echo 'result : '.$json;
359
		if ($json == '') return array();
360
		$parsed_json = json_decode($json);
361
		
362
		if (isset($parsed_json->{'data'}[0])) {
363
			$DepartureAirportIata = $parsed_json->{'data'}[0]->{'flight'}->{'departureAirport'}->{'locationCode'};
364
			$departureTime = date('H:i',strtotime($parsed_json->{'data'}[0]->{'flight'}->{'departureDateTime'}));
365
			$ArrivalAirportIata = $parsed_json->{'data'}[0]->{'flight'}->{'arrivalAirport'}->{'locationCode'};
366
			$arrivalTime = date('H:i',strtotime($parsed_json->{'data'}[0]->{'flight'}->{'arrivalDateTime'}));
367
			return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_transavia');
368
		} else return array();
369
	}
370
371
	/**
372
	* Get flight info from Tunisair
373
	* @param String $callsign The callsign
374
	* @return Flight departure and arrival airports and time
375
	*/
376
	public function getTunisair($callsign) {
377
		$Common = new Common();
378
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
379
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
380
		$url = "http://www.tunisair.com/site/publish/module/Volj/fr/Flight_List.asp";
381
		$data = $Common->getData($url);
382
		$table = $Common->table2array($data);
383
		foreach ($table as $flight) {
384
			if (isset($flight[1]) && $flight[1] == "TU ".sprintf('%04d',$numvol)) {
385
				return array('DepartureAirportIATA' => $flight[2],'DepartureTime' => str_replace('.',':',$flight[5]),'ArrivalAirportIATA' => $flight[3],'ArrivalTime' => str_replace('.',':',$flight[6]),'Source' => 'website_tunisair');
386
			}
387
		}
388
		return array();
389
	}
390
391
	/**
392
	* Get flight info from Vueling
393
	* @param String $callsign The callsign
394
	* @return Flight departure and arrival airports and time
395
	*/
396
	public function getVueling($callsign,$date = 'NOW') {
397
		$Common = new Common();
398
		$check_date = new Datetime($date);
399
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
400
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
401
		$final_date = str_replace('/','%2F',$check_date->format('d/m/Y'));
402
		$url = "http://www.vueling.com/Base/BaseProxy/RenderMacro/?macroalias=FlightStatusResult&searchBy=bycode&date=".$final_date."&flightNumber=".$numvol."&idioma=en-GB";
403
		$data = $Common->getData($url);
404
		$data=trim(str_replace(array("\r\n","\r","\n","\\r","\\n","\\r\\n"),'',$data));
405
		if ($data != '') {
406
			preg_match('/flightOri=[A-Z]{3}/',$data,$result);
407
			$DepartureAirportIata = str_replace('flightOri=','',$result[0]);
408
			preg_match('/flightDest=[A-Z]{3}/',$data,$result);
409
			$ArrivalAirportIata = str_replace('flightDest=','',$result[0]);
410
			if ($DepartureAirportIata != '' && $ArrivalAirportIata != '') return array('DepartureAirportIATA' => $DepartureAirportIata,'ArrivalAirportIATA' => $ArrivalAirportIata,'Source' => 'website_vueling');
411
			else return array();
412
		}
413
		return array();
414
	}
415
416
	/**
417
	* Get flight info from Iberia
418
	* @param String $callsign The callsign
419
	* @param String $date date we want flight number info
420
	* @return Flight departure and arrival airports and time
421
	*/
422
	public function getIberia($callsign, $date = 'NOW') {
423
		$Common = new Common();
424
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
425
		$check_date = new Datetime($date);
426
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
427
		$url = "https://www.iberia.com/web/flightDetail.do";
428
		$post = array('numvuelo' => $numvol,'fecha' => $check_date->format('Ymd'),'airlineID' => 'IB');
429
		$data = $Common->getData($url,'post',$post);
430
		if ($data != '') {
431
			$table = $Common->table2array($data);
432
			//print_r($table);
433
			if (count($table) > 0) {
434
				$flight = $table;
435
				preg_match('/([A-Z]{3})/',$flight[3][0],$DepartureAirportIataMatch);
436
				preg_match('/([A-Z]{3})/',$flight[5][0],$ArrivalAirportIataMatch);
437
				$DepartureAirportIata = $DepartureAirportIataMatch[0];
438
				$ArrivalAirportIata = $ArrivalAirportIataMatch[0];
439
				$departureTime = substr(trim(str_replace(' lunes','',str_replace('&nbsp;','',$flight[3][2]))),0,5);
440
				$arrivalTime = trim(str_replace(' lunes','',str_replace('&nbsp;','',$flight[5][1])));
441
				if ($arrivalTime == 'Hora estimada de llegada') {
442
					$arrivalTime = substr(trim(str_replace(' lunes','',str_replace('&nbsp;','',$flight[5][2]))),0,5);
443
				} else $arrivalTime = substr($arrivalTime,0,5);
444
				return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_iberia');
445
			}
446
		}
447
		return array();
448
	}
449
450
	/**
451
	* Get flight info from Star Alliance
452
	* @param String $callsign The callsign
453
	* @param String $date date we want flight number info
454
	* @return Flight departure and arrival airports and time
455
	*/
456
457
	private function getStarAlliance($callsign, $date = 'NOW',$carrier = '') {
458
		$Common = new Common();
459
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
460
		$check_date = new Datetime($date);
461
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
462
		$url = "http://www.staralliance.com/flifoQueryAction.do?myAirline=&airlineCode=".$carrier."&flightNo=".$numvol."&day=".$check_date->format('d')."&month=".$check_date->format('m')."&year=".$check_date->format('Y')."&departuredate=".$check_date->format('d-M-Y');
463
		$data = $Common->getData($url);
464
		if ($data != '') {
465
			$table = $Common->table2array($data);
466
			if (count($table) > 0) {
467
				$flight = $table;
468
				//print_r($table);
469
				if (isset($flight[25]) && isset($flight[29])) {
470
					preg_match('/([A-Z]{3})/',$flight[25][1],$DepartureAirportIataMatch);
471
					preg_match('/([A-Z]{3})/',$flight[25][3],$ArrivalAirportIataMatch);
472
					$DepartureAirportIata = $DepartureAirportIataMatch[0];
473
					$ArrivalAirportIata = $ArrivalAirportIataMatch[0];
474
					$departureTime = substr(trim(str_replace('Scheduled: ','',$flight[29][0])),0,5);
475
					$arrivalTime = substr(trim(str_replace('Scheduled: ','',$flight[29][1])),0,5);
476
					return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_staralliance');
477
				} else return array();
478
			}
479
			
480
481
		}
482
		return array();
483
	}
484
485
486
	/**
487
	* Get flight info from Alitalia
488
	* @param String $callsign The callsign
489
	* @param String $date date we want flight number info
490
	* @return Flight departure and arrival airports and time
491
	*/
492
	private function getAlitalia($callsign, $date = 'NOW') {
493
		$Common = new Common();
494
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
495
		$check_date = new Datetime($date);
496
		$url= "http://booking.alitalia.com/FlightStatus/fr_fr/FlightInfo?Brand=az&NumeroVolo=".$numvol."&DataCompleta=".$check_date->format('d/m/Y');
497
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
498
		$data = $Common->getData($url);
499
		if ($data != '') {
500
			$table = $Common->text2array($data);
501
			$DepartureAirportIata = '';
502
			$ArrivalAirportIata = '';
503
			$departureTime = $table[4];
504
			$arrivalTime = $table[5];
505
			return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_alitalia');
506
		}
507
	}
508
509
	/**
510
	* Get flight info from Brussels airlines
511
	* @param String $callsign The callsign
512
	* @param String $date date we want flight number info
513
	* @return Flight departure and arrival airports and time
514
	*/
515
	private function getBrussels($callsign, $date = 'NOW') {
516
		$Common = new Common();
517
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
518
		$check_date = new Datetime($date);
519
		$url= "http://www.brusselsairlines.com/api/flightstatus/getresults?from=NA&to=NA&date=".$check_date->format('d/m/Y')."&hour=NA&lookup=flightnumber&flightnumber=".$numvol."&publicationID=302";
520
		//http://www.brusselsairlines.com/fr-fr/informations-pratiques/statut-de-votre-vol/resultat.aspx?flightnumber=".$numvol."&date=".$check_date->format('d/m/Y')."&lookup=flightnumber";
521
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
522
		$data = $Common->getData($url);
523
		if ($data != '') {
524
		    //echo $data;
525
		    $parsed_json = json_decode($data,true);
526
		    if (isset($parsed_json[0]['FromAirportCode'])) {
527
			$DepartureAirportIata = $parsed_json[0]['FromAirportCode'];
528
			$ArrivalAirportIata = $parsed_json[0]['ToAirportCode'];
529
			$departureTime = date('H:i',strtotime($parsed_json[0]['ScheduledDepatureDate']));
530
			$arrivalTime = date('H:i',strtotime($parsed_json[0]['ScheduledArrivalDate']));
531
			return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_brussels');
532
		    }
533
		}
534
	}
535
536
	/**
537
	* Get flight info from FlightRadar24
538
	* @param String $callsign The callsign
539
	* @param String $date date we want flight number info
540
	* @return Flight departure and arrival airports and time
541
	*/
542
/*
543
	public function getFlightRadar24($callsign, $date = 'NOW') {
544
		$Common = new Common();
545
		$url= "http://arn.data.fr24.com/zones/fcgi/feed.js?flight=".$callsign;
546
		$data = $Common->getData($url);
547
		if ($data != '') {
548
			$parsed_json = get_object_vars(json_decode($data));
549
			if (count($parsed_json) > 2) {
550
				$info = array_splice($parsed_json,2,1);
551
				$fr24id = current(array_keys($info));
552
				$urldata = "http://krk.data.fr24.com/_external/planedata_json.1.4.php?f=".$fr24id;
553
				$datapl = $Common->getData($urldata);
554
				if ($datapl != '') {
555
					$parsed_jsonpl = json_decode($datapl);
556
					if (isset($parsed_jsonpl->from_iata)) {
557
						$DepartureAirportIata = $parsed_jsonpl->from_iata;
558
						$ArrivalAirportIata = $parsed_jsonpl->to_iata;
559
						$departureTime = date('H:i',$parsed_jsonpl->dep_schd);
560
						$arrivalTime = date('H:i',$parsed_jsonpl->arr_schd);
561
						return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_flightradar24');
562
					}
563
				}
564
			}
565
		}
566
		return array();
567
	}
568
  */
569
	/**
570
	* Get flight info from Lufthansa
571
	* @param String $callsign The callsign
572
	* @param String $date date we want flight number info
573
	* @return Flight departure and arrival airports and time
574
	*/
575
576
/*	private function getLufthansa($callsign, $date = 'NOW') {
577
		$Common = new Common();
578
		*/
579
		//$numvol = preg_replace('/^[A-Z]*/','',$callsign);
580
/*
581
		$url= "http://www.lufthansa.com/fr/fr/Arrivees-Departs-fonction";
582
		$check_date = new Datetime($date);
583
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
584
585
		$post = array('flightNumber' => $numvol, 'date' => $check_date->format('Y-m-d'),'time' => '12:00','timezoneOffset' => '0','selection' => '0','arrivalDeparture' => 'D');
586
		$data = $Common->getData($url,'post',$post);
587
		if ($data != '') {
588
			$table = $Common->table2array($data);
589
			$departureTime = trim(str_replace($check_date->format('d.m.Y'),'',$table[25][3]));
590
		}
591
592
		$post = array('flightNumber' => $numvol, 'date' => $check_date->format('Y-m-d'),'time' => '12:00','timezoneOffset' => '0','selection' => '0','arrivalDeparture' => 'A');
593
		$data = $Common->getData($url,'post',$post);
594
		if ($data != '') {
595
			$table = $Common->table2array($data);
596
			$arrivalTime = trim(str_replace($check_date->format('d.m.Y'),'',$table[25][3]));
597
		}
598
		return array('DepartureAirportIATA' => '','DepartureTime' => $departureTime,'ArrivalAirportIATA' => '','ArrivalTime' => $arrivalTime,'Source' => 'website_lufthansa');
599
	}
600
  */
601
	/**
602
	* Get flight info from flytap
603
	* @param String $callsign The callsign
604
	* @return Flight departure and arrival airports and time
605
	*/
606
	private function getFlyTap($callsign) {
607
		$Common = new Common();
608
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
609
		$url= "http://www.flytap.com/France/fr/PlanifierEtReserver/Outils/DepartsEtArrivees";
610
		//$check_date = new Datetime($date);
611
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
612
		$post = array('arrivalsdepartures_content' => 'number','arrivalsdepartures_tp' => $numvol,'arrivalsdepartures_trk' => 'ARR','arrivalsdepartures_date_trk' => '1','aptCode' => '','arrivalsdepartures' => 'DEP','arrivalsdepartures_date' => '1','aptCodeFrom' => '','aptCodeTo' => '','arrivalsdepartures2' => 'DEP','arrivalsdepartures_date2' => '1');
613
		$data = $Common->getData($url,'post',$post);
614
		if ($data != '') {
615
			$table = $Common->table2array($data);
616
			$departureTime = trim(substr($table[15][0],0,5));
617
			$arrivalTime = trim(substr($table[35][0],0,5));
618
			preg_match('/([A-Z]{3})/',$table[11][0],$DepartureAirportIataMatch);
619
			preg_match('/([A-Z]{3})/',$table[31][0],$ArrivalAirportIataMatch);
620
			$DepartureAirportIata = $DepartureAirportIataMatch[0];
621
			$ArrivalAirportIata = $ArrivalAirportIataMatch[0];
622
			return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_flytap');
623
		}
624
		return array();
625
	}
626
627
	/**
628
	* Get flight info from flightmapper
629
	* @param String $callsign The callsign
630
	* @return Flight departure and arrival airports and time
631
	*/
632
	public function getFlightMapper($callsign) {
633
		$Common = new Common();
634
		$airline_icao = '';
635
		if (!is_numeric(substr($callsign, 0, 3)))
636
		{
637
			if (is_numeric(substr(substr($callsign, 0, 3), -1, 1))) {
638
				$airline_icao = substr($callsign, 0, 2);
639
			} elseif (is_numeric(substr(substr($callsign, 0, 4), -1, 1))) {
640
				$airline_icao = substr($callsign, 0, 3);
641
			} 
642
		}
643
		if ($airline_icao == '') return array();
644
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
645
		$url= "http://info.flightmapper.net/flight/".$airline_icao.'_'.$numvol;
646
		//$check_date = new Datetime($date);
647
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
648
		$data = $Common->getData($url);
649
		if ($data != '') {
650
			$table = $Common->table2array($data);
651
			if (isset($table[5][0])) {
652
				$sched = $table[5][0];
653
				$dhour = '';
654
				$darr = '';
655
				$ahour = '';
656
				$aarr = '';
657
				$n = sscanf($sched,'%*s %5[0-9:] %*[^()] (%3[A-Z]) %5[0-9:] %*[^()] (%3[A-Z])',$dhour,$darr,$ahour,$aarr);
658
				if ($n == 7) {
659
				    $departureTime = $dhour;
660
				    $arrivalTime = $ahour;
661
				    $DepartureAirportIata = str_replace(array('(',')'),'',$darr);
662
				    $ArrivalAirportIata = str_replace(array('(',')'),'',$aarr);
663
				    return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_flightmapper');
664
				}
665
			}
666
		}
667
		return array();
668
	}
669
670
	/**
671
	* Get flight info from flightaware
672
	* @param String $callsign The callsign
673
	* @return Flight departure and arrival airports and time
674
	*/
675
	public function getFlightAware($callsign) {
676
		global $globalFlightAwareUsername, $globalFlightAwarePassword;
677
		date_default_timezone_set('UTC');
678
		$Common = new Common();
679
		/*
680
		if (!is_numeric(substr($callsign, 0, 3)))
681
		{
682
			if (is_numeric(substr(substr($callsign, 0, 3), -1, 1))) {
683
				$airline_icao = substr($callsign, 0, 2);
684
			} elseif (is_numeric(substr(substr($callsign, 0, 4), -1, 1))) {
685
				$airline_icao = substr($callsign, 0, 3);
686
			} 
687
		}
688
		*/
689
		//$numvol = preg_replace('/^[A-Z]*/','',$callsign);
690
		if ($globalFlightAwareUsername != '' && $globalFlightAwarePassword != '') {
691
			$url = 'http://'.$globalFlightAwareUsername.':'.$globalFlightAwarePassword.'@flightxml.flightaware.com/json/FlightXML3/FlightInfoStatus?ident='.$callsign;
692
			$data = $Common->getData($url);
693
			if ($data != '') {
694
				$result = json_decode($data,true);
695
				$flight = $result['FlightInfoStatusResult']['flights'][0];
696
				if (isset($flight['origin'])) {
697
					return array(
698
					    'DepartureAirportIATA' => $flight['origin']['alternate_ident'],
699
					    'DepartureTime' => $flight['filed_departure_time']['time'],
700
					    'ArrivalAirportIATA' => $flight['destination']['alternate_ident'],
701
					    'ArrivalTime' => $flight['filed_arrival_time']['time'],
702
					    'Source' => 'website_flightaware');
703
				}
704
			}
705
		}
706
		
707
		$url= "http://flightaware.com/live/flight/".$callsign;
708
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
0 ignored issues
show
Bug introduced by
The variable $numvol 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...
709
		$data = $Common->getData($url);
710
		if ($data != '') {
711
			preg_match(':<script>var trackpollBootstrap = (.*?);</script>:',$data,$result);
712
			$flights = json_decode($result[1],true);
713
			$flight = reset($flights['flights']);
714
			if (isset($flight['activityLog']['flights'][0]['origin'])) {
715
				return array(
716
				    'DepartureAirportIATA' => $flight['activityLog']['flights'][0]['origin']['iata'],
717
				    'DepartureTime' => date('H:i',$flight['activityLog']['flights'][0]['takeoffTimes']['scheduled']),
718
				    'ArrivalAirportIATA' => $flight['activityLog']['flights'][0]['destination']['iata'],
719
				    'ArrivalTime' => date('H:i',$flight['activityLog']['flights'][0]['landingTimes']['scheduled']),
720
				    'Source' => 'website_flightaware');
721
			}
722
		}
723
		return array();
724
	}
725
726
	/**
727
	* Get flight info from CostToTravel
728
	* @param String $callsign The callsign
729
	* @return Flight departure and arrival airports and time
730
	*/
731
	public function getCostToTravel($callsign) {
732
		$Common = new Common();
733
		$url= "http://www.costtotravel.com/flight-number/".$callsign;
734
		//$check_date = new Datetime($date);
735
		//if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
736
		$data = $Common->getData($url);
737
		if ($data != '') {
738
			$table = $Common->table2array($data);
739
			if (isset($table[11][1])) {
740
				if (is_numeric(substr($table[11][1],0,1))) $departureTime = substr($table[11][1],0,5);
0 ignored issues
show
Unused Code introduced by
$departureTime is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
741
				$departureTime = '';
742
				if (is_numeric(substr($table[17][1],0,1))) $arrivalTime = substr($table[17][1],0,5);
743
				else $arrivalTime = '';
744
				$DepartureAirportIata = substr($table[13][1],0,3);
745
				$ArrivalAirportIata = substr($table[15][1],0,3);
746
				return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_costtotravel');
747
			}
748
		}
749
		return array();
750
	}
751
752
	/**
753
	* Get flight info from Air Canada
754
	* @param String $callsign The callsign
755
	* @param String $date date we want flight number info
756
	* @return Flight departure and arrival airports and time
757
	*/
758
	private function getAirCanada($callsign,$date = 'NOW') {
759
		$Common = new Common();
760
		if (class_exists("DomDocument") === FALSE) return array();
761
		date_default_timezone_set('UTC');
762
		$check_date = new Datetime($date);
763
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
764
		$url= "http://services.aircanada.com/portal/rest/getFlightsByFlightNumber?forceTimetable=true&flightNumber=".$numvol."&carrierCode=AC&date=".$check_date->format('m-d-Y')."&app_key=AE919FDCC80311DF9BABC975DFD72085&cache=74249";
765
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
766
		$data = $Common->getData($url);
767
		$dom = new DomDocument();
768
		$dom->loadXML($data);
769
		if ($dom->getElementsByTagName('DepartureStationInfo')->length == 0) return array();
770
		$departure = $dom->getElementsByTagName('DepartureStationInfo')->item(0);
771
		if (isset($departure->getElementsByTagName('Airport')->item(0)->firstChild->nodeValue)) {
772
			$DepartureAirportIata = $departure->getElementsByTagName('Airport')->item(0)->firstChild->nodeValue;
773
			$departureTime = date('H:i',strtotime($departure->getElementsByTagName('ScheduledTime')->item(0)->firstChild->nodeValue));
774
			$arrival = $dom->getElementsByTagName('ArrivalStationInfo')->item(0);
775
			$ArrivalAirportIata = $arrival->getElementsByTagName('Airport')->item(0)->firstChild->nodeValue;
776
			$arrivalTime = date('H:i',strtotime($arrival->getElementsByTagName('ScheduledTime')->item(0)->firstChild->nodeValue));
777
			return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_aircanada');
778
		} else return array();
779
	}
780
781
	/**
782
	* Get flight info from Vietnam Airlines
783
	* @param String $callsign The callsign
784
	* @param String $date date we want flight number info
785
	* @return Flight departure and arrival airports and time
786
	*/
787
	private function getVietnamAirlines($callsign, $date = 'NOW') {
788
		$Common = new Common();
789
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
790
		$check_date = new Datetime($date);
791
		$url= "https://cat.sabresonicweb.com/SSWVN/meridia?posid=VNVN&page=flifoFlightInfoDetailsMessage_learn&action=flightInfoDetails&airline=VN&language=fr&depDay=".$check_date->format('j')."&depMonth=".strtoupper($check_date->format('M'))."&=&flight=".$numvol."&";
792
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
793
		$data = $Common->getData($url);
794
		if ($data != '') {
795
			$table = $Common->table2array($data);
796
			$flight = $table;
797
			preg_match('/([A-Z]{3})/',$flight[3][0],$DepartureAirportIataMatch);
798
			preg_match('/([A-Z]{3})/',$flight[21][0],$ArrivalAirportIataMatch);
799
			$DepartureAirportIata = $DepartureAirportIataMatch[0];
800
			$ArrivalAirportIata = $ArrivalAirportIataMatch[0];
801
			$departureTime = $flight[5][1];
802
			$arrivalTime = $flight[23][1];
803
			return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_vietnamairlines');
804
		}
805
	}
806
807
	/**
808
	* Get flight info from Air Berlin
809
	* @param String $callsign The callsign
810
	* @param String $date date we want flight number info
811
	* @param String $carrier airline code
812
	* @return Flight departure and arrival airports and time
813
	*/
814
	private function getAirBerlin($callsign, $date = 'NOW',$carrier = 'AB') {
815
		$Common = new Common();
816
		date_default_timezone_set('UTC');
817
		//AB = airberlin, HG/NLY = NIKI, 4T/BHP = Belair 
818
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
819
		$check_date = new Datetime($date);
820
		$url= "http://www.airberlin.com/en-US/site/aims.php";
821
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
822
		$post = array('type' => 'departure','searchFlightNo' => '1','requestsent' => 'true', 'flightno' => $numvol,'date' => $check_date->format('Y-m-d'),'carrier' => $carrier);
823
		$data = $Common->getData($url,'post',$post);
824
		//echo $data;
825
		$DepartureAirportIata = '';
826
		$ArrivalAirportIata = '';
827
		
828
		if ($data != '') {
829
			$table = $Common->table2array($data);
830
			$flight = $table;
831
			if (isset($flight[5][4])) $departureTime = $flight[5][4];
832
			else $departureTime = '';
833
			if (isset($flight[5][2])) $departureAirport = $flight[5][2];
834
			else $departureAirport = '';
835
		} else return array();
836
		$post = array('type' => 'arrival','searchFlightNo' => '1','requestsent' => 'true', 'flightno' => $numvol,'date' => $check_date->format('Y-m-d'),'carrier' => 'AB');
837
		$data = $Common->getData($url,'post',$post);
838
		if ($data != '') {
839
			$table = $Common->table2array($data);
840
			$flight = $table;
841
			if (isset($flight[5][4])) {
842
			    $arrivalTime = $flight[5][4];
843
			    $arrivalAirport = $flight[5][3];
844
			} else {
845
			    $arrivalTime = '';
846
			    $arrivalAirport = '';
847
			}
848
		} else return array();
849
		$url = 'http://www.airberlin.com/en-US/site/json/suggestAirport.php?searchfor=departures&searchflightid=0&departures%5B%5D=&suggestsource%5B0%5D=activeairports&withcountries=0&withoutroutings=0&promotion%5Bid%5D=&promotion%5Btype%5D=&routesource%5B0%5D=airberlin&routesource%5B1%5D=partner';
850
		$json = $Common->getData($url);
851
		if ($json == '') return array();
852
		$parsed_json = json_decode($json);
853
		$airports = $parsed_json->{'suggestList'};
854
		if (count($airports) > 0) {
855
			foreach ($airports as $airinfo) {
856
				if ($airinfo->{'name'} == $departureAirport) {
857
					$DepartureAirportIata = $airinfo->{'code'};
858
				}
859
				if ($airinfo->{'name'} == $arrivalAirport) {
860
					$ArrivalAirportIata = $airinfo->{'code'};
861
				}
862
			}
863
		}
864
		if (isset($DepartureAirportIata)) {
865
			return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_airberlin');
866
		} else return array();
867
	}
868
869
870
	
871
	public function fetchSchedule($ident,$date = 'NOW') {
872
		global $globalSchedulesSources, $globalSchedulesFetch, $globalOffline;
873
		//$Common = new Common();
874
		if ($globalSchedulesFetch === FALSE || (isset($globalOffline) && $globalOffline === TRUE)) return array();
875
		$airline_icao = '';
876
		if (!is_numeric(substr($ident, 0, 3)))
877
		{
878
			if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
879
				$airline_icao = substr($ident, 0, 2);
880
			} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
881
				$airline_icao = substr($ident, 0, 3);
882
			} 
883
		}
884
		if ($airline_icao != '') {
885
			switch ($airline_icao) {
886
/*
887
				// Adria Airways
888
				case "ADR":
889
				case "JP":
890
					return Schedule->getStarAlliance($ident,$date,'JP');
891
					break;
892
				// Aegean Airlines
893
				case "AEE":
894
				case "A3":
895
					return Schedule->getStarAlliance($ident,$date,'A3');
896
					break;
897
				// Air Canada
898
				case "ACA":
899
				case "AC":
900
					return Schedule->getStarAlliance($ident,$date,'AC');
901
					break;
902
				// Air China
903
				case "CCA":
904
				case "CA":
905
					return Schedule->getStarAlliance($ident,$date,'CA');
906
					break;
907
				// Air India
908
				case "AIC":
909
				case "AI":
910
					return Schedule->getStarAlliance($ident,$date,'AI');
911
					break;
912
				// Air New Zealand
913
				case "ANZ":
914
				case "NZ":
915
					return Schedule->getStarAlliance($ident,$date,'NZ');
916
					break;
917
				// All Nippon Airways
918
				case "ANA":
919
				case "NH":
920
					return Schedule->getStarAlliance($ident,$date,'NH');
921
					break;
922
				// Asiana Airlines
923
				case "AAR":
924
				case "OZ":
925
					return Schedule->getStarAlliance($ident,$date,'OZ');
926
					break;
927
				// Austrian
928
				case "AUA":
929
				case "OS":
930
					return Schedule->getStarAlliance($ident,$date,'OS');
931
					break;
932
				// Avianca
933
				case "AVA":
934
				case "AV":
935
					return Schedule->getStarAlliance($ident,$date,'AV');
936
					break;
937
*/
938
				// Brussels Airlines
939
				case "BEL":
940
				case "SN":
941
					return $this->getBrussels($ident,$date);
942
/*
943
				// Copa Airlines
944
				case "CMP":
945
				case "CM":
946
					return Schedule->getStarAlliance($ident,$date,'CM');
947
					break;
948
				// Croatia Airlines
949
				case "CTN":
950
				case "OU":
951
					return Schedule->getStarAlliance($ident,$date,'OU');
952
					break;
953
				// Egyptair
954
				case "MSR":
955
				case "MS":
956
					return Schedule->getStarAlliance($ident,$date,'MS');
957
					break;
958
				// Ethiopian Airlines
959
				case "ETH":
960
				case "ET":
961
					return Schedule->getStarAlliance($ident,$date,'ET');
962
					break;
963
				// Eva Air
964
				case "EVA":
965
				case "BR":
966
					return Schedule->getStarAlliance($ident,$date,'BR');
967
					break;
968
				// LOT Polish Airlines
969
				case "LOT":
970
				case "LO":
971
					return Schedule->getStarAlliance($ident,$date,'LO');
972
					break;
973
				// Scandinavian Airlines
974
				case "SAS":
975
				case "SK":
976
					return Schedule->getStarAlliance($ident,$date,'SK');
977
					break;
978
				// Shenzhen Airlines
979
				case "CSZ":
980
				case "ZH":
981
					return Schedule->getStarAlliance($ident,$date,'ZH');
982
					break;
983
				// Singapore Airlines
984
				case "SIA":
985
				case "SQ":
986
					return Schedule->getStarAlliance($ident,$date,'SQ');
987
					break;
988
				// South African Airways
989
				case "SAA":
990
				case "SA":
991
					return Schedule->getStarAlliance($ident,$date,'SA');
992
					break;
993
*/
994
				// SWISS
995
				case "SWR":
996
				case "LX":
997
					return $this->getSwiss($ident);
998
999
				/*
1000
				// TAP Portugal
1001
				case "TAP":
1002
				case "TP":
1003
					return $this->getFlyTap($ident,$date);
1004
					break;
1005
				*/
1006
/*
1007
				// Thai Airways International
1008
				case "THA":
1009
				case "TG":
1010
					return Schedule->getStarAlliance($ident,$date,'TG');
1011
					break;
1012
				// Turkish Airlines
1013
				case "THY":
1014
				case "TK":
1015
					return Schedule->getStarAlliance($ident,$date,'TK');
1016
					break;
1017
				// United
1018
				case "UAL":
1019
				case "UA":
1020
					return Schedule->getStarAlliance($ident,$date,'UA');
1021
					break;
1022
*/
1023
				// Air France
1024
				case "AF":
1025
				case "AFR":
1026
					return $this->getAirFrance($ident,$date,'AF');
1027
				// HOP
1028
				case "A5":
1029
				case "HOP":
1030
					return $this->getAirFrance($ident,$date,'A5');
1031
				// EasyJet
1032
				case "U2":
1033
				case "DS":
1034
				case "EZY":
1035
				case "EZS":
1036
					return $this->getEasyJet($ident,$date);
1037
				// Ryanair
1038
				case "FR":
1039
				case "RYR":
1040
					return $this->getRyanair($ident);
1041
				// British Airways
1042
				case "BA":
1043
				case "SHT":
1044
				case "BAW":
1045
					return $this->getBritishAirways($ident);
1046
				// Tunisair
1047
				case "TUI":
1048
				case "TAR":
1049
				case "TU":
1050
					return $this->getTunisair($ident);
1051
				// Vueling
1052
				case "VLG":
1053
				case "VY":
1054
					return $this->getVueling($ident);
1055
				// Alitalia
1056
				case "AZ":
1057
				case "AZA":
1058
					return $this->getAlitalia($ident);
1059
				// Air Canada
1060
				case "ACA":
1061
				case "AC":
1062
					return $this->getAirCanada($ident);
1063
				// Lufthansa
1064
				case "DLH":
1065
				case "LH":
1066
					return $this->getLufthansa($ident);
1067
				/*
1068
				// Transavia
1069
				case "TRA":
1070
				case "HV":
1071
					return $this->getTransavia($ident);
1072
					break;
1073
				*/
1074
/*
1075
				case "DLH":
1076
				case "LH":
1077
					return $this->getStarAlliance($ident,$date,'LH');
1078
					break;
1079
*/
1080
				// Iberia
1081
				case "IBE":
1082
				case "IB":
1083
					return $this->getIberia($ident);
1084
				// Vietnam Airlines
1085
				case "HVN":
1086
					return $this->getVietnamAirlines($ident,$date);
1087
				// Air Berlin
1088
				case "AB":
1089
				case "BER":
1090
					return $this->getAirBerlin($ident,$date,'AB');
1091
				// NIKI
1092
				case "HG":
1093
				case "NLY":
1094
					return $this->getAirBerlin($ident,$date,'HG');
1095
				// BelAir
1096
				case "4T":
1097
				case "BHP":
1098
					return $this->getAirBerlin($ident,$date,'4T');
1099
				default:
1100
					// Randomly use a generic function to get hours
1101
					if (strlen($airline_icao) == 2) {
1102
						if (!isset($globalSchedulesSources)) $globalSchedulesSources = array('flightmapper','costtotravel','flightradar24','flightaware');
1103
						if (count($globalSchedulesSources) > 0) {
1104
							$rand = mt_rand(0,count($globalSchedulesSources)-1);
1105
							$source = $globalSchedulesSources[$rand];
1106
							if ($source == 'flightmapper') return $this->getFlightMapper($ident);
1107
							elseif ($source == 'costtotravel') return $this->getCostToTravel($ident);
1108
							//elseif ($source == 'flightradar24') return $this->getFlightRadar24($ident,$date);
1109
							elseif ($source == 'flightaware') return $this->getFlightAware($ident);
1110
						}
1111
					}
1112
			}
1113
		}
1114
	        return array();
1115
	}
1116
}
1117
1118
1119
//$Schedule = new Schedule();
1120
1121
//print_r($Schedule->fetchSchedule('HV5661'));
1122
//print_r($Schedule->getCostToTravel('AB8788'));
1123
//print_r($Schedule->getBritishAirways('BAW551'));
1124
//print_r($Schedule->getLufthansa('LH551'));
1125
//print_r($Schedule->getTunisair('TU203'));
1126
//print_r($Schedule->getTransavia('TRA598'));
1127
1128
?>