Completed
Push — master ( e43ddd...ea120f )
by Yannick
14:55
created

Schedule::getSchedule()   B

Complexity

Conditions 4
Paths 8

Size

Total Lines 22
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 19
nc 8
nop 1
dl 0
loc 22
rs 8.9197
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
        }
16
	
17
	/**
18
	* Add schedule data to database
19
	* @param String $ident aircraft ident
20
	* @param String $departure_airport_icao departure airport icao
21
	* @param String $departure_airport_time departure airport time
22
	* @param String $arrival_airport_icao arrival airport icao
23
	* @param String $arrival_airport_time arrival airport time
24
	/ @param String $source source of data
25
	*/
26
	
27
	public function addSchedule($ident,$departure_airport_icao,$departure_airport_time,$arrival_airport_icao,$arrival_airport_time,$source = 'website') {
28
		date_default_timezone_set('UTC');
29
		$date = date("Y-m-d H:i:s",time());
30
	        //if ($departure_airport_time == '' && $arrival_airport_time == '') exit;
31
	        //$query = "SELECT COUNT(*) FROM schedule WHERE ident = :ident";
32
	        $query = "SELECT COUNT(*) FROM routes WHERE CallSign = :ident";
33
	        $query_values = array(':ident' => $ident);
34
		 try {
35
			$sth = $this->db->prepare($query);
36
			$sth->execute($query_values);
37
		} catch(PDOException $e) {
38
			return "error : ".$e->getMessage();
39
		}
40
		if ($sth->fetchColumn() > 0) {
41
			if ($departure_airport_time == '' && $arrival_airport_time == '') {
42
			    $query = "SELECT COUNT(*) FROM routes WHERE CallSign = :ident AND FromAirport_ICAO = :departure_airport_icao AND ToAirport_ICAO = :arrival_airport_icao";
43
			    $query_values = array(':ident' => $ident,':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao);
44
			} elseif ($arrival_airport_time == '') {
45
			    $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";
46
			    $query_values = array(':ident' => $ident,':departure_airport_icao' => $departure_airport_icao,':departure_airport_time' => $departure_airport_time,':arrival_airport_icao' => $arrival_airport_icao);
47
			} elseif ($departure_airport_time == '') {
48
			    $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";
49
			    $query_values = array(':ident' => $ident,':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao,':arrival_airport_time' => $arrival_airport_time);
50
			} else {
51
			    //$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";
52
			    $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";
53
			    $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);
54
			}
55
			try {
56
				$sth = $this->db->prepare($query);
57
				$sth->execute($query_values);
58
			} catch(PDOException $e) {
59
				return "error : ".$e->getMessage();
60
			}
61
			if ($sth->fetchColumn() == 0) {
62
				//$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';
63
				if ($departure_airport_time == '' && $arrival_airport_time == '') {
64
                            	    $query = 'UPDATE routes SET FromAirport_ICAO = :departure_airport_icao, ToAirport_ICAO = :arrival_airport_icao, date_modified = :date, Source = :source WHERE CallSign = :ident';
65
				    $query_values = array(':ident' => $ident,':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao, ':date' => $date, ':source' => $source);
66
				} elseif ($arrival_airport_time == '') {
67
                            	    $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';
68
				    $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);
69
				} elseif ($departure_airport_time == '') {
70
                            	    $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';
71
				    $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);
72
				} else {
73
                            	    $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';
74
				    $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);
75
				}
76
				 try {
77
					$sth = $this->db->prepare($query);
78
					$sth->execute($query_values);
79
				} catch(PDOException $e) {
80
					return "error : ".$e->getMessage();
81
				}
82
			} else {
83
				//$query = 'UPDATE schedule SET date_lastseen = :date WHERE ident = :ident';
84
				$query = 'UPDATE routes SET date_lastseen = :date WHERE CallSign = :ident';
85
				$query_values = array(':ident' => $ident,':date' => $date);
86
				 try {
87
					$sth = $this->db->prepare($query);
88
					$sth->execute($query_values);
89
				} catch(PDOException $e) {
90
					return "error : ".$e->getMessage();
91
				}
92
			}
93
		} else {
94
			$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)';
95
			$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);
96
			 try {
97
				$sth = $this->db->prepare($query);
98
				$sth->execute($query_values);
99
			} catch(PDOException $e) {
100
				return "error : ".$e->getMessage();
101
			}
102
		}
103
        
104
	}
105
106
	public function getSchedule($ident) {
107
	        $Translation = new Translation($this->db);
108
	        $operator = $Translation->checkTranslation($ident,false);
109
	        if ($ident != $operator) {
110
	    		$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 CallSign = :operator OR CallSign = :ident LIMIT 1";
111
	    		$query_values = array(':ident' => $ident,'operator' => $operator);
112
	    	} else {
113
		        $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 CallSign = :ident LIMIT 1";
114
	    		$query_values = array(':ident' => $ident);
115
	    	}
116
		 try {
117
			$sth = $this->db->prepare($query);
118
			$sth->execute($query_values);
119
		} catch(PDOException $e) {
120
			return "error : ".$e->getMessage();
121
		}
122
		$row = $sth->fetch(PDO::FETCH_ASSOC);
123
		$sth->closeCursor();
124
		if (count($row) > 0) {
125
			return $row;
126
		} else return array();
127
	}
128
129
	public function checkSchedule($ident) {
130
		global $globalDBdriver;
131
	        //$query = "SELECT COUNT(*) as nb FROM schedule WHERE ident = :ident AND date_added > DATE_SUB(CURDATE(), INTERVAL 8 DAY) - 8 LIMIT 1";
132
	        if ($globalDBdriver == 'mysql') {
133
			$query = "SELECT COUNT(*) as nb FROM routes WHERE 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";
134
		} else {
135
			$query = "SELECT COUNT(*) as nb FROM routes WHERE CallSign = :ident 
136
			AND ((date_added::timestamp BETWEEN CURRENT_TIMESTAMP - INTERVAL '1 MONTH' AND CURRENT_TIMESTAMP) and date_modified::timestamp IS NULL)
137
			     OR (date_modified::timestamp BETWEEN CURRENT_TIMESTAMP - INTERVAL '1 MONTH' AND CURRENT_TIMESTAMP) LIMIT 1";
138
		}
139
	        $query_values = array(':ident' => $ident);
140
		 try {
141
			$sth = $this->db->prepare($query);
142
			$sth->execute($query_values);
143
		} catch(PDOException $e) {
144
			return "error : ".$e->getMessage();
145
		}
146
		$row = $sth->fetch(PDO::FETCH_ASSOC);
147
		$sth->closeCursor();
148
		return $row['nb'];
149
	}
150
151
	/**
152
	* Get flight info from Air France
153
	* @param String $callsign The callsign
154
	* @param String $date date we want flight number info
155
	* @param String $carrier IATA code
156
	* @return Flight departure and arrival airports and time
157
	*/
158
	private function getAirFrance($callsign, $date = 'NOW',$carrier = 'AF') {
159
		$Common = new Common();
160
		$check_date = new Datetime($date);
161
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
162
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
163
		$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');
164
		$json = $Common->getData($url);
165
	
166
		$parsed_json = json_decode($json);
167
		if (property_exists($parsed_json,'errors') === false) {
168
			//$originLong = $parsed_json->{'flightsList'}[0]->{'segmentsList'}[0]->{'originLong'};
169
			$originShort = $parsed_json->{'flightsList'}[0]->{'segmentsList'}[0]->{'originShort'};
170
			//$departureDateMedium = $parsed_json->{'flightsList'}[0]->{'segmentsList'}[0]->{'departureDateMedium'};
171
			$departureTime = $parsed_json->{'flightsList'}[0]->{'segmentsList'}[0]->{'departureTime'};
172
			//$destinationLong = $parsed_json->{'flightsList'}[0]->{'segmentsList'}[0]->{'destinationLong'};
173
			$destinationShort = $parsed_json->{'flightsList'}[0]->{'segmentsList'}[0]->{'destinationShort'};
174
			//$arrivalDateMedium = $parsed_json->{'flightsList'}[0]->{'segmentsList'}[0]->{'arrivalDateMedium'};
175
			$arrivalTime = $parsed_json->{'flightsList'}[0]->{'segmentsList'}[0]->{'arrivalTime'};
176
177
			preg_match('/\((.*?)\)/',$originShort,$originiata);
178
			$DepartureAirportIata = $originiata[1];
179
			preg_match('/\((.*?)\)/',$destinationShort,$destinationiata);
180
			$ArrivalAirportIata = $destinationiata[1];
181
182
			/*
183
			date_default_timezone_set('Europe/Paris');
184
			$departureTime = gmdate('H:i',strtotime($departureTime));
185
			$arrivalTime = gmdate('H:i',strtotime($arrivalTime));
186
			*/
187
		
188
			return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_airfrance');
189
		} else return array();
190
	}
191
192
	/**
193
	* Get flight info from EasyJet
194
	* @param String $callsign The callsign
195
	* @param String $date date we want flight number info
196
	* @return Flight departure and arrival airports and time
197
	*/
198
	private function getEasyJet($callsign, $date = 'NOW') {
199
		global $globalTimezone;
200
		$Common = new Common();
201
		date_default_timezone_set($globalTimezone);
202
		$check_date = new Datetime($date);
203
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
204
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
205
		$url = "http://www.easyjet.com/ft/api/flights?date=".$check_date->format('Y-m-d')."&fn=".$callsign;
206
		$json = $Common->getData($url);
207
		$parsed_json = json_decode($json);
208
209
		$flights = $parsed_json->{'flights'};
210
		if (count($flights) > 0) {
211
			$DepartureAirportIata = $parsed_json->{'flights'}[0]->{'airports'}->{'pda'}->{'iata'}; //name
212
			$ArrivalAirportIata = $parsed_json->{'flights'}[0]->{'airports'}->{'paa'}->{'iata'}; //name
213
			$departureTime = $parsed_json->{'flights'}[0]->{'dates'}->{'fstd'};
214
			$arrivalTime = $parsed_json->{'flights'}[0]->{'dates'}->{'fsta'};
215
216
			return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_easyjet');
217
		} else return array();
218
	}
219
220
	/**
221
	* Get flight info from Ryanair
222
	* @param String $callsign The callsign
223
	* @return Flight departure and arrival airports and time
224
	*/
225
	private function getRyanair($callsign) {
226
		$Common = new Common();
227
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
228
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
229
		$url = "http://www.ryanair.com/fr/api/2/flight-info/0/50/";
230
		$post = '{"flight":"'.$numvol.'","minDepartureTime":"00:00","maxDepartureTime":"23:59"}';
231
		$headers = array('Content-Type: application/json','Content-Length: ' . strlen($post));
232
		$json = $Common->getData($url,'post',$post,$headers);
233
		$parsed_json = json_decode($json);
234
		if (isset($parsed_json->{'flightInfo'})) {
235
			$flights = $parsed_json->{'flightInfo'};
236
			if (count($flights) > 0) {
237
				$DepartureAirportIata = $parsed_json->{'flightInfo'}[0]->{'departureAirport'}->{'iata'}; //name
238
				$ArrivalAirportIata = $parsed_json->{'flightInfo'}[0]->{'arrivalAirport'}->{'iata'}; //name
239
				$departureTime = $parsed_json->{'flightInfo'}[0]->{'departureTime'};
240
				$arrivalTime = $parsed_json->{'flightInfo'}[0]->{'arrivalTime'};
241
				return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime, 'Source' => 'website_ryanair');
242
			} else return array();
243
		} else return array();
244
	}
245
246
	/**
247
	* Get flight info from Swiss
248
	* @param String $callsign The callsign
249
	* @return Flight departure and arrival airports and time
250
	*/
251
	private function getSwiss($callsign) {
252
		$Common = new Common();
253
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
254
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
255
		$url = "http://www.world-of-swiss.com/fr/routenetwork.json";
256
		$json = $Common->getData($url);
257
		$parsed_json = json_decode($json);
258
259
260
		$flights = $parsed_json->{'flights'};
261
		if (count($flights) > 0) {
262
			$departureTime = '';
263
			$arrivalTime = '';
264
			foreach ($flights as $flight) {
265
				if ($flight->{'no'} == "Vol LX ".$numvol) {
266
					$DepartureAirportIata = $flight->{'from'}->{'code'}; //city
267
					$ArrivalAirportIata = $flight->{'to'}->{'code'}; //city
268
					$departureTime = substr($flight->{'from'}->{'hour'},0,5);
269
					$arrivalTime = substr($flight->{'to'}->{'hour'},0,5);
270
				}
271
			}
272
			if (isset($DepartureAirportIata) && isset($ArrivalAirportIata)) {
273
				return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_swiss');
274
			} else return array();
275
		} else return array();
276
	}
277
	
278
	/**
279
	* Get flight info from British Airways API
280
	* @param String $callsign The callsign
281
	* @param String $date date we want flight number info
282
	* @return Flight departure and arrival airports and time
283
	*/
284
	public function getBritishAirways($callsign, $date = 'NOW') {
285
		global $globalBritishAirwaysKey;
286
		$Common = new Common();
287
		$check_date = new Datetime($date);
288
		$numvol = sprintf('%04d',preg_replace('/^[A-Z]*/','',$callsign));
289
		if (!filter_var(preg_replace('/^[A-Z]*/','',$callsign),FILTER_VALIDATE_INT)) return array();
290
		if ($globalBritishAirwaysKey == '') return array();
291
		$url = "https://api.ba.com/rest-v1/v1/flights;flightNumber=".$numvol.";scheduledDepartureDate=".$check_date->format('Y-m-d').".json";
292
		$headers = array('Client-Key: '.$globalBritishAirwaysKey);
293
		$json = $Common->getData($url,'get','',$headers);
294
		if ($json == '') return array();
295
		$parsed_json = json_decode($json);
296
		$flights = $parsed_json->{'FlightsResponse'};
297
		if (count($flights) > 0) {
298
			$DepartureAirportIata = $parsed_json->{'FlightsResponse'}->{'Flight'}->{'Sector'}->{'DepartureAirport'};
299
			$ArrivalAirportIata = $parsed_json->{'FlightsResponse'}->{'Flight'}->{'Sector'}->{'ArrivalAirport'};
300
			$departureTime = date('H:i',strtotime($parsed_json->{'FlightsResponse'}->{'Flight'}->{'Sector'}->{'ScheduledDepartureDateTime'}));
301
			$arrivalTime = date('H:i',strtotime($parsed_json->{'FlightsResponse'}->{'Flight'}->{'Sector'}->{'ScheduledArrivalDateTime'}));
302
			return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_britishairways');
303
		} else return array();
304
	}
305
306
	/**
307
	* Get flight info from Lutfhansa API
308
	* @param String $callsign The callsign
309
	* @param String $date date we want flight number info
310
	* @return Flight departure and arrival airports and time
311
	*/
312
	public function getLufthansa($callsign, $date = 'NOW') {
313
		global $globalLufthansaKey;
314
		$Common = new Common();
315
		$check_date = new Datetime($date);
316
		$numvol = sprintf('%04d',preg_replace('/^[A-Z]*/','',$callsign));
317
		if (!filter_var(preg_replace('/^[A-Z]*/','',$callsign),FILTER_VALIDATE_INT)) return array();
318
		if (!isset($globalLufthansaKey) || $globalLufthansaKey == '' || !isset($globalLufthansaKey['key']) || $globalLufthansaKey['key'] == '') return array();
319
		$url = "https://api.lufthansa.com/v1/oauth/token";
320
		$post = array('client_id' => $globalLufthansaKey['key'],'client_secret' => $globalLufthansaKey['secret'],'grant_type' => 'client_credentials');
321
		$data = $Common->getData($url,'post',$post);
322
		$parsed_data = json_decode($data);
323
		if (!isset($parsed_data->{'access_token'})) return array();
324
		$token = $parsed_data->{'access_token'};
325
		
326
		$url = "https://api.lufthansa.com/v1/operations/flightstatus/LH".$numvol."/".$check_date->format('Y-m-d');
327
		$headers = array('Authorization: Bearer '.$token,'Accept: application/json');
328
		$json = $Common->getData($url,'get','',$headers);
329
		if ($json == '') return array();
330
		$parsed_json = json_decode($json);
331
		if (isset($parsed_json->{'FlightStatusResource'}) && count($parsed_json->{'FlightStatusResource'}) > 0) {
332
			$DepartureAirportIata = $parsed_json->{'FlightStatusResource'}->{'Flights'}->{'Flight'}->{'Departure'}->{'AirportCode'};
333
			$departureTime = date('H:i',strtotime($parsed_json->{'FlightStatusResource'}->{'Flights'}->{'Flight'}->{'Departure'}->{'ScheduledTimeLocal'}->{'DateTime'}));
334
			$ArrivalAirportIata = $parsed_json->{'FlightStatusResource'}->{'Flights'}->{'Flight'}->{'Arrival'}->{'AirportCode'};
335
			$arrivalTime = date('H:i',strtotime($parsed_json->{'FlightStatusResource'}->{'Flights'}->{'Flight'}->{'Arrival'}->{'ScheduledTimeLocal'}->{'DateTime'}));
336
			return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_lufthansa');
337
		} else return array();
338
	}
339
340
	/**
341
	* Get flight info from Transavia API
342
	* @param String $callsign The callsign
343
	* @param String $date date we want flight number info
344
	* @return Flight departure and arrival airports and time
345
	*/
346
	public function getTransavia($callsign, $date = 'NOW') {
347
		global $globalTransaviaKey;
348
		$Common = new Common();
349
		$check_date = new Datetime($date);
350
		$numvol = sprintf('%04d',preg_replace('/^[A-Z]*/','',$callsign));
351
		if (!filter_var(preg_replace('/^[A-Z]*/','',$callsign),FILTER_VALIDATE_INT)) return array();
352
		if ($globalTransaviaKey == '') return array();
353
		$url = "https://tst.api.transavia.com/v1/flightstatus/departuredate/".$check_date->format('Ymd').'/flightnumber/HV'.$numvol;
354
		//$url = "https://api.transavia.com/v1/flightstatus/departuredate/".$check_date->format('Ymd').'/flightnumber/HV'.$numvol;
355
		$headers = array('apikey: '.$globalTransaviaKey);
356
		$json = $Common->getData($url,'get','',$headers);
357
		//echo 'result : '.$json;
358
		if ($json == '') return array();
359
		$parsed_json = json_decode($json);
360
		
361
		if (isset($parsed_json->{'data'}[0])) {
362
			$DepartureAirportIata = $parsed_json->{'data'}[0]->{'flight'}->{'departureAirport'}->{'locationCode'};
363
			$departureTime = date('H:i',strtotime($parsed_json->{'data'}[0]->{'flight'}->{'departureDateTime'}));
364
			$ArrivalAirportIata = $parsed_json->{'data'}[0]->{'flight'}->{'arrivalAirport'}->{'locationCode'};
365
			$arrivalTime = date('H:i',strtotime($parsed_json->{'data'}[0]->{'flight'}->{'arrivalDateTime'}));
366
			return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_transavia');
367
		} else return array();
368
	}
369
370
	/**
371
	* Get flight info from Tunisair
372
	* @param String $callsign The callsign
373
	* @return Flight departure and arrival airports and time
374
	*/
375
	public function getTunisair($callsign) {
376
		$Common = new Common();
377
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
378
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
379
		$url = "http://www.tunisair.com/site/publish/module/Volj/fr/Flight_List.asp";
380
		$data = $Common->getData($url);
381
		$table = $Common->table2array($data);
382
		foreach ($table as $flight) {
383
			if (isset($flight[1]) && $flight[1] == "TU ".sprintf('%04d',$numvol)) {
384
				return array('DepartureAirportIATA' => $flight[2],'DepartureTime' => str_replace('.',':',$flight[5]),'ArrivalAirportIATA' => $flight[3],'ArrivalTime' => str_replace('.',':',$flight[6]),'Source' => 'website_tunisair');
385
			}
386
		}
387
		return array();
388
	}
389
390
	/**
391
	* Get flight info from Vueling
392
	* @param String $callsign The callsign
393
	* @return Flight departure and arrival airports and time
394
	*/
395
	public function getVueling($callsign,$date = 'NOW') {
396
		$Common = new Common();
397
		$check_date = new Datetime($date);
398
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
399
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
400
		$final_date = str_replace('/','%2F',$check_date->format('d/m/Y'));
401
		$url = "http://www.vueling.com/Base/BaseProxy/RenderMacro/?macroalias=FlightStatusResult&searchBy=bycode&date=".$final_date."&flightNumber=".$numvol."&idioma=en-GB";
402
		$data = $Common->getData($url);
403
		$data=trim(str_replace(array("\r\n","\r","\n","\\r","\\n","\\r\\n"),'',$data));
404
		if ($data != '') {
405
			preg_match('/flightOri=[A-Z]{3}/',$data,$result);
406
			$DepartureAirportIata = str_replace('flightOri=','',$result[0]);
407
			preg_match('/flightDest=[A-Z]{3}/',$data,$result);
408
			$ArrivalAirportIata = str_replace('flightDest=','',$result[0]);
409
			if ($DepartureAirportIata != '' && $ArrivalAirportIata != '') return array('DepartureAirportIATA' => $DepartureAirportIata,'ArrivalAirportIATA' => $ArrivalAirportIata,'Source' => 'website_vueling');
410
			else return array();
411
		}
412
		return array();
413
	}
414
415
	/**
416
	* Get flight info from Iberia
417
	* @param String $callsign The callsign
418
	* @param String $date date we want flight number info
419
	* @return Flight departure and arrival airports and time
420
	*/
421
	public function getIberia($callsign, $date = 'NOW') {
422
		$Common = new Common();
423
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
424
		$check_date = new Datetime($date);
425
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
426
		$url = "https://www.iberia.com/web/flightDetail.do";
427
		$post = array('numvuelo' => $numvol,'fecha' => $check_date->format('Ymd'),'airlineID' => 'IB');
428
		$data = $Common->getData($url,'post',$post);
429
		if ($data != '') {
430
			$table = $Common->table2array($data);
431
			//print_r($table);
432
			if (count($table) > 0) {
433
				$flight = $table;
434
				preg_match('/([A-Z]{3})/',$flight[3][0],$DepartureAirportIataMatch);
435
				preg_match('/([A-Z]{3})/',$flight[5][0],$ArrivalAirportIataMatch);
436
				$DepartureAirportIata = $DepartureAirportIataMatch[0];
437
				$ArrivalAirportIata = $ArrivalAirportIataMatch[0];
438
				$departureTime = substr(trim(str_replace(' lunes','',str_replace('&nbsp;','',$flight[3][2]))),0,5);
439
				$arrivalTime = trim(str_replace(' lunes','',str_replace('&nbsp;','',$flight[5][1])));
440
				if ($arrivalTime == 'Hora estimada de llegada') {
441
					$arrivalTime = substr(trim(str_replace(' lunes','',str_replace('&nbsp;','',$flight[5][2]))),0,5);
442
				} else $arrivalTime = substr($arrivalTime,0,5);
443
				return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_iberia');
444
			}
445
		}
446
		return array();
447
	}
448
449
	/**
450
	* Get flight info from Star Alliance
451
	* @param String $callsign The callsign
452
	* @param String $date date we want flight number info
453
	* @return Flight departure and arrival airports and time
454
	*/
455
456
	private function getStarAlliance($callsign, $date = 'NOW',$carrier = '') {
457
		$Common = new Common();
458
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
459
		$check_date = new Datetime($date);
460
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
461
		$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');
462
		$data = $Common->getData($url);
463
		if ($data != '') {
464
			$table = $Common->table2array($data);
465
			if (count($table) > 0) {
466
				$flight = $table;
467
				//print_r($table);
468
				if (isset($flight[25]) && isset($flight[29])) {
469
					preg_match('/([A-Z]{3})/',$flight[25][1],$DepartureAirportIataMatch);
470
					preg_match('/([A-Z]{3})/',$flight[25][3],$ArrivalAirportIataMatch);
471
					$DepartureAirportIata = $DepartureAirportIataMatch[0];
472
					$ArrivalAirportIata = $ArrivalAirportIataMatch[0];
473
					$departureTime = substr(trim(str_replace('Scheduled: ','',$flight[29][0])),0,5);
474
					$arrivalTime = substr(trim(str_replace('Scheduled: ','',$flight[29][1])),0,5);
475
					return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_staralliance');
476
				} else return array();
477
			}
478
			
479
480
		}
481
		return array();
482
	}
483
484
485
	/**
486
	* Get flight info from Alitalia
487
	* @param String $callsign The callsign
488
	* @param String $date date we want flight number info
489
	* @return Flight departure and arrival airports and time
490
	*/
491
	private function getAlitalia($callsign, $date = 'NOW') {
492
		$Common = new Common();
493
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
494
		$check_date = new Datetime($date);
495
		$url= "http://booking.alitalia.com/FlightStatus/fr_fr/FlightInfo?Brand=az&NumeroVolo=".$numvol."&DataCompleta=".$check_date->format('d/m/Y');
496
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
497
		$data = $Common->getData($url);
498
		if ($data != '') {
499
			$table = $Common->text2array($data);
500
			$DepartureAirportIata = '';
501
			$ArrivalAirportIata = '';
502
			$departureTime = $table[4];
503
			$arrivalTime = $table[5];
504
			return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_alitalia');
505
		}
506
	}
507
508
	/**
509
	* Get flight info from Brussels airlines
510
	* @param String $callsign The callsign
511
	* @param String $date date we want flight number info
512
	* @return Flight departure and arrival airports and time
513
	*/
514
	private function getBrussels($callsign, $date = 'NOW') {
515
		$Common = new Common();
516
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
517
		$check_date = new Datetime($date);
518
		$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";
519
		//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";
520
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
521
		$data = $Common->getData($url);
522
		if ($data != '') {
523
		    //echo $data;
524
		    $parsed_json = json_decode($data);
525
		    if (isset($parsed_json[0]->FromAirportCode)) {
526
			$DepartureAirportIata = $parsed_json[0]->FromAirportCode;
527
			$ArrivalAirportIata = $parsed_json[0]->ToAirportCode;
528
			$departureTime = date('H:i',strtotime($parsed_json[0]->ScheduledDepatureDate));
529
			$arrivalTime = date('H:i',strtotime($parsed_json[0]->ScheduledArrivalDate));
530
			return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_brussels');
531
		    }
532
		}
533
	}
534
535
	/**
536
	* Get flight info from FlightRadar24
537
	* @param String $callsign The callsign
538
	* @param String $date date we want flight number info
539
	* @return Flight departure and arrival airports and time
540
	*/
541
/*
542
	public function getFlightRadar24($callsign, $date = 'NOW') {
543
		$Common = new Common();
544
		$url= "http://arn.data.fr24.com/zones/fcgi/feed.js?flight=".$callsign;
545
		$data = $Common->getData($url);
546
		if ($data != '') {
547
			$parsed_json = get_object_vars(json_decode($data));
548
			if (count($parsed_json) > 2) {
549
				$info = array_splice($parsed_json,2,1);
550
				$fr24id = current(array_keys($info));
551
				$urldata = "http://krk.data.fr24.com/_external/planedata_json.1.4.php?f=".$fr24id;
552
				$datapl = $Common->getData($urldata);
553
				if ($datapl != '') {
554
					$parsed_jsonpl = json_decode($datapl);
555
					if (isset($parsed_jsonpl->from_iata)) {
556
						$DepartureAirportIata = $parsed_jsonpl->from_iata;
557
						$ArrivalAirportIata = $parsed_jsonpl->to_iata;
558
						$departureTime = date('H:i',$parsed_jsonpl->dep_schd);
559
						$arrivalTime = date('H:i',$parsed_jsonpl->arr_schd);
560
						return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_flightradar24');
561
					}
562
				}
563
			}
564
		}
565
		return array();
566
	}
567
  */
568
	/**
569
	* Get flight info from Lufthansa
570
	* @param String $callsign The callsign
571
	* @param String $date date we want flight number info
572
	* @return Flight departure and arrival airports and time
573
	*/
574
575
/*	private function getLufthansa($callsign, $date = 'NOW') {
576
		$Common = new Common();
577
		*/
578
		//$numvol = preg_replace('/^[A-Z]*/','',$callsign);
579
/*
580
		$url= "http://www.lufthansa.com/fr/fr/Arrivees-Departs-fonction";
581
		$check_date = new Datetime($date);
582
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
583
584
		$post = array('flightNumber' => $numvol, 'date' => $check_date->format('Y-m-d'),'time' => '12:00','timezoneOffset' => '0','selection' => '0','arrivalDeparture' => 'D');
585
		$data = $Common->getData($url,'post',$post);
586
		if ($data != '') {
587
			$table = $Common->table2array($data);
588
			$departureTime = trim(str_replace($check_date->format('d.m.Y'),'',$table[25][3]));
589
		}
590
591
		$post = array('flightNumber' => $numvol, 'date' => $check_date->format('Y-m-d'),'time' => '12:00','timezoneOffset' => '0','selection' => '0','arrivalDeparture' => 'A');
592
		$data = $Common->getData($url,'post',$post);
593
		if ($data != '') {
594
			$table = $Common->table2array($data);
595
			$arrivalTime = trim(str_replace($check_date->format('d.m.Y'),'',$table[25][3]));
596
		}
597
		return array('DepartureAirportIATA' => '','DepartureTime' => $departureTime,'ArrivalAirportIATA' => '','ArrivalTime' => $arrivalTime,'Source' => 'website_lufthansa');
598
	}
599
  */
600
	/**
601
	* Get flight info from flytap
602
	* @param String $callsign The callsign
603
	* @return Flight departure and arrival airports and time
604
	*/
605
	private function getFlyTap($callsign) {
606
		$Common = new Common();
607
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
608
		$url= "http://www.flytap.com/France/fr/PlanifierEtReserver/Outils/DepartsEtArrivees";
609
		//$check_date = new Datetime($date);
610
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
611
		$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');
612
		$data = $Common->getData($url,'post',$post);
613
		if ($data != '') {
614
			$table = $Common->table2array($data);
615
			$departureTime = trim(substr($table[15][0],0,5));
616
			$arrivalTime = trim(substr($table[35][0],0,5));
617
			preg_match('/([A-Z]{3})/',$table[11][0],$DepartureAirportIataMatch);
618
			preg_match('/([A-Z]{3})/',$table[31][0],$ArrivalAirportIataMatch);
619
			$DepartureAirportIata = $DepartureAirportIataMatch[0];
620
			$ArrivalAirportIata = $ArrivalAirportIataMatch[0];
621
			return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_flytap');
622
		}
623
		return array();
624
	}
625
626
	/**
627
	* Get flight info from flightmapper
628
	* @param String $callsign The callsign
629
	* @return Flight departure and arrival airports and time
630
	*/
631
	public function getFlightMapper($callsign) {
632
		$Common = new Common();
633
		$airline_icao = '';
634
		if (!is_numeric(substr($callsign, 0, 3)))
635
		{
636
			if (is_numeric(substr(substr($callsign, 0, 3), -1, 1))) {
637
				$airline_icao = substr($callsign, 0, 2);
638
			} elseif (is_numeric(substr(substr($callsign, 0, 4), -1, 1))) {
639
				$airline_icao = substr($callsign, 0, 3);
640
			} 
641
		}
642
		if ($airline_icao == '') return array();
643
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
644
		$url= "http://info.flightmapper.net/flight/".$airline_icao.'_'.$numvol;
645
		//$check_date = new Datetime($date);
646
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
647
		$data = $Common->getData($url);
648
		if ($data != '') {
649
			$table = $Common->table2array($data);
650
			if (isset($table[5][0])) {
651
				$sched = $table[5][0];
652
				$dhour = '';
653
				$darr = '';
654
				$ahour = '';
655
				$aarr = '';
656
				$n = sscanf($sched,'%*s %5[0-9:] %*[^()] (%3[A-Z]) %5[0-9:] %*[^()] (%3[A-Z])',$dhour,$darr,$ahour,$aarr);
657
				if ($n == 7) {
658
				    $departureTime = $dhour;
659
				    $arrivalTime = $ahour;
660
				    $DepartureAirportIata = str_replace(array('(',')'),'',$darr);
661
				    $ArrivalAirportIata = str_replace(array('(',')'),'',$aarr);
662
				    return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_flightmapper');
663
				}
664
			}
665
		}
666
		return array();
667
	}
668
669
	/**
670
	* Get flight info from flightaware
671
	* @param String $callsign The callsign
672
	* @return Flight departure and arrival airports and time
673
	*/
674
	public function getFlightAware($callsign) {
675
		$Common = new Common();
676
		/*
677
		if (!is_numeric(substr($callsign, 0, 3)))
678
		{
679
			if (is_numeric(substr(substr($callsign, 0, 3), -1, 1))) {
680
				$airline_icao = substr($callsign, 0, 2);
681
			} elseif (is_numeric(substr(substr($callsign, 0, 4), -1, 1))) {
682
				$airline_icao = substr($callsign, 0, 3);
683
			} 
684
		}
685
		*/
686
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
687
		$url= "http://fr.flightaware.com/live/flight/".$callsign;
688
		//$check_date = new Datetime($date);
689
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
690
		$data = $Common->getData($url);
691
		if ($data != '') {
692
			$table = $Common->table2array($data);
693
			if (isset($table[11][0])) {
694
				$departureTime = str_replace('h',':',substr($table[5][0],0,5));
695
				$arrivalTime = str_replace('h',':',substr($table[5][1],0,5));
696
				echo $table[3][0];
697
				sscanf($table[3][0],'%*[^(] (%3[A-Z] / %*4[A-Z])',$DepartureAirportIata);
698
				sscanf($table[3][1],'%*[^(] (%3[A-Z] / %*4[A-Z])',$ArrivalAirportIata);
699
				return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_flightaware');
700
			}
701
		}
702
		return array();
703
	}
704
705
	/**
706
	* Get flight info from CostToTravel
707
	* @param String $callsign The callsign
708
	* @return Flight departure and arrival airports and time
709
	*/
710
	public function getCostToTravel($callsign) {
711
		$Common = new Common();
712
		$url= "http://www.costtotravel.com/flight-number/".$callsign;
713
		//$check_date = new Datetime($date);
714
		//if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
715
		$data = $Common->getData($url);
716
		if ($data != '') {
717
			$table = $Common->table2array($data);
718
			//print_r($table);
719
			if (isset($table[11][1])) {
720
				$departureTime = substr($table[11][1],0,5);
721
				$arrivalTime = substr($table[17][1],0,5);
722
				$DepartureAirportIata = substr($table[13][1],0,3);
723
				$ArrivalAirportIata = substr($table[15][1],0,3);
724
				return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_costtotravel');
725
			}
726
		}
727
		return array();
728
	}
729
730
	/**
731
	* Get flight info from Air Canada
732
	* @param String $callsign The callsign
733
	* @param String $date date we want flight number info
734
	* @return Flight departure and arrival airports and time
735
	*/
736
	private function getAirCanada($callsign,$date = 'NOW') {
737
		$Common = new Common();
738
		date_default_timezone_set('UTC');
739
		$check_date = new Datetime($date);
740
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
741
		$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";
742
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
743
		$data = $Common->getData($url);
744
		$dom = new DomDocument();
745
		$dom->loadXML($data);
746
		if ($dom->getElementsByTagName('DepartureStationInfo')->length == 0) return array();
747
		$departure = $dom->getElementsByTagName('DepartureStationInfo')->item(0);
748
		if (isset($departure->getElementsByTagName('Airport')->item(0)->firstChild->nodeValue)) {
749
			$DepartureAirportIata = $departure->getElementsByTagName('Airport')->item(0)->firstChild->nodeValue;
750
			$departureTime = date('H:i',strtotime($departure->getElementsByTagName('ScheduledTime')->item(0)->firstChild->nodeValue));
751
			$arrival = $dom->getElementsByTagName('ArrivalStationInfo')->item(0);
752
			$ArrivalAirportIata = $arrival->getElementsByTagName('Airport')->item(0)->firstChild->nodeValue;
753
			$arrivalTime = date('H:i',strtotime($arrival->getElementsByTagName('ScheduledTime')->item(0)->firstChild->nodeValue));
754
			return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_aircanada');
755
		} else return array();
756
	}
757
758
	/**
759
	* Get flight info from Vietnam Airlines
760
	* @param String $callsign The callsign
761
	* @param String $date date we want flight number info
762
	* @return Flight departure and arrival airports and time
763
	*/
764
	private function getVietnamAirlines($callsign, $date = 'NOW') {
765
		$Common = new Common();
766
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
767
		$check_date = new Datetime($date);
768
		$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."&";
769
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
770
		$data = $Common->getData($url);
771
		if ($data != '') {
772
			$table = $Common->table2array($data);
773
			$flight = $table;
774
			preg_match('/([A-Z]{3})/',$flight[3][0],$DepartureAirportIataMatch);
775
			preg_match('/([A-Z]{3})/',$flight[21][0],$ArrivalAirportIataMatch);
776
			$DepartureAirportIata = $DepartureAirportIataMatch[0];
777
			$ArrivalAirportIata = $ArrivalAirportIataMatch[0];
778
			$departureTime = $flight[5][1];
779
			$arrivalTime = $flight[23][1];
780
			return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_vietnamairlines');
781
		}
782
	}
783
784
	/**
785
	* Get flight info from Air Berlin
786
	* @param String $callsign The callsign
787
	* @param String $date date we want flight number info
788
	* @param String $carrier airline code
789
	* @return Flight departure and arrival airports and time
790
	*/
791
	private function getAirBerlin($callsign, $date = 'NOW',$carrier = 'AB') {
792
		$Common = new Common();
793
		date_default_timezone_set('UTC');
794
		//AB = airberlin, HG/NLY = NIKI, 4T/BHP = Belair 
795
		$numvol = preg_replace('/^[A-Z]*/','',$callsign);
796
		$check_date = new Datetime($date);
797
		$url= "http://www.airberlin.com/en-US/site/aims.php";
798
		if (!filter_var($numvol,FILTER_VALIDATE_INT)) return array();
799
		$post = array('type' => 'departure','searchFlightNo' => '1','requestsent' => 'true', 'flightno' => $numvol,'date' => $check_date->format('Y-m-d'),'carrier' => $carrier);
800
		$data = $Common->getData($url,'post',$post);
801
		//echo $data;
802
		$DepartureAirportIata = '';
803
		$ArrivalAirportIata = '';
804
		
805
		if ($data != '') {
806
			$table = $Common->table2array($data);
807
			$flight = $table;
808
			if (isset($flight[5][4])) $departureTime = $flight[5][4];
809
			else $departureTime = '';
810
			if (isset($flight[5][2])) $departureAirport = $flight[5][2];
811
			else $departureAirport = '';
812
		} else return array();
813
		$post = array('type' => 'arrival','searchFlightNo' => '1','requestsent' => 'true', 'flightno' => $numvol,'date' => $check_date->format('Y-m-d'),'carrier' => 'AB');
814
		$data = $Common->getData($url,'post',$post);
815
		if ($data != '') {
816
			$table = $Common->table2array($data);
817
			$flight = $table;
818
			if (isset($flight[5][4])) {
819
			    $arrivalTime = $flight[5][4];
820
			    $arrivalAirport = $flight[5][3];
821
			} else {
822
			    $arrivalTime = '';
823
			    $arrivalAirport = '';
824
			}
825
		} else return array();
826
		$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';
827
		$json = $Common->getData($url);
828
		if ($json == '') return array();
829
		$parsed_json = json_decode($json);
830
		$airports = $parsed_json->{'suggestList'};
831
		if (count($airports) > 0) {
832
			foreach ($airports as $airinfo) {
833
				if ($airinfo->{'name'} == $departureAirport) {
834
					$DepartureAirportIata = $airinfo->{'code'};
835
				}
836
				if ($airinfo->{'name'} == $arrivalAirport) {
837
					$ArrivalAirportIata = $airinfo->{'code'};
838
				}
839
			}
840
		}
841
		if (isset($DepartureAirportIata)) {
842
			return array('DepartureAirportIATA' => $DepartureAirportIata,'DepartureTime' => $departureTime,'ArrivalAirportIATA' => $ArrivalAirportIata,'ArrivalTime' => $arrivalTime,'Source' => 'website_airberlin');
843
		} else return array();
844
	}
845
846
847
	
848
	public function fetchSchedule($ident,$date = 'NOW') {
849
		global $globalSchedulesSources, $globalSchedulesFetch;
850
		//$Common = new Common();
851
		if (!$globalSchedulesFetch) return array();
852
		$airline_icao = '';
853
		if (!is_numeric(substr($ident, 0, 3)))
854
		{
855
			if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
856
				$airline_icao = substr($ident, 0, 2);
857
			} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
858
				$airline_icao = substr($ident, 0, 3);
859
			} 
860
		}
861
		if ($airline_icao != '') {
862
			switch ($airline_icao) {
863
/*
864
				// Adria Airways
865
				case "ADR":
866
				case "JP":
867
					return Schedule->getStarAlliance($ident,$date,'JP');
868
					break;
869
				// Aegean Airlines
870
				case "AEE":
871
				case "A3":
872
					return Schedule->getStarAlliance($ident,$date,'A3');
873
					break;
874
				// Air Canada
875
				case "ACA":
876
				case "AC":
877
					return Schedule->getStarAlliance($ident,$date,'AC');
878
					break;
879
				// Air China
880
				case "CCA":
881
				case "CA":
882
					return Schedule->getStarAlliance($ident,$date,'CA');
883
					break;
884
				// Air India
885
				case "AIC":
886
				case "AI":
887
					return Schedule->getStarAlliance($ident,$date,'AI');
888
					break;
889
				// Air New Zealand
890
				case "ANZ":
891
				case "NZ":
892
					return Schedule->getStarAlliance($ident,$date,'NZ');
893
					break;
894
				// All Nippon Airways
895
				case "ANA":
896
				case "NH":
897
					return Schedule->getStarAlliance($ident,$date,'NH');
898
					break;
899
				// Asiana Airlines
900
				case "AAR":
901
				case "OZ":
902
					return Schedule->getStarAlliance($ident,$date,'OZ');
903
					break;
904
				// Austrian
905
				case "AUA":
906
				case "OS":
907
					return Schedule->getStarAlliance($ident,$date,'OS');
908
					break;
909
				// Avianca
910
				case "AVA":
911
				case "AV":
912
					return Schedule->getStarAlliance($ident,$date,'AV');
913
					break;
914
*/
915
				// Brussels Airlines
916
				case "BEL":
917
				case "SN":
918
					return $this->getBrussels($ident,$date);
919
/*
920
				// Copa Airlines
921
				case "CMP":
922
				case "CM":
923
					return Schedule->getStarAlliance($ident,$date,'CM');
924
					break;
925
				// Croatia Airlines
926
				case "CTN":
927
				case "OU":
928
					return Schedule->getStarAlliance($ident,$date,'OU');
929
					break;
930
				// Egyptair
931
				case "MSR":
932
				case "MS":
933
					return Schedule->getStarAlliance($ident,$date,'MS');
934
					break;
935
				// Ethiopian Airlines
936
				case "ETH":
937
				case "ET":
938
					return Schedule->getStarAlliance($ident,$date,'ET');
939
					break;
940
				// Eva Air
941
				case "EVA":
942
				case "BR":
943
					return Schedule->getStarAlliance($ident,$date,'BR');
944
					break;
945
				// LOT Polish Airlines
946
				case "LOT":
947
				case "LO":
948
					return Schedule->getStarAlliance($ident,$date,'LO');
949
					break;
950
				// Scandinavian Airlines
951
				case "SAS":
952
				case "SK":
953
					return Schedule->getStarAlliance($ident,$date,'SK');
954
					break;
955
				// Shenzhen Airlines
956
				case "CSZ":
957
				case "ZH":
958
					return Schedule->getStarAlliance($ident,$date,'ZH');
959
					break;
960
				// Singapore Airlines
961
				case "SIA":
962
				case "SQ":
963
					return Schedule->getStarAlliance($ident,$date,'SQ');
964
					break;
965
				// South African Airways
966
				case "SAA":
967
				case "SA":
968
					return Schedule->getStarAlliance($ident,$date,'SA');
969
					break;
970
*/
971
				// SWISS
972
				case "SWR":
973
				case "LX":
974
					return $this->getSwiss($ident);
975
976
				/*
977
				// TAP Portugal
978
				case "TAP":
979
				case "TP":
980
					return $this->getFlyTap($ident,$date);
981
					break;
982
				*/
983
/*
984
				// Thai Airways International
985
				case "THA":
986
				case "TG":
987
					return Schedule->getStarAlliance($ident,$date,'TG');
988
					break;
989
				// Turkish Airlines
990
				case "THY":
991
				case "TK":
992
					return Schedule->getStarAlliance($ident,$date,'TK');
993
					break;
994
				// United
995
				case "UAL":
996
				case "UA":
997
					return Schedule->getStarAlliance($ident,$date,'UA');
998
					break;
999
*/
1000
				// Air France
1001
				case "AF":
1002
				case "AFR":
1003
					return $this->getAirFrance($ident,$date,'AF');
1004
				// HOP
1005
				case "A5":
1006
				case "HOP":
1007
					return $this->getAirFrance($ident,$date,'A5');
1008
				// EasyJet
1009
				case "U2":
1010
				case "DS":
1011
				case "EZY":
1012
				case "EZS":
1013
					return $this->getEasyJet($ident,$date);
1014
				// Ryanair
1015
				case "FR":
1016
				case "RYR":
1017
					return $this->getRyanair($ident);
1018
				// British Airways
1019
				case "BA":
1020
				case "SHT":
1021
				case "BAW":
1022
					return $this->getBritishAirways($ident);
1023
				// Tunisair
1024
				case "TUI":
1025
				case "TAR":
1026
				case "TU":
1027
					return $this->getTunisair($ident);
1028
				// Vueling
1029
				case "VLG":
1030
				case "VY":
1031
					return $this->getVueling($ident);
1032
				// Alitalia
1033
				case "AZ":
1034
				case "AZA":
1035
					return $this->getAlitalia($ident);
1036
				// Air Canada
1037
				case "ACA":
1038
				case "AC":
1039
					return $this->getAirCanada($ident);
1040
				// Lufthansa
1041
				case "DLH":
1042
				case "LH":
1043
					return $this->getLufthansa($ident);
1044
				/*
1045
				// Transavia
1046
				case "TRA":
1047
				case "HV":
1048
					return $this->getTransavia($ident);
1049
					break;
1050
				*/
1051
/*
1052
				case "DLH":
1053
				case "LH":
1054
					return $this->getStarAlliance($ident,$date,'LH');
1055
					break;
1056
*/
1057
				// Iberia
1058
				case "IBE":
1059
				case "IB":
1060
					return $this->getIberia($ident);
1061
				// Vietnam Airlines
1062
				case "HVN":
1063
					return $this->getVietnamAirlines($ident,$date);
1064
				// Air Berlin
1065
				case "AB":
1066
				case "BER":
1067
					return $this->getAirBerlin($ident,$date,'AB');
1068
				// NIKI
1069
				case "HG":
1070
				case "NLY":
1071
					return $this->getAirBerlin($ident,$date,'HG');
1072
				// BelAir
1073
				case "4T":
1074
				case "BHP":
1075
					return $this->getAirBerlin($ident,$date,'4T');
1076
				default:
1077
					// Randomly use a generic function to get hours
1078
					if (strlen($airline_icao) == 2) {
1079
						if (!isset($globalSchedulesSources)) $globalSchedulesSources = array('flightmapper','costtotravel','flightradar24','flightaware');
1080
						if (count($globalSchedulesSources) > 0) {
1081
							$rand = mt_rand(0,count($globalSchedulesSources)-1);
1082
							$source = $globalSchedulesSources[$rand];
1083
							if ($source == 'flightmapper') return $this->getFlightMapper($ident);
1084
							elseif ($source == 'costtotravel') return $this->getCostToTravel($ident);
1085
							//elseif ($source == 'flightradar24') return $this->getFlightRadar24($ident,$date);
1086
							elseif ($source == 'flightaware') return $this->getFlightAware($ident);
1087
						}
1088
					}
1089
			}
1090
		}
1091
	        return array();
1092
	}
1093
}
1094
1095
1096
//$Schedule = new Schedule();
1097
1098
//print_r($Schedule->fetchSchedule('HV5661'));
1099
//print_r($Schedule->getFlightAware('AF1179'));
1100
//print_r($Schedule->getBritishAirways('BAW551'));
1101
//print_r($Schedule->getLufthansa('LH551'));
1102
//print_r($Schedule->getTunisair('TU203'));
1103
//print_r($Schedule->getTransavia('TRA598'));
1104
1105
?>