Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

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

…ODLE_23_STABLE
  • Loading branch information...
commit 3dafe46b2b9685f14e67046810531ed459b692e8 2 parents 5f015b6 + 82bf5b1
Eloy Lafuente (stronk7) stronk7 authored
Showing with 77 additions and 34 deletions.
  1. +33 −9 repository/flickr/lib.php
  2. +44 −25 repository/flickr_public/lib.php
42 repository/flickr/lib.php
View
@@ -38,6 +38,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
@@ -228,16 +233,35 @@ public function get_listing($path = '', $page = '') {
* @return string
*/
private function build_photo_url($photoid) {
- $result = $this->flickr->photos_getSizes($photoid);
- $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($photoid);
+ 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;
}
public function get_link($photoid) {
69 repository/flickr_public/lib.php
View
@@ -42,6 +42,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
@@ -213,13 +218,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];
}
@@ -402,16 +408,35 @@ public function print_search() {
* @return string
*/
private function build_photo_url($photoid) {
- $result = $this->flickr->photos_getSizes($photoid);
- $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($photoid);
+ 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;
}
public function get_link($photoid) {
@@ -434,29 +459,23 @@ public function get_file($photoid, $file = '') {
$author = $info['owner']['username'];
}
$copyright = get_string('author', 'repository') . ': ' . $author;
- $result = $this->flickr->photos_getSizes($photoid);
- // 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);
}
+
$result = parent::get_file($source, $file);
$path = $result['path'];
+
if (!empty($this->usewatermarks)) {
$img = new moodle_image($path);
$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.