[ Index ] |
PHP Cross Reference of MediaWiki-1.24.0 |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * File without associated database record. 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 FileAbstraction 22 */ 23 24 /** 25 * A file object referring to either a standalone local file, or a file in a 26 * local repository with no database, for example an FileRepo repository. 27 * 28 * Read-only. 29 * 30 * @todo Currently it doesn't really work in the repository role, there are 31 * lots of functions missing. It is used by the WebStore extension in the 32 * standalone role. 33 * 34 * @ingroup FileAbstraction 35 */ 36 class UnregisteredLocalFile extends File { 37 /** @var Title */ 38 protected $title; 39 40 /** @var string */ 41 protected $path; 42 43 /** @var bool|string */ 44 protected $mime; 45 46 /** @var array Dimension data */ 47 protected $dims; 48 49 /** @var bool|string Handler-specific metadata which will be saved in the img_metadata field */ 50 protected $metadata; 51 52 /** @var MediaHandler */ 53 public $handler; 54 55 /** 56 * @param string $path Storage path 57 * @param string $mime 58 * @return UnregisteredLocalFile 59 */ 60 static function newFromPath( $path, $mime ) { 61 return new self( false, false, $path, $mime ); 62 } 63 64 /** 65 * @param Title $title 66 * @param FileRepo $repo 67 * @return UnregisteredLocalFile 68 */ 69 static function newFromTitle( $title, $repo ) { 70 return new self( $title, $repo, false, false ); 71 } 72 73 /** 74 * Create an UnregisteredLocalFile based on a path or a (title,repo) pair. 75 * A FileRepo object is not required here, unlike most other File classes. 76 * 77 * @throws MWException 78 * @param Title|bool $title 79 * @param FileRepo|bool $repo 80 * @param string|bool $path 81 * @param string|bool $mime 82 */ 83 function __construct( $title = false, $repo = false, $path = false, $mime = false ) { 84 if ( !( $title && $repo ) && !$path ) { 85 throw new MWException( __METHOD__ . 86 ': not enough parameters, must specify title and repo, or a full path' ); 87 } 88 if ( $title instanceof Title ) { 89 $this->title = File::normalizeTitle( $title, 'exception' ); 90 $this->name = $repo->getNameFromTitle( $title ); 91 } else { 92 $this->name = basename( $path ); 93 $this->title = File::normalizeTitle( $this->name, 'exception' ); 94 } 95 $this->repo = $repo; 96 if ( $path ) { 97 $this->path = $path; 98 } else { 99 $this->assertRepoDefined(); 100 $this->path = $repo->getRootDirectory() . '/' . 101 $repo->getHashPath( $this->name ) . $this->name; 102 } 103 if ( $mime ) { 104 $this->mime = $mime; 105 } 106 $this->dims = array(); 107 } 108 109 /** 110 * @param int $page 111 * @return bool 112 */ 113 private function cachePageDimensions( $page = 1 ) { 114 if ( !isset( $this->dims[$page] ) ) { 115 if ( !$this->getHandler() ) { 116 return false; 117 } 118 $this->dims[$page] = $this->handler->getPageDimensions( $this, $page ); 119 } 120 121 return $this->dims[$page]; 122 } 123 124 /** 125 * @param int $page 126 * @return int 127 */ 128 function getWidth( $page = 1 ) { 129 $dim = $this->cachePageDimensions( $page ); 130 131 return $dim['width']; 132 } 133 134 /** 135 * @param int $page 136 * @return int 137 */ 138 function getHeight( $page = 1 ) { 139 $dim = $this->cachePageDimensions( $page ); 140 141 return $dim['height']; 142 } 143 144 /** 145 * @return bool|string 146 */ 147 function getMimeType() { 148 if ( !isset( $this->mime ) ) { 149 $magic = MimeMagic::singleton(); 150 $this->mime = $magic->guessMimeType( $this->getLocalRefPath() ); 151 } 152 153 return $this->mime; 154 } 155 156 /** 157 * @param string $filename 158 * @return array|bool 159 */ 160 function getImageSize( $filename ) { 161 if ( !$this->getHandler() ) { 162 return false; 163 } 164 165 return $this->handler->getImageSize( $this, $this->getLocalRefPath() ); 166 } 167 168 /** 169 * @return bool 170 */ 171 function getMetadata() { 172 if ( !isset( $this->metadata ) ) { 173 if ( !$this->getHandler() ) { 174 $this->metadata = false; 175 } else { 176 $this->metadata = $this->handler->getMetadata( $this, $this->getLocalRefPath() ); 177 } 178 } 179 180 return $this->metadata; 181 } 182 183 /** 184 * @return bool|string 185 */ 186 function getURL() { 187 if ( $this->repo ) { 188 return $this->repo->getZoneUrl( 'public' ) . '/' . 189 $this->repo->getHashPath( $this->name ) . rawurlencode( $this->name ); 190 } else { 191 return false; 192 } 193 } 194 195 /** 196 * @return bool|int 197 */ 198 function getSize() { 199 $this->assertRepoDefined(); 200 201 return $this->repo->getFileSize( $this->path ); 202 } 203 204 /** 205 * Optimize getLocalRefPath() by using an existing local reference. 206 * The file at the path of $fsFile should not be deleted (or at least 207 * not until the end of the request). This is mostly a performance hack. 208 * 209 * @param FSFile $fsFile 210 * @return void 211 */ 212 public function setLocalReference( FSFile $fsFile ) { 213 $this->fsFile = $fsFile; 214 } 215 }
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 |