Follow-up r84395: Give MediaHandlers the option to remove items from the thumbnail...
authorBryan Tong Minh <btongminh@users.mediawiki.org>
Sun, 2 Oct 2011 20:08:05 +0000 (20:08 +0000)
committerBryan Tong Minh <btongminh@users.mediawiki.org>
Sun, 2 Oct 2011 20:08:05 +0000 (20:08 +0000)
Added array $options to File::purgeCache(), LocalFile::purgeCache(), LocalFile::purgeThumbnails(), ForeignAPIFile::purgeCache() and ForeignAPIFile::purgeThumbnails() which is currently empty, but can be used later to indicate a full or partial purge.
Added MediaHandler::filterThumbnailPurgeList(), which can remove items from the purge list and also gets passed this $options array

includes/filerepo/File.php
includes/filerepo/ForeignAPIFile.php
includes/filerepo/LocalFile.php
includes/media/Generic.php

index 93ca6c4..30717f6 100644 (file)
@@ -823,8 +823,9 @@ abstract class File {
         * Purge shared caches such as thumbnails and DB data caching
         * STUB
         * Overridden by LocalFile
+        * @param array $options Array with options, currently undefined
         */
-       function purgeCache() {}
+       function purgeCache( $options = array() ) {}
 
        /**
         * Purge the file description page, but don't go after
index ba699be..e027ddd 100644 (file)
@@ -209,8 +209,11 @@ class ForeignAPIFile extends File {
                return $files;
        }
 
-       function purgeCache() {
-               $this->purgeThumbnails();
+       /**
+        * @see File::purgeCache()
+        */
+       function purgeCache( $options = array() ) {
+               $this->purgeThumbnails( $options );
                $this->purgeDescriptionPage();
        }
 
@@ -221,11 +224,18 @@ 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 767e762..17f7bd6 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() ) );
@@ -720,10 +720,18 @@ class LocalFile extends File {
        /**
         * Delete cached transformed files for the current version only.
         */
-       function purgeThumbnails() {
+       function purgeThumbnails( $options = array() ) {
                global $wgUseSquid;
-               // get a list of thumbnails and URLs
+               
+               // Get a list of thumbnails and URLs
                $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..12f35db 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
+       }
 }
 
 /**