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  static function newFromPath( $path, $mime ) {
61  return new static( false, false, $path, $mime );
62  }
63 
69  static function newFromTitle( $title, $repo ) {
70  return new static( $title, $repo, false, false );
71  }
72 
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 = [];
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  function getWidth( $page = 1 ) {
134  $dim = $this->cachePageDimensions( $page );
135 
136  return $dim['width'];
137  }
138 
143  function getHeight( $page = 1 ) {
144  $dim = $this->cachePageDimensions( $page );
145 
146  return $dim['height'];
147  }
148 
152  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  function getImageSize( $filename ) {
166  if ( !$this->getHandler() ) {
167  return false;
168  }
169 
170  return $this->handler->getImageSize( $this, $this->getLocalRefPath() );
171  }
172 
176  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  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  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  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 }
bool string $metadata
Handler-specific metadata which will be saved in the img_metadata field.
getLocalRefPath()
Get an FS copy or original of this file and return the path.
Definition: File.php:443
getRootDirectory()
Get the public zone root storage directory of the repository.
Definition: FileRepo.php:678
setLocalReference(FSFile $fsFile)
Optimize getLocalRefPath() by using an existing local reference.
FSFile bool $fsFile
False if undefined.
Definition: File.php:121
assertRepoDefined()
Assert that $this->repo is set to a valid FileRepo instance.
Definition: File.php:2284
string $name
The name of a file from its title object.
Definition: File.php:133
static getInstance()
Returns the global default instance of the top level service locator.
A file object referring to either a standalone local file, or a file in a local repository with no da...
getHandler()
Get a MediaHandler instance for this file.
Definition: File.php:1390
static newFromTitle( $title, $repo)
static newFromPath( $path, $mime)
FileRepo LocalRepo ForeignAPIRepo bool $repo
Some member variables can be lazy-initialised using __get().
Definition: File.php:106
__construct( $title=false, $repo=false, $path=false, $mime=false)
Create an UnregisteredLocalFile based on a path or a (title,repo) pair.
getNameFromTitle(Title $title)
Get the name of a file from its title object.
Definition: FileRepo.php:657
Class representing a non-directory file on the file system.
Definition: FSFile.php:32
array [] bool [] $dims
Dimension data.
getHashPath( $name)
Get a relative path including trailing slash, e.g.
Definition: FileRepo.php:689
Implements some public methods and some protected utility functions which are required by multiple ch...
Definition: File.php:61
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:194