X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=includes%2Ffilerepo%2FForeignAPIRepo.php;h=8906834cac6839c593ef0dc825166919ad86eec0;hb=2117c11cbc53911f3a34fbd15d706367515ef7e1;hp=e64c88a911d47f157a7c43ccd5dc2a4f20f767d2;hpb=d459c2afb3928ceea157aa0eaa5230335cbc06ec;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/filerepo/ForeignAPIRepo.php b/includes/filerepo/ForeignAPIRepo.php index e64c88a911..8906834cac 100644 --- a/includes/filerepo/ForeignAPIRepo.php +++ b/includes/filerepo/ForeignAPIRepo.php @@ -52,15 +52,19 @@ class ForeignAPIRepo extends FileRepo { 'timestamp', ); - var $fileFactory = array( 'ForeignAPIFile', 'newFromTitle' ); - /* Check back with Commons after a day */ - var $apiThumbCacheExpiry = 86400; /* 24*60*60 */ - /* Redownload thumbnail files after a month */ - var $fileCacheExpiry = 2592000; /* 86400*30 */ + protected $fileFactory = array( 'ForeignAPIFile', 'newFromTitle' ); + /** @var int Check back with Commons after a day (24*60*60) */ + protected $apiThumbCacheExpiry = 86400; - protected $mQueryCache = array(); + /** @var int Redownload thumbnail files after a month (86400*30) */ + protected $fileCacheExpiry = 2592000; + + /** @var array */ protected $mFileExists = array(); + /** @var array */ + private $mQueryCache = array(); + /** * @param $info array|null */ @@ -102,19 +106,20 @@ class ForeignAPIRepo extends FileRepo { * Per docs in FileRepo, this needs to return false if we don't support versioned * files. Well, we don't. * - * @param $title Title - * @param $time string|bool + * @param Title $title + * @param string|bool $time * @return File */ function newFile( $title, $time = false ) { if ( $time ) { return false; } + return parent::newFile( $title, $time ); } /** - * @param $files array + * @param array $files * @return array */ function fileExistsBatch( array $files ) { @@ -136,8 +141,11 @@ class ForeignAPIRepo extends FileRepo { } } - $data = $this->fetchImageQuery( array( 'titles' => implode( $files, '|' ), - 'prop' => 'imageinfo' ) ); + $data = $this->fetchImageQuery( array( + 'titles' => implode( $files, '|' ), + 'prop' => 'imageinfo' ) + ); + if ( isset( $data['query']['pages'] ) ) { # First, get results from the query. Note we only care whether the image exists, # not whether it has a description page. @@ -161,11 +169,12 @@ class ForeignAPIRepo extends FileRepo { $results[$key] = $this->mFileExists[$file]; } } + return $results; } /** - * @param $virtualUrl string + * @param string $virtualUrl * @return bool */ function getFileProps( $virtualUrl ) { @@ -173,7 +182,7 @@ class ForeignAPIRepo extends FileRepo { } /** - * @param $query array + * @param array $query * @return string */ function fetchImageQuery( $query ) { @@ -200,7 +209,7 @@ class ForeignAPIRepo extends FileRepo { } /** - * @param $data array + * @param array $data * @return bool|array */ function getImageInfo( $data ) { @@ -211,11 +220,12 @@ class ForeignAPIRepo extends FileRepo { } } } + return false; } /** - * @param $hash string + * @param string $hash * @return array */ function findBySha1( $hash ) { @@ -234,15 +244,16 @@ class ForeignAPIRepo extends FileRepo { $ret[] = new ForeignAPIFile( Title::makeTitle( NS_FILE, $img['name'] ), $this, $img ); } } + return $ret; } /** - * @param $name string - * @param $width int - * @param $height int - * @param $result null - * @param $otherParams string + * @param string $name + * @param int $width + * @param int $height + * @param null $result + * @param string $otherParams * @return bool */ function getThumbUrl( $name, $width = -1, $height = -1, &$result = null, $otherParams = '' ) { @@ -258,6 +269,7 @@ class ForeignAPIRepo extends FileRepo { if ( $data && $info && isset( $info['thumburl'] ) ) { wfDebug( __METHOD__ . " got remote thumb " . $info['thumburl'] . "\n" ); $result = $info; + return $info['thumburl']; } else { return false; @@ -265,10 +277,11 @@ class ForeignAPIRepo extends FileRepo { } /** - * @param $name string - * @param $width int - * @param $height int - * @param $otherParams string + * @param string $name + * @param int $width + * @param int $height + * @param string $otherParams + * @param string $lang Language code for language of error * @return bool|MediaTransformError * @since 1.22 */ @@ -286,6 +299,7 @@ class ForeignAPIRepo extends FileRepo { if ( $data && $info && isset( $info['thumberror'] ) ) { wfDebug( __METHOD__ . " got remote thumb error " . $info['thumberror'] . "\n" ); + return new MediaTransformError( 'thumbnail_error_remote', $width, @@ -305,9 +319,10 @@ class ForeignAPIRepo extends FileRepo { * Otherwise retrieve remote thumb url, check for local file. * * @param string $name is a dbkey form of a title - * @param $width - * @param $height - * @param string $params Other rendering parameters (page number, etc) from handler's makeParamString. + * @param int $width + * @param int $height + * @param string $params Other rendering parameters (page number, etc) + * from handler's makeParamString. * @return bool|string */ function getThumbUrlFromCache( $name, $width, $height, $params = "" ) { @@ -332,6 +347,7 @@ class ForeignAPIRepo extends FileRepo { if ( isset( $knownThumbUrls[$sizekey] ) ) { wfDebug( __METHOD__ . ': Got thumburl from local cache: ' . "{$knownThumbUrls[$sizekey]} \n" ); + return $knownThumbUrls[$sizekey]; } /* This size is not yet known */ @@ -342,6 +358,7 @@ class ForeignAPIRepo extends FileRepo { if ( !$foreignUrl ) { wfDebug( __METHOD__ . " Could not find thumburl\n" ); + return false; } @@ -349,14 +366,17 @@ class ForeignAPIRepo extends FileRepo { $fileName = rawurldecode( pathinfo( $foreignUrl, PATHINFO_BASENAME ) ); if ( !$this->validateFilename( $fileName ) ) { wfDebug( __METHOD__ . " The deduced filename $fileName is not safe\n" ); + return false; } $localPath = $this->getZonePath( 'thumb' ) . "/" . $this->getHashPath( $name ) . $name; $localFilename = $localPath . "/" . $fileName; - $localUrl = $this->getZoneUrl( 'thumb' ) . "/" . $this->getHashPath( $name ) . rawurlencode( $name ) . "/" . rawurlencode( $fileName ); + $localUrl = $this->getZoneUrl( 'thumb' ) . "/" . $this->getHashPath( $name ) . + rawurlencode( $name ) . "/" . rawurlencode( $fileName ); if ( $backend->fileExists( array( 'src' => $localFilename ) ) - && isset( $metadata['timestamp'] ) ) { + && isset( $metadata['timestamp'] ) + ) { wfDebug( __METHOD__ . " Thumbnail was already downloaded before\n" ); $modified = $backend->getFileTimestamp( array( 'src' => $localFilename ) ); $remoteModified = strtotime( $metadata['timestamp'] ); @@ -366,6 +386,7 @@ class ForeignAPIRepo extends FileRepo { /* Use our current and already downloaded thumbnail */ $knownThumbUrls[$sizekey] = $localUrl; $wgMemc->set( $key, $knownThumbUrls, $this->apiThumbCacheExpiry ); + return $localUrl; } /* There is a new Commons file, or existing thumbnail older than a month */ @@ -373,6 +394,7 @@ class ForeignAPIRepo extends FileRepo { $thumb = self::httpGet( $foreignUrl ); if ( !$thumb ) { wfDebug( __METHOD__ . " Could not download thumb\n" ); + return false; } @@ -381,17 +403,19 @@ class ForeignAPIRepo extends FileRepo { $params = array( 'dst' => $localFilename, 'content' => $thumb ); if ( !$backend->quickCreate( $params )->isOK() ) { wfDebug( __METHOD__ . " could not write to thumb path '$localFilename'\n" ); + return $foreignUrl; } $knownThumbUrls[$sizekey] = $localUrl; $wgMemc->set( $key, $knownThumbUrls, $this->apiThumbCacheExpiry ); wfDebug( __METHOD__ . " got local thumb $localUrl, saving to cache \n" ); + return $localUrl; } /** * @see FileRepo::getZoneUrl() - * @param $zone String + * @param string $zone * @param string|null $ext Optional file extension * @return String */ @@ -408,7 +432,7 @@ class ForeignAPIRepo extends FileRepo { /** * Get the local directory corresponding to one of the basic zones - * @param $zone string + * @param string $zone * @return bool|null|string */ function getZonePath( $zone ) { @@ -416,6 +440,7 @@ class ForeignAPIRepo extends FileRepo { if ( in_array( $zone, $supported ) ) { return parent::getZonePath( $zone ); } + return false; } @@ -468,9 +493,9 @@ class ForeignAPIRepo extends FileRepo { /** * Like a Http:get request, but with custom User-Agent. * @see Http:get - * @param $url string - * @param $timeout string - * @param $options array + * @param string $url + * @param string $timeout + * @param array $options * @return bool|String */ public static function httpGet( $url, $timeout = 'default', $options = array() ) { @@ -505,9 +530,10 @@ class ForeignAPIRepo extends FileRepo { /** * HTTP GET request to a mediawiki API (with caching) - * @param $target string Used in cache key creation, mostly - * @param $query array The query parameters for the API request - * @param $cacheTTL int Time to live for the memcached caching + * @param string $target Used in cache key creation, mostly + * @param array $query The query parameters for the API request + * @param int $cacheTTL Time to live for the memcached caching + * @return null */ public function httpGetCached( $target, $query, $cacheTTL = 3600 ) { if ( $this->mApiBase ) { @@ -544,7 +570,7 @@ class ForeignAPIRepo extends FileRepo { } /** - * @param $callback Array|string + * @param array|string $callback * @throws MWException */ function enumFiles( $callback ) {