From: C. Scott Ananian Date: Fri, 26 Apr 2013 21:42:33 +0000 (-0400) Subject: Reimplement Special:Filepath as a redirect through Special:Redirect/File. X-Git-Tag: 1.31.0-rc.0~19811^2 X-Git-Url: http://git.cyclocoop.org/%7B%24www_url%7Dadmin/password.php?a=commitdiff_plain;h=83bcc4835e36877a467487d1f75c6b449d2465ea;p=lhc%2Fweb%2Fwiklou.git Reimplement Special:Filepath as a redirect through Special:Redirect/File. Reduces code duplication (and some ugly deprecated code patterns in the Special:Filepath implementation). In the long term, reduces the need for one-off redirection pages (Special:PermanentLink, Special:Filepath, etc) in favor of an extensible system based around Special:Redirect. Change-Id: I42d5879342bc18412f0383c538e83c68b1c3cc2a --- diff --git a/includes/specials/SpecialFilepath.php b/includes/specials/SpecialFilepath.php index d4b0285550..57e552b37c 100644 --- a/includes/specials/SpecialFilepath.php +++ b/includes/specials/SpecialFilepath.php @@ -2,6 +2,7 @@ /** * Implements Special:Filepath * + * @section LICENSE * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -26,74 +27,15 @@ * * @ingroup SpecialPage */ -class SpecialFilepath extends SpecialPage { +class SpecialFilepath extends RedirectSpecialPage { function __construct() { parent::__construct( 'Filepath' ); + $this->mAllowedRedirectParams = array( 'width', 'height' ); } - function execute( $par ) { - $this->setHeaders(); - $this->outputHeader(); - - $request = $this->getRequest(); - $file = $par ?: $request->getText( 'file' ); - - $title = Title::newFromText( $file, NS_FILE ); - - if ( !( $title instanceof Title ) || $title->getNamespace() != NS_FILE ) { - $this->showForm( $title ); - } else { - $file = wfFindFile( $title ); - - if ( $file && $file->exists() ) { - // Default behavior: Use the direct link to the file. - $url = $file->getURL(); - $width = $request->getInt( 'width', -1 ); - $height = $request->getInt( 'height', -1 ); - - // If a width is requested... - if ( $width != -1 ) { - $mto = $file->transform( array( 'width' => $width, 'height' => $height ) ); - - // ... and we can - if ( $mto && !$mto->isError() ) { - // ... change the URL to point to a thumbnail. - $url = $mto->getURL(); - } - } - $this->getOutput()->redirect( $url ); - } else { - $this->getOutput()->setStatusCode( 404 ); - $this->showForm( $title ); - } - } - } - - /** - * @param Title $title Title requested, or null. - */ - function showForm( $title ) { - global $wgScript; - - $this->getOutput()->addHTML( - Html::openElement( - 'form', - array( 'method' => 'get', 'action' => $wgScript, 'id' => 'specialfilepath' ) - ) . - Html::openElement( 'fieldset' ) . - Html::element( 'legend', null, $this->msg( 'filepath' )->text() ) . - Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) . - Xml::inputLabel( - $this->msg( 'filepath-page' )->text(), - 'file', - 'file', - 25, - is_object( $title ) ? $title->getText() : '' - ) . ' ' . - Xml::submitButton( $this->msg( 'filepath-submit' )->text() ) . "\n" . - Html::closeElement( 'fieldset' ) . - Html::closeElement( 'form' ) - ); + // implement by redirecting through Special:Redirect/file + function getRedirect( $par ) { + return SpecialPage::getSafeTitleFor( 'Redirect', 'file/' . $par ); } protected function getGroupName() { diff --git a/languages/messages/MessagesEn.php b/languages/messages/MessagesEn.php index c41d935e1a..61f921674b 100644 --- a/languages/messages/MessagesEn.php +++ b/languages/messages/MessagesEn.php @@ -4788,13 +4788,6 @@ You should have received [{{SERVER}}{{SCRIPTPATH}}/COPYING a copy of the GNU Gen 'version-entrypoints-api-php' => '[https://www.mediawiki.org/wiki/Manual:api.php api.php]', # do not translate or duplicate this message to other languages 'version-entrypoints-load-php' => '[https://www.mediawiki.org/wiki/Manual:load.php load.php]', # do not translate or duplicate this message to other languages -# Special:FilePath -'filepath' => 'File path', -'filepath-page' => 'File:', -'filepath-submit' => 'Go', -'filepath-summary' => 'This special page returns the complete path for a file. -Images are shown in full resolution, other file types are started with their associated program directly.', - # Special:Redirect 'redirect' => 'Redirect by file, user, or revision ID', 'redirect-legend' => 'Redirect to a file or page', diff --git a/maintenance/language/messages.inc b/maintenance/language/messages.inc index deb01d5d99..4c159286f5 100644 --- a/maintenance/language/messages.inc +++ b/maintenance/language/messages.inc @@ -3637,12 +3637,6 @@ $wgMessageStructure = array( 'version-entrypoints-api-php', 'version-entrypoints-load-php', ), - 'filepath' => array( - 'filepath', - 'filepath-page', - 'filepath-submit', - 'filepath-summary', - ), 'redirect' => array( 'redirect', 'redirect-legend',