MediaWiki  master
UnregisteredLocalFile.php
Go to the documentation of this file.
1 <?php
36 class UnregisteredLocalFile extends File {
38  protected $title;
39 
41  protected $path;
42 
44  protected $mime;
45 
47  protected $dims;
48 
50  protected $metadata;
51 
53  public $handler;
54 
60  public static function newFromPath( $path, $mime ) {
61  return new static( false, false, $path, $mime );
62  }
63 
69  public static function newFromTitle( $title, $repo ) {
70  return new static( $title, $repo, false, false );
71  }
72 
83  public 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 = [];
107  }
108 
113  private function cachePageDimensions( $page = 1 ) {
114  $page = (int)$page;
115  if ( $page < 1 ) {
116  $page = 1;
117  }
118 
119  if ( !isset( $this->dims[$page] ) ) {
120  if ( !$this->getHandler() ) {
121  return false;
122  }
123  $this->dims[$page] = $this->handler->getPageDimensions( $this, $page );
124  }
125 
126  return $this->dims[$page];
127  }
128 
133  public function getWidth( $page = 1 ) {
134  $dim = $this->cachePageDimensions( $page );
135 
136  return $dim['width'] ?? 0;
137  }
138 
143  public function getHeight( $page = 1 ) {
144  $dim = $this->cachePageDimensions( $page );
145 
146  return $dim['height'] ?? 0;
147  }
148 
152  public function getMimeType() {
153  if ( !isset( $this->mime ) ) {
154  $magic = MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer();
155  $this->mime = $magic->guessMimeType( $this->getLocalRefPath() );
156  }
157 
158  return $this->mime;
159  }
160 
165  protected function getImageSize( $filename ) {
166  if ( !$this->getHandler() ) {
167  return false;
168  }
169 
170  return $this->handler->getImageSize( $this, $this->getLocalRefPath() );
171  }
172 
176  public function getBitDepth() {
177  $gis = $this->getImageSize( $this->getLocalRefPath() );
178 
179  if ( !$gis || !isset( $gis['bits'] ) ) {
180  return 0;
181  }
182  return $gis['bits'];
183  }
184 
188  public function getMetadata() {
189  if ( !isset( $this->metadata ) ) {
190  if ( !$this->getHandler() ) {
191  $this->metadata = false;
192  } else {
193  $this->metadata = $this->handler->getMetadata( $this, $this->getLocalRefPath() );
194  }
195  }
196 
197  return $this->metadata;
198  }
199 
203  public function getURL() {
204  if ( $this->repo ) {
205  return $this->repo->getZoneUrl( 'public' ) . '/' .
206  $this->repo->getHashPath( $this->name ) . rawurlencode( $this->name );
207  } else {
208  return false;
209  }
210  }
211 
215  public function getSize() {
216  $this->assertRepoDefined();
217 
218  return $this->repo->getFileSize( $this->path );
219  }
220 
229  public function setLocalReference( FSFile $fsFile ) {
230  $this->fsFile = $fsFile;
231  }
232 }
UnregisteredLocalFile\newFromTitle
static newFromTitle( $title, $repo)
Definition: UnregisteredLocalFile.php:69
File\$repo
FileRepo LocalRepo ForeignAPIRepo bool $repo
Some member variables can be lazy-initialised using __get().
Definition: File.php:110
UnregisteredLocalFile\getSize
getSize()
Definition: UnregisteredLocalFile.php:215
UnregisteredLocalFile\newFromPath
static newFromPath( $path, $mime)
Definition: UnregisteredLocalFile.php:60
UnregisteredLocalFile\__construct
__construct( $title=false, $repo=false, $path=false, $mime=false)
Create an UnregisteredLocalFile based on a path or a (title,repo) pair.
Definition: UnregisteredLocalFile.php:83
FileRepo\getRootDirectory
getRootDirectory()
Get the public zone root storage directory of the repository.
Definition: FileRepo.php:697
UnregisteredLocalFile
A file object referring to either a standalone local file, or a file in a local repository with no da...
Definition: UnregisteredLocalFile.php:36
UnregisteredLocalFile\$title
Title $title
Definition: UnregisteredLocalFile.php:38
UnregisteredLocalFile\getMetadata
getMetadata()
Definition: UnregisteredLocalFile.php:188
UnregisteredLocalFile\getWidth
getWidth( $page=1)
Definition: UnregisteredLocalFile.php:133
UnregisteredLocalFile\getBitDepth
getBitDepth()
Definition: UnregisteredLocalFile.php:176
File\normalizeTitle
static normalizeTitle( $title, $exception=false)
Given a string or Title object return either a valid Title object with namespace NS_FILE or null.
Definition: File.php:199
UnregisteredLocalFile\$path
string $path
Definition: UnregisteredLocalFile.php:41
MediaWiki\MediaWikiServices\getInstance
static getInstance()
Returns the global default instance of the top level service locator.
Definition: MediaWikiServices.php:185
File
Implements some public methods and some protected utility functions which are required by multiple ch...
Definition: File.php:63
MWException
MediaWiki exception.
Definition: MWException.php:29
File\getLocalRefPath
getLocalRefPath()
Get an FS copy or original of this file and return the path.
Definition: File.php:457
UnregisteredLocalFile\getURL
getURL()
Definition: UnregisteredLocalFile.php:203
UnregisteredLocalFile\getImageSize
getImageSize( $filename)
Definition: UnregisteredLocalFile.php:165
UnregisteredLocalFile\$dims
array[] bool[] $dims
Dimension data.
Definition: UnregisteredLocalFile.php:47
UnregisteredLocalFile\setLocalReference
setLocalReference(FSFile $fsFile)
Optimize getLocalRefPath() by using an existing local reference.
Definition: UnregisteredLocalFile.php:229
UnregisteredLocalFile\$metadata
bool string $metadata
Handler-specific metadata which will be saved in the img_metadata field.
Definition: UnregisteredLocalFile.php:50
FileRepo\getNameFromTitle
getNameFromTitle(Title $title)
Get the name of a file from its title object.
Definition: FileRepo.php:676
UnregisteredLocalFile\getHeight
getHeight( $page=1)
Definition: UnregisteredLocalFile.php:143
File\$fsFile
FSFile bool $fsFile
False if undefined.
Definition: File.php:125
FSFile
Class representing a non-directory file on the file system.
Definition: FSFile.php:32
UnregisteredLocalFile\getMimeType
getMimeType()
Definition: UnregisteredLocalFile.php:152
FileRepo\getHashPath
getHashPath( $name)
Get a relative path including trailing slash, e.g.
Definition: FileRepo.php:708
UnregisteredLocalFile\$handler
MediaHandler $handler
Definition: UnregisteredLocalFile.php:53
Title
Represents a title within MediaWiki.
Definition: Title.php:42
UnregisteredLocalFile\cachePageDimensions
cachePageDimensions( $page=1)
Definition: UnregisteredLocalFile.php:113
File\assertRepoDefined
assertRepoDefined()
Assert that $this->repo is set to a valid FileRepo instance.
Definition: File.php:2418
File\$name
string $name
The name of a file from its title object.
Definition: File.php:137
File\getHandler
getHandler()
Get a MediaHandler instance for this file.
Definition: File.php:1459
UnregisteredLocalFile\$mime
bool string $mime
Definition: UnregisteredLocalFile.php:44
MediaHandler
Base media handler class.
Definition: MediaHandler.php:37