Restored r98710 but with a 'forRefresh' option (not used yet)
authorAaron Schulz <aaron@users.mediawiki.org>
Mon, 28 Nov 2011 08:53:03 +0000 (08:53 +0000)
committerAaron Schulz <aaron@users.mediawiki.org>
Mon, 28 Nov 2011 08:53:03 +0000 (08:53 +0000)
includes/WikiFilePage.php
includes/filerepo/file/File.php
includes/filerepo/file/ForeignAPIFile.php
includes/filerepo/file/LocalFile.php
includes/media/Generic.php

index 87b5487..a7d6ccb 100644 (file)
@@ -156,12 +156,12 @@ class WikiFilePage extends WikiPage {
                        $update = new HTMLCacheUpdate( $this->mTitle, 'imagelinks' );
                        $update->doUpdate();
                        $this->mFile->upgradeRow();
-                       $this->mFile->purgeCache();
+                       $this->mFile->purgeCache( array( 'forRefresh' => true ) );
                } else {
                        wfDebug( 'ImagePage::doPurge no image for ' . $this->mFile->getName() . "; limiting purge to cache only\n" );
                        // even if the file supposedly doesn't exist, force any cached information
                        // to be updated (in case the cached information is wrong)
-                       $this->mFile->purgeCache();
+                       $this->mFile->purgeCache( array( 'forRefresh' => true ) );
                }
                parent::doPurge();
        }
index 8d12ef8..57e8568 100644 (file)
@@ -863,8 +863,10 @@ abstract class File {
         * Purge shared caches such as thumbnails and DB data caching
         * STUB
         * Overridden by LocalFile
+        * @param $options Array Options, which include:
+        *     'forRefresh' : The purging is only to refresh thumbnails
         */
-       function purgeCache() {}
+       function purgeCache( $options = array() ) {}
 
        /**
         * Purge the file description page, but don't go after
index 9cd798d..281687b 100644 (file)
@@ -214,8 +214,11 @@ class ForeignAPIFile extends File {
                return $files;
        }
 
-       function purgeCache() {
-               $this->purgeThumbnails();
+       /**
+        * @see File::purgeCache()
+        */
+       function purgeCache( $options = array() ) {
+               $this->purgeThumbnails( $options );
                $this->purgeDescriptionPage();
        }
 
@@ -226,11 +229,17 @@ class ForeignAPIFile extends File {
                $wgMemc->delete( $key );
        }
 
-       function purgeThumbnails() {
+       function purgeThumbnails( $options = array() ) {
                global $wgMemc;
                $key = $this->repo->getLocalCacheKey( 'ForeignAPIRepo', 'ThumbUrl', $this->getName() );
                $wgMemc->delete( $key );
                $files = $this->getThumbnails();
+               // Give media handler a chance to filter the purge list
+               $handler = $this->getHandler();
+               if ( $handler ) {
+                       $handler->filterThumbnailPurgeList( $files, $options );
+               }
+               
                $dir = $this->getThumbPath( $this->getName() );
                foreach ( $files as $file ) {
                        unlink( $dir . $file );
index d11030f..9606119 100644 (file)
@@ -675,12 +675,12 @@ class LocalFile extends File {
        /**
         * Delete all previously generated thumbnails, refresh metadata in memcached and purge the squid
         */
-       function purgeCache() {
+       function purgeCache( $options = array() ) {
                // Refresh metadata cache
                $this->purgeMetadataCache();
 
                // Delete thumbnails
-               $this->purgeThumbnails();
+               $this->purgeThumbnails( $options );
 
                // Purge squid cache for this file
                SquidUpdate::purge( array( $this->getURL() ) );
@@ -723,11 +723,18 @@ class LocalFile extends File {
        /**
         * Delete cached transformed files for the current version only.
         */
-       function purgeThumbnails() {
+       function purgeThumbnails( $options ) {
                global $wgUseSquid;
 
                // Delete thumbnails
                $files = $this->getThumbnails();
+               
+               // Give media handler a chance to filter the purge list
+               $handler = $this->getHandler();
+               if ( $handler ) {
+                       $handler->filterThumbnailPurgeList( $files, $options );
+               }
+               
                $dir = array_shift( $files );
                $this->purgeThumbList( $dir, $files );
 
index 5cd5a20..8684af5 100644 (file)
@@ -504,6 +504,16 @@ abstract class MediaHandler {
                }
                return false;
        }
+
+       /**
+        * Remove files from the purge list
+        * 
+        * @param array $files
+        * @param array $options
+        */
+       public function filterThumbnailPurgeList( &$files, $options ) {
+               // Do nothing
+       }
 }
 
 /**