var $mUploadCopyStatus, $mUploadSource, $mReUpload, $mAction, $mUpload;
var $mOname, $mSessionKey, $mStashed, $mDestFile, $mRemoveTempFile, $mSourceType;
var $mUploadTempFileSize = 0;
+ var $mImage;
# Placeholders for text injection by hooks (must be HTML)
# extensions should take care to _append_ to the present value
# Check uploading enabled
if( !$wgEnableUploads ) {
- $wgOut->showErrorPage( 'uploaddisabled', 'uploaddisabledtext' );
+ $wgOut->showErrorPage( 'uploaddisabled', 'uploaddisabledtext', array( $this->mDestFile ) );
return;
}
if( $veri !== true ) { //it's a wiki error...
return $this->uploadError( $veri->toString() );
}
- }
- /**
- * Provide an opportunity for extensions to add futher checks
- */
- $error = '';
- if( !wfRunHooks( 'UploadVerification',
- array( $this->mUploadSaveName, $this->mUploadTempName, &$error ) ) ) {
- return $this->uploadError( $error );
+ /**
+ * Provide an opportunity for extensions to add futher checks
+ */
+ $error = '';
+ if( !wfRunHooks( 'UploadVerification',
+ array( $this->mUploadSaveName, $this->mUploadTempName, &$error ) ) ) {
+ return $this->uploadError( $error );
+ }
}
+
/**
* Check for non-fatal conditions
*/
global $wgUser;
$sk = $wgUser->getSkin();
- $image = new Image( $nt );
+ $image = wfLocalFile( $nt );
// Check for uppercase extension. We allow these filenames but check if an image
// with lowercase extension exists already
if ( $finalExt != strtolower( $finalExt ) ) {
$nt_lc = Title::newFromText( $partname . '.' . strtolower( $finalExt ) );
- $image_lc = new Image( $nt_lc );
+ $image_lc = wfLocalFile( $nt_lc );
}
if( $image->exists() ) {
} elseif ( ( substr( $partname , 3, 3 ) == 'px-' || substr( $partname , 2, 3 ) == 'px-' ) && ereg( "[0-9]{2}" , substr( $partname , 0, 2) ) ) {
# Check for filenames like 50px- or 180px-, these are mostly thumbnails
$nt_thb = Title::newFromText( substr( $partname , strpos( $partname , '-' ) +1 ) . '.' . $finalExt );
- $image_thb = new Image( $nt_thb );
+ $image_thb = wfLocalFile( $nt_thb );
if ($image_thb->exists() ) {
# Check if an image without leading '180px-' (or similiar) exists
$dlink = $sk->makeKnownLinkObj( $nt_thb);
* Update the upload log and create the description page
* if it's a new file.
*/
- $img = Image::newFromName( $this->mUploadSaveName );
- $success = $img->recordUpload( $this->mUploadOldVersion,
+ $this->mImage = wfLocalFile( $this->mUploadSaveName );
+ $success = $this->mImage->recordUpload( $this->mUploadOldVersion,
$this->mUploadDescription,
$this->mLicense,
$this->mUploadCopyStatus,
$this->showSuccess();
wfRunHooks( 'UploadComplete', array( &$img ) );
} else {
- // Image::recordUpload() fails if the image went missing, which is
+ // File::recordUpload() fails if the image went missing, which is
// unlikely, hence the lack of a specialised message
$wgOut->showFileNotFoundError( $this->mUploadSaveName );
}
function saveUploadedFile( $saveName, $tempName, $useRename = false ) {
global $wgOut, $wgAllowCopyUploads;
- if ( !$useRename AND $wgAllowCopyUploads AND $this->mSourceType == 'web' ) $useRename = true;
-
- $fname= "SpecialUpload::saveUploadedFile";
-
- $dest = wfImageDir( $saveName );
- $archive = wfImageArchiveDir( $saveName );
- if ( !is_dir( $dest ) ) wfMkdirParents( $dest );
- if ( !is_dir( $archive ) ) wfMkdirParents( $archive );
-
- $this->mSavedFile = "{$dest}/{$saveName}";
-
- if( is_file( $this->mSavedFile ) ) {
- $this->mUploadOldVersion = gmdate( 'YmdHis' ) . "!{$saveName}";
- wfSuppressWarnings();
- $success = rename( $this->mSavedFile, "${archive}/{$this->mUploadOldVersion}" );
- wfRestoreWarnings();
-
- if( ! $success ) {
- $wgOut->showFileRenameError( $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 )
- : move_uploaded_file( $tempName, $this->mSavedFile );
- wfRestoreWarnings();
-
- if( ! $success ) {
- $wgOut->showFileCopyError( $tempName, $this->mSavedFile );
+ $image = wfLocalFile( $saveName );
+ $archiveName = $image->publish( $tempName, File::DELETE_SOURCE );
+ if ( WikiError::isError( $archiveName ) ) {
+ $this->showError( $archiveName );
return false;
- } else {
- wfDebug("$fname: wrote tempfile $tempName to ".$this->mSavedFile."\n");
}
-
- chmod( $this->mSavedFile, 0644 );
+ $this->mUploadOldVersion = $archiveName;
return true;
}
*/
function saveTempUploadedFile( $saveName, $tempName ) {
global $wgOut;
- $archive = wfImageArchiveDir( $saveName, 'temp' );
- if ( !is_dir ( $archive ) ) wfMkdirParents( $archive );
- $stash = $archive . '/' . gmdate( "YmdHis" ) . '!' . $saveName;
-
- $success = $this->mRemoveTempFile
- ? rename( $tempName, $stash )
- : move_uploaded_file( $tempName, $stash );
- if ( !$success ) {
- $wgOut->showFileCopyError( $tempName, $stash );
+ $repo = RepoGroup::singleton()->getLocalRepo();
+ $result = $repo->storeTemp( $saveName, $tempName );
+ if ( WikiError::isError( $result ) ) {
+ $this->showError( $result );
return false;
+ } else {
+ return $result;
}
-
- return $stash;
}
/**
*/
function unsaveUploadedFile() {
global $wgOut;
- wfSuppressWarnings();
- $success = unlink( $this->mUploadTempName );
- wfRestoreWarnings();
+ $repo = RepoGroup::singleton()->getLocalRepo();
+ $success = $repo->freeTemp( $this->mUploadTempName );
if ( ! $success ) {
$wgOut->showFileDeleteError( $this->mUploadTempName );
return false;
global $wgUser, $wgOut, $wgContLang;
$sk = $wgUser->getSkin();
- $ilink = $sk->makeMediaLink( $this->mUploadSaveName, Image::imageUrl( $this->mUploadSaveName ) );
+ $ilink = $sk->makeMediaLinkObj( $this->mImage->getTitle() );
$dname = $wgContLang->getNsText( NS_IMAGE ) . ':'.$this->mUploadSaveName;
$dlink = $sk->makeKnownLink( $dname, $dname );
* @access private
*/
function checkOverwrite( $name ) {
- $img = Image::newFromName( $name );
- if( is_null( $img ) ) {
- // Uh... this shouldn't happen ;)
- // But if it does, fall through to previous behavior
- return false;
- }
+ $img = wfFindFile( $name );
$error = '';
- if( $img->exists() ) {
+ if( $img ) {
global $wgUser, $wgOut;
if( $img->isLocal() ) {
- if( !$this->userCanReUpload( $wgUser, $img->name ) ) {
+ if( !self::userCanReUpload( $wgUser, $img->name ) ) {
$error = 'fileexists-forbidden';
}
} else {
// Rockin', go ahead and upload
return true;
}
-
+
/**
* Check if a user is the last uploader
*
* @param User $user
* @param string $img, image name
* @return bool
- * @access private
*/
- function userCanReUpload( $user, $img ) {
- if( $user->isAllowed('reupload' ) )
+ public static function userCanReUpload( User $user, $img ) {
+ if( $user->isAllowed( 'reupload' ) )
return true; // non-conditional
- if( !$user->isAllowed('reupload-own') )
+ if( !$user->isAllowed( 'reupload-own' ) )
return false;
$dbr = wfGetDB( DB_SLAVE );
- $row = $dbr->selectRow(
- /* FROM */ 'image',
+ $row = $dbr->selectRow('image',
/* SELECT */ 'img_user',
/* WHERE */ array( 'img_name' => $img )
);
return $user->getID() == $row->img_user;
}
+
+ /**
+ * Display an error from a wikitext-formatted WikiError object
+ */
+ function showError( WikiError $error ) {
+ global $wgOut;
+ $wgOut->setPageTitle( wfMsg( "internalerror" ) );
+ $wgOut->setRobotpolicy( "noindex,nofollow" );
+ $wgOut->setArticleRelated( false );
+ $wgOut->enableClientCache( false );
+ $wgOut->addWikiText( $error->getMessage() );
+ }
}
?>