Allow user to always preview text on editing ( implement http://bugzilla.wikipedia...
[lhc/web/wiklou.git] / includes / Image.php
index 3b9ff5d..4eb1613 100644 (file)
@@ -1,8 +1,16 @@
 <?php
-# Class to represent an image
-# Provides methods to retrieve paths (physical, logical, URL),
-# to generate thumbnails or for uploading.
-
+/**
+ * @package MediaWiki
+ * $Id$
+ */
+
+/**
+ * Class to represent an image
+ * 
+ * Provides methods to retrieve paths (physical, logical, URL),
+ * to generate thumbnails or for uploading.
+ * @package MediaWiki
+ */
 class Image
 {
        /* private */
@@ -63,6 +71,11 @@ class Image
                return $this->name;
        }
 
+       function getTitle()
+       {
+               return $this->title;
+       }
+
        function getURL()
        {
                return $this->url;
@@ -83,6 +96,12 @@ class Image
                return $this->height;
        }
 
+       function getSize()
+       {
+               $st = stat( $this->getImagePath() );
+               return $st['size'];
+       }
+
        function getType()
        {
                return $this->type;
@@ -103,7 +122,6 @@ class Image
                return wfUrlencode( $url );
        }
 
-
        function exists()
        {
                return $this->fileExists;
@@ -123,14 +141,33 @@ class Image
                return $width."px-".$this->name;
        }
 
-       //**********************************************************************
-       // Create a thumbnail of the image having the specified width.
-       // The thumbnail will not be created if the width is larger than the
-       // image's width. Let the browser do the scaling in this case.
-       // The thumbnail is stored on disk and is only computed if the thumbnail
-       // file does not exist OR if it is older than the image.
-       // Returns the URL.
-       function createThumb( $width ) {
+       function createThumb( $width, $height=-1 ) {
+               if ( $height == -1 ) {
+                       return $this->renderThumb( $width );
+               }
+               if ( $width < $this->width ) {
+                       $thumbheight = $this->height * $width / $this->width;
+                       $thumbwidth = $width;
+               } else {
+                       $thumbheight = $this->height;
+                       $thumbwidth = $this->width;
+               }
+               if ( $thumbheight > $height ) {
+                       $thumbwidth = $thumbwidth * $height / $thumbheight;
+                       $thumbheight = $height;
+               }
+               return $this->renderThumb( $thumbwidth );
+       }
+               
+       /**
+        * Create a thumbnail of the image having the specified width.
+        * The thumbnail will not be created if the width is larger than the
+        * image's width. Let the browser do the scaling in this case.
+        * The thumbnail is stored on disk and is only computed if the thumbnail
+        * file does not exist OR if it is older than the image.
+        * Returns the URL.
+        */
+       function /* private */ renderThumb( $width ) {
                global $wgUploadDirectory;
                global $wgImageMagickConvertCommand;
                global $wgUseImageMagick;
@@ -254,13 +291,14 @@ class Image
                return $thumbUrl;
        } // END OF function createThumb
 
-       //**********************************************************************
-       // Return the image history of this image, line by line.
-       // starts with current version, then old versions.
-       // uses $this->historyLine to check which line to return:
-       //  0      return line for current version
-       //  1      query for old versions, return first one
-       //  2, ... return next old version from above query
+       /**
+        * Return the image history of this image, line by line.
+        * starts with current version, then old versions.
+        * uses $this->historyLine to check which line to return:
+        *  0      return line for current version
+        *  1      query for old versions, return first one
+        *  2, ... return next old version from above query
+        */
        function nextHistoryLine()
        {
                $fname = 'Image::nextHistoryLine()';
@@ -367,11 +405,11 @@ function wfRecordUpload( $name, $oldver, $size, $desc, $copyStatus = "", $source
        # Test to see if the row exists using INSERT IGNORE
        # This avoids race conditions by locking the row until the commit, and also
        # doesn't deadlock. SELECT FOR UPDATE causes a deadlock for every race condition.
-       $dbw->insert( 'image',
+       $dbw->insertArray( 'image',
                array(
                        'img_name' => $name,
                        'img_size'=> $size,
-                       'img_timestamp' => $now,
+                       'img_timestamp' => $dbw->timestamp($now),
                        'img_description' => $desc,
                        'img_user' => $wgUser->getID(),
                        'img_user_text' => $wgUser->getName(),
@@ -393,11 +431,11 @@ function wfRecordUpload( $name, $oldver, $size, $desc, $copyStatus = "", $source
                                        'cur_comment' => $desc,
                                        'cur_user' => $wgUser->getID(),
                                        'cur_user_text' => $wgUser->getName(),
-                                       'cur_timestamp' => $now,
+                                       'cur_timestamp' => $dbw->timestamp($now),
                                        'cur_is_new' => 1,
                                        'cur_text' => $textdesc,
                                        'inverse_timestamp' => $won,
-                                       'cur_touched' => $now
+                                       'cur_touched' => $dbw->timestamp($now)
                                ), $fname
                        );
                        $id = $dbw->insertId() or 0; # We should throw an error instead
@@ -419,7 +457,7 @@ function wfRecordUpload( $name, $oldver, $size, $desc, $copyStatus = "", $source
                                'oi_name' => $s->img_name,
                                'oi_archive_name' => $oldver,
                                'oi_size' => $s->img_size,
-                               'oi_timestamp' => $s->img_timestamp,
+                               'oi_timestamp' => $dbw->timestamp($s->img_timestamp),
                                'oi_description' => $s->img_description,
                                'oi_user' => $s->img_user,
                                'oi_user_text' => $s->img_user_text
@@ -430,7 +468,7 @@ function wfRecordUpload( $name, $oldver, $size, $desc, $copyStatus = "", $source
                $dbw->updateArray( 'image',
                        array( /* SET */
                                'img_size' => $size,
-                               'img_timestamp' => wfTimestampNow(),
+                               'img_timestamp' => $dbw->timestamp(),
                                'img_user' => $wgUser->getID(),
                                'img_user_text' => $wgUser->getName(),
                                'img_description' => $desc,
@@ -443,11 +481,8 @@ function wfRecordUpload( $name, $oldver, $size, $desc, $copyStatus = "", $source
                $descTitle->invalidateCache();
        }
 
-       $log = new LogPage( wfMsg( 'uploadlogpage' ), wfMsg( 'uploadlogpagetext' ) );
-       $da = wfMsg( 'uploadedimage', '[[:' . $wgLang->getNsText(
-         Namespace::getImage() ) . ":{$name}|{$name}]]" );
-       $ta = wfMsg( 'uploadedimage', $name );
-       $log->addEntry( $da, $desc, $ta );
+       $log = new LogPage( 'upload' );
+       $log->addEntry( 'upload', $descTitle, $desc );
 }
 
 function wfImageArchiveUrl( $name )