MDL-68954 repository_flickr_public: Handle when photo cannot be found
authorMihail Geshoski <mihail@moodle.com>
Tue, 9 Jun 2020 04:34:25 +0000 (12:34 +0800)
committerMihail Geshoski <mihail@moodle.com>
Tue, 9 Jun 2020 04:34:25 +0000 (12:34 +0800)
repository/flickr_public/lib.php

index 37be696..1dd58b7 100644 (file)
@@ -340,6 +340,8 @@ class repository_flickr_public extends repository {
      * @return array
      */
     private function build_list($photos, $page = 1, &$ret) {
+        global $OUTPUT;
+
         if (!empty($this->nsid)) {
             $photos_url = $this->flickr->urls_getUserPhotos($this->nsid);
             $ret['manage'] = $photos_url;
@@ -371,16 +373,23 @@ class repository_flickr_public extends repository {
                     // append file extension
                     $p['title'] .= $format;
                 }
+                // Get the thumbnail source URL.
+                $thumbnailsource = $this->flickr->buildPhotoURL($p, 'Square');
+                if (!@getimagesize($thumbnailsource)) {
+                    // Use the file extension icon as a thumbnail if the original thumbnail does not exist to avoid
+                    // displaying broken thumbnails in the repository.
+                    $thumbnailsource = $OUTPUT->image_url(file_extension_icon($p['title'], 90))->out(false);
+                }
                 $ret['list'][] = array(
-                    'title'=>$p['title'],
-                    'source'=>$p['id'],
-                    'id'=>$p['id'],
-                    'thumbnail'=>$this->flickr->buildPhotoURL($p, 'Square'),
-                    'date'=>'',
-                    'size'=>'unknown',
-                    'url'=>'http://www.flickr.com/photos/'.$p['owner'].'/'.$p['id'],
-                    'haslicense'=>true,
-                    'hasauthor'=>true
+                    'title' => $p['title'],
+                    'source' => $p['id'],
+                    'id' => $p['id'],
+                    'thumbnail' => $thumbnailsource,
+                    'date' => '',
+                    'size' => 'unknown',
+                    'url' => 'http://www.flickr.com/photos/' . $p['owner'] . '/' . $p['id'],
+                    'haslicense' => true,
+                    'hasauthor' => true
                 );
             }
         }
@@ -452,13 +461,8 @@ class repository_flickr_public extends repository {
      */
     public function get_file($photoid, $file = '') {
         global $CFG;
+
         $info = $this->flickr->photos_getInfo($photoid);
-        if ($info['owner']['realname']) {
-            $author = $info['owner']['realname'];
-        } else {
-            $author = $info['owner']['username'];
-        }
-        $copyright = get_string('author', 'repository') . ': ' . $author;
 
         // If we can read the original secret, it means that we have access to the original picture.
         if (isset($info['originalsecret'])) {
@@ -466,6 +470,17 @@ class repository_flickr_public extends repository {
         } else {
             $source = $this->build_photo_url($photoid);
         }
+        // Make sure the source image exists.
+        if (!@getimagesize($source)) {
+            throw new moodle_exception('cannotdownload', 'repository');
+        }
+
+        if ($info['owner']['realname']) {
+            $author = $info['owner']['realname'];
+        } else {
+            $author = $info['owner']['username'];
+        }
+        $copyright = get_string('author', 'repository') . ': ' . $author;
 
         $result = parent::get_file($source, $file);
         $path = $result['path'];