X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fmedia%2FGeneric.php;h=a4bd7cd0643543109390a0813a3ca9731004d437;hb=5dfc928820613b6e3eeee7e97e60b1af577aa575;hp=145054cb1b99a33a6f9256d8ba15e8b53225c4c0;hpb=786e93fb3708f90e55811000eab2a6bbd6e3e08f;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/media/Generic.php b/includes/media/Generic.php index 145054cb1b..a4bd7cd064 100644 --- a/includes/media/Generic.php +++ b/includes/media/Generic.php @@ -1,13 +1,14 @@ validateParam() + * @param $image File: the image object + * @param $dstPath String: filesystem destination path + * @param $dstUrl String: Destination URL to use in output HTML + * @param $params Array: Arbitrary set of parameters validated by $this->validateParam() */ function getTransform( $image, $dstPath, $dstUrl, $params ) { return $this->doTransform( $image, $dstPath, $dstUrl, $params, self::TRANSFORM_LATER ); } /** - * Get a MediaTransformOutput object representing the transformed output. Does the + * Get a MediaTransformOutput object representing the transformed output. Does the * transform unless $flags contains self::TRANSFORM_LATER. * - * @param Image $image The image object - * @param string $dstPath Filesystem destination path - * @param string $dstUrl Destination URL to use in output HTML - * @param array $params Arbitrary set of parameters validated by $this->validateParam() - * @param integer $flags A bitfield, may contain self::TRANSFORM_LATER + * @param $image File: the image object + * @param $dstPath String: filesystem destination path + * @param $dstUrl String: destination URL to use in output HTML + * @param $params Array: arbitrary set of parameters validated by $this->validateParam() + * @param $flags Integer: a bitfield, may contain self::TRANSFORM_LATER */ abstract function doTransform( $image, $dstPath, $dstUrl, $params, $flags = 0 ); @@ -127,14 +141,14 @@ abstract class MediaHandler { */ function getThumbType( $ext, $mime ) { return array( $ext, $mime ); - } + } /** * True if the handled types can be transformed */ function canRender( $file ) { return true; } /** - * True if handled types cannot be displayed directly in a browser + * True if handled types cannot be displayed directly in a browser * but can be rendered */ function mustRender( $file ) { return false; } @@ -153,7 +167,7 @@ abstract class MediaHandler { /** * Get an associative array of page dimensions - * Currently "width" and "height" are understood, but this might be + * Currently "width" and "height" are understood, but this might be * expanded in the future. * Returns false if unknown or if the document is not multi-page. */ @@ -165,6 +179,14 @@ abstract class MediaHandler { ); } + /** + * Generic getter for text layer. + * Currently overloaded by PDF and DjVu handlers + */ + function getPageText( $image, $page ) { + return false; + } + /** * Get an array structure that looks like this: * @@ -178,7 +200,7 @@ abstract class MediaHandler { * ... * ) * ) - * The UI will format this into a table where the visible fields are always + * The UI will format this into a table where the visible fields are always * visible, and the collapsed fields are optionally visible. * * The function should return false if there is no metadata to display. @@ -186,20 +208,28 @@ abstract class MediaHandler { /** * FIXME: I don't really like this interface, it's not very flexible - * I think the media handler should generate HTML instead. It can do + * I think the media handler should generate HTML instead. It can do * all the formatting according to some standard. That makes it possible * to do things like visual indication of grouped and chained streams * in ogg container files. */ - function formatMetadata( $image, $metadata ) { + function formatMetadata( $image ) { return false; } + /** + * @todo Fixme: document this! + * 'value' thingy goes into a wikitext table; it used to be escaped but + * that was incompatible with previous practice of customized display + * with wikitext formatting via messages such as 'exif-model-value'. + * So the escaping is taken back out, but generally this seems a confusing + * interface. + */ protected static function addMeta( &$array, $visibility, $type, $id, $value, $param = false ) { $array[$visibility][] = array( 'id' => "$type-$id", 'name' => wfMsg( "$type-$id", $param ), - 'value' => wfEscapeWikiText( $value ) + 'value' => $value ); } @@ -207,16 +237,33 @@ abstract class MediaHandler { global $wgLang; $nbytes = '(' . wfMsgExt( 'nbytes', array( 'parsemag', 'escape' ), $wgLang->formatNum( $file->getSize() ) ) . ')'; - return "($nbytes)"; + return "$nbytes"; } function getLongDesc( $file ) { global $wgUser; $sk = $wgUser->getSkin(); - return wfMsg( 'file-info', $sk->formatSize( $file->getSize() ), $file->getMimeType() ); + return wfMsgExt( 'file-info', 'parseinline', + $sk->formatSize( $file->getSize() ), + $file->getMimeType() ); + } + + static function getGeneralShortDesc( $file ) { + global $wgLang; + $nbytes = '(' . wfMsgExt( 'nbytes', array( 'parsemag', 'escape' ), + $wgLang->formatNum( $file->getSize() ) ) . ')'; + return "$nbytes"; + } + + static function getGeneralLongDesc( $file ) { + global $wgUser; + $sk = $wgUser->getSkin(); + return wfMsgExt( 'file-info', 'parseinline', + $sk->formatSize( $file->getSize() ), + $file->getMimeType() ); } - function getDimensionsString() { + function getDimensionsString( $file ) { return ''; } @@ -224,12 +271,34 @@ abstract class MediaHandler { * Modify the parser object post-transform */ function parserTransformHook( $parser, $file ) {} + + /** + * Check for zero-sized thumbnails. These can be generated when + * no disk space is available or some other error occurs + * + * @param $dstPath The location of the suspect file + * @param $retval Return value of some shell process, file will be deleted if this is non-zero + * @return true if removed, false otherwise + */ + function removeBadFile( $dstPath, $retval = 0 ) { + if( file_exists( $dstPath ) ) { + $thumbstat = stat( $dstPath ); + if( $thumbstat['size'] == 0 || $retval != 0 ) { + wfDebugLog( 'thumbnail', + sprintf( 'Removing bad %d-byte thumbnail "%s"', + $thumbstat['size'], $dstPath ) ); + unlink( $dstPath ); + return true; + } + } + return false; + } } /** * Media handler abstract base class for images * - * @addtogroup Media + * @ingroup Media */ abstract class ImageHandler extends MediaHandler { function canRender( $file ) { @@ -311,13 +380,13 @@ abstract class ImageHandler extends MediaHandler { function getTransform( $image, $dstPath, $dstUrl, $params ) { return $this->doTransform( $image, $dstPath, $dstUrl, $params, self::TRANSFORM_LATER ); } - + /** * Validate thumbnail parameters and fill in the correct height * - * @param integer &$width Specified width (input/output) - * @param integer &$height Height (output only) - * @return false to indicate that an error should be returned to the user. + * @param $width Integer: specified width (input/output) + * @param $height Integer: height (output only) + * @return false to indicate that an error should be returned to the user. */ function validateThumbParams( &$width, &$height, $srcWidth, $srcHeight, $mimeType ) { $width = intval( $width ); @@ -341,29 +410,11 @@ abstract class ImageHandler extends MediaHandler { return false; } $url = $script . '&' . wfArrayToCGI( $this->getScriptParams( $params ) ); - return new ThumbnailImage( $url, $params['width'], $params['height'] ); - } + $page = isset( $params['page'] ) ? $params['page'] : false; - /** - * Check for zero-sized thumbnails. These can be generated when - * no disk space is available or some other error occurs - * - * @param $dstPath The location of the suspect file - * @param $retval Return value of some shell process, file will be deleted if this is non-zero - * @return true if removed, false otherwise - */ - function removeBadFile( $dstPath, $retval = 0 ) { - if( file_exists( $dstPath ) ) { - $thumbstat = stat( $dstPath ); - if( $thumbstat['size'] == 0 || $retval != 0 ) { - wfDebugLog( 'thumbnail', - sprintf( 'Removing bad %d-byte thumbnail "%s"', - $thumbstat['size'], $dstPath ) ); - unlink( $dstPath ); - return true; - } + if( $image->mustRender() || $params['width'] < $image->getWidth() ) { + return new ThumbnailImage( $image, $url, $params['width'], $params['height'], $page ); } - return false; } function getImageSize( $image, $path ) { @@ -373,30 +424,39 @@ abstract class ImageHandler extends MediaHandler { return $gis; } + function isAnimatedImage( $image ) { + return false; + } + function getShortDesc( $file ) { global $wgLang; - $nbytes = '(' . wfMsgExt( 'nbytes', array( 'parsemag', 'escape' ), - $wgLang->formatNum( $file->getSize() ) ) . ')'; - $widthheight = wfMsgHtml( 'widthheight', $file->getWidth(), $file->getHeight() ); - + $nbytes = wfMsgExt( 'nbytes', array( 'parsemag', 'escape' ), + $wgLang->formatNum( $file->getSize() ) ); + $widthheight = wfMsgHtml( 'widthheight', $wgLang->formatNum( $file->getWidth() ) ,$wgLang->formatNum( $file->getHeight() ) ); + return "$widthheight ($nbytes)"; } function getLongDesc( $file ) { global $wgLang; - return wfMsgHtml('file-info-size', $file->getWidth(), $file->getHeight(), - $wgLang->formatSize( $file->getSize() ), $file->getMimeType() ); + return wfMsgExt('file-info-size', 'parseinline', + $wgLang->formatNum( $file->getWidth() ), + $wgLang->formatNum( $file->getHeight() ), + $wgLang->formatSize( $file->getSize() ), + $file->getMimeType() ); } function getDimensionsString( $file ) { + global $wgLang; $pages = $file->pageCount(); + $width = $wgLang->formatNum( $file->getWidth() ); + $height = $wgLang->formatNum( $file->getHeight() ); + $pagesFmt = $wgLang->formatNum( $pages ); + if ( $pages > 1 ) { - return wfMsg( 'widthheightpage', $file->getWidth(), $file->getHeight(), $pages ); + return wfMsgExt( 'widthheightpage', 'parsemag', $width, $height, $pagesFmt ); } else { - return wfMsg( 'widthheight', $file->getWidth(), $file->getHeight() ); + return wfMsg( 'widthheight', $width, $height ); } } } - - -