MediaWiki  master
MediaTransformOutput.php
Go to the documentation of this file.
1 <?php
29 abstract class MediaTransformOutput {
33  public $responsiveUrls = [];
34 
36  protected $file;
37 
39  protected $width;
40 
42  protected $height;
43 
45  protected $url;
46 
48  protected $page;
49 
51  protected $path;
52 
54  protected $lang;
55 
57  protected $storagePath = false;
58 
62  public function getWidth() {
63  return $this->width;
64  }
65 
69  public function getHeight() {
70  return $this->height;
71  }
72 
76  public function getFile() {
77  return $this->file;
78  }
79 
85  public function getExtension() {
86  return $this->path ? FileBackend::extensionFromPath( $this->path ) : false;
87  }
88 
92  public function getUrl() {
93  return $this->url;
94  }
95 
99  public function getStoragePath() {
100  return $this->storagePath;
101  }
102 
107  public function setStoragePath( $storagePath ) {
108  $this->storagePath = $storagePath;
109  if ( $this->path === false ) {
110  $this->path = $storagePath;
111  }
112  }
113 
134  abstract public function toHtml( $options = [] );
135 
140  public function isError() {
141  return false;
142  }
143 
155  public function hasFile() {
156  // If TRANSFORM_LATER, $this->path will be false.
157  // Note: a null path means "use the source file".
158  return ( !$this->isError() && ( $this->path || $this->path === null ) );
159  }
160 
167  public function fileIsSource() {
168  return ( !$this->isError() && $this->path === null );
169  }
170 
177  public function getLocalCopyPath() {
178  if ( $this->isError() ) {
179  return false;
180  } elseif ( $this->path === null ) {
181  return $this->file->getLocalRefPath(); // assume thumb was not scaled
182  } elseif ( FileBackend::isStoragePath( $this->path ) ) {
183  $be = $this->file->getRepo()->getBackend();
184  // The temp file will be process cached by FileBackend
185  $fsFile = $be->getLocalReference( [ 'src' => $this->path ] );
186 
187  return $fsFile ? $fsFile->getPath() : false;
188  } else {
189  return $this->path; // may return false
190  }
191  }
192 
200  public function streamFileWithStatus( $headers = [] ) {
201  if ( !$this->path ) {
202  return Status::newFatal( 'backend-fail-stream', '<no path>' );
203  } elseif ( FileBackend::isStoragePath( $this->path ) ) {
204  $be = $this->file->getRepo()->getBackend();
205  return Status::wrap(
206  $be->streamFile( [ 'src' => $this->path, 'headers' => $headers ] ) );
207  } else { // FS-file
208  $success = StreamFile::stream( $this->getLocalCopyPath(), $headers );
209  return $success ? Status::newGood() : Status::newFatal( 'backend-fail-stream', $this->path );
210  }
211  }
212 
220  public function streamFile( $headers = [] ) {
221  return $this->streamFileWithStatus( $headers )->isOK();
222  }
223 
231  protected function linkWrap( $linkAttribs, $contents ) {
232  if ( $linkAttribs ) {
233  return Xml::tags( 'a', $linkAttribs, $contents );
234  } else {
235  return $contents;
236  }
237  }
238 
244  public function getDescLinkAttribs( $title = null, $params = [] ) {
245  if ( is_array( $params ) ) {
246  $query = $params;
247  } else {
248  $query = [];
249  }
250  if ( $this->page && $this->page !== 1 ) {
251  $query['page'] = $this->page;
252  }
253  if ( $this->lang ) {
254  $query['lang'] = $this->lang;
255  }
256 
257  if ( is_string( $params ) && $params !== '' ) {
258  $query = $params . '&' . wfArrayToCgi( $query );
259  }
260 
261  $attribs = [
262  'href' => $this->file->getTitle()->getLocalURL( $query ),
263  'class' => 'image',
264  ];
265  if ( $title ) {
266  $attribs['title'] = $title;
267  }
268 
269  return $attribs;
270  }
271 }
static newFatal( $message,... $parameters)
Factory function for fatal errors.
Definition: StatusValue.php:69
getLocalCopyPath()
Get the path of a file system copy of the thumbnail.
hasFile()
Check if an output thumbnail file actually exists.
$success
bool string $path
Filesystem path to the thumb.
string $url
URL path to the thumb.
array $responsiveUrls
Associative array mapping optional supplementary image files from pixel density (eg 1...
bool string $storagePath
Permanent storage path.
static extensionFromPath( $path, $case='lowercase')
Get the final extension from a storage or FS path.
static isStoragePath( $path)
Check if a given path is a "mwstore://" path.
Base class for the output of MediaHandler::doTransform() and File::transform().
wfArrayToCgi( $array1, $array2=null, $prefix='')
This function takes one or two arrays as input, and returns a CGI-style string, e.g.
toHtml( $options=[])
Fetch HTML for this transform output.
isError()
This will be overridden to return true in error classes.
static newGood( $value=null)
Factory function for good results.
Definition: StatusValue.php:81
getDescLinkAttribs( $title=null, $params=[])
static tags( $element, $attribs, $contents)
Same as Xml::element(), but does not escape contents.
Definition: Xml.php:130
linkWrap( $linkAttribs, $contents)
Wrap some XHTML text in an anchor tag with the given attributes.
bool string $lang
Language code, false if not set.
getExtension()
Get the final extension of the thumbnail.
streamFile( $headers=[])
Stream the file if there were no errors.
static wrap( $sv)
Succinct helper method to wrap a StatusValue.
Definition: Status.php:55
static stream( $fname, $headers=[], $sendErrors=true, $optHeaders=[], $flags=0)
Stream a file to the browser, adding all the headings and fun stuff.
Definition: StreamFile.php:47
fileIsSource()
Check if the output thumbnail is the same as the source.
streamFileWithStatus( $headers=[])
Stream the file if there were no errors.
int $height
Image height.