wiki.techinc.nl/includes/MediaTransformOutput.php
Tim Starling ed4303922f Merged filerepo-work branch:
* Added support for configuration of an arbitrary number of commons-style file repositories.
* Split Image.php into filerepo/File.php and filerepo/LocalFile.php
* Renamed Image::getImagePath() to File::getPath()
* Added initial support for timestamp-based file fetching (OldLocalFile), to be expanded upon by aaron.
* Changed the interface for Image/File object creation: use wfFindFile() or wfLocalFile() depending on semantics
* ImageGallery::add() now accepts a title object as the first parameter
* Moved file handling operations on upload from SpecialUpload to File
* Removed path-related functions from ImageFunctions.php. Removed static path accessors from File. 
* Added a Content-Disposition header to thumb.php output
* Improved thumb.php error handling
* Updated the unit test suite to kind of partially work with modern computers. RunTests.php doesn't work just yet. Fixed an actual regression that the test suite detected -- moved some defines to Defines.php where they will be loaded consistently.
2007-05-30 21:02:32 +00:00

167 lines
4 KiB
PHP

<?php
/**
* Base class for the output of MediaHandler::doTransform() and File::transform().
*
* @addtogroup Media
*/
abstract class MediaTransformOutput {
/**
* Get the width of the output box
*/
function getWidth() {
return $this->width;
}
/**
* Get the height of the output box
*/
function getHeight() {
return $this->height;
}
/**
* @return string The thumbnail URL
*/
function getUrl() {
return $this->url;
}
/**
* @return string Destination file path (local filesystem)
*/
function getPath() {
return $this->path;
}
/**
* Fetch HTML for this transform output
* @param array $attribs Advisory associative array of HTML attributes supplied
* by the linker. These can be incorporated into the output in any way.
* @param array $linkAttribs Attributes of a suggested enclosing <a> tag.
* May be ignored.
*/
abstract function toHtml( $attribs = array() , $linkAttribs = false );
/**
* This will be overridden to return true in error classes
*/
function isError() {
return false;
}
/**
* Wrap some XHTML text in an anchor tag with the given attributes
*/
protected function linkWrap( $linkAttribs, $contents ) {
if ( $linkAttribs ) {
return Xml::tags( 'a', $linkAttribs, $contents );
} else {
return $contents;
}
}
}
/**
* Media transform output for images
*
* @addtogroup Media
*/
class ThumbnailImage extends MediaTransformOutput {
/**
* @param string $path Filesystem path to the thumb
* @param string $url URL path to the thumb
* @private
*/
function ThumbnailImage( $url, $width, $height, $path = false ) {
$this->url = $url;
# These should be integers when they get here.
# If not, there's a bug somewhere. But let's at
# least produce valid HTML code regardless.
$this->width = round( $width );
$this->height = round( $height );
$this->path = $path;
}
/**
* Return HTML <img ... /> tag for the thumbnail, will include
* width and height attributes and a blank alt text (as required).
*
* You can set or override additional attributes by passing an
* associative array of name => data pairs. The data will be escaped
* for HTML output, so should be in plaintext.
*
* If $linkAttribs is given, the image will be enclosed in an <a> tag.
*
* @param array $attribs
* @param array $linkAttribs
* @return string
* @public
*/
function toHtml( $attribs = array(), $linkAttribs = false ) {
$attribs['src'] = $this->url;
$attribs['width'] = $this->width;
$attribs['height'] = $this->height;
if( !isset( $attribs['alt'] ) ) $attribs['alt'] = '';
return $this->linkWrap( $linkAttribs, Xml::element( 'img', $attribs ) );
}
}
/**
* Basic media transform error class
*
* @addtogroup Media
*/
class MediaTransformError extends MediaTransformOutput {
var $htmlMsg, $textMsg, $width, $height, $url, $path;
function __construct( $msg, $width, $height /*, ... */ ) {
$args = array_slice( func_get_args(), 3 );
$htmlArgs = array_map( 'htmlspecialchars', $args );
$htmlArgs = array_map( 'nl2br', $htmlArgs );
$this->htmlMsg = wfMsgReplaceArgs( htmlspecialchars( wfMsgGetKey( $msg, true ) ), $htmlArgs );
$this->textMsg = wfMsgReal( $msg, $args );
$this->width = intval( $width );
$this->height = intval( $height );
$this->url = false;
$this->path = false;
}
function toHtml( $attribs = array(), $linkAttribs = false ) {
return "<table class=\"MediaTransformError\" style=\"" .
"width: {$this->width}px; height: {$this->height}px;\"><tr><td>" .
$this->htmlMsg .
"</td></tr></table>";
}
function toText() {
return $this->textMsg;
}
function getHtmlMsg() {
return $this->htmlMsg;
}
function isError() {
return true;
}
}
/**
* Shortcut class for parameter validation errors
*
* @addtogroup Media
*/
class TransformParameterError extends MediaTransformError {
function __construct( $params ) {
parent::__construct( 'thumbnail_error',
max( isset( $params['width'] ) ? $params['width'] : 0, 180 ),
max( isset( $params['height'] ) ? $params['height'] : 0, 180 ),
wfMsg( 'thumbnail_invalid_params' ) );
}
}
?>