* @subpackage Parser
[lhc/web/wiklou.git] / includes / SpecialUpload.php
index 75b12a3..de2199a 100644 (file)
@@ -88,16 +88,16 @@ class UploadForm {
         */
        function execute() {
                global $wgUser, $wgOut;
-               global $wgDisableUploads;
+               global $wgEnableUploads;
 
                /** Show an error message if file upload is disabled */ 
-               if( $wgDisableUploads ) {
+               if( ! $wgEnableUploads ) {
                        $wgOut->addWikiText( wfMsg( 'uploaddisabled' ) );
                        return;
                }
                
                /** Various rights checks */
-               if( ( $wgUser->getID() == 0 )
+               if( ( $wgUser->isAnon() )
                         OR $wgUser->isBlocked() ) {
                        $wgOut->errorpage( 'uploadnologin', 'uploadnologintext' );
                        return;
@@ -231,7 +231,9 @@ class UploadForm {
        
                        global $wgUploadSizeWarning;
                        if ( $wgUploadSizeWarning && ( $this->mUploadSize > $wgUploadSizeWarning ) ) {
-                               $warning .= '<li>'.wfMsg( 'largefile' ).'</li>';
+                               # TODO: Format $wgUploadSizeWarning to something that looks better than the raw byte
+                               # value, perhaps add GB,MB and KB suffixes?
+                               $warning .= '<li>'.wfMsg( 'largefile', $wgUploadSizeWarning, $this->mUploadSize ).'</li>';
                        }
                        if ( $this->mUploadSize == 0 ) {
                                $warning .= '<li>'.wfMsg( 'emptyfile' ).'</li>';
@@ -264,13 +266,19 @@ class UploadForm {
                         * Update the upload log and create the description page
                         * if it's a new file.
                         */
-                       wfRecordUpload( $this->mUploadSaveName,
-                                       $this->mUploadOldVersion,
-                                       $this->mUploadSize, 
-                                       $this->mUploadDescription,
-                                       $this->mUploadCopyStatus,
-                                       $this->mUploadSource );
-                       $this->showSuccess();
+                       $img = Image::newFromName( $this->mUploadSaveName );
+                       $success = $img->recordUpload( $this->mUploadOldVersion,
+                                                       $this->mUploadDescription,
+                                                       $this->mUploadCopyStatus,
+                                                       $this->mUploadSource );
+
+                       if ( $success ) {
+                               $this->showSuccess();
+                       } else {
+                               // Image::recordUpload() fails if the image went missing, which is 
+                               // unlikely, hence the lack of a specialised message
+                               $wgOut->fileNotFoundError( $this->mUploadSaveName );
+                       }
                }
        }
 
@@ -295,8 +303,11 @@ class UploadForm {
 
                if( is_file( $this->mSavedFile ) ) {
                        $this->mUploadOldVersion = gmdate( 'YmdHis' ) . "!{$saveName}";
+                       wfSuppressWarnings();
+                       $success = rename( $this->mSavedFile, "${archive}/{$this->mUploadOldVersion}" );
+                       wfRestoreWarnings();
 
-                       if( !rename( $this->mSavedFile, "${archive}/{$this->mUploadOldVersion}" ) ) { 
+                       if( ! $success ) { 
                                $wgOut->fileRenameError( $this->mSavedFile,
                                  "${archive}/{$this->mUploadOldVersion}" );
                                return false;
@@ -306,12 +317,20 @@ class UploadForm {
                }
                
                if( $useRename ) {
-                       if( !rename( $tempName, $this->mSavedFile ) ) {
+                       wfSuppressWarnings();
+                       $success = rename( $tempName, $this->mSavedFile );
+                       wfRestoreWarnings();
+
+                       if( ! $success ) {
                                $wgOut->fileCopyError( $tempName, $this->mSavedFile );
                                return false;
                        }
                } else {
-                       if( !move_uploaded_file( $tempName, $this->mSavedFile ) ) {
+                       wfSuppressWarnings();
+                       $success = move_uploaded_file( $tempName, $this->mSavedFile );
+                       wfRestoreWarnings();
+
+                       if( ! $success ) {
                                $wgOut->fileCopyError( $tempName, $this->mSavedFile );
                                return false;
                        }
@@ -333,8 +352,7 @@ class UploadForm {
         * @access private
         */
        function saveTempUploadedFile( $saveName, $tempName ) {
-               global $wgOut;
-
+               global $wgOut;          
                $archive = wfImageArchiveDir( $saveName, 'temp' );
                $stash = $archive . '/' . gmdate( "YmdHis" ) . '!' . $saveName;
 
@@ -355,7 +373,7 @@ class UploadForm {
         * @return int
         * @access private
         */
-       function stashSession() {
+       function stashSession() {               
                $stash = $this->saveTempUploadedFile(
                        $this->mUploadSaveName, $this->mUploadTempName );
 
@@ -377,7 +395,10 @@ class UploadForm {
         * @access private
         */
        function unsaveUploadedFile() {
-               if ( ! @unlink( $this->mUploadTempName ) ) {
+               wfSuppressWarnings();
+               $success = unlink( $this->mUploadTempName );
+               wfRestoreWarnings();
+               if ( ! $success ) {
                        $wgOut->fileDeleteError( $this->mUploadTempName );
                }
        }
@@ -392,8 +413,8 @@ class UploadForm {
                global $wgUser, $wgOut, $wgContLang;
                
                $sk = $wgUser->getSkin();
-               $ilink = $sk->makeMediaLink( $this->mUploadSaveName, Image::wfImageUrl( $this->mUploadSaveName ) );
-               $dname = $wgContLang->getNsText( Namespace::getImage() ) . ':'.$this->mUploadSaveName;
+               $ilink = $sk->makeMediaLink( $this->mUploadSaveName, Image::imageUrl( $this->mUploadSaveName ) );
+               $dname = $wgContLang->getNsText( NS_IMAGE ) . ':'.$this->mUploadSaveName;
                $dlink = $sk->makeKnownLink( $dname, $dname );
 
                $wgOut->addHTML( '<h2>' . wfMsg( 'successfulupload' ) . "</h2>\n" );
@@ -445,28 +466,36 @@ class UploadForm {
                if ( $wgUseCopyrightUpload )
                {
                        $copyright =  "
-       <input type='hidden' name=\"wpUploadCopyStatus\" value=\"" . htmlspecialchars( $this->mUploadCopyStatus ) . "\" />
-       <input type='hidden' name=\"wpUploadSource\" value=\"" . htmlspecialchars( $this->mUploadSource ) . "\" />
+       <input type='hidden' name='wpUploadCopyStatus' value=\"" . htmlspecialchars( $this->mUploadCopyStatus ) . "\" />
+       <input type='hidden' name='wpUploadSource' value=\"" . htmlspecialchars( $this->mUploadSource ) . "\" />
        ";
                } else {
                        $copyright = "";
                }
 
                $wgOut->addHTML( "
-       <form id=\"uploadwarning\" method=\"post\" enctype=\"multipart/form-data\"
-       action=\"{$action}\">
-       <input type=hidden name=\"wpUploadAffirm\" value=\"1\" />
-       <input type=hidden name=\"wpIgnoreWarning\" value=\"1\" />
-       <input type=hidden name=\"wpSessionKey\" value=\"" . htmlspecialchars( $this->mSessionKey ) . "\" />
-       <input type=hidden name=\"wpUploadDescription\" value=\"" . htmlspecialchars( $this->mUploadDescription ) . "\" />
+       <form id='uploadwarning' method='post' enctype='multipart/form-data' action='$action'>
+               <input type='hidden' name='wpUploadAffirm' value='1' />
+               <input type='hidden' name='wpIgnoreWarning' value='1' />
+               <input type='hidden' name='wpSessionKey' value=\"" . htmlspecialchars( $this->mSessionKey ) . "\" />
+               <input type='hidden' name='wpUploadDescription' value=\"" . htmlspecialchars( $this->mUploadDescription ) . "\" />
        {$copyright}
-       <table border='0'><tr>
-       <tr><td align='right'>
-       <input tabindex='2' type='submit' name=\"wpUpload\" value=\"{$save}\" />
-       </td><td align='left'>{$iw}</td></tr>
-       <tr><td align='right'>
-       <input tabindex='2' type='submit' name=\"wpReUpload\" value=\"{$reupload}\" />
-       </td><td align='left'>{$reup}</td></tr></table></form>\n" );
+       <table border='0'>
+               <tr>
+                       <tr>
+                               <td align='right'>
+                                       <input tabindex='2' type='submit' name='wpUpload' value='$save' />
+                               </td>
+                               <td align='left'>$iw</td>
+                       </tr>
+                       <tr>
+                               <td align='right'>
+                                       <input tabindex='2' type='submit' name='wpReUpload' value='{$reupload}' />
+                               </td>
+                               <td align='left'>$reup</td>
+                       </tr>
+               </tr>
+       </table></form>\n" );
        }
 
        /**
@@ -479,6 +508,11 @@ class UploadForm {
        function mainUploadForm( $msg='' ) {
                global $wgOut, $wgUser, $wgLang, $wgUploadDirectory, $wgRequest;
                global $wgUseCopyrightUpload;
+               
+               $cols = intval($wgUser->getOption( 'cols' ));
+               $ew = $wgUser->getOption( 'editwidth' );
+               if ( $ew ) $ew = " style=\"width:100%\"";
+               else $ew = '';
 
                if ( '' != $msg ) {
                        $sub = wfMsg( 'uploaderror' );
@@ -505,8 +539,8 @@ class UploadForm {
 
                $source = "
        <td align='right'>
-       <input tabindex='3' type='checkbox' name=\"wpUploadAffirm\" value=\"1\" id=\"wpUploadAffirm\" />
-       </td><td align='left'><label for=\"wpUploadAffirm\">{$ca}</label></td>
+       <input tabindex='3' type='checkbox' name='wpUploadAffirm' value='1' id='wpUploadAffirm' />
+       </td><td align='left'><label for='wpUploadAffirm'>{$ca}</label></td>
        " ;
                if ( $wgUseCopyrightUpload )
                  {
@@ -516,26 +550,26 @@ class UploadForm {
        htmlspecialchars($this->mUploadCopyStatus). "\" size='40' /></td>
        </tr><tr>
        <td align='right'>". wfMsg ( 'filesource' ) . ":</td>
-       <td><input tabindex='4' type='text' name=\"wpUploadSource\" value=\"" .
+       <td><input tabindex='4' type='text' name='wpUploadSource' value=\"" .
        htmlspecialchars($this->mUploadSource). "\" size='40' /></td>
        " ;
                  }
 
                $wgOut->addHTML( "
-       <form id=\"upload\" method=\"post\" enctype=\"multipart/form-data\"
-       action=\"{$action}\">
+       <form id='upload' method='post' enctype='multipart/form-data' action='$action'>
        <table border='0'><tr>
        <td align='right'>{$fn}:</td><td align='left'>
-       <input tabindex='1' type='file' name=\"wpUploadFile\" size='40' />
+       <input tabindex='1' type='file' name='wpUploadFile' size='40' />
        </td></tr><tr>
        <td align='right'>{$fd}:</td><td align='left'>
-       <input tabindex='2' type='text' name=\"wpUploadDescription\" value=\""
-         . htmlspecialchars( $this->mUploadDescription ) . "\" size='40' />
+       <textarea tabindex='2' name='wpUploadDescription' rows='6' cols='{$cols}'{$ew}>"        
+         . htmlspecialchars( $this->mUploadDescription ) .
+       "</textarea>
        </td></tr><tr>
        {$source}
        </tr>
        <tr><td></td><td align='left'>
-       <input tabindex='5' type='submit' name=\"wpUpload\" value=\"{$ulb}\" />
+       <input tabindex='5' type='submit' name='wpUpload' value=\"{$ulb}\" />
        </td></tr></table></form>\n" );
        }
        
@@ -637,7 +671,9 @@ class UploadForm {
                        return true;
                }
                
-               $data = @getimagesize( $tmpfile );
+               wfSuppressWarnings();
+               $data = getimagesize( $tmpfile );
+               wfRestoreWarnings();
                if( false === $data ) {
                        # Didn't recognize the image type.
                        # Either the image is corrupt or someone's slipping us some