diff options
author | Pierre Schmitz <pierre@archlinux.de> | 2008-08-15 01:29:47 +0200 |
---|---|---|
committer | Pierre Schmitz <pierre@archlinux.de> | 2008-08-15 01:29:47 +0200 |
commit | 370e83bb0dfd0c70de268c93bf07ad5ee0897192 (patch) | |
tree | 491674f4c242e4d6ba0d04eafa305174c35a3391 /includes/specials/SpecialUploadMogile.php | |
parent | f4debf0f12d0524d2b2427c55ea3f16b680fad97 (diff) |
Update auf 1.13.0
Diffstat (limited to 'includes/specials/SpecialUploadMogile.php')
-rw-r--r-- | includes/specials/SpecialUploadMogile.php | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/includes/specials/SpecialUploadMogile.php b/includes/specials/SpecialUploadMogile.php new file mode 100644 index 00000000..7ff8fda6 --- /dev/null +++ b/includes/specials/SpecialUploadMogile.php @@ -0,0 +1,135 @@ +<?php +/** + * @file + * @ingroup SpecialPage + */ + +/** + * You will need the extension MogileClient to use this special page. + */ +require_once( 'MogileFS.php' ); + +/** + * Entry point + */ +function wfSpecialUploadMogile() { + global $wgRequest; + $form = new UploadFormMogile( $wgRequest ); + $form->execute(); +} + +/** + * Extends Special:Upload with MogileFS. + * @ingroup SpecialPage + */ +class UploadFormMogile extends UploadForm { + /** + * Move the uploaded file from its temporary location to the final + * destination. If a previous version of the file exists, move + * it into the archive subdirectory. + * + * @todo If the later save fails, we may have disappeared the original file. + * + * @param string $saveName + * @param string $tempName full path to the temporary file + * @param bool $useRename Not used in this implementation + */ + function saveUploadedFile( $saveName, $tempName, $useRename = false ) { + global $wgOut; + $mfs = MogileFS::NewMogileFS(); + + $this->mSavedFile = "image!{$saveName}"; + + if( $mfs->getPaths( $this->mSavedFile )) { + $this->mUploadOldVersion = gmdate( 'YmdHis' ) . "!{$saveName}"; + if( !$mfs->rename( $this->mSavedFile, "archive!{$this->mUploadOldVersion}" ) ) { + $wgOut->showFileRenameError( $this->mSavedFile, + "archive!{$this->mUploadOldVersion}" ); + return false; + } + } else { + $this->mUploadOldVersion = ''; + } + + if ( $this->mStashed ) { + if (!$mfs->rename($tempName,$this->mSavedFile)) { + $wgOut->showFileRenameError($tempName, $this->mSavedFile ); + return false; + } + } else { + if ( !$mfs->saveFile($this->mSavedFile,'normal',$tempName )) { + $wgOut->showFileCopyError( $tempName, $this->mSavedFile ); + return false; + } + unlink($tempName); + } + return true; + } + + /** + * Stash a file in a temporary directory for later processing + * after the user has confirmed it. + * + * If the user doesn't explicitly cancel or accept, these files + * can accumulate in the temp directory. + * + * @param string $saveName - the destination filename + * @param string $tempName - the source temporary file to save + * @return string - full path the stashed file, or false on failure + * @access private + */ + function saveTempUploadedFile( $saveName, $tempName ) { + global $wgOut; + + $stash = 'stash!' . gmdate( "YmdHis" ) . '!' . $saveName; + $mfs = MogileFS::NewMogileFS(); + if ( !$mfs->saveFile( $stash, 'normal', $tempName ) ) { + $wgOut->showFileCopyError( $tempName, $stash ); + return false; + } + unlink($tempName); + return $stash; + } + + /** + * Stash a file in a temporary directory for later processing, + * and save the necessary descriptive info into the session. + * Returns a key value which will be passed through a form + * to pick up the path info on a later invocation. + * + * @return int + * @access private + */ + function stashSession() { + $stash = $this->saveTempUploadedFile( + $this->mUploadSaveName, $this->mUploadTempName ); + + if( !$stash ) { + # Couldn't save the file. + return false; + } + + $key = mt_rand( 0, 0x7fffffff ); + $_SESSION['wsUploadData'][$key] = array( + 'mUploadTempName' => $stash, + 'mUploadSize' => $this->mUploadSize, + 'mOname' => $this->mOname ); + return $key; + } + + /** + * Remove a temporarily kept file stashed by saveTempUploadedFile(). + * @access private + * @return success + */ + function unsaveUploadedFile() { + global $wgOut; + $mfs = MogileFS::NewMogileFS(); + if ( ! $mfs->delete( $this->mUploadTempName ) ) { + $wgOut->showFileDeleteError( $this->mUploadTempName ); + return false; + } else { + return true; + } + } +} |