MediaWiki  1.23.6
AssembleUploadChunksJob.php
Go to the documentation of this file.
1 <?php
30  public function __construct( $title, $params ) {
31  parent::__construct( 'AssembleUploadChunks', $title, $params );
32  $this->removeDuplicates = true;
33  }
34 
35  public function run() {
36  $scope = RequestContext::importScopedSession( $this->params['session'] );
37  $context = RequestContext::getMain();
38  try {
39  $user = $context->getUser();
40  if ( !$user->isLoggedIn() ) {
41  $this->setLastError( "Could not load the author user from session." );
42 
43  return false;
44  }
45 
46  if ( count( $_SESSION ) === 0 ) {
47  // Empty session probably indicates that we didn't associate
48  // with the session correctly. Note that being able to load
49  // the user does not necessarily mean the session was loaded.
50  // Most likely cause by suhosin.session.encrypt = On.
51  $this->setLastError( "Error associating with user session. " .
52  "Try setting suhosin.session.encrypt = Off" );
53 
54  return false;
55  }
56 
58  $this->params['filekey'],
59  array( 'result' => 'Poll', 'stage' => 'assembling', 'status' => Status::newGood() )
60  );
61 
63  $upload->continueChunks(
64  $this->params['filename'],
65  $this->params['filekey'],
66  $context->getRequest()
67  );
68 
69  // Combine all of the chunks into a local file and upload that to a new stash file
70  $status = $upload->concatenateChunks();
71  if ( !$status->isGood() ) {
73  $this->params['filekey'],
74  array( 'result' => 'Failure', 'stage' => 'assembling', 'status' => $status )
75  );
76  $this->setLastError( $status->getWikiText() );
77 
78  return false;
79  }
80 
81  // We have a new filekey for the fully concatenated file
82  $newFileKey = $upload->getLocalFile()->getFileKey();
83 
84  // Remove the old stash file row and first chunk file
85  $upload->stash->removeFileNoAuth( $this->params['filekey'] );
86 
87  // Build the image info array while we have the local reference handy
88  $apiMain = new ApiMain(); // dummy object (XXX)
89  $imageInfo = $upload->getImageInfo( $apiMain->getResult() );
90 
91  // Cleanup any temporary local file
92  $upload->cleanupTempFile();
93 
94  // Cache the info so the user doesn't have to wait forever to get the final info
96  $this->params['filekey'],
97  array(
98  'result' => 'Success',
99  'stage' => 'assembling',
100  'filekey' => $newFileKey,
101  'imageinfo' => $imageInfo,
102  'status' => Status::newGood()
103  )
104  );
105  } catch ( MWException $e ) {
107  $this->params['filekey'],
108  array(
109  'result' => 'Failure',
110  'stage' => 'assembling',
111  'status' => Status::newFatal( 'api-error-stashfailed' )
112  )
113  );
114  $this->setLastError( get_class( $e ) . ": " . $e->getText() );
115  // To be extra robust.
117 
118  return false;
119  }
120 
121  return true;
122  }
123 
124  public function getDeduplicationInfo() {
125  $info = parent::getDeduplicationInfo();
126  if ( is_array( $info['params'] ) ) {
127  $info['params'] = array( 'filekey' => $info['params']['filekey'] );
128  }
129 
130  return $info;
131  }
132 
133  public function allowRetries() {
134  return false;
135  }
136 }
ApiMain
This is the main API class, used for both external and internal processing.
Definition: ApiMain.php:41
php
skin txt MediaWiki includes four core it has been set as the default in MediaWiki since the replacing Monobook it had been been the default skin since before being replaced by Vector largely rewritten in while keeping its appearance Several legacy skins were removed in the as the burden of supporting them became too heavy to bear Those in etc for skin dependent CSS etc for skin dependent JavaScript These can also be customised on a per user by etc This feature has led to a wide variety of user styles becoming that gallery is a good place to ending in php
Definition: skin.txt:62
AssembleUploadChunksJob\run
run()
Run the job.
Definition: AssembleUploadChunksJob.php:35
AssembleUploadChunksJob\getDeduplicationInfo
getDeduplicationInfo()
Subclasses may need to override this to make duplication detection work.
Definition: AssembleUploadChunksJob.php:124
Job\$title
Title $title
Definition: Job.php:38
Status\newGood
static newGood( $value=null)
Factory function for good results.
Definition: Status.php:77
Job\setLastError
setLastError( $error)
Definition: Job.php:317
AssembleUploadChunksJob\__construct
__construct( $title, $params)
Definition: AssembleUploadChunksJob.php:30
Job
Class to both describe a background job and handle jobs.
Definition: Job.php:31
MWException
MediaWiki exception.
Definition: MWException.php:26
AssembleUploadChunksJob\allowRetries
allowRetries()
Definition: AssembleUploadChunksJob.php:133
array
the array() calling protocol came about after MediaWiki 1.4rc1.
List of Api Query prop modules.
Job\$params
array bool $params
Array of job parameters or false if none *.
Definition: Job.php:34
AssembleUploadChunksJob
Assemble the segments of a chunked upload.
Definition: AssembleUploadChunksJob.php:29
$upload
usually copyright or history_copyright This message must be in HTML not wikitext $subpages will be ignored and the rest of subPageSubtitle() will run. 'SkinTemplateBuildNavUrlsNav_urlsAfterPermalink' whether MediaWiki currently thinks this is a CSS JS page Hooks may change this value to override the return value of Title::isCssOrJsPage(). 'TitleIsAlwaysKnown' whether MediaWiki currently thinks this page is known isMovable() always returns false. $title whether MediaWiki currently thinks this page is movable Hooks may change this value to override the return value of Title::isMovable(). 'TitleIsWikitextPage' whether MediaWiki currently thinks this is a wikitext page Hooks may change this value to override the return value of Title::isWikitextPage() 'TitleMove' use UploadVerification and UploadVerifyFile instead where the first element is the message key and the remaining elements are used as parameters to the message based on mime etc Preferred in most cases over UploadVerification object $upload
Definition: hooks.txt:2573
RequestContext\getMain
static getMain()
Static methods.
Definition: RequestContext.php:420
$user
please add to it if you re going to add events to the MediaWiki code where normally authentication against an external auth plugin would be creating a account $user
Definition: hooks.txt:237
RequestContext\importScopedSession
static importScopedSession(array $params)
Import the resolved user IP, HTTP headers, user ID, and session ID.
Definition: RequestContext.php:461
UploadBase\setSessionStatus
static setSessionStatus( $statusKey, $value)
Set the current status of a chunked upload (used for polling).
Definition: UploadBase.php:1834
MWExceptionHandler\rollbackMasterChangesAndLog
static rollbackMasterChangesAndLog(Exception $e)
If there are any open database transactions, roll them back and log the stack trace of the exception ...
Definition: MWExceptionHandler.php:111
UploadFromChunks
Implements uploading from chunks.
Definition: UploadFromChunks.php:30
$e
if( $useReadline) $e
Definition: eval.php:66
Status\newFatal
static newFatal( $message)
Factory function for fatal errors.
Definition: Status.php:63