Uploading to a protected title will allow the user to choose a new name instead of...
[lhc/web/wiklou.git] / includes / upload / UploadFromStash.php
1 <?php
2 /**
3 * @file
4 * @ingroup upload
5 *
6 * Implements uploading from previously stored file.
7 *
8 * @author Bryan Tong Minh
9 */
10
11 class UploadFromStash extends UploadBase {
12 public static function isValidSessionKey( $key, $sessionData ) {
13 return !empty( $key ) &&
14 is_array( $sessionData ) &&
15 isset( $sessionData[$key] ) &&
16 isset( $sessionData[$key]['version'] ) &&
17 $sessionData[$key]['version'] == self::SESSION_VERSION;
18 }
19
20 public static function isValidRequest( $request ) {
21 $sessionData = $request->getSessionData( self::SESSION_KEYNAME );
22 return self::isValidSessionKey(
23 $request->getInt( 'wpSessionKey' ),
24 $sessionData
25 );
26 }
27
28 public function initialize( $name, $sessionKey, $sessionData ) {
29 /**
30 * Confirming a temporarily stashed upload.
31 * We don't want path names to be forged, so we keep
32 * them in the session on the server and just give
33 * an opaque key to the user agent.
34 */
35
36 $this->initializePathInfo( $name,
37 $this->getRealPath ( $sessionData['mTempPath'] ),
38 $sessionData['mFileSize'],
39 false
40 );
41
42 $this->mSessionKey = $sessionKey;
43 $this->mVirtualTempPath = $sessionData['mTempPath'];
44 $this->mFileProps = $sessionData['mFileProps'];
45 }
46
47 public function initializeFromRequest( &$request ) {
48 $sessionKey = $request->getInt( 'wpSessionKey' );
49 $sessionData = $request->getSessionData( self::SESSION_KEYNAME );
50
51 $desiredDestName = $request->getText( 'wpDestFile' );
52 if( !$desiredDestName )
53 $desiredDestName = $request->getText( 'wpUploadFile' );
54 return $this->initialize( $desiredDestName, $sessionKey, $sessionData[$sessionKey] );
55 }
56
57 /**
58 * File has been previously verified so no need to do so again.
59 */
60 protected function verifyFile() {
61 return true;
62 }
63
64
65 /**
66 * There is no need to stash the image twice
67 */
68 public function stashSession( $key = null ) {
69 if ( !empty( $this->mSessionKey ) )
70 return $this->mSessionKey;
71 return parent::stashSession();
72 }
73
74 /**
75 * Remove a temporarily kept file stashed by saveTempUploadedFile().
76 * @return success
77 */
78 public function unsaveUploadedFile() {
79 $repo = RepoGroup::singleton()->getLocalRepo();
80 $success = $repo->freeTemp( $this->mVirtualTempPath );
81 return $success;
82 }
83
84 }