filebackend: use self:: instead of FileBackend:: for some constant uses
[lhc/web/wiklou.git] / includes / media / MediaTransformOutput.php
index 48ea4a5..463a794 100644 (file)
@@ -202,7 +202,8 @@ abstract class MediaTransformOutput {
                        return Status::newFatal( 'backend-fail-stream', '<no path>' );
                } elseif ( FileBackend::isStoragePath( $this->path ) ) {
                        $be = $this->file->getRepo()->getBackend();
-                       return $be->streamFile( [ 'src' => $this->path, 'headers' => $headers ] );
+                       return Status::wrap(
+                               $be->streamFile( [ 'src' => $this->path, 'headers' => $headers ] ) );
                } else { // FS-file
                        $success = StreamFile::stream( $this->getLocalCopyPath(), $headers );
                        return $success ? Status::newGood() : Status::newFatal( 'backend-fail-stream', $this->path );
@@ -268,277 +269,3 @@ abstract class MediaTransformOutput {
                return $attribs;
        }
 }
-
-/**
- * Media transform output for images
- *
- * @ingroup Media
- */
-class ThumbnailImage extends MediaTransformOutput {
-       private static $firstNonIconImageRendered = false;
-
-       /**
-        * Get a thumbnail object from a file and parameters.
-        * If $path is set to null, the output file is treated as a source copy.
-        * If $path is set to false, no output file will be created.
-        * $parameters should include, as a minimum, (file) 'width' and 'height'.
-        * It may also include a 'page' parameter for multipage files.
-        *
-        * @param File $file
-        * @param string $url URL path to the thumb
-        * @param string|bool $path Filesystem path to the thumb
-        * @param array $parameters Associative array of parameters
-        */
-       function __construct( $file, $url, $path = false, $parameters = [] ) {
-               # Previous parameters:
-               #   $file, $url, $width, $height, $path = false, $page = false
-
-               $defaults = [
-                       'page' => false,
-                       'lang' => false
-               ];
-
-               if ( is_array( $parameters ) ) {
-                       $actualParams = $parameters + $defaults;
-               } else {
-                       # Using old format, should convert. Later a warning could be added here.
-                       $numArgs = func_num_args();
-                       $actualParams = [
-                               'width' => $path,
-                               'height' => $parameters,
-                               'page' => ( $numArgs > 5 ) ? func_get_arg( 5 ) : false
-                       ] + $defaults;
-                       $path = ( $numArgs > 4 ) ? func_get_arg( 4 ) : false;
-               }
-
-               $this->file = $file;
-               $this->url = $url;
-               $this->path = $path;
-
-               # 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( $actualParams['width'] );
-               $this->height = round( $actualParams['height'] );
-
-               $this->page = $actualParams['page'];
-               $this->lang = $actualParams['lang'];
-       }
-
-       /**
-        * Return HTML <img ... /> tag for the thumbnail, will include
-        * width and height attributes and a blank alt text (as required).
-        *
-        * @param array $options Associative array of options. Boolean options
-        *     should be indicated with a value of true for true, and false or
-        *     absent for false.
-        *
-        *     alt          HTML alt attribute
-        *     title        HTML title attribute
-        *     desc-link    Boolean, show a description link
-        *     file-link    Boolean, show a file download link
-        *     valign       vertical-align property, if the output is an inline element
-        *     img-class    Class applied to the \<img\> tag, if there is such a tag
-        *     desc-query   String, description link query params
-        *     override-width     Override width attribute. Should generally not set
-        *     override-height    Override height attribute. Should generally not set
-        *     no-dimensions      Boolean, skip width and height attributes (useful if
-        *                        set in CSS)
-        *     custom-url-link    Custom URL to link to
-        *     custom-title-link  Custom Title object to link to
-        *     custom target-link Value of the target attribute, for custom-target-link
-        *     parser-extlink-*   Attributes added by parser for external links:
-        *          parser-extlink-rel: add rel="nofollow"
-        *          parser-extlink-target: link target, but overridden by custom-target-link
-        *
-        * For images, desc-link and file-link are implemented as a click-through. For
-        * sounds and videos, they may be displayed in other ways.
-        *
-        * @throws MWException
-        * @return string
-        */
-       function toHtml( $options = [] ) {
-               global $wgPriorityHints, $wgElementTiming;
-
-               if ( count( func_get_args() ) == 2 ) {
-                       throw new MWException( __METHOD__ . ' called in the old style' );
-               }
-
-               $alt = $options['alt'] ?? '';
-
-               $query = $options['desc-query'] ?? '';
-
-               $attribs = [
-                       'alt' => $alt,
-                       'src' => $this->url,
-                       'decoding' => 'async',
-               ];
-
-               $elementTimingName = 'thumbnail';
-
-               if ( $wgPriorityHints
-                       && !self::$firstNonIconImageRendered
-                       && $this->width * $this->height > 100 * 100 ) {
-                       self::$firstNonIconImageRendered = true;
-
-                       $attribs['importance'] = 'high';
-                       $elementTimingName = 'thumbnail-high';
-               }
-
-               if ( $wgElementTiming ) {
-                       $attribs['elementtiming'] = $elementTimingName;
-               }
-
-               if ( !empty( $options['custom-url-link'] ) ) {
-                       $linkAttribs = [ 'href' => $options['custom-url-link'] ];
-                       if ( !empty( $options['title'] ) ) {
-                               $linkAttribs['title'] = $options['title'];
-                       }
-                       if ( !empty( $options['custom-target-link'] ) ) {
-                               $linkAttribs['target'] = $options['custom-target-link'];
-                       } elseif ( !empty( $options['parser-extlink-target'] ) ) {
-                               $linkAttribs['target'] = $options['parser-extlink-target'];
-                       }
-                       if ( !empty( $options['parser-extlink-rel'] ) ) {
-                               $linkAttribs['rel'] = $options['parser-extlink-rel'];
-                       }
-               } elseif ( !empty( $options['custom-title-link'] ) ) {
-                       /** @var Title $title */
-                       $title = $options['custom-title-link'];
-                       $linkAttribs = [
-                               'href' => $title->getLinkURL(),
-                               'title' => empty( $options['title'] ) ? $title->getFullText() : $options['title']
-                       ];
-               } elseif ( !empty( $options['desc-link'] ) ) {
-                       $linkAttribs = $this->getDescLinkAttribs(
-                               empty( $options['title'] ) ? null : $options['title'],
-                               $query
-                       );
-               } elseif ( !empty( $options['file-link'] ) ) {
-                       $linkAttribs = [ 'href' => $this->file->getUrl() ];
-               } else {
-                       $linkAttribs = false;
-                       if ( !empty( $options['title'] ) ) {
-                               $attribs['title'] = $options['title'];
-                       }
-               }
-
-               if ( empty( $options['no-dimensions'] ) ) {
-                       $attribs['width'] = $this->width;
-                       $attribs['height'] = $this->height;
-               }
-               if ( !empty( $options['valign'] ) ) {
-                       $attribs['style'] = "vertical-align: {$options['valign']}";
-               }
-               if ( !empty( $options['img-class'] ) ) {
-                       $attribs['class'] = $options['img-class'];
-               }
-               if ( isset( $options['override-height'] ) ) {
-                       $attribs['height'] = $options['override-height'];
-               }
-               if ( isset( $options['override-width'] ) ) {
-                       $attribs['width'] = $options['override-width'];
-               }
-
-               // Additional densities for responsive images, if specified.
-               // If any of these urls is the same as src url, it'll be excluded.
-               $responsiveUrls = array_diff( $this->responsiveUrls, [ $this->url ] );
-               if ( !empty( $responsiveUrls ) ) {
-                       $attribs['srcset'] = Html::srcSet( $responsiveUrls );
-               }
-
-               Hooks::run( 'ThumbnailBeforeProduceHTML', [ $this, &$attribs, &$linkAttribs ] );
-
-               return $this->linkWrap( $linkAttribs, Xml::element( 'img', $attribs ) );
-       }
-}
-
-/**
- * Basic media transform error class
- *
- * @ingroup Media
- */
-class MediaTransformError extends MediaTransformOutput {
-       /** @var Message */
-       private $msg;
-
-       function __construct( $msg, $width, $height /*, ... */ ) {
-               $args = array_slice( func_get_args(), 3 );
-               $this->msg = wfMessage( $msg )->params( $args );
-               $this->width = intval( $width );
-               $this->height = intval( $height );
-               $this->url = false;
-               $this->path = false;
-       }
-
-       function toHtml( $options = [] ) {
-               return "<div class=\"MediaTransformError\" style=\"" .
-                       "width: {$this->width}px; height: {$this->height}px; display:inline-block;\">" .
-                       $this->getHtmlMsg() .
-                       "</div>";
-       }
-
-       function toText() {
-               return $this->msg->text();
-       }
-
-       function getHtmlMsg() {
-               return $this->msg->escaped();
-       }
-
-       function getMsg() {
-               return $this->msg;
-       }
-
-       function isError() {
-               return true;
-       }
-
-       function getHttpStatusCode() {
-               return 500;
-       }
-}
-
-/**
- * Shortcut class for parameter validation errors
- *
- * @ingroup Media
- */
-class TransformParameterError extends MediaTransformError {
-       function __construct( $params ) {
-               parent::__construct( 'thumbnail_error',
-                       max( $params['width'] ?? 0, 120 ),
-                       max( $params['height'] ?? 0, 120 ),
-                       wfMessage( 'thumbnail_invalid_params' )
-               );
-       }
-
-       function getHttpStatusCode() {
-               return 400;
-       }
-}
-
-/**
- * Shortcut class for parameter file size errors
- *
- * @ingroup Media
- * @since 1.25
- */
-class TransformTooBigImageAreaError extends MediaTransformError {
-       function __construct( $params, $maxImageArea ) {
-               $msg = wfMessage( 'thumbnail_toobigimagearea' );
-               $msg->params(
-                       $msg->getLanguage()->formatComputingNumbers( $maxImageArea, 1000, "size-$1pixel" )
-               );
-
-               parent::__construct( 'thumbnail_error',
-                       max( $params['width'] ?? 0, 120 ),
-                       max( $params['height'] ?? 0, 120 ),
-                       $msg
-               );
-       }
-
-       function getHttpStatusCode() {
-               return 400;
-       }
-}