Completed
Push — master ( 98152f...ecdb7d )
by Yannick
32:15
created

Schedule   D

Complexity

Total Complexity 179

Size/Duplication

Total Lines 1087
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 3

Importance

Changes 0
Metric Value
dl 0
loc 1087
rs 4.4144
c 0
b 0
f 0
wmc 179
lcom 2
cbo 3

25 Methods

Rating   Name   Duplication   Size   Complexity  
A getVietnamAirlines() 0 19 3
D fetchSchedule() 0 245 49
B getFlightAware() 0 30 4
C getAirBerlin() 0 54 13
A __construct() 0 5 2
C addSchedule() 0 78 16
B getSchedule() 0 22 4
A checkSchedule() 0 21 3
B getAirFrance() 0 33 3
A getEasyJet() 0 21 3
A getRyanair() 0 20 4
C getSwiss() 0 26 7
B getBritishAirways() 0 21 5
D getLufthansa() 0 27 10
B getTransavia() 0 23 5
B getTunisair() 0 14 5
B getVueling() 0 19 5
B getIberia() 0 27 5
B getStarAlliance() 0 27 6
A getAlitalia() 0 16 3
A getBrussels() 0 20 4
A getFlyTap() 0 20 3
D getFlightMapper() 0 37 9
A getCostToTravel() 0 19 3
B getAirCanada() 0 22 5

How to fix   Complexity   

Complex Class

Complex classes like Schedule often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use Schedule, and based on these observations, apply Extract Interface, too.

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