This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | /** |
||
3 | * This class is part of FlightAirmap. It's used to get Image |
||
4 | * |
||
5 | * Copyright (c) Ycarus (Yannick Chabanois) at Zugaina <[email protected]> |
||
6 | * Licensed under AGPL license. |
||
7 | * For more information see: https://www.flightairmap.com/ |
||
8 | */ |
||
9 | require_once(dirname(__FILE__).'/class.Spotter.php'); |
||
10 | require_once(dirname(__FILE__).'/class.Common.php'); |
||
11 | require_once(dirname(__FILE__).'/settings.php'); |
||
12 | |||
13 | class Image { |
||
14 | public $db; |
||
15 | |||
16 | /* |
||
17 | * Initialize connection to DB |
||
18 | */ |
||
19 | public function __construct($dbc = null) { |
||
20 | $Connection = new Connection($dbc); |
||
21 | $this->db = $Connection->db(); |
||
22 | if ($this->db === null) die('Error: No DB connection. (Image)'); |
||
23 | } |
||
24 | |||
25 | /** |
||
26 | * Gets the images based on the aircraft registration |
||
27 | * |
||
28 | * @param $registration |
||
29 | * @param string $aircraft_icao |
||
30 | * @param string $airline_icao |
||
31 | * @return array the images list |
||
32 | */ |
||
33 | public function getSpotterImage($registration,$aircraft_icao = '', $airline_icao = '') |
||
34 | { |
||
35 | $registration = filter_var($registration,FILTER_SANITIZE_STRING); |
||
36 | $aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING); |
||
37 | $airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING); |
||
38 | $reg = $registration; |
||
39 | if (($reg == '' || $reg == 'NA') && $aircraft_icao != '') $reg = $aircraft_icao.$airline_icao; |
||
40 | $reg = trim($reg); |
||
41 | $query = "SELECT spotter_image.image, spotter_image.image_thumbnail, spotter_image.image_source, spotter_image.image_source_website,spotter_image.image_copyright, spotter_image.registration |
||
42 | FROM spotter_image |
||
43 | WHERE spotter_image.registration = :registration LIMIT 1"; |
||
44 | $sth = $this->db->prepare($query); |
||
45 | $sth->execute(array(':registration' => $reg)); |
||
46 | $result = $sth->fetchAll(PDO::FETCH_ASSOC); |
||
47 | if (!empty($result)) return $result; |
||
48 | elseif ($registration != '' && ($aircraft_icao != '' || $airline_icao != '')) return $this->getSpotterImage('',$aircraft_icao,$airline_icao); |
||
49 | else return array(); |
||
50 | } |
||
51 | |||
52 | /** |
||
53 | * Gets the images based on the ship name |
||
54 | * |
||
55 | * @param $mmsi |
||
56 | * @param string $imo |
||
57 | * @param string $name |
||
58 | * @param string $type_name |
||
59 | * @return array the images list |
||
60 | */ |
||
61 | public function getMarineImage($mmsi,$imo = '',$name = '',$type_name = '') |
||
62 | { |
||
63 | global $globalMarineImagePics; |
||
64 | $mmsi = filter_var($mmsi,FILTER_SANITIZE_STRING); |
||
65 | $imo = filter_var($imo,FILTER_SANITIZE_STRING); |
||
66 | $name = filter_var($name,FILTER_SANITIZE_STRING); |
||
67 | $type_name = str_replace(''',"'",filter_var($type_name,FILTER_SANITIZE_STRING)); |
||
68 | if (isset($globalMarineImagePics) && !empty($globalMarineImagePics)) { |
||
69 | if ($type_name != '' && isset($globalMarineImagePics['type'][$type_name])) { |
||
70 | if (!isset($globalMarineImagePics['type'][$type_name]['image_thumbnail'])) { |
||
71 | $globalMarineImagePics['type'][$type_name]['image_thumbnail'] = $globalMarineImagePics['type'][$type_name]['image']; |
||
72 | } |
||
73 | return array($globalMarineImagePics['type'][$type_name]+array('image_thumbnail' => '','image' => '', 'image_copyright' => '','image_source' => '','image_source_website' => '')); |
||
74 | } |
||
75 | } |
||
76 | $name = trim($name); |
||
77 | if ($mmsi == '' && $imo == '' && $name == '') return array(); |
||
78 | $query = "SELECT marine_image.image, marine_image.image_thumbnail, marine_image.image_source, marine_image.image_source_website,marine_image.image_copyright, marine_image.mmsi, marine_image.imo, marine_image.name |
||
79 | FROM marine_image |
||
80 | WHERE marine_image.mmsi = :mmsi"; |
||
81 | $query_data = array(':mmsi' => $mmsi); |
||
82 | if ($imo != '') { |
||
83 | $query .= " AND marine_image.imo = :imo"; |
||
84 | $query_data = array_merge($query_data,array(':imo' => $imo)); |
||
85 | } |
||
86 | if ($name != '') { |
||
87 | $query .= " AND marine_image.name = :name"; |
||
88 | $query_data = array_merge($query_data,array(':name' => $name)); |
||
89 | } |
||
90 | $query .= " LIMIT 1"; |
||
91 | $sth = $this->db->prepare($query); |
||
92 | $sth->execute($query_data); |
||
93 | $result = $sth->fetchAll(PDO::FETCH_ASSOC); |
||
94 | return $result; |
||
95 | } |
||
96 | |||
97 | /** |
||
98 | * Gets the image copyright based on the Exif data |
||
99 | * |
||
100 | * @param $url |
||
101 | * @return String image copyright |
||
102 | */ |
||
103 | public function getExifCopyright($url) { |
||
104 | $exif = exif_read_data($url); |
||
105 | $copyright = ''; |
||
106 | if (isset($exif['COMPUTED']['copyright'])) $copyright = $exif['COMPUTED']['copyright']; |
||
107 | elseif (isset($exif['copyright'])) $copyright = $exif['copyright']; |
||
108 | if ($copyright != '') { |
||
109 | $copyright = str_replace('Copyright ','',$copyright); |
||
110 | $copyright = str_replace('© ','',$copyright); |
||
111 | $copyright = str_replace('(c) ','',$copyright); |
||
112 | } |
||
113 | return $copyright; |
||
114 | } |
||
115 | |||
116 | /** |
||
117 | * Adds the images based on the aircraft registration |
||
118 | * |
||
119 | * @param $registration |
||
120 | * @param string $aircraft_icao |
||
121 | * @param string $airline_icao |
||
122 | * @return String either success or error |
||
123 | */ |
||
124 | public function addSpotterImage($registration,$aircraft_icao = '', $airline_icao = '') |
||
125 | { |
||
126 | global $globalDebug,$globalAircraftImageFetch, $globalOffline; |
||
127 | if ((isset($globalAircraftImageFetch) && $globalAircraftImageFetch === FALSE) || (isset($globalOffline) && $globalOffline === TRUE)) return ''; |
||
128 | $registration = filter_var($registration,FILTER_SANITIZE_STRING); |
||
129 | $registration = trim($registration); |
||
130 | //getting the aircraft image |
||
131 | if ($globalDebug && $registration != '') echo 'Try to find an aircraft image for '.$registration.'...'; |
||
132 | elseif ($globalDebug && $aircraft_icao != '') echo 'Try to find an aircraft image for '.$aircraft_icao.'...'; |
||
133 | elseif ($globalDebug && $airline_icao != '') echo 'Try to find an aircraft image for '.$airline_icao.'...'; |
||
134 | $image_url = $this->findAircraftImage($registration,$aircraft_icao,$airline_icao); |
||
135 | if ($registration == '' && $aircraft_icao != '') $registration = $aircraft_icao.$airline_icao; |
||
136 | if ($image_url['original'] != '') { |
||
137 | if ($globalDebug) echo 'Found !'."\n"; |
||
138 | $query = "INSERT INTO spotter_image (registration, image, image_thumbnail, image_copyright, image_source,image_source_website) VALUES (:registration,:image,:image_thumbnail,:copyright,:source,:source_website)"; |
||
139 | try { |
||
140 | $sth = $this->db->prepare($query); |
||
141 | $sth->execute(array(':registration' => $registration,':image' => $image_url['original'],':image_thumbnail' => $image_url['thumbnail'], ':copyright' => $image_url['copyright'],':source' => $image_url['source'],':source_website' => $image_url['source_website'])); |
||
142 | } catch(PDOException $e) { |
||
143 | echo $e->getMessage()."\n"; |
||
144 | return "error"; |
||
145 | } |
||
146 | } elseif ($globalDebug) echo "Not found :'(\n"; |
||
147 | return "success"; |
||
148 | } |
||
149 | |||
150 | /** |
||
151 | * Adds the images based on the marine name |
||
152 | * |
||
153 | * @param $mmsi |
||
154 | * @param string $imo |
||
155 | * @param string $name |
||
156 | * @return String either success or error |
||
157 | */ |
||
158 | public function addMarineImage($mmsi,$imo = '',$name = '') |
||
159 | { |
||
160 | global $globalDebug,$globalMarineImageFetch, $globalOffline; |
||
161 | if ((isset($globalMarineImageFetch) && !$globalMarineImageFetch) || (isset($globalOffline) && $globalOffline === TRUE)) return ''; |
||
162 | $mmsi = filter_var($mmsi,FILTER_SANITIZE_STRING); |
||
163 | $imo = filter_var($imo,FILTER_SANITIZE_STRING); |
||
164 | $name = filter_var($name,FILTER_SANITIZE_STRING); |
||
165 | $name = trim($name); |
||
166 | $Marine = new Marine($this->db); |
||
167 | if ($imo == '' || $name == '') { |
||
168 | $identity = $Marine->getIdentity($mmsi); |
||
169 | if (isset($identity[0]['mmsi'])) { |
||
170 | $imo = $identity[0]['imo']; |
||
171 | if ($identity[0]['ship_name'] != '') $name = $identity[0]['ship_name']; |
||
172 | } |
||
173 | } |
||
174 | unset($Marine); |
||
175 | |||
176 | //getting the aircraft image |
||
177 | if ($globalDebug && $name != '') echo 'Try to find an vessel image for '.$name.'...'; |
||
178 | $image_url = $this->findMarineImage($mmsi,$imo,$name); |
||
179 | if ($image_url['original'] != '') { |
||
180 | if ($globalDebug) echo 'Found !'."\n"; |
||
181 | $query = "INSERT INTO marine_image (mmsi,imo,name, image, image_thumbnail, image_copyright, image_source,image_source_website) VALUES (:mmsi,:imo,:name,:image,:image_thumbnail,:copyright,:source,:source_website)"; |
||
182 | try { |
||
183 | $sth = $this->db->prepare($query); |
||
184 | $sth->execute(array(':mmsi' => $mmsi,':imo' => $imo,':name' => $name,':image' => $image_url['original'],':image_thumbnail' => $image_url['thumbnail'], ':copyright' => $image_url['copyright'],':source' => $image_url['source'],':source_website' => $image_url['source_website'])); |
||
185 | } catch(PDOException $e) { |
||
186 | echo $e->getMessage()."\n"; |
||
187 | return "error"; |
||
188 | } |
||
189 | } elseif ($globalDebug) echo "Not found :'(\n"; |
||
190 | return "success"; |
||
191 | } |
||
192 | |||
193 | /** |
||
194 | * Gets the aircraft image |
||
195 | * |
||
196 | * @param String $aircraft_registration the registration of the aircraft |
||
197 | * @param string $aircraft_icao |
||
198 | * @param string $airline_icao |
||
199 | * @return array the aircraft thumbnail, orignal url and copyright |
||
200 | */ |
||
201 | public function findAircraftImage($aircraft_registration, $aircraft_icao = '', $airline_icao = '') |
||
202 | { |
||
203 | global $globalAircraftImageSources, $globalIVAO, $globalAircraftImageCheckICAO, $globalVA; |
||
204 | $Spotter = new Spotter($this->db); |
||
205 | if (!isset($globalIVAO)) $globalIVAO = FALSE; |
||
206 | $aircraft_registration = filter_var($aircraft_registration,FILTER_SANITIZE_STRING); |
||
207 | if ($aircraft_registration != '' && $aircraft_registration != 'NA' && (!isset($globalVA) || $globalVA !== TRUE)) { |
||
208 | if (strpos($aircraft_registration,'/') !== false) return array('thumbnail' => '','original' => '', 'copyright' => '','source' => '','source_website' => ''); |
||
209 | $aircraft_registration = urlencode(trim($aircraft_registration)); |
||
210 | $aircraft_info = $Spotter->getAircraftInfoByRegistration($aircraft_registration); |
||
211 | if (isset($aircraft_info[0]['aircraft_name'])) $aircraft_name = $aircraft_info[0]['aircraft_name']; |
||
212 | else $aircraft_name = ''; |
||
213 | if (isset($aircraft_info[0]['aircraft_icao'])) $aircraft_name = $aircraft_info[0]['aircraft_icao']; |
||
214 | else $aircraft_icao = ''; |
||
215 | if (isset($aircraft_info[0]['airline_icao'])) $airline_icao = $aircraft_info[0]['airline_icao']; |
||
216 | else $airline_icao = ''; |
||
217 | } elseif ($aircraft_icao != '') { |
||
218 | $aircraft_info = $Spotter->getAllAircraftInfo($aircraft_icao); |
||
219 | if (isset($aircraft_info[0]['type'])) $aircraft_name = $aircraft_info[0]['type']; |
||
220 | else $aircraft_name = ''; |
||
221 | $aircraft_registration = $aircraft_icao; |
||
222 | } else return array('thumbnail' => '','original' => '', 'copyright' => '', 'source' => '','source_website' => ''); |
||
223 | unset($Spotter); |
||
224 | if (!isset($globalAircraftImageSources)) $globalAircraftImageSources = array('ivaomtl','wikimedia','airportdata','deviantart','flickr','bing','jetphotos','planepictures','planespotters'); |
||
225 | foreach ($globalAircraftImageSources as $source) { |
||
226 | $source = strtolower($source); |
||
227 | if ($source == 'ivaomtl' && $globalIVAO && $aircraft_icao != '' && $airline_icao != '') $images_array = $this->fromIvaoMtl('aircraft',$aircraft_icao,$airline_icao); |
||
228 | if ($source == 'planespotters' && !$globalIVAO && extension_loaded('simplexml')) $images_array = $this->fromPlanespotters('aircraft',$aircraft_registration,$aircraft_name); |
||
229 | if ($source == 'flickr' && extension_loaded('simplexml')) $images_array = $this->fromFlickr('aircraft',$aircraft_registration,$aircraft_name); |
||
230 | if ($source == 'bing') $images_array = $this->fromBing('aircraft',$aircraft_registration,$aircraft_name); |
||
231 | if ($source == 'deviantart' && extension_loaded('simplexml')) $images_array = $this->fromDeviantart('aircraft',$aircraft_registration,$aircraft_name); |
||
232 | if ($source == 'wikimedia') $images_array = $this->fromWikimedia('aircraft',$aircraft_registration,$aircraft_name); |
||
233 | if ($source == 'jetphotos' && !$globalIVAO && class_exists("DomDocument")) $images_array = $this->fromJetPhotos('aircraft',$aircraft_registration,$aircraft_name); |
||
234 | if ($source == 'planepictures' && !$globalIVAO && class_exists("DomDocument")) $images_array = $this->fromPlanePictures('aircraft',$aircraft_registration,$aircraft_name); |
||
235 | if ($source == 'airportdata' && !$globalIVAO) $images_array = $this->fromAirportData('aircraft',$aircraft_registration,$aircraft_icao,$aircraft_name); |
||
236 | if ($source == 'customsources') $images_array = $this->fromCustomSource('aircraft',$aircraft_registration,$aircraft_name); |
||
237 | if (isset($images_array) && $images_array['original'] != '') return $images_array; |
||
238 | } |
||
239 | if ((!isset($globalAircraftImageCheckICAO) || $globalAircraftImageCheckICAO === TRUE) && isset($aircraft_icao)) return $this->findAircraftImage($aircraft_icao); |
||
240 | return array('thumbnail' => '','original' => '', 'copyright' => '','source' => '','source_website' => ''); |
||
241 | } |
||
242 | |||
243 | /** |
||
244 | * Gets the vessel image |
||
245 | * |
||
246 | * @param String $mmsi the vessel mmsi |
||
247 | * @param String $imo the vessel imo |
||
248 | * @param String $name the vessel name |
||
249 | * @return array the aircraft thumbnail, orignal url and copyright |
||
250 | * |
||
251 | */ |
||
252 | public function findMarineImage($mmsi,$imo = '',$name = '') |
||
253 | { |
||
254 | global $globalMarineImageSources; |
||
255 | $mmsi = filter_var($mmsi,FILTER_SANITIZE_STRING); |
||
256 | //$imo = filter_var($imo,FILTER_SANITIZE_STRING); |
||
257 | $name = filter_var($name,FILTER_SANITIZE_STRING); |
||
258 | $name = trim($name); |
||
259 | if (strlen($name) < 4) return array('thumbnail' => '','original' => '', 'copyright' => '', 'source' => '','source_website' => ''); |
||
260 | /* |
||
261 | $Marine = new Marine($this->db); |
||
262 | if ($imo == '' || $name == '') { |
||
263 | $identity = $Marine->getIdentity($mmsi); |
||
264 | if (isset($identity[0]['mmsi'])) { |
||
265 | $imo = $identity[0]['imo']; |
||
266 | $name = $identity[0]['ship_name']; |
||
267 | } |
||
268 | } |
||
269 | unset($Marine); |
||
270 | */ |
||
271 | if (!isset($globalMarineImageSources)) $globalMarineImageSources = array('wikimedia','deviantart','flickr','bing'); |
||
272 | foreach ($globalMarineImageSources as $source) { |
||
273 | $source = strtolower($source); |
||
274 | if ($source == 'flickr') $images_array = $this->fromFlickr('marine',$mmsi,$name); |
||
275 | if ($source == 'bing') $images_array = $this->fromBing('marine',$mmsi,$name); |
||
276 | if ($source == 'deviantart') $images_array = $this->fromDeviantart('marine',$mmsi,$name); |
||
277 | if ($source == 'wikimedia') $images_array = $this->fromWikimedia('marine',$mmsi,$name); |
||
278 | if ($source == 'customsources') $images_array = $this->fromCustomSource('marine',$mmsi,$name); |
||
279 | if (isset($images_array) && $images_array['original'] != '') return $images_array; |
||
280 | } |
||
281 | return array('thumbnail' => '','original' => '', 'copyright' => '','source' => '','source_website' => ''); |
||
282 | } |
||
283 | |||
284 | /** |
||
285 | * Gets the aircraft image from Planespotters |
||
286 | * |
||
287 | * @param String $aircraft_registration the registration of the aircraft |
||
288 | * @param String $aircraft_name type of the aircraft |
||
289 | * @return array the aircraft thumbnail, orignal url and copyright |
||
290 | * |
||
291 | */ |
||
292 | public function fromPlanespotters($type,$aircraft_registration, $aircraft_name='') { |
||
293 | $Common = new Common(); |
||
294 | // If aircraft registration is only number, also check with aircraft model |
||
295 | if (preg_match('/^[[:digit]]+$/',$aircraft_registration) && $aircraft_name != '') { |
||
296 | $url= 'http://www.planespotters.net/Aviation_Photos/search.php?tag='.$aircraft_registration.'&actype=s_'.urlencode($aircraft_name).'&output=rss'; |
||
297 | } else { |
||
298 | //$url= 'http://www.planespotters.net/Aviation_Photos/search.php?tag='.$airline_aircraft_type.'&output=rss'; |
||
299 | $url= 'http://www.planespotters.net/Aviation_Photos/search.php?reg='.$aircraft_registration.'&output=rss'; |
||
300 | } |
||
301 | $data = $Common->getData($url); |
||
302 | if (substr($data, 0, 5) != "<?xml") return array('thumbnail' => '','original' => '', 'copyright' => '','source' => '','source_website' => ''); |
||
303 | if ($xml = simplexml_load_string($data)) { |
||
304 | if (isset($xml->channel->item)) { |
||
305 | $image_url = array(); |
||
306 | $thumbnail_url = trim((string)$xml->channel->item->children('http://search.yahoo.com/mrss/')->thumbnail->attributes()->url); |
||
307 | $image_url['thumbnail'] = $thumbnail_url; |
||
308 | $image_url['original'] = str_replace('thumbnail','original',$thumbnail_url); |
||
309 | $image_url['copyright'] = trim((string)$xml->channel->item->children('http://search.yahoo.com/mrss/')->copyright); |
||
310 | $image_url['source_website'] = trim((string)$xml->channel->item->link); |
||
311 | $image_url['source'] = 'planespotters'; |
||
312 | return $image_url; |
||
313 | } |
||
314 | } |
||
315 | return array('thumbnail' => '','original' => '', 'copyright' => '','source' => '','source_website' => ''); |
||
316 | } |
||
317 | |||
318 | /** |
||
319 | * Gets the aircraft image from Deviantart |
||
320 | * |
||
321 | * @param $type |
||
322 | * @param String $registration the registration of the aircraft |
||
323 | * @param String $name type of the aircraft |
||
324 | * @return array the aircraft thumbnail, orignal url and copyright |
||
325 | */ |
||
326 | public function fromDeviantart($type,$registration, $name='') { |
||
327 | $Common = new Common(); |
||
328 | if ($type == 'aircraft') { |
||
329 | // If aircraft registration is only number, also check with aircraft model |
||
330 | if (preg_match('/^[[:digit]]+$/',$registration) && $name != '') { |
||
331 | $url= 'http://backend.deviantart.com/rss.xml?type=deviation&q='.$registration.'%20'.urlencode($name); |
||
332 | } else { |
||
333 | $url= 'http://backend.deviantart.com/rss.xml?type=deviation&q=aircraft%20'.$registration; |
||
334 | } |
||
335 | } elseif ($type == 'marine') { |
||
336 | $url= 'http://backend.deviantart.com/rss.xml?type=deviation&q=ship%20"'.urlencode($name).'"'; |
||
337 | } else { |
||
338 | $url= 'http://backend.deviantart.com/rss.xml?type=deviation&q="'.urlencode($name).'"'; |
||
339 | } |
||
340 | $data = $Common->getData($url); |
||
341 | if (substr($data, 0, 5) != "<?xml") return array('thumbnail' => '','original' => '', 'copyright' => '','source' => '','source_website' => ''); |
||
342 | if ($xml = simplexml_load_string($data)) { |
||
343 | if (isset($xml->channel->item->link)) { |
||
344 | $image_url = array(); |
||
345 | $thumbnail_url = trim((string)$xml->channel->item->children('http://search.yahoo.com/mrss/')->thumbnail->attributes()->url); |
||
346 | $image_url['thumbnail'] = $thumbnail_url; |
||
347 | $original_url = trim((string)$xml->channel->item->children('http://search.yahoo.com/mrss/')->content->attributes()->url); |
||
348 | $image_url['original'] = $original_url; |
||
349 | $image_url['copyright'] = str_replace('Copyright ','',trim((string)$xml->channel->item->children('http://search.yahoo.com/mrss/')->copyright)); |
||
350 | $image_url['source_website'] = trim((string)$xml->channel->item->link); |
||
351 | $image_url['source'] = 'deviantart'; |
||
352 | return $image_url; |
||
353 | } |
||
354 | } |
||
355 | return array('thumbnail' => '','original' => '', 'copyright' => '','source' => '','source_website' => ''); |
||
356 | } |
||
357 | |||
358 | /** |
||
359 | * Gets the aircraft image from JetPhotos |
||
360 | * |
||
361 | * @param String $aircraft_registration the registration of the aircraft |
||
362 | * @param String $aircraft_name type of the aircraft |
||
363 | * @return array the aircraft thumbnail, orignal url and copyright |
||
364 | * |
||
365 | */ |
||
366 | public function fromJetPhotos($type,$aircraft_registration, $aircraft_name='') { |
||
367 | $Common = new Common(); |
||
368 | $url= 'https://www.jetphotos.com/photo/keyword/'.$aircraft_registration; |
||
369 | $data = $Common->getData($url); |
||
370 | $dom = new DOMDocument(); |
||
371 | @$dom->loadHTML($data); |
||
0 ignored issues
–
show
|
|||
372 | $all_pics = array(); |
||
373 | foreach($dom->getElementsByTagName('img') as $image) { |
||
374 | $all_pics[] = $image->getAttribute('src'); |
||
375 | } |
||
376 | $all_authors = array(); |
||
377 | foreach($dom->getElementsByTagName('span') as $author) { |
||
378 | if (strpos($author->nodeValue, "By: ") !== false) { |
||
379 | $all_authors[] = $author->nodeValue; |
||
380 | } |
||
381 | } |
||
382 | $all_ref = array(); |
||
383 | foreach($dom->getElementsByTagName('a') as $link) { |
||
384 | if (strpos($link->getAttribute('href'), "/photo/") !== false) { |
||
385 | $all_ref[] = $link->getAttribute('href'); |
||
386 | } |
||
387 | } |
||
388 | if (isset($all_pics[8])) { |
||
389 | $image_url = array(); |
||
390 | $image_url['thumbnail'] = 'http:'.$all_pics[3]; |
||
391 | $image_url['original'] = 'http:'.str_replace('/400/','/full/',$all_pics[3]); |
||
392 | $image_url['copyright'] = str_replace('By: ','',$all_authors[0]); |
||
393 | $image_url['source_website'] = 'https://jetphotos.net'.$all_ref[0]; |
||
394 | $image_url['source'] = 'JetPhotos'; |
||
395 | return $image_url; |
||
396 | } |
||
397 | return array('thumbnail' => '','original' => '', 'copyright' => '','source' => '','source_website' => ''); |
||
398 | } |
||
399 | |||
400 | /** |
||
401 | * Gets the aircraft image from PlanePictures |
||
402 | * |
||
403 | * @param String $aircraft_registration the registration of the aircraft |
||
404 | * @param String $aircraft_name type of the aircraft |
||
405 | * @return array the aircraft thumbnail, orignal url and copyright |
||
406 | * |
||
407 | */ |
||
408 | public function fromPlanePictures($type,$aircraft_registration, $aircraft_name='') { |
||
409 | $Common = new Common(); |
||
410 | $url= 'https://www.planepictures.net/v3/search_en.php?srch='.$aircraft_registration.'&stype=reg&srng=2'; |
||
411 | $data = $Common->getData($url); |
||
412 | $dom = new DOMDocument(); |
||
413 | @$dom->loadHTML($data); |
||
0 ignored issues
–
show
It seems like you do not handle an error condition here. This can introduce security issues, and is generally not recommended.
If you suppress an error, we recommend checking for the error condition explicitly: // For example instead of
@mkdir($dir);
// Better use
if (@mkdir($dir) === false) {
throw new \RuntimeException('The directory '.$dir.' could not be created.');
}
![]() |
|||
414 | $all_pics = array(); |
||
415 | foreach($dom->getElementsByTagName('img') as $image) { |
||
416 | $all_pics[] = $image->getAttribute('src'); |
||
417 | } |
||
418 | $all_links = array(); |
||
419 | foreach($dom->getElementsByTagName('a') as $link) { |
||
420 | $all_links[] = array('text' => $link->textContent,'href' => $link->getAttribute('href')); |
||
421 | } |
||
422 | if (isset($all_pics[4])) { |
||
423 | $image_url = array(); |
||
424 | $image_url['thumbnail'] = 'http://www.planepictures.net'.$all_pics[4]; |
||
425 | $image_url['original'] = 'http://www.planepictures.net'.str_replace('_TN','',$all_pics[4]); |
||
426 | $image_url['copyright'] = $all_links[28]['text']; |
||
427 | $image_url['source_website'] = 'https://www.planepictures.net'.str_replace('./','/',$all_links[23]['href']); |
||
428 | $image_url['source'] = 'PlanePictures'; |
||
429 | return $image_url; |
||
430 | } |
||
431 | return array('thumbnail' => '','original' => '', 'copyright' => '','source' => '','source_website' => ''); |
||
432 | } |
||
433 | |||
434 | /** |
||
435 | * Gets the aircraft image from Flickr |
||
436 | * |
||
437 | * @param String $registration the registration of the aircraft |
||
438 | * @param String $name type of the aircraft |
||
439 | * @return array the aircraft thumbnail, orignal url and copyright |
||
440 | * |
||
441 | */ |
||
442 | public function fromFlickr($type,$registration,$name='') { |
||
443 | $Common = new Common(); |
||
444 | if ($type == 'aircraft') { |
||
445 | if ($name != '') $url = 'https://api.flickr.com/services/feeds/photos_public.gne?format=rss2&license=1,2,3,4,5,6,7&per_page=1&tags='.$registration.','.urlencode($name); |
||
446 | else $url = 'https://api.flickr.com/services/feeds/photos_public.gne?format=rss2&license=1,2,3,4,5,6,7&per_page=1&tags='.$registration.',aircraft'; |
||
447 | } elseif ($type == 'marine') { |
||
448 | if ($name != '') $url = 'https://api.flickr.com/services/feeds/photos_public.gne?format=rss2&license=1,2,3,4,5,6,7&per_page=1&tags=ship,'.urlencode($name); |
||
449 | else $url = 'https://api.flickr.com/services/feeds/photos_public.gne?format=rss2&license=1,2,3,4,5,6,7&per_page=1&tags='.$registration.',ship'; |
||
450 | } |
||
451 | $data = $Common->getData($url); |
||
452 | if (substr($data, 0, 5) != "<?xml") return array('thumbnail' => '','original' => '', 'copyright' => '','source' => '','source_website' => ''); |
||
453 | if ($xml = simplexml_load_string($data)) { |
||
454 | if (isset($xml->channel->item)) { |
||
455 | $original_url = trim((string)$xml->channel->item->enclosure->attributes()->url); |
||
456 | $image_url = array(); |
||
457 | $image_url['thumbnail'] = $original_url; |
||
458 | $image_url['original'] = $original_url; |
||
459 | $image_url['copyright'] = trim((string)$xml->channel->item->children('http://search.yahoo.com/mrss/')->credit); |
||
460 | $image_url['source_website'] = trim((string)$xml->channel->item->link); |
||
461 | $image_url['source'] = 'flickr'; |
||
462 | return $image_url; |
||
463 | } |
||
464 | } |
||
465 | return array('thumbnail' => '','original' => '', 'copyright' => '','source' => '','source_website' => ''); |
||
466 | } |
||
467 | |||
468 | /** |
||
469 | * @param $type |
||
470 | * @param $aircraft_icao |
||
471 | * @param $airline_icao |
||
472 | * @return array |
||
473 | */ |
||
474 | public function fromIvaoMtl($type, $aircraft_icao, $airline_icao) { |
||
475 | $Common = new Common(); |
||
476 | //echo "\n".'SEARCH IMAGE : http://mtlcatalog.ivao.aero/images/aircraft/'.$aircraft_icao.$airline_icao.'.jpg'; |
||
477 | if ($Common->urlexist('http://mtlcatalog.ivao.aero/images/aircraft/'.$aircraft_icao.$airline_icao.'.jpg')) { |
||
478 | $image_url = array(); |
||
479 | $image_url['thumbnail'] = 'http://mtlcatalog.ivao.aero/images/aircraft/'.$aircraft_icao.$airline_icao.'.jpg'; |
||
480 | $image_url['original'] = 'http://mtlcatalog.ivao.aero/images/aircraft/'.$aircraft_icao.$airline_icao.'.jpg'; |
||
481 | $image_url['copyright'] = 'IVAO'; |
||
482 | $image_url['source_website'] = 'http://mtlcatalog.ivao.aero/'; |
||
483 | $image_url['source'] = 'ivao.aero'; |
||
484 | return $image_url; |
||
485 | } else { |
||
486 | return array('thumbnail' => '','original' => '', 'copyright' => '','source' => '','source_website' => ''); |
||
487 | } |
||
488 | } |
||
489 | |||
490 | /** |
||
491 | * Gets the aircraft image from Bing |
||
492 | * |
||
493 | * @param $type |
||
494 | * @param String $aircraft_registration the registration of the aircraft |
||
495 | * @param String $aircraft_name type of the aircraft |
||
496 | * @return array the aircraft thumbnail, orignal url and copyright |
||
497 | */ |
||
498 | public function fromBing($type,$aircraft_registration,$aircraft_name='') { |
||
499 | global $globalImageBingKey; |
||
500 | $Common = new Common(); |
||
501 | if (!isset($globalImageBingKey) || $globalImageBingKey == '') return array('thumbnail' => '','original' => '', 'copyright' => '','source' => '','source_website' => ''); |
||
502 | if ($type == 'aircraft') { |
||
503 | if ($aircraft_name != '') $url = 'https://api.datamarket.azure.com/Bing/Search/v1/Image?$format=json&$top=1&Query=%27'.$aircraft_registration.'%20'.urlencode($aircraft_name).'%20-site:planespotters.com%20-site:flickr.com%27'; |
||
504 | else $url = 'https://api.datamarket.azure.com/Bing/Search/v1/Image?$format=json&$top=1&Query=%27%2B'.$aircraft_registration.'%20%2Baircraft%20-site:planespotters.com%20-site:flickr.com%27'; |
||
505 | } elseif ($type == 'marine') { |
||
506 | if ($aircraft_name != '') $url = 'https://api.datamarket.azure.com/Bing/Search/v1/Image?$format=json&$top=1&Query=%27'.urlencode($aircraft_name).'%20%2Bship%20-site:flickr.com%27'; |
||
507 | else $url = 'https://api.datamarket.azure.com/Bing/Search/v1/Image?$format=json&$top=1&Query=%27%2B'.$aircraft_registration.'%20%2Bship%20-site:flickr.com%27'; |
||
508 | } |
||
509 | $headers = array("Authorization: Basic " . base64_encode("ignored:".$globalImageBingKey)); |
||
510 | $data = $Common->getData($url,'get','',$headers); |
||
511 | $result = json_decode($data); |
||
512 | if (isset($result->d->results[0]->MediaUrl)) { |
||
513 | $image_url = array(); |
||
514 | $image_url['original'] = $result->d->results[0]->MediaUrl; |
||
515 | $image_url['source_website'] = $result->d->results[0]->SourceUrl; |
||
516 | // Thumbnail can't be used this way... |
||
517 | // $image_url['thumbnail'] = $result->d->results[0]->Thumbnail->MediaUrl; |
||
518 | $image_url['thumbnail'] = $result->d->results[0]->MediaUrl; |
||
519 | $url = parse_url($image_url['source_website']); |
||
520 | $image_url['copyright'] = $url['host']; |
||
521 | $image_url['source'] = 'bing'; |
||
522 | return $image_url; |
||
523 | } |
||
524 | return array('thumbnail' => '','original' => '', 'copyright' => '','source' => '','source_website' => ''); |
||
525 | } |
||
526 | |||
527 | /** |
||
528 | * Gets the aircraft image from airport-data |
||
529 | * |
||
530 | * @param String $aircraft_registration the registration of the aircraft |
||
531 | * @param String $aircraft_icao the icao code of the aircraft |
||
532 | * @param String $aircraft_name type of the aircraft |
||
533 | * @return array the aircraft thumbnail, orignal url and copyright |
||
534 | * |
||
535 | */ |
||
536 | public function fromAirportData($type,$aircraft_registration,$aircraft_icao,$aircraft_name='') { |
||
537 | $Common = new Common(); |
||
538 | $url = 'http://www.airport-data.com/api/ac_thumb.json?&n=1&r='.$aircraft_registration.'&m='.$aircraft_icao; |
||
539 | $data = $Common->getData($url); |
||
540 | $result = json_decode($data); |
||
541 | if (isset($result->count) && $result->count > 0) { |
||
542 | $image_url = array(); |
||
543 | $image_url['original'] = str_replace('thumbnails','large',$result->data[0]->image); |
||
544 | $image_url['source_website'] = $result->data[0]->link; |
||
545 | $image_url['thumbnail'] = $result->data[0]->image; |
||
546 | $image_url['copyright'] = $result->data[0]->photographer; |
||
547 | $image_url['source'] = 'AirportData'; |
||
548 | return $image_url; |
||
549 | } |
||
550 | return array('thumbnail' => '','original' => '', 'copyright' => '','source' => '','source_website' => ''); |
||
551 | } |
||
552 | |||
553 | /** |
||
554 | * Gets image from WikiMedia |
||
555 | * |
||
556 | * @param String $registration the registration of the aircraft/mmsi |
||
557 | * @param String $name name |
||
558 | * @return array the aircraft thumbnail, orignal url and copyright |
||
559 | * |
||
560 | */ |
||
561 | public function fromWikimedia($type,$registration,$name='') { |
||
562 | $Common = new Common(); |
||
563 | if ($type == 'aircraft') { |
||
564 | if ($name != '') $url = 'https://commons.wikimedia.org/w/api.php?action=query&list=search&format=json&srlimit=1&srnamespace=6&continue&srsearch="'.$registration.'"%20'.urlencode($name); |
||
565 | else $url = 'https://commons.wikimedia.org/w/api.php?action=query&list=search&format=json&srlimit=1&srnamespace=6&continue&srsearch="'.$registration.'"%20aircraft'; |
||
566 | } elseif ($type == 'marine') { |
||
567 | if ($name != '') $url = 'https://commons.wikimedia.org/w/api.php?action=query&list=search&format=json&srlimit=1&srnamespace=6&continue&srsearch="'.urlencode($name).'%20ship"'; |
||
568 | else return array('thumbnail' => '','original' => '', 'copyright' => '','source' => '','source_website' => ''); |
||
569 | } |
||
570 | $data = $Common->getData($url); |
||
571 | $result = json_decode($data); |
||
572 | if (isset($result->query->search[0]->title)) { |
||
573 | $fileo = $result->query->search[0]->title; |
||
574 | if (substr($fileo,-3) == 'pdf') return array('thumbnail' => '','original' => '', 'copyright' => '','source' => '','source_website' => ''); |
||
575 | $file = urlencode($fileo); |
||
576 | $url2 = 'https://commons.wikimedia.org/w/api.php?action=query&format=json&continue&iilimit=500&prop=imageinfo&iiprop=user|url|size|mime|sha1|timestamp&iiurlwidth=200%27&titles='.$file; |
||
577 | $data2 = $Common->getData($url2); |
||
578 | $result2 = json_decode($data2); |
||
579 | if (isset($result2->query->pages)) { |
||
580 | foreach ($result2->query->pages as $page) { |
||
581 | if (isset($page->imageinfo[0]->user)) { |
||
582 | $image_url = array(); |
||
583 | $image_url['copyright'] = 'Wikimedia, '.$page->imageinfo[0]->user; |
||
584 | $image_url['original'] = $page->imageinfo[0]->url; |
||
585 | $image_url['thumbnail'] = $page->imageinfo[0]->thumburl; |
||
586 | $image_url['source'] = 'wikimedia'; |
||
587 | $image_url['source_website'] = 'http://commons.wikimedia.org/wiki/'.$fileo; |
||
588 | //return $image_url; |
||
589 | } |
||
590 | } |
||
591 | } |
||
592 | if (isset($image_url['original'])) { |
||
593 | $url2 = 'https://commons.wikimedia.org/w/api.php?action=query&prop=imageinfo&iiprop=extmetadata&format=json&continue&titles='.$file; |
||
594 | $data2 = $Common->getData($url2); |
||
595 | $result2 = json_decode($data2); |
||
596 | if (isset($result2->query->pages)) { |
||
597 | foreach ($result2->query->pages as $page) { |
||
598 | if (isset($page->imageinfo[0]->extmetadata->Artist)) { |
||
599 | $image_url['copyright'] = preg_replace('/ from(.*)/','',strip_tags($page->imageinfo[0]->extmetadata->Artist->value)); |
||
600 | if (isset($page->imageinfo[0]->extmetadata->License->value)) { |
||
601 | $image_url['copyright'] = $image_url['copyright'].' (under '.$page->imageinfo[0]->extmetadata->License->value.')'; |
||
602 | } |
||
603 | $image_url['copyright'] = trim(str_replace('\n','',$image_url['copyright'])); |
||
604 | return $image_url; |
||
605 | } |
||
606 | } |
||
607 | } |
||
608 | return $image_url; |
||
609 | } |
||
610 | } |
||
611 | return array('thumbnail' => '','original' => '', 'copyright' => '','source' => '','source_website' => ''); |
||
612 | } |
||
613 | |||
614 | /** |
||
615 | * Gets the aircraft image from custom url |
||
616 | * |
||
617 | * @param String $registration the registration of the aircraft |
||
618 | * @param String $name type of the aircraft |
||
619 | * @return array the aircraft thumbnail, orignal url and copyright |
||
620 | * |
||
621 | */ |
||
622 | public function fromCustomSource($type,$registration,$name='') { |
||
623 | global $globalAircraftImageCustomSources, $globalMarineImageCustomSources, $globalDebug; |
||
624 | //$globalAircraftImageCustomSource[] = array('thumbnail' => '','original' => '', 'copyright' => '', 'source_website' => '', 'source' => '','exif' => true); |
||
625 | if (!empty($globalAircraftImageCustomSources) && $type == 'aircraft') { |
||
626 | $customsources = array(); |
||
627 | if (!isset($globalAircraftImageCustomSources[0])) { |
||
628 | $customsources[] = $globalAircraftImageCustomSources; |
||
629 | } else { |
||
630 | $customsources = $globalAircraftImageCustomSources; |
||
631 | } |
||
632 | foreach ($customsources as $source) { |
||
633 | $Common = new Common(); |
||
634 | if (!isset($source['original']) && $globalDebug) { |
||
635 | echo 'original entry not found for $globalAircraftImageCustomSources.'; |
||
636 | print_r($source); |
||
637 | print_r($customsources); |
||
638 | } |
||
639 | $url = str_replace('{registration}',$registration,$source['original']); |
||
640 | $url_thumbnail = str_replace('{registration}',$registration,$source['thumbnail']); |
||
641 | if ($Common->urlexist($url)) { |
||
642 | $image_url = array(); |
||
643 | $image_url['thumbnail'] = $url_thumbnail; |
||
644 | $image_url['original'] = $url; |
||
645 | if ($source['exif'] && exif_imagetype($url) == IMAGETYPE_JPEG) $exifCopyright = $this->getExifCopyright($url); |
||
646 | else $exifCopyright = ''; |
||
647 | if ($exifCopyright != '') $image_url['copyright'] = $exifCopyright; |
||
648 | elseif (isset($source['copyright'])) $image_url['copyright'] = $source['copyright']; |
||
649 | else $image_url['copyright'] = $source['source_website']; |
||
650 | $image_url['source_website'] = $source['source_website']; |
||
651 | $image_url['source'] = $source['source']; |
||
652 | return $image_url; |
||
653 | } |
||
654 | } |
||
655 | return array('thumbnail' => '','original' => '', 'copyright' => '','source' => '','source_website' => ''); |
||
656 | } else return array('thumbnail' => '','original' => '', 'copyright' => '','source' => '','source_website' => ''); |
||
657 | |||
658 | if (!empty($globalMarineImageCustomSources) && $type == 'marine') { |
||
659 | $customsources = array(); |
||
660 | if (!isset($globalMarineImageCustomSources[0])) { |
||
661 | $customsources[] = $globalMarineImageCustomSources; |
||
662 | } else { |
||
663 | $customsources = $globalMarineImageCustomSources; |
||
664 | } |
||
665 | foreach ($customsources as $source) { |
||
666 | $Common = new Common(); |
||
667 | if (!isset($source['original']) && $globalDebug) { |
||
668 | echo 'original entry not found for $globalMarineImageCustomSources.'; |
||
669 | print_r($source); |
||
670 | print_r($customsources); |
||
671 | } |
||
672 | $url = str_replace('{registration}',$registration,$source['original']); |
||
673 | $url = str_replace('{mmsi}',$registration,$url); |
||
674 | $url = str_replace('{name}',$name,$url); |
||
675 | $url_thumbnail = str_replace('{registration}',$registration,$source['thumbnail']); |
||
676 | $url_thumbnail = str_replace('{mmsi}',$registration,$url_thumbnail); |
||
677 | $url_thumbnail = str_replace('{name}',$name,$url_thumbnail); |
||
678 | if ($Common->urlexist($url)) { |
||
679 | $image_url = array(); |
||
680 | $image_url['thumbnail'] = $url_thumbnail; |
||
681 | $image_url['original'] = $url; |
||
682 | if ($source['exif'] && exif_imagetype($url) == IMAGETYPE_JPEG) $exifCopyright = $this->getExifCopyright($url); |
||
683 | else $exifCopyright = ''; |
||
684 | if ($exifCopyright != '') $image_url['copyright'] = $exifCopyright; |
||
685 | elseif (isset($source['copyright'])) $image_url['copyright'] = $source['copyright']; |
||
686 | else $image_url['copyright'] = $source['source_website']; |
||
687 | $image_url['source_website'] = $source['source_website']; |
||
688 | $image_url['source'] = $source['source']; |
||
689 | return $image_url; |
||
690 | } |
||
691 | } |
||
692 | return false; |
||
0 ignored issues
–
show
The return type of
return false; (false ) is incompatible with the return type documented by Image::fromCustomSource of type array .
If you return a value from a function or method, it should be a sub-type of the type that is given by the parent type f.e. an interface, or abstract method. This is more formally defined by the Lizkov substitution principle, and guarantees that classes that depend on the parent type can use any instance of a child type interchangably. This principle also belongs to the SOLID principles for object oriented design. Let’s take a look at an example: class Author {
private $name;
public function __construct($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
abstract class Post {
public function getAuthor() {
return 'Johannes';
}
}
class BlogPost extends Post {
public function getAuthor() {
return new Author('Johannes');
}
}
class ForumPost extends Post { /* ... */ }
function my_function(Post $post) {
echo strtoupper($post->getAuthor());
}
Our function ![]() |
|||
693 | } else return false; |
||
694 | } |
||
695 | } |
||
696 | |||
697 | //$Image = new Image(); |
||
698 | //print_r($Image->fromAirportData('F-GZHM')); |
||
699 | |||
700 | ?> |
||
701 |
If you suppress an error, we recommend checking for the error condition explicitly: