MediaWiki  1.28.0
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  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 
128  function getWidth( $page = 1 ) {
129  $dim = $this->cachePageDimensions( $page );
130 
131  return $dim['width'];
132  }
133 
138  function getHeight( $page = 1 ) {
139  $dim = $this->cachePageDimensions( $page );
140 
141  return $dim['height'];
142  }
143 
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 
160  function getImageSize( $filename ) {
161  if ( !$this->getHandler() ) {
162  return false;
163  }
164 
165  return $this->handler->getImageSize( $this, $this->getLocalRefPath() );
166  }
167 
171  function getBitDepth() {
172  $gis = $this->getImageSize( $this->getLocalRefPath() );
173 
174  if ( !$gis || !isset( $gis['bits'] ) ) {
175  return 0;
176  }
177  return $gis['bits'];
178  }
179 
183  function getMetadata() {
184  if ( !isset( $this->metadata ) ) {
185  if ( !$this->getHandler() ) {
186  $this->metadata = false;
187  } else {
188  $this->metadata = $this->handler->getMetadata( $this, $this->getLocalRefPath() );
189  }
190  }
191 
192  return $this->metadata;
193  }
194 
198  function getURL() {
199  if ( $this->repo ) {
200  return $this->repo->getZoneUrl( 'public' ) . '/' .
201  $this->repo->getHashPath( $this->name ) . rawurlencode( $this->name );
202  } else {
203  return false;
204  }
205  }
206 
210  function getSize() {
211  $this->assertRepoDefined();
212 
213  return $this->repo->getFileSize( $this->path );
214  }
215 
224  public function setLocalReference( FSFile $fsFile ) {
225  $this->fsFile = $fsFile;
226  }
227 }
bool string $metadata
Handler-specific metadata which will be saved in the img_metadata field.
getHashPath($name)
Get a relative path including trailing slash, e.g.
Definition: FileRepo.php:659
getLocalRefPath()
Get an FS copy or original of this file and return the path.
Definition: File.php:432
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:183
processing should stop and the error should be shown to the user * false
Definition: hooks.txt:189
getRootDirectory()
Get the public zone root storage directory of the repository.
Definition: FileRepo.php:648
setLocalReference(FSFile $fsFile)
Optimize getLocalRefPath() by using an existing local reference.
static singleton()
Get an instance of this class.
Definition: MimeMagic.php:29
FSFile bool $fsFile
False if undefined.
Definition: File.php:110
static newFromTitle($title, $repo)
assertRepoDefined()
Assert that $this->repo is set to a valid FileRepo instance.
Definition: File.php:2247
string $name
The name of a file from its title object.
Definition: File.php:122
title
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:1364
FileRepo LocalRepo ForeignAPIRepo bool $repo
Some member variables can be lazy-initialised using __get().
Definition: File.php:95
array $dims
Dimension data.
getNameFromTitle(Title $title)
Get the name of a file from its title object.
Definition: FileRepo.php:629
this hook is for auditing only or null if authentication failed before getting that far or null if we can t even determine that probably a stub 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:802
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
Class representing a non-directory file on the file system.
Definition: FSFile.php:29
__construct($title=false, $repo=false, $path=false, $mime=false)
Create an UnregisteredLocalFile based on a path or a (title,repo) pair.
design txt This is a brief overview of the new design More thorough and up to date information is available on the documentation wiki at name
Definition: design.txt:12
static newFromPath($path, $mime)
Implements some public methods and some protected utility functions which are required by multiple ch...
Definition: File.php:50
do that in ParserLimitReportFormat instead use this to modify the parameters of the image and a DIV can begin in one section and end in another Make sure your code can handle that case gracefully See the EditSectionClearerLink extension for an example zero but section is usually empty its values are the globals values before the output is cached $page
Definition: hooks.txt:2491