From b9b85843572bf283f48285001e276ba7e61b63f6 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Sun, 22 Feb 2009 13:37:51 +0100 Subject: updated to MediaWiki 1.14.0 --- includes/filerepo/FileRepo.php | 80 +++++++++++++++++++++++------------------- 1 file changed, 44 insertions(+), 36 deletions(-) (limited to 'includes/filerepo/FileRepo.php') diff --git a/includes/filerepo/FileRepo.php b/includes/filerepo/FileRepo.php index edfc2a99..5beac732 100644 --- a/includes/filerepo/FileRepo.php +++ b/includes/filerepo/FileRepo.php @@ -15,6 +15,7 @@ abstract class FileRepo { var $thumbScriptUrl, $transformVia404; var $descBaseUrl, $scriptDirUrl, $articleUrl, $fetchDescription, $initialCapital; var $pathDisclosureProtection = 'paranoid'; + var $descriptionCacheExpiry, $apiThumbCacheExpiry, $hashLevels; /** * Factory functions for creating new files @@ -30,7 +31,8 @@ abstract class FileRepo { // Optional settings $this->initialCapital = true; // by default foreach ( array( 'descBaseUrl', 'scriptDirUrl', 'articleUrl', 'fetchDescription', - 'thumbScriptUrl', 'initialCapital', 'pathDisclosureProtection', 'descriptionCacheExpiry' ) as $var ) + 'thumbScriptUrl', 'initialCapital', 'pathDisclosureProtection', + 'descriptionCacheExpiry', 'apiThumbCacheExpiry', 'hashLevels' ) as $var ) { if ( isset( $info[$var] ) ) { $this->$var = $info[$var]; @@ -57,7 +59,7 @@ abstract class FileRepo { */ function newFile( $title, $time = false ) { if ( !($title instanceof Title) ) { - $title = Title::makeTitleSafe( NS_IMAGE, $title ); + $title = Title::makeTitleSafe( NS_FILE, $title ); if ( !is_object( $title ) ) { return null; } @@ -83,7 +85,7 @@ abstract class FileRepo { */ function findFile( $title, $time = false, $flags = 0 ) { if ( !($title instanceof Title) ) { - $title = Title::makeTitleSafe( NS_IMAGE, $title ); + $title = Title::makeTitleSafe( NS_FILE, $title ); if ( !is_object( $title ) ) { return false; } @@ -99,7 +101,7 @@ abstract class FileRepo { # Now try an old version of the file if ( $time !== false ) { $img = $this->newFile( $title, $time ); - if ( $img->exists() ) { + if ( $img && $img->exists() ) { if ( !$img->isDeleted(File::DELETED_FILE) ) { return $img; } else if ( ($flags & FileRepo::FIND_PRIVATE) && $img->userCan(File::DELETED_FILE) ) { @@ -113,7 +115,7 @@ abstract class FileRepo { return false; } $redir = $this->checkRedirect( $title ); - if( $redir && $redir->getNamespace() == NS_IMAGE) { + if( $redir && $redir->getNamespace() == NS_FILE) { $img = $this->newFile( $redir ); if( !$img ) { return false; @@ -129,12 +131,12 @@ abstract class FileRepo { /* * Find many files at once. * @param array $titles, an array of titles - * @param int $flags + * @todo Think of a good way to optionally pass timestamps to this function. */ - function findFiles( $titles, $flags ) { + function findFiles( $titles ) { $result = array(); foreach ( $titles as $index => $title ) { - $file = $this->findFile( $title, $flags ); + $file = $this->findFile( $title ); if ( $file ) $result[$file->getTitle()->getDBkey()] = $file; } @@ -236,6 +238,14 @@ abstract class FileRepo { return $path; } } + + /** + * Get a relative path including trailing slash, e.g. f/fa/ + * If the repo is not hashed, returns an empty string + */ + function getHashPath( $name ) { + return self::getHashPathForLevel( $name, $this->hashLevels ); + } /** * Get the name of this repository, as specified by $info['name]' to the constructor @@ -244,25 +254,6 @@ abstract class FileRepo { return $this->name; } - /** - * Get the file description page base URL, or false if there isn't one. - * @private - */ - function getDescBaseUrl() { - if ( is_null( $this->descBaseUrl ) ) { - if ( !is_null( $this->articleUrl ) ) { - $this->descBaseUrl = str_replace( '$1', - wfUrlencode( MWNamespace::getCanonicalName( NS_IMAGE ) ) . ':', $this->articleUrl ); - } elseif ( !is_null( $this->scriptDirUrl ) ) { - $this->descBaseUrl = $this->scriptDirUrl . '/index.php?title=' . - wfUrlencode( MWNamespace::getCanonicalName( NS_IMAGE ) ) . ':'; - } else { - $this->descBaseUrl = false; - } - } - return $this->descBaseUrl; - } - /** * Get the URL of an image description page. May return false if it is * unknown or not applicable. In general this should only be called by the @@ -273,12 +264,29 @@ abstract class FileRepo { * constructor, whereas local repositories use the local Title functions. */ function getDescriptionUrl( $name ) { - $base = $this->getDescBaseUrl(); - if ( $base ) { - return $base . wfUrlencode( $name ); - } else { - return false; + $encName = wfUrlencode( $name ); + if ( !is_null( $this->descBaseUrl ) ) { + # "http://example.com/wiki/Image:" + return $this->descBaseUrl . $encName; + } + if ( !is_null( $this->articleUrl ) ) { + # "http://example.com/wiki/$1" + # + # We use "Image:" as the canonical namespace for + # compatibility across all MediaWiki versions. + return str_replace( '$1', + "Image:$encName", $this->articleUrl ); } + if ( !is_null( $this->scriptDirUrl ) ) { + # "http://example.com/w" + # + # We use "Image:" as the canonical namespace for + # compatibility across all MediaWiki versions, + # and just sort of hope index.php is right. ;) + return $this->scriptDirUrl . + "/index.php?title=Image:$encName"; + } + return false; } /** @@ -290,12 +298,12 @@ abstract class FileRepo { function getDescriptionRenderUrl( $name ) { if ( isset( $this->scriptDirUrl ) ) { return $this->scriptDirUrl . '/index.php?title=' . - wfUrlencode( MWNamespace::getCanonicalName( NS_IMAGE ) . ':' . $name ) . + wfUrlencode( 'Image:' . $name ) . '&action=render'; } else { - $descBase = $this->getDescBaseUrl(); - if ( $descBase ) { - return wfAppendQuery( $descBase . wfUrlencode( $name ), 'action=render' ); + $descUrl = $this->getDescriptionUrl( $name ); + if ( $descUrl ) { + return wfAppendQuery( $descUrl, 'action=render' ); } else { return false; } -- cgit v1.2.3-54-g00ecf