]> scripts.mit.edu Git - autoinstalls/mediawiki.git/blob - includes/specials/SpecialFilepath.php
MediaWiki 1.17.0
[autoinstalls/mediawiki.git] / includes / specials / SpecialFilepath.php
1 <?php
2 /**
3  * Implements Special:Filepath
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18  * http://www.gnu.org/copyleft/gpl.html
19  *
20  * @file
21  * @ingroup SpecialPage
22  */
23
24 /**
25  * A special page that redirects to the URL of a given file
26  *
27  * @ingroup SpecialPage
28  */
29 class SpecialFilepath extends SpecialPage {
30
31         function __construct() {
32                 parent::__construct( 'Filepath' );
33         }
34
35         function execute( $par ) {
36                 global $wgRequest, $wgOut;
37
38                 $this->setHeaders();
39                 $this->outputHeader();
40
41                 $file = !is_null( $par ) ? $par : $wgRequest->getText( 'file' );
42
43                 $title = Title::makeTitleSafe( NS_FILE, $file );
44
45                 if ( ! $title instanceof Title || $title->getNamespace() != NS_FILE ) {
46                         $this->showForm( $title );
47                 } else {
48                         $file = wfFindFile( $title );
49                         if ( $file && $file->exists() ) {
50                                 $url = $file->getURL();
51                                 $width = $wgRequest->getInt( 'width', -1 );
52                                 $height = $wgRequest->getInt( 'height', -1 );
53                                 if ( $width != -1 ) {
54                                         $mto = $file->transform( array( 'width' => $width, 'height' => $height ) );
55                                         if ( $mto && !$mto->isError() ) {
56                                                 $url = $mto->getURL();
57                                         }
58                                 }
59                                 $wgOut->redirect( $url );
60                         } else {
61                                 $wgOut->setStatusCode( 404 );
62                                 $this->showForm( $title );
63                         }
64                 }
65         }
66
67         function showForm( $title ) {
68                 global $wgOut, $wgScript;
69
70                 $wgOut->addHTML(
71                         Html::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript, 'id' => 'specialfilepath' ) ) .
72                         Html::openElement( 'fieldset' ) .
73                         Html::element( 'legend', null, wfMsg( 'filepath' ) ) .
74                         Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) .
75                         Xml::inputLabel( wfMsg( 'filepath-page' ), 'file', 'file', 25, is_object( $title ) ? $title->getText() : '' ) . ' ' .
76                         Xml::submitButton( wfMsg( 'filepath-submit' ) ) . "\n" .
77                         Html::closeElement( 'fieldset' ) .
78                         Html::closeElement( 'form' )
79                 );
80         }
81 }