From 27c967825ac1e7462ebd3b545f53c9c34648f933 Mon Sep 17 00:00:00 2001 From: Victor Vasiliev Date: Sat, 29 Dec 2007 14:43:17 +0000 Subject: [PATCH] * Proper redirect deletion * Don't use ImagePage on redirects --- includes/Article.php | 1 + includes/Wiki.php | 17 +++++++++++------ includes/filerepo/File.php | 5 ++++- includes/filerepo/FileRepo.php | 2 ++ 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/includes/Article.php b/includes/Article.php index 6e4fac4bad..d867ce4825 100644 --- a/includes/Article.php +++ b/includes/Article.php @@ -2263,6 +2263,7 @@ class Article { $dbw->delete( 'externallinks', array( 'el_from' => $id ) ); $dbw->delete( 'langlinks', array( 'll_from' => $id ) ); $dbw->delete( 'redirect', array( 'rd_from' => $id ) ); + $dbw->delete( 'imageredirects', array( 'ir_from' => $t ) ); } # If using cleanup triggers, we can skip some manual deletes diff --git a/includes/Wiki.php b/includes/Wiki.php index 4920ff2b21..7945c7ad3a 100644 --- a/includes/Wiki.php +++ b/includes/Wiki.php @@ -219,12 +219,17 @@ class MediaWiki { } switch( $title->getNamespace() ) { - case NS_IMAGE: - return new ImagePage( $title ); - case NS_CATEGORY: - return new CategoryPage( $title ); - default: - return new Article( $title ); + case NS_IMAGE: + $file = RepoGroup::singleton()->findFile( $title->getText() ); + if( $file && $file->getRedirectedFrom() ) { + return new Article( $title ); + } else { + return new ImagePage( $title ); + } + case NS_CATEGORY: + return new CategoryPage( $title ); + default: + return new Article( $title ); } } diff --git a/includes/filerepo/File.php b/includes/filerepo/File.php index 7e222a0846..36729e13b5 100644 --- a/includes/filerepo/File.php +++ b/includes/filerepo/File.php @@ -46,7 +46,7 @@ abstract class File { /** * The following member variables are not lazy-initialised */ - var $repo, $title, $lastError; + var $repo, $title, $lastError, $redirected; /** * Call this constructor from child classes @@ -1136,6 +1136,9 @@ abstract class File { return ''; } } + + function getRedirectedFrom() { return $this->redirected; } + function setRedirectedFrom( $v ) { $this->redirected = $v; } } /** * Aliases for backwards compatibility with 1.6 diff --git a/includes/filerepo/FileRepo.php b/includes/filerepo/FileRepo.php index 90d284ffc6..648acf08a5 100644 --- a/includes/filerepo/FileRepo.php +++ b/includes/filerepo/FileRepo.php @@ -90,11 +90,13 @@ abstract class FileRepo { return false; } if ( $img->exists() && ( !$time || $img->getTimestamp() <= $time ) ) { + $img->setRedirectedFrom( $redirected ); return $img; } # Now try an old version of the file $img = $this->newFile( $title, $time ); if ( $img->exists() ) { + $img->setRedirectedFrom( $redirected ); return $img; } -- 2.20.1