MediaWiki
REL1_34
AssembleUploadChunksJob.php
Go to the documentation of this file.
1
<?php
23
use Wikimedia\ScopedCallback;
24
30
class
AssembleUploadChunksJob
extends
Job
{
31
public
function
__construct
(
Title
$title
, array
$params
) {
32
parent::__construct(
'AssembleUploadChunks'
,
$title
,
$params
);
33
$this->removeDuplicates =
true
;
34
}
35
36
public
function
run
() {
37
$scope = RequestContext::importScopedSession( $this->params[
'session'
] );
38
$this->
addTeardownCallback
(
function
() use ( &$scope ) {
39
ScopedCallback::consume( $scope );
// T126450
40
} );
41
42
$context
= RequestContext::getMain();
43
$user =
$context
->getUser();
44
try
{
45
if
( !$user->isLoggedIn() ) {
46
$this->
setLastError
(
"Could not load the author user from session."
);
47
48
return
false
;
49
}
50
51
UploadBase::setSessionStatus
(
52
$user,
53
$this->params[
'filekey'
],
54
[
'result'
=>
'Poll'
,
'stage'
=>
'assembling'
,
'status'
=> Status::newGood() ]
55
);
56
57
$upload =
new
UploadFromChunks
( $user );
58
$upload->continueChunks(
59
$this->params[
'filename'
],
60
$this->params[
'filekey'
],
61
new
WebRequestUpload
(
$context
->getRequest(),
'null'
)
62
);
63
64
// Combine all of the chunks into a local file and upload that to a new stash file
65
$status = $upload->concatenateChunks();
66
if
( !$status->isGood() ) {
67
UploadBase::setSessionStatus
(
68
$user,
69
$this->params[
'filekey'
],
70
[
'result'
=>
'Failure'
,
'stage'
=>
'assembling'
,
'status'
=> $status ]
71
);
72
$this->
setLastError
( $status->getWikiText(
false
,
false
,
'en'
) );
73
74
return
false
;
75
}
76
77
// We can only get warnings like 'duplicate' after concatenating the chunks
78
$status = Status::newGood();
79
$status->value = [
80
'warnings'
=>
UploadBase::makeWarningsSerializable
( $upload->checkWarnings() )
81
];
82
83
// We have a new filekey for the fully concatenated file
84
$newFileKey = $upload->getStashFile()->getFileKey();
85
86
// Remove the old stash file row and first chunk file
87
$upload->stash->removeFileNoAuth( $this->params[
'filekey'
] );
88
89
// Build the image info array while we have the local reference handy
90
$apiMain =
new
ApiMain
();
// dummy object (XXX)
91
$imageInfo = $upload->getImageInfo( $apiMain->getResult() );
92
93
// Cleanup any temporary local file
94
$upload->cleanupTempFile();
95
96
// Cache the info so the user doesn't have to wait forever to get the final info
97
UploadBase::setSessionStatus
(
98
$user,
99
$this->params[
'filekey'
],
100
[
101
'result'
=>
'Success'
,
102
'stage'
=>
'assembling'
,
103
'filekey'
=> $newFileKey,
104
'imageinfo'
=> $imageInfo,
105
'status'
=> $status
106
]
107
);
108
}
catch
( Exception $e ) {
109
UploadBase::setSessionStatus
(
110
$user,
111
$this->params[
'filekey'
],
112
[
113
'result'
=>
'Failure'
,
114
'stage'
=>
'assembling'
,
115
'status'
=> Status::newFatal(
'api-error-stashfailed'
)
116
]
117
);
118
$this->
setLastError
( get_class( $e ) .
": "
. $e->getMessage() );
119
// To be extra robust.
120
MWExceptionHandler::rollbackMasterChangesAndLog( $e );
121
122
return
false
;
123
}
124
125
return
true
;
126
}
127
128
public
function
getDeduplicationInfo
() {
129
$info = parent::getDeduplicationInfo();
130
if
( is_array( $info[
'params'
] ) ) {
131
$info[
'params'
] = [
'filekey'
=> $info[
'params'
][
'filekey'
] ];
132
}
133
134
return
$info;
135
}
136
137
public
function
allowRetries
() {
138
return
false
;
139
}
140
}
ApiMain
This is the main API class, used for both external and internal processing.
Definition
ApiMain.php:41
AssembleUploadChunksJob
Assemble the segments of a chunked upload.
Definition
AssembleUploadChunksJob.php:30
AssembleUploadChunksJob\__construct
__construct(Title $title, array $params)
Definition
AssembleUploadChunksJob.php:31
AssembleUploadChunksJob\run
run()
Run the job.
Definition
AssembleUploadChunksJob.php:36
AssembleUploadChunksJob\allowRetries
allowRetries()
Definition
AssembleUploadChunksJob.php:137
AssembleUploadChunksJob\getDeduplicationInfo
getDeduplicationInfo()
Subclasses may need to override this to make duplication detection work.
Definition
AssembleUploadChunksJob.php:128
Job
Class to both describe a background job and handle jobs.
Definition
Job.php:30
Job\$title
Title $title
Definition
Job.php:41
Job\setLastError
setLastError( $error)
Definition
Job.php:418
Job\addTeardownCallback
addTeardownCallback( $callback)
Definition
Job.php:352
Job\$params
array $params
Array of job parameters.
Definition
Job.php:35
Title
Represents a title within MediaWiki.
Definition
Title.php:42
UploadBase\makeWarningsSerializable
static makeWarningsSerializable( $warnings)
Convert the warnings array returned by checkWarnings() to something that can be serialized.
Definition
UploadBase.php:722
UploadBase\setSessionStatus
static setSessionStatus(User $user, $statusKey, $value)
Set the current status of a chunked upload (used for polling)
Definition
UploadBase.php:2240
UploadFromChunks
Implements uploading from chunks.
Definition
UploadFromChunks.php:33
WebRequestUpload
Object to access the $_FILES array.
Definition
WebRequestUpload.php:30
$context
$context
Definition
load.php:45
includes
jobqueue
jobs
AssembleUploadChunksJob.php
Generated on Mon Nov 25 2024 16:05:15 for MediaWiki by
1.10.0