From: Chad Horohoe Date: Sun, 24 Aug 2008 20:02:50 +0000 (+0000) Subject: Let action=purge actually do something for the ForeignAPIFile/Repo code. Still need... X-Git-Tag: 1.31.0-rc.0~45692 X-Git-Url: http://git.cyclocoop.org/%40spipnet%40?a=commitdiff_plain;h=52831d6a3fa67db2c097ae670038ffa4874a1e84;p=lhc%2Fweb%2Fwiklou.git Let action=purge actually do something for the ForeignAPIFile/Repo code. Still need to make it work on the metadata cache too, but I can live with this for now :) --- diff --git a/includes/filerepo/ForeignAPIFile.php b/includes/filerepo/ForeignAPIFile.php index b2b9ddb99a..5d69189f7a 100644 --- a/includes/filerepo/ForeignAPIFile.php +++ b/includes/filerepo/ForeignAPIFile.php @@ -104,4 +104,65 @@ class ForeignAPIFile extends File { ? $this->mInfo['descriptionurl'] : false; } + + /** + * Only useful if we're locally caching thumbs anyway... + */ + function getThumbPath( $suffix = '' ) { + $ret = null; + if ( $this->repo->apiThumbCacheExpiry > 0 && $this->repo->apiThumbCacheDir ) { + global $wgUploadDirectory; + $path = $wgUploadDirectory . '/' . $this->repo->apiThumbCacheDir . '/' . $this->repo->name . '/'; + if ( $suffix ) { + $path = $path . $suffix . '/'; + } + return $path; + } + else { + return null; + } + } + + function getThumbnails() { + $files = array(); + $dir = $this->getThumbPath( $this->getName() ); + if ( is_dir( $dir ) ) { + $handle = opendir( $dir ); + if ( $handle ) { + while ( false !== ( $file = readdir($handle) ) ) { + if ( $file{0} != '.' ) { + $files[] = $file; + } + } + closedir( $handle ); + } + } + return $files; + } + + function purgeCache() { + $this->purgeThumbnails(); + $this->purgeDescriptionPage(); + } + + function purgeDescriptionPage() { + global $wgMemc; + $url = $this->repo->getDescriptionRenderUrl( $this->getName() ); + $key = wfMemcKey( 'RemoteFileDescription', 'url', md5($renderUrl) ); + $wgMemc->delete( $key ); + } + + function purgeThumbnails() { + global $wgMemc; + $key = wfMemcKey( 'ForeignAPIRepo', 'ThumbUrl', $this->getName() ); + $wgMemc->delete( $key ); + $files = $this->getThumbnails(); + $dir = $this->getThumbPath( $this->getName() ); + foreach ( $files as $file ) { + unlink( $dir . $file ); + } + if ( is_dir( $dir ) ) { + rmdir( $dir ); // Might have already gone away, spews errors if we don't. + } + } }