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 self( false, false, $path, $mime );
62  }
63 
69  static function newFromTitle( $title, $repo ) {
70  return new self( $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:434
processing should stop and the error should be shown to the user * false
Definition: hooks.txt:187
getRootDirectory()
Get the public zone root storage directory of the repository.
Definition: FileRepo.php:669
setLocalReference(FSFile $fsFile)
Optimize getLocalRefPath() by using an existing local reference.
FSFile bool $fsFile
False if undefined.
Definition: File.php:112
assertRepoDefined()
Assert that $this->repo is set to a valid FileRepo instance.
Definition: File.php:2272
string $name
The name of a file from its title object.
Definition: File.php:124
static getInstance()
Returns the global default instance of the top level service locator.
title
A file object referring to either a standalone local file, or a file in a local repository with no da...
and how to run hooks for an and one after Each event has a name
Definition: hooks.txt:6
getHandler()
Get a MediaHandler instance for this file.
Definition: File.php:1379
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:97
__construct( $title=false, $repo=false, $path=false, $mime=false)
Create an UnregisteredLocalFile based on a path or a (title,repo) pair.
array $dims
Dimension data.
getNameFromTitle(Title $title)
Get the name of a file from its title object.
Definition: FileRepo.php:648
injection txt This is an overview of how MediaWiki makes use of dependency injection The design described here grew from the discussion of RFC T384 The term dependency this means that anything an object needs to operate should be injected from the the object itself should only know narrow no concrete implementation of the logic it relies on The requirement to inject everything typically results in an architecture that based on two main types of and essentially stateless service objects that use other service objects to operate on the value objects As of the beginning MediaWiki is only starting to use the DI approach Much of the code still relies on global state or direct resulting in a highly cyclical dependency which acts as the top level factory for services in MediaWiki which can be used to gain access to default instances of various services MediaWikiServices however also allows new services to be defined and default services to be redefined Services are defined or redefined by providing a callback the instantiator that will return a new instance of the service When it will create an instance of MediaWikiServices and populate it with the services defined in the files listed by thereby bootstrapping the DI framework Per $wgServiceWiringFiles lists includes ServiceWiring php
Definition: injection.txt:35
this hook is for auditing only or null if authentication failed before getting that far or null if we can t even determine that When $user is not it can be in the form of< username >< more info > e g for bot passwords intended to be added to log contexts Fields it might only if the login was with a bot password it is not rendered in wiki pages or galleries in category pages allow injecting custom HTML after the section Any uses of the hook need to handle escaping see BaseTemplate::getToolbox and BaseTemplate::makeListItem for details on the format of individual items inside of this array or by returning and letting standard HTTP rendering take place modifiable or by returning false and taking over the output modifiable modifiable after all normalizations have been except for the $wgMaxImageArea check set to true or false to override the $wgMaxImageArea check result gives extension the possibility to transform it themselves set to a MediaTransformOutput the error message to be returned in an array you should do so by altering $wgNamespaceProtection and $wgNamespaceContentModels outside the handler
Definition: hooks.txt:780
Class representing a non-directory file on the file system.
Definition: FSFile.php:29
getHashPath( $name)
Get a relative path including trailing slash, e.g.
Definition: FileRepo.php:680
Implements some public methods and some protected utility functions which are required by multiple ch...
Definition: File.php:52
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:185