X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FImageFunctions.php;h=4b90e24aacd35fd4758c14da7bd48e3cbd5d6869;hb=a469cf2c95e72e657d579324f28300dba502e451;hp=8f40c81c15186f66d25286b9f98576e0825d4406;hpb=611b224f3180fcedad2e4c4bd77b24a4fcf506f9;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/ImageFunctions.php b/includes/ImageFunctions.php index 8f40c81c15..4b90e24aac 100644 --- a/includes/ImageFunctions.php +++ b/includes/ImageFunctions.php @@ -1,69 +1,9 @@ 1.0, - 'pt' => 1.25, - 'pc' => 15.0, - 'mm' => 3.543307, - 'cm' => 35.43307, - 'in' => 90.0, - '' => 1.0, // "User units" pixels by default - '%' => 2.0, // Fake it! - ); - $matches = array(); - if( preg_match( '/^\s*(\d+(?:\.\d+)?)(em|ex|px|pt|pc|cm|mm|in|%|)\s*$/', $length, $matches ) ) { - $length = floatval( $matches[1] ); - $unit = $matches[2]; - return round( $length * $unitLength[$unit] ); - } else { - // Assume pixels - return round( floatval( $length ) ); - } -} - -class XmlSizeFilter { - var $first = true; - var $width = 256; - var $height = 256; - function filter( $name, $attribs ) { - if( $this->first ) { - if( isset( $attribs['width'] ) ) { - $this->width = wfScaleSVGUnit( $attribs['width'] ); - } - if( isset( $attribs['height'] ) ) { - $this->height = wfScaleSVGUnit( $attribs['height'] ); - } - $this->first = false; - } - } -} - -/** - * Compatible with PHP getimagesize() - * @todo support gzipped SVGZ - * @todo check XML more carefully - * @todo sensible defaults - * - * @param $filename String: full name of the file (passed to php fopen()). - * @return array - */ -function wfGetSVGsize( $filename ) { - $filter = new XmlSizeFilter(); - $xml = new XmlTypeCheck( $filename, array( $filter, 'filter' ) ); - if( $xml->wellFormed ) { - return array( $filter->width, $filter->height, 'SVG', - "width=\"$filter->width\" height=\"$filter->height\"" ); - } - - return false; -} /** * Determine if an image exists on the 'bad image list'. @@ -75,24 +15,37 @@ function wfGetSVGsize( $filename ) { * i.e. articles where the image may occur inline. * * @param $name string the image name to check - * @param $contextTitle Title: the page on which the image occurs, if known + * @param $contextTitle Title|bool the page on which the image occurs, if known + * @param $blacklist string wikitext of a file blacklist * @return bool */ -function wfIsBadImage( $name, $contextTitle = false ) { - static $badImages = false; +function wfIsBadImage( $name, $contextTitle = false, $blacklist = null ) { + static $badImageCache = null; // based on bad_image_list msg wfProfileIn( __METHOD__ ); + # Handle redirects + $redirectTitle = RepoGroup::singleton()->checkRedirect( Title::makeTitle( NS_FILE, $name ) ); + if( $redirectTitle ) { + $name = $redirectTitle->getDbKey(); + } + # Run the extension hook $bad = false; if( !wfRunHooks( 'BadImage', array( $name, &$bad ) ) ) { wfProfileOut( __METHOD__ ); return $bad; } - - if( !$badImages ) { + + $cacheable = ( $blacklist === null ); + if( $cacheable && $badImageCache !== null ) { + $badImages = $badImageCache; + } else { // cache miss + if ( $blacklist === null ) { + $blacklist = wfMsgForContentNoTrans( 'bad_image_list' ); // site list + } # Build the list now $badImages = array(); - $lines = explode( "\n", wfMsgForContentNoTrans( 'bad_image_list' ) ); + $lines = explode( "\n", $blacklist ); foreach( $lines as $line ) { # List items only if ( substr( $line, 0, 1 ) !== '*' ) { @@ -122,6 +75,9 @@ function wfIsBadImage( $name, $contextTitle = false ) { $badImages[$imageDBkey] = $exceptions; } } + if ( $cacheable ) { + $badImageCache = $badImages; + } } $contextKey = $contextTitle ? $contextTitle->getPrefixedDBkey() : false; @@ -129,20 +85,3 @@ function wfIsBadImage( $name, $contextTitle = false ) { wfProfileOut( __METHOD__ ); return $bad; } - -/** - * Calculate the largest thumbnail width for a given original file size - * such that the thumbnail's height is at most $maxHeight. - * @param $boxWidth Integer Width of the thumbnail box. - * @param $boxHeight Integer Height of the thumbnail box. - * @param $maxHeight Integer Maximum height expected for the thumbnail. - * @return Integer. - */ -function wfFitBoxWidth( $boxWidth, $boxHeight, $maxHeight ) { - $idealWidth = $boxWidth * $maxHeight / $boxHeight; - $roundedUp = ceil( $idealWidth ); - if( round( $roundedUp * $boxHeight / $boxWidth ) > $maxHeight ) - return floor( $idealWidth ); - else - return $roundedUp; -}