]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blobdiff - includes/upload/UploadFromStash.php
MediaWiki 1.16.0
[autoinstallsdev/mediawiki.git] / includes / upload / UploadFromStash.php
diff --git a/includes/upload/UploadFromStash.php b/includes/upload/UploadFromStash.php
new file mode 100644 (file)
index 0000000..17e922b
--- /dev/null
@@ -0,0 +1,84 @@
+<?php
+/**
+ * @file
+ * @ingroup upload
+ *
+ * Implements uploading from previously stored file.
+ *
+ * @author Bryan Tong Minh
+ */
+
+class UploadFromStash extends UploadBase {
+       public static function isValidSessionKey( $key, $sessionData ) {
+               return !empty( $key ) &&
+                       is_array( $sessionData ) &&
+                       isset( $sessionData[$key] ) &&
+                       isset( $sessionData[$key]['version'] ) &&
+                       $sessionData[$key]['version'] == self::SESSION_VERSION;
+       }
+
+       public static function isValidRequest( $request ) {
+               $sessionData = $request->getSessionData( 'wsUploadData' );
+               return self::isValidSessionKey(
+                       $request->getInt( 'wpSessionKey' ),
+                       $sessionData
+               );
+       }
+
+       public function initialize( $name, $sessionKey, $sessionData ) {
+                       /**
+                        * Confirming a temporarily stashed upload.
+                        * We don't want path names to be forged, so we keep
+                        * them in the session on the server and just give
+                        * an opaque key to the user agent.
+                        */
+
+                       $this->initializePathInfo( $name,
+                               $this->getRealPath ( $sessionData['mTempPath'] ),
+                               $sessionData['mFileSize'],
+                               false
+                       );
+                       
+                       $this->mSessionKey = $sessionKey;
+                       $this->mVirtualTempPath = $sessionData['mTempPath'];
+                       $this->mFileProps = $sessionData['mFileProps'];
+       }
+
+       public function initializeFromRequest( &$request ) {
+               $sessionKey = $request->getInt( 'wpSessionKey' );
+               $sessionData = $request->getSessionData('wsUploadData');
+
+               $desiredDestName = $request->getText( 'wpDestFile' );
+               if( !$desiredDestName )
+                       $desiredDestName = $request->getText( 'wpUploadFile' );
+               return $this->initialize( $desiredDestName, $sessionKey, $sessionData[$sessionKey] );
+       }
+
+       /**
+        * File has been previously verified so no need to do so again.
+        */
+       protected function verifyFile() {
+               return true;
+       }
+
+
+       /**
+        * There is no need to stash the image twice
+        */
+       public function stashSession() {
+               if ( !empty( $this->mSessionKey ) )
+                       return $this->mSessionKey;
+               return parent::stashSession();
+       }
+
+       /**
+        * Remove a temporarily kept file stashed by saveTempUploadedFile().
+        * @return success
+        */
+       public function unsaveUploadedFile() {
+               $repo = RepoGroup::singleton()->getLocalRepo();
+               $success = $repo->freeTemp( $this->mVirtualTempPath );
+               return $success;
+       }
+
+}
\ No newline at end of file