X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=includes%2Fmedia%2FMediaHandler.php;h=a8744a1342b636744533b7eddc3691a3755ab2b5;hb=77e2873f2eef2c3a1a5f879e812ecc8c4ec7ea42;hp=6a23bd6022d402ff3fee03c027092dcacd81eebe;hpb=c584722cc2e3d33edae58d46c2149063b3fc6d72;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/media/MediaHandler.php b/includes/media/MediaHandler.php index 6a23bd6022..a8744a1342 100644 --- a/includes/media/MediaHandler.php +++ b/includes/media/MediaHandler.php @@ -305,13 +305,11 @@ abstract class MediaHandler { } /** - * Get useful response headers for GET/HEAD requests for a file with the given metadata - * - * @param mixed $metadata Result of the getMetadata() function of this handler for a file - * @return array - */ + * @deprecated since 1.30, use MediaHandler::getContentHeaders instead + */ public function getStreamHeaders( $metadata ) { - return []; + wfDeprecated( __METHOD__, '1.30' ); + return $this->getContentHeaders( $metadata ); } /** @@ -868,4 +866,68 @@ abstract class MediaHandler { public function getWarningConfig( $file ) { return null; } + + /** + * Converts a dimensions array about a potentially multipage document from an + * exhaustive list of ordered page numbers to a list of page ranges + * @param Array $pagesByDimensions + * @return String + * @since 1.30 + */ + public static function getPageRangesByDimensions( $pagesByDimensions ) { + $pageRangesByDimensions = []; + + foreach ( $pagesByDimensions as $dimensions => $pageList ) { + $ranges = []; + $firstPage = $pageList[0]; + $lastPage = $firstPage - 1; + + foreach ( $pageList as $page ) { + if ( $page > $lastPage + 1 ) { + if ( $firstPage != $lastPage ) { + $ranges[] = "$firstPage-$lastPage"; + } else { + $ranges[] = "$firstPage"; + } + + $firstPage = $page; + } + + $lastPage = $page; + } + + if ( $firstPage != $lastPage ) { + $ranges[] = "$firstPage-$lastPage"; + } else { + $ranges[] = "$firstPage"; + } + + $pageRangesByDimensions[ $dimensions ] = $ranges; + } + + $dimensionsString = []; + foreach ( $pageRangesByDimensions as $dimensions => $pageRanges ) { + $dimensionsString[] = "$dimensions:" . implode( ',', $pageRanges ); + } + + return implode( '/', $dimensionsString ); + } + + /** + * Get useful response headers for GET/HEAD requests for a file with the given metadata + * @param $metadata Array Contains this handler's unserialized getMetadata() for a file + * @return Array + * @since 1.30 + */ + public function getContentHeaders( $metadata ) { + if ( !isset( $metadata['width'] ) || !isset( $metadata['height'] ) ) { + return []; + } + + $dimensionString = $metadata['width'] . 'x' . $metadata['height']; + $pagesByDimensions = [ $dimensionString => [ 1 ] ]; + $pageRangesByDimensions = MediaHandler::getPageRangesByDimensions( $pagesByDimensions ); + + return [ 'X-Content-Dimensions' => $pageRangesByDimensions ]; + } }