[ Index ] |
PHP Cross Reference of MediaWiki-1.24.0 |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Implements Special:MIMESearch 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 * @author Ævar Arnfjörð Bjarmason <[email protected]> 23 */ 24 25 /** 26 * Searches the database for files of the requested MIME type, comparing this with the 27 * 'img_major_mime' and 'img_minor_mime' fields in the image table. 28 * @ingroup SpecialPage 29 */ 30 class MIMEsearchPage extends QueryPage { 31 protected $major, $minor, $mime; 32 33 function __construct( $name = 'MIMEsearch' ) { 34 parent::__construct( $name ); 35 } 36 37 function isExpensive() { 38 return false; 39 } 40 41 function isSyndicated() { 42 return false; 43 } 44 45 function isCacheable() { 46 return false; 47 } 48 49 function linkParameters() { 50 return array( 'mime' => "{$this->major}/{$this->minor}" ); 51 } 52 53 public function getQueryInfo() { 54 $minorType = array(); 55 if ( $this->minor !== '*' ) { 56 // Allow wildcard searching 57 $minorType['img_minor_mime'] = $this->minor; 58 } 59 $qi = array( 60 'tables' => array( 'image' ), 61 'fields' => array( 62 'namespace' => NS_FILE, 63 'title' => 'img_name', 64 // Still have a value field just in case, 65 // but it isn't actually used for sorting. 66 'value' => 'img_name', 67 'img_size', 68 'img_width', 69 'img_height', 70 'img_user_text', 71 'img_timestamp' 72 ), 73 'conds' => array( 74 'img_major_mime' => $this->major, 75 // This is in order to trigger using 76 // the img_media_mime index in "range" mode. 77 'img_media_type' => array( 78 MEDIATYPE_BITMAP, 79 MEDIATYPE_DRAWING, 80 MEDIATYPE_AUDIO, 81 MEDIATYPE_VIDEO, 82 MEDIATYPE_MULTIMEDIA, 83 MEDIATYPE_UNKNOWN, 84 MEDIATYPE_OFFICE, 85 MEDIATYPE_TEXT, 86 MEDIATYPE_EXECUTABLE, 87 MEDIATYPE_ARCHIVE, 88 ), 89 ) + $minorType, 90 ); 91 92 return $qi; 93 } 94 95 /** 96 * The index is on (img_media_type, img_major_mime, img_minor_mime) 97 * which unfortunately doesn't have img_name at the end for sorting. 98 * So tell db to sort it however it wishes (Its not super important 99 * that this report gives results in a logical order). As an aditional 100 * note, mysql seems to by default order things by img_name ASC, which 101 * is what we ideally want, so everything works out fine anyhow. 102 * @return array 103 */ 104 function getOrderFields() { 105 return array(); 106 } 107 108 /** 109 * Return HTML to put just before the results. 110 */ 111 function getPageHeader() { 112 113 return Xml::openElement( 114 'form', 115 array( 'id' => 'specialmimesearch', 'method' => 'get', 'action' => wfScript() ) 116 ) . 117 Xml::openElement( 'fieldset' ) . 118 Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() ) . 119 Xml::element( 'legend', null, $this->msg( 'mimesearch' )->text() ) . 120 Xml::inputLabel( $this->msg( 'mimetype' )->text(), 'mime', 'mime', 20, $this->mime ) . 121 ' ' . 122 Xml::submitButton( $this->msg( 'ilsubmit' )->text() ) . 123 Xml::closeElement( 'fieldset' ) . 124 Xml::closeElement( 'form' ); 125 } 126 127 function execute( $par ) { 128 $this->mime = $par ? $par : $this->getRequest()->getText( 'mime' ); 129 $this->mime = trim( $this->mime ); 130 list( $this->major, $this->minor ) = File::splitMime( $this->mime ); 131 132 if ( $this->major == '' || $this->minor == '' || $this->minor == 'unknown' || 133 !self::isValidType( $this->major ) 134 ) { 135 $this->setHeaders(); 136 $this->outputHeader(); 137 $this->getOutput()->addHTML( $this->getPageHeader() ); 138 return; 139 } 140 141 parent::execute( $par ); 142 } 143 144 /** 145 * @param Skin $skin 146 * @param object $result Result row 147 * @return string 148 */ 149 function formatResult( $skin, $result ) { 150 global $wgContLang; 151 152 $nt = Title::makeTitle( $result->namespace, $result->title ); 153 $text = $wgContLang->convert( $nt->getText() ); 154 $plink = Linker::link( 155 Title::newFromText( $nt->getPrefixedText() ), 156 htmlspecialchars( $text ) 157 ); 158 159 $download = Linker::makeMediaLinkObj( $nt, $this->msg( 'download' )->escaped() ); 160 $download = $this->msg( 'parentheses' )->rawParams( $download )->escaped(); 161 $lang = $this->getLanguage(); 162 $bytes = htmlspecialchars( $lang->formatSize( $result->img_size ) ); 163 $dimensions = $this->msg( 'widthheight' )->numParams( $result->img_width, 164 $result->img_height )->escaped(); 165 $user = Linker::link( 166 Title::makeTitle( NS_USER, $result->img_user_text ), 167 htmlspecialchars( $result->img_user_text ) 168 ); 169 170 $time = $lang->userTimeAndDate( $result->img_timestamp, $this->getUser() ); 171 $time = htmlspecialchars( $time ); 172 173 return "$download $plink . . $dimensions . . $bytes . . $user . . $time"; 174 } 175 176 /** 177 * @param string $type 178 * @return bool 179 */ 180 protected static function isValidType( $type ) { 181 // From maintenance/tables.sql => img_major_mime 182 $types = array( 183 'unknown', 184 'application', 185 'audio', 186 'image', 187 'text', 188 'video', 189 'message', 190 'model', 191 'multipart', 192 'chemical' 193 ); 194 195 return in_array( $type, $types ); 196 } 197 198 protected function getGroupName() { 199 return 'media'; 200 } 201 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 14:03:12 2014 | Cross-referenced by PHPXref 0.7.1 |