From 5facdf5fa0d333b3be4f1d4ecfc6eaf8acd42162 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Niklas=20Laxstr=C3=B6m?= Date: Fri, 26 Aug 2005 15:31:05 +0000 Subject: [PATCH] * (bug 2554) Tell users they are uploading too large file --- RELEASE-NOTES | 1 + includes/SpecialUpload.php | 219 +++++++++++++++++++------------------ includes/WebRequest.php | 12 ++ 3 files changed, 126 insertions(+), 106 deletions(-) diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 388268d288..68a9bbabb0 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -54,6 +54,7 @@ Misc work going on..... * Fix upgrade from 1.4 with no old revisions * Remove "info" editing toolbar that was shown in browsers which do not fully support the editing toolbar, but was found to be too confusing. +* (bug 2554) Tell users they are uploading too large file === Caveats === diff --git a/includes/SpecialUpload.php b/includes/SpecialUpload.php index 40ab946db4..c17fea2aed 100644 --- a/includes/SpecialUpload.php +++ b/includes/SpecialUpload.php @@ -29,7 +29,7 @@ class UploadForm { /**#@+ * @access private */ - var $mUploadFile, $mUploadDescription, $mIgnoreWarning; + var $mUploadFile, $mUploadDescription, $mIgnoreWarning, $mUploadError; var $mUploadSaveName, $mUploadTempName, $mUploadSize, $mUploadOldVersion; var $mUploadCopyStatus, $mUploadSource, $mReUpload, $mAction, $mUpload; var $mOname, $mSessionKey, $mStashed, $mDestFile, $mRemoveTempFile; @@ -42,7 +42,7 @@ class UploadForm { */ function UploadForm( &$request ) { $this->mDestFile = $request->getText( 'wpDestFile' ); - + if( !$request->wasPosted() ) { # GET requests just give the main form; no data except wpDestfile. return; @@ -51,13 +51,13 @@ class UploadForm { $this->mIgnoreWarning = $request->getCheck( 'wpIgnoreWarning'); $this->mReUpload = $request->getCheck( 'wpReUpload' ); $this->mUpload = $request->getCheck( 'wpUpload' ); - + $this->mUploadDescription = $request->getText( 'wpUploadDescription' ); $this->mUploadCopyStatus = $request->getText( 'wpUploadCopyStatus' ); $this->mUploadSource = $request->getText( 'wpUploadSource'); - + $this->mAction = $request->getVal( 'action' ); - + $this->mSessionKey = $request->getInt( 'wpSessionKey' ); if( !empty( $this->mSessionKey ) && isset( $_SESSION['wsUploadData'][$this->mSessionKey] ) ) { @@ -71,6 +71,7 @@ class UploadForm { $this->mUploadTempName = $data['mUploadTempName']; $this->mUploadSize = $data['mUploadSize']; $this->mOname = $data['mOname']; + $this->mUploadError = 0/*UPLOAD_ERR_OK*/; $this->mStashed = true; $this->mRemoveTempFile = false; } else { @@ -80,6 +81,7 @@ class UploadForm { $this->mUploadTempName = $request->getFileTempName( 'wpUploadFile' ); $this->mUploadSize = $request->getFileSize( 'wpUploadFile' ); $this->mOname = $request->getFileName( 'wpUploadFile' ); + $this->mUploadError = $request->getUploadError( 'wpUploadFile' ); $this->mSessionKey = false; $this->mStashed = false; $this->mRemoveTempFile = false; // PHP will handle this @@ -94,7 +96,7 @@ class UploadForm { global $wgUser, $wgOut; global $wgEnableUploads, $wgUploadDirectory; - /** Show an error message if file upload is disabled */ + /** Show an error message if file upload is disabled */ if( ! $wgEnableUploads ) { $wgOut->addWikiText( wfMsg( 'uploaddisabled' ) ); return; @@ -109,7 +111,7 @@ class UploadForm { $wgOut->readOnlyPage(); return; } - + /** Check if the image directory is writeable, this is a common mistake */ if ( !is_writeable( $wgUploadDirectory ) ) { $wgOut->addWikiText( wfMsg( 'upload_directory_read_only', $wgUploadDirectory ) ); @@ -124,7 +126,7 @@ class UploadForm { } else { $this->mainUploadForm(); } - + $this->cleanupTempFile(); } @@ -140,6 +142,12 @@ class UploadForm { global $wgUploadDirectory; global $wgUseCopyrightUpload, $wgCheckCopyrightUpload; + /* Check for PHP error if any, requires php 4.2 or newer */ + if ( $this->mUploadError == 1/*UPLOAD_ERR_INI_SIZE*/ ) { + $this->mainUploadForm( wfMsgHtml( 'largefileserver' ) ); + return; + } + /** * If there was no filename or a zero size given, give up quick. */ @@ -166,7 +174,7 @@ class UploadForm { $finalExt = ''; } $fullExt = implode( '.', $ext ); - + if ( strlen( $partname ) < 3 ) { $this->mainUploadForm( wfMsgHtml( 'minlength' ) ); return; @@ -184,7 +192,7 @@ class UploadForm { } $nt =& Title::makeTitle( NS_IMAGE, $nt->getDBkey() ); $this->mUploadSaveName = $nt->getDBkey(); - + /** * If the image is protected, non-sysop users won't be able * to modify it by uploading a new revision. @@ -192,7 +200,7 @@ class UploadForm { if( !$nt->userCanEdit() ) { return $this->uploadError( wfMsgWikiHtml( 'protectedpage' ) ); } - + /* Don't allow users to override the blacklist (check file extension) */ global $wgStrictFileExtensions; global $wgFileExtensions, $wgFileBlacklist; @@ -201,7 +209,7 @@ class UploadForm { !$this->checkFileExtension( $finalExt, $wgFileExtensions ) ) ) { return $this->uploadError( wfMsgHtml( 'badfiletype', htmlspecialchars( $fullExt ) ) ); } - + /** * Look at the contents of the file; if we can recognize the * type but it's corrupt or data of the wrong type, we should @@ -210,12 +218,12 @@ class UploadForm { if( !$this->mStashed ) { $this->checkMacBinary(); $veri = $this->verify( $this->mUploadTempName, $finalExt ); - + if( $veri !== true ) { //it's a wiki error... return $this->uploadError( $veri->toString() ); } } - + /** * Check for non-fatal conditions */ @@ -224,14 +232,14 @@ class UploadForm { if( $this->mUploadSaveName != ucfirst( $filtered ) ) { $warning .= '
  • '.wfMsgHtml( 'badfilename', htmlspecialchars( $this->mUploadSaveName ) ).'
  • '; } - + global $wgCheckFileExtensions; if ( $wgCheckFileExtensions ) { if ( ! $this->checkFileExtension( $finalExt, $wgFileExtensions ) ) { $warning .= '
  • '.wfMsgHtml( 'badfiletype', htmlspecialchars( $fullExt ) ).'
  • '; } } - + global $wgUploadSizeWarning; if ( $wgUploadSizeWarning && ( $this->mUploadSize > $wgUploadSizeWarning ) ) { # TODO: Format $wgUploadSizeWarning to something that looks better than the raw byte @@ -241,14 +249,14 @@ class UploadForm { if ( $this->mUploadSize == 0 ) { $warning .= '
  • '.wfMsgHtml( 'emptyfile' ).'
  • '; } - + if( $nt->getArticleID() ) { global $wgUser; $sk = $wgUser->getSkin(); $dlink = $sk->makeKnownLinkObj( $nt ); $warning .= '
  • '.wfMsgHtml( 'fileexists', $dlink ).'
  • '; } - + if( $warning != '' ) { /** * Stash the file in a temporary location; the user can choose @@ -257,7 +265,7 @@ class UploadForm { return $this->uploadWarning( $warning ); } } - + /** * Try actually saving the thing... * It will show an error form on failure. @@ -279,7 +287,7 @@ class UploadForm { if ( $success ) { $this->showSuccess(); } else { - // Image::recordUpload() fails if the image went missing, which is + // Image::recordUpload() fails if the image went missing, which is // unlikely, hence the lack of a specialised message $wgOut->fileNotFoundError( $this->mUploadSaveName ); } @@ -302,7 +310,7 @@ class UploadForm { global $wgUploadDirectory, $wgOut; $fname= "SpecialUpload::saveUploadedFile"; - + $dest = wfImageDir( $saveName ); $archive = wfImageArchiveDir( $saveName ); $this->mSavedFile = "{$dest}/{$saveName}"; @@ -313,17 +321,17 @@ class UploadForm { $success = rename( $this->mSavedFile, "${archive}/{$this->mUploadOldVersion}" ); wfRestoreWarnings(); - if( ! $success ) { + if( ! $success ) { $wgOut->fileRenameError( $this->mSavedFile, "${archive}/{$this->mUploadOldVersion}" ); return false; } else wfDebug("$fname: moved file ".$this->mSavedFile." to ${archive}/{$this->mUploadOldVersion}\n"); - } + } else { $this->mUploadOldVersion = ''; } - + wfSuppressWarnings(); $success = $useRename ? rename( $tempName, $this->mSavedFile ) @@ -336,7 +344,7 @@ class UploadForm { } else { wfDebug("$fname: wrote tempfile $tempName to ".$this->mSavedFile."\n"); } - + chmod( $this->mSavedFile, 0644 ); return true; } @@ -354,7 +362,7 @@ class UploadForm { * @access private */ function saveTempUploadedFile( $saveName, $tempName ) { - global $wgOut; + global $wgOut; $archive = wfImageArchiveDir( $saveName, 'temp' ); $stash = $archive . '/' . gmdate( "YmdHis" ) . '!' . $saveName; @@ -365,10 +373,10 @@ class UploadForm { $wgOut->fileCopyError( $tempName, $stash ); return false; } - + return $stash; } - + /** * Stash a file in a temporary directory for later processing, * and save the necessary descriptive info into the session. @@ -386,7 +394,7 @@ class UploadForm { # Couldn't save the file. return false; } - + $key = mt_rand( 0, 0x7fffffff ); $_SESSION['wsUploadData'][$key] = array( 'mUploadTempName' => $stash, @@ -417,7 +425,7 @@ class UploadForm { */ function showSuccess() { global $wgUser, $wgOut, $wgContLang; - + $sk = $wgUser->getSkin(); $ilink = $sk->makeMediaLink( $this->mUploadSaveName, Image::imageUrl( $this->mUploadSaveName ) ); $dname = $wgContLang->getNsText( NS_IMAGE ) . ':'.$this->mUploadSaveName; @@ -512,7 +520,7 @@ 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%\""; @@ -529,7 +537,6 @@ class UploadForm { $sourcefilename = wfMsgHtml( 'sourcefilename' ); $destfilename = wfMsgHtml( 'destfilename' ); - $summary = wfMsgWikiHtml( 'fileuploadsummary' ); $ulb = wfMsgHtml( 'uploadbtn' ); @@ -564,7 +571,7 @@ class UploadForm { {$destfilename}: - + {$summary}