From 5b33e66b749b525f745dc3c0e814f072fd136479 Mon Sep 17 00:00:00 2001 From: Aaron Date: Tue, 4 Sep 2012 09:57:44 -0700 Subject: [PATCH] thumb.php now handles short and long thumbnail name formats when possible. Change-Id: I8e53ce711e23127854185661c5ce8bddbb226623 --- includes/filerepo/file/File.php | 18 ++++++++++++------ thumb.php | 18 ++++++++++++------ 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/includes/filerepo/file/File.php b/includes/filerepo/file/File.php index 3b0ea1479d..557609d4b0 100644 --- a/includes/filerepo/file/File.php +++ b/includes/filerepo/file/File.php @@ -68,6 +68,9 @@ abstract class File { const FOR_THIS_USER = 2; const RAW = 3; + // Options for File::thumbName() + const THUMB_FULL_NAME = 1; + /** * Some member variables can be lazy-initialised using __get(). The * initialisation function for these variables is always a function named @@ -759,15 +762,18 @@ abstract class File { } /** - * Return the file name of a thumbnail with the specified parameters + * Return the file name of a thumbnail with the specified parameters. + * Use File::THUMB_FULL_NAME to always get a name like "-". + * Otherwise, the format may be "-" or "-thumbnail.". * * @param $params Array: handler-specific parameters - * @private -ish - * + * @param $flags integer Bitfield that supports THUMB_* constants * @return string */ - function thumbName( $params ) { - $name = $this->repo ? $this->repo->nameForThumb( $this->getName() ) : $this->getName(); + public function thumbName( $params, $flags = 0 ) { + $name = ( $this->repo && !( $flags & self::THUMB_FULL_NAME ) ) + ? $this->repo->nameForThumb( $this->getName() ) + : $this->getName(); return $this->generateThumbName( $name, $params ); } @@ -779,7 +785,7 @@ abstract class File { * * @return string */ - function generateThumbName( $name, $params ) { + public function generateThumbName( $name, $params ) { if ( !$this->getHandler() ) { return null; } diff --git a/thumb.php b/thumb.php index 8fc868d415..570faa4f7a 100644 --- a/thumb.php +++ b/thumb.php @@ -217,16 +217,22 @@ function wfStreamThumb( array $params ) { // Stream the file if it exists already... try { + $thumbName2 = $img->thumbName( $params, File::THUMB_FULL_NAME ); // b/c; "long" style // For 404 handled thumbnails, we only use the the base name of the URI // for the thumb params and the parent directory for the source file name. // Check that the zone relative path matches up so squid caches won't pick // up thumbs that would not be purged on source file deletion (bug 34231). - if ( isset( $params['rel404'] ) // thumbnail was handled via 404 - && urldecode( $params['rel404'] ) !== $img->getThumbRel( $thumbName ) ) - { - wfThumbError( 404, 'The source file for the specified thumbnail does not exist.' ); - wfProfileOut( __METHOD__ ); - return; + if ( isset( $params['rel404'] ) ) { // thumbnail was handled via 404 + if ( urldecode( $params['rel404'] ) === $img->getThumbRel( $thumbName ) ) { + // Normal request for the canonical thumbnail name + } elseif ( urldecode( $params['rel404'] ) === $img->getThumbRel( $thumbName2 ) ) { + // Generate the thumb under the "long" name (so it can be purged) + $thumbName = $thumbName2; // b/c + } else { + wfThumbError( 404, 'The source file for the specified thumbnail does not exist.' ); + wfProfileOut( __METHOD__ ); + return; + } } $thumbPath = $img->getThumbPath( $thumbName ); if ( $img->getRepo()->fileExists( $thumbPath ) ) { -- 2.20.1