Fix for issue noted on CR r64876: fatal error on CSS/JS subpage display
[lhc/web/wiklou.git] / includes / ImageGallery.php
index 45ac9cf..e5a8070 100644 (file)
@@ -32,20 +32,22 @@ class ImageGallery
         */
        private $contextTitle = false;
 
-       private $mPerRow = 4; // How many images wide should the gallery be?
-       private $mWidths = 120, $mHeights = 120; // How wide/tall each thumbnail should be
-
        private $mAttribs = array();
 
        /**
         * Create a new image gallery object.
         */
        function __construct( ) {
+               global $wgGalleryOptions;
                $this->mImages = array();
-               $this->mShowBytes = true;
+               $this->mShowBytes = $wgGalleryOptions['showBytes'];
                $this->mShowFilename = true;
                $this->mParser = false;
                $this->mHideBadImages = false;
+               $this->mPerRow = $wgGalleryOptions['imagesPerRow'];
+               $this->mWidths = $wgGalleryOptions['imageWidth'];
+               $this->mHeights = $wgGalleryOptions['imageHeight'];
+               $this->mCaptionLength = $wgGalleryOptions['captionLength'];
        }
 
        /**
@@ -83,7 +85,7 @@ class ImageGallery
        /**
         * Set how many images will be displayed per row.
         *
-        * @param int $num > 0; invalid numbers will be rejected
+        * @param $num Integer > 0; invalid numbers will be rejected
         */
        public function setPerRow( $num ) {
                if ($num > 0) {
@@ -94,7 +96,7 @@ class ImageGallery
        /**
         * Set how wide each image will be, in pixels.
         *
-        * @param int $num > 0; invalid numbers will be ignored
+        * @param $num Integer > 0; invalid numbers will be ignored
         */
        public function setWidths( $num ) {
                if ($num > 0) {
@@ -105,7 +107,7 @@ class ImageGallery
        /**
         * Set how high each image will be, in pixels.
         *
-        * @param int $num > 0; invalid numbers will be ignored
+        * @param $num Integer > 0; invalid numbers will be ignored
         */
        public function setHeights( $num ) {
                if ($num > 0) {
@@ -201,7 +203,7 @@ class ImageGallery
         * Note -- if taking from user input, you should probably run through
         * Sanitizer::validateAttributes() first.
         *
-        * @param array of HTML attribute pairs
+        * @param $attribs Array of HTML attribute pairs
         */
        function setAttributes( $attribs ) {
                $this->mAttribs = $attribs;
@@ -236,13 +238,13 @@ class ImageGallery
                $i = 0;
                foreach ( $this->mImages as $pair ) {
                        $nt = $pair[0];
-                       $text = $pair[1];
+                       $text = $pair[1]; # "text" means "caption" here
 
                        # Give extensions a chance to select the file revision for us
                        $time = $descQuery = false;
                        wfRunHooks( 'BeforeGalleryFindFile', array( &$this, &$nt, &$time, &$descQuery ) );
 
-                       $img = wfFindFile( $nt, $time );
+                       $img = wfFindFile( $nt, array( 'time' => $time ) );
 
                        if( $nt->getNamespace() != NS_FILE || !$img ) {
                                # We're dealing with a non-image, spit out the name and be done with it.
@@ -265,6 +267,15 @@ class ImageGallery
                                        . htmlspecialchars( $img->getLastError() ) . '</div>';
                        } else {
                                $vpad = floor( ( 1.25*$this->mHeights - $thumb->height ) /2 ) - 2;
+                               
+                               $imageParameters = array(
+                                       'desc-link' => true,
+                                       'desc-query' => $descQuery
+                               );
+                               # In the absence of a caption, fall back on providing screen readers with the filename as alt text
+                               if ( $text == '' ) {
+                                       $imageParameters['alt'] = $nt->getText();
+                               }
 
                                $thumbhtml = "\n\t\t\t".
                                        '<div class="thumb" style="padding: ' . $vpad . 'px 0; width: ' .($this->mWidths+30).'px;">'
@@ -272,7 +283,7 @@ class ImageGallery
                                        # handlers since they may emit block-level elements as opposed to simple <img> tags.
                                        # ref http://css-discuss.incutio.com/?page=CenteringBlockElement
                                        . '<div style="margin-left: auto; margin-right: auto; width: ' .$this->mWidths.'px;">'
-                                       . $thumb->toHtml( array( 'desc-link' => true, 'desc-query' => $descQuery ) ) . '</div></div>';
+                                       . $thumb->toHtml( $imageParameters ) . '</div></div>';
 
                                // Call parser transform hook
                                if ( $this->mParser && $img->getHandler() ) {
@@ -299,7 +310,7 @@ class ImageGallery
                        $textlink = $this->mShowFilename ?
                                $sk->link(
                                        $nt,
-                                       htmlspecialchars( $wgLang->truncate( $nt->getText(), 20 ) )
+                                       htmlspecialchars( $wgLang->truncate( $nt->getText(), $this->mCaptionLength ) ),
                                        array(),
                                        array(),
                                        array( 'known', 'noclasses' )
@@ -334,7 +345,7 @@ class ImageGallery
        }
 
        /**
-        * @return int Number of images in the gallery
+        * @return Integer: number of images in the gallery
         */
        public function count() {
                return count( $this->mImages );
@@ -343,7 +354,7 @@ class ImageGallery
        /**
         * Set the contextual title
         *
-        * @param Title $title Contextual title
+        * @param $title Title: contextual title
         */
        public function setContextTitle( $title ) {
                $this->contextTitle = $title;