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 = '') |
||
0 ignored issues
–
show
|
|||
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='') { |
||
0 ignored issues
–
show
|
|||
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='') { |
||
0 ignored issues
–
show
|
|||
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
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.');
}
![]() |
|||
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='') { |
||
0 ignored issues
–
show
|
|||
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); |
||
0 ignored issues
–
show
The variable
$url does not seem to be defined for all execution paths leading up to this point.
If you define a variable conditionally, it can happen that it is not defined for all execution paths. Let’s take a look at an example: function myFunction($a) {
switch ($a) {
case 'foo':
$x = 1;
break;
case 'bar':
$x = 2;
break;
}
// $x is potentially undefined here.
echo $x;
}
In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined. Available Fixes
![]() |
|||
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) { |
||
0 ignored issues
–
show
|
|||
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); |
||
0 ignored issues
–
show
The variable
$url does not seem to be defined for all execution paths leading up to this point.
If you define a variable conditionally, it can happen that it is not defined for all execution paths. Let’s take a look at an example: function myFunction($a) {
switch ($a) {
case 'foo':
$x = 1;
break;
case 'bar':
$x = 2;
break;
}
// $x is potentially undefined here.
echo $x;
}
In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined. Available Fixes
![]() |
|||
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='') { |
||
0 ignored issues
–
show
|
|||
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); |
||
0 ignored issues
–
show
The variable
$url does not seem to be defined for all execution paths leading up to this point.
If you define a variable conditionally, it can happen that it is not defined for all execution paths. Let’s take a look at an example: function myFunction($a) {
switch ($a) {
case 'foo':
$x = 1;
break;
case 'bar':
$x = 2;
break;
}
// $x is potentially undefined here.
echo $x;
}
In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined. Available Fixes
![]() |
|||
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='') { |
||
0 ignored issues
–
show
|
|||
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') { |
||
0 ignored issues
–
show
if (!empty($globalMarine...e { return false; } does not seem to be reachable.
This check looks for unreachable code. It uses sophisticated control flow analysis techniques to find statements which will never be executed. Unreachable code is most often the result of function fx() {
try {
doSomething();
return true;
}
catch (\Exception $e) {
return false;
}
return false;
}
In the above example, the last ![]() |
|||
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 |
This check looks from parameters that have been defined for a function or method, but which are not used in the method body.