Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Merge branch 'MDL-34633-22' of git://github.com/FMCorz/moodle into MO…

…ODLE_22_STABLE
  • Loading branch information...
commit 81baf0d5f30f9b22ee68f41c96f4d1790bb7ee43 2 parents befce58 + 4516e72
@stronk7 stronk7 authored
Showing with 86 additions and 36 deletions.
  1. +38 −10 repository/flickr/lib.php
  2. +48 −26 repository/flickr_public/lib.php
View
48 repository/flickr/lib.php
@@ -37,6 +37,11 @@ class repository_flickr extends repository {
public $photos;
/**
+ * Stores sizes of images to prevent multiple API call
+ */
+ static private $sizes = array();
+
+ /**
*
* @param int $repositoryid
* @param object $context
@@ -221,18 +226,41 @@ public function get_listing($path = '', $page = '') {
return $this->search('', $page);
}
+ /**
+ * Return photo url by given photo id
+ * @param string $photo_id
+ * @return string
+ */
public function get_link($photo_id) {
- global $CFG;
- $result = $this->flickr->photos_getSizes($photo_id);
- $url = '';
- if(!empty($result[4])) {
- $url = $result[4]['source'];
- } elseif(!empty($result[3])) {
- $url = $result[3]['source'];
- } elseif(!empty($result[2])) {
- $url = $result[2]['source'];
+ $bestsize = $this->get_best_size($photo_id);
+ if (!isset($bestsize['source'])) {
+ throw new repository_exception('cannotdownload', 'repository');
+ }
+ return $bestsize['source'];
+ }
+
+ /**
+ * Returns the best size for a photo
+ *
+ * @param string $photoid the photo identifier
+ * @return array of information provided by the API
+ */
+ protected function get_best_size($photoid) {
+ if (!isset(self::$sizes[$photoid])) {
+ // Sizes are returned from smallest to greatest.
+ self::$sizes[$photoid] = $this->flickr->photos_getSizes($photoid);
+ }
+ $sizes = self::$sizes[$photoid];
+ $bestsize = array();
+ if (is_array($sizes)) {
+ while ($bestsize = array_pop($sizes)) {
+ // Make sure the source is set. Exit the loop if found.
+ if (isset($bestsize['source'])) {
+ break;
+ }
+ }
}
- return $url;
+ return $bestsize;
}
/**
View
74 repository/flickr_public/lib.php
@@ -36,6 +36,11 @@ class repository_flickr_public extends repository {
public $photos;
/**
+ * Stores sizes of images to prevent multiple API call
+ */
+ static private $sizes = array();
+
+ /**
* constructor method
*
* @global object $CFG
@@ -207,13 +212,14 @@ public function logout() {
public function license4moodle ($license_id) {
$license = array(
+ '0' => 'allrightsreserved',
'1' => 'cc-nc-sa',
'2' => 'cc-nc',
'3' => 'cc-nc-nd',
'4' => 'cc',
'5' => 'cc-sa',
'6' => 'cc-nd',
- '7' => 'allrightsreserved'
+ '7' => 'other'
);
return $license[$license_id];
}
@@ -390,18 +396,41 @@ public function print_search() {
return $str;
}
+ /**
+ * Return photo url by given photo id
+ * @param string $photo_id
+ * @return string
+ */
public function get_link($photo_id) {
- global $CFG;
- $result = $this->flickr->photos_getSizes($photo_id);
- $url = '';
- if(!empty($result[4])) {
- $url = $result[4]['source'];
- } elseif(!empty($result[3])) {
- $url = $result[3]['source'];
- } elseif(!empty($result[2])) {
- $url = $result[2]['source'];
+ $bestsize = $this->get_best_size($photo_id);
+ if (!isset($bestsize['source'])) {
+ throw new repository_exception('cannotdownload', 'repository');
+ }
+ return $bestsize['source'];
+ }
+
+ /**
+ * Returns the best size for a photo
+ *
+ * @param string $photoid the photo identifier
+ * @return array of information provided by the API
+ */
+ protected function get_best_size($photoid) {
+ if (!isset(self::$sizes[$photoid])) {
+ // Sizes are returned from smallest to greatest.
+ self::$sizes[$photoid] = $this->flickr->photos_getSizes($photoid);
+ }
+ $sizes = self::$sizes[$photoid];
+ $bestsize = array();
+ if (is_array($sizes)) {
+ while ($bestsize = array_pop($sizes)) {
+ // Make sure the source is set. Exit the loop if found.
+ if (isset($bestsize['source'])) {
+ break;
+ }
+ }
}
- return $url;
+ return $bestsize;
}
/**
@@ -420,21 +449,14 @@ public function get_file($photo_id, $file = '') {
$author = $info['owner']['username'];
}
$copyright = get_string('author', 'repository') . ': ' . $author;
- $result = $this->flickr->photos_getSizes($photo_id);
- // download link
- $source = '';
- // flickr photo page
- $url = '';
- if (!empty($result[4])) {
- $source = $result[4]['source'];
- $url = $result[4]['url'];
- } elseif(!empty($result[3])) {
- $source = $result[3]['source'];
- $url = $result[3]['url'];
- } elseif(!empty($result[2])) {
- $source = $result[2]['source'];
- $url = $result[2]['url'];
+
+ // If we can read the original secret, it means that we have access to the original picture.
+ if (isset($info['originalsecret'])) {
+ $source = $this->flickr->buildPhotoURL($info, 'original');
+ } else {
+ $source = $this->build_photo_url($photoid);
}
+
$path = $this->prepare_file($file);
$fp = fopen($path, 'w');
$c = new curl;
@@ -446,7 +468,7 @@ public function get_file($photo_id, $file = '') {
$img->watermark($copyright, array(10,10), array('ttf'=>true, 'fontsize'=>12))->saveas($path);
}
- return array('path'=>$path, 'url'=>$url, 'author'=>$info['owner']['realname'], 'license'=>$this->license4moodle($info['license']));
+ return array('path'=>$path, 'author'=>$info['owner']['realname'], 'license'=>$this->license4moodle($info['license']));
}
/**
Please sign in to comment.
Something went wrong with that request. Please try again.