public function execute() { // Check whether upload is enabled if (!UploadBase::isEnabled()) { $this->dieUsageMsg('uploaddisabled'); } $user = $this->getUser(); // Parameter handling $this->mParams = $this->extractRequestParams(); $request = $this->getMain()->getRequest(); // Add the uploaded file to the params array $this->mParams['file'] = $request->getFileName('file'); $this->mParams['chunk'] = $request->getFileName('chunk'); // Copy the session key to the file key, for backward compatibility. if (!$this->mParams['filekey'] && $this->mParams['sessionkey']) { $this->mParams['filekey'] = $this->mParams['sessionkey']; } // Select an upload module if (!$this->selectUploadModule()) { // This is not a true upload, but a status request or similar return; } if (!isset($this->mUpload)) { $this->dieUsage('No upload module set', 'nomodule'); } // First check permission to upload $this->checkPermissions($user); // Fetch the file $status = $this->mUpload->fetchFile(); if (!$status->isGood()) { $errors = $status->getErrorsArray(); $error = array_shift($errors[0]); $this->dieUsage('Error fetching file from remote source', $error, 0, $errors[0]); } // Check if the uploaded file is sane if ($this->mParams['chunk']) { $maxSize = $this->mUpload->getMaxUploadSize(); if ($this->mParams['filesize'] > $maxSize) { $this->dieUsage('The file you submitted was too large', 'file-too-large'); } } else { $this->verifyUpload(); } // Check if the user has the rights to modify or overwrite the requested title // (This check is irrelevant if stashing is already requested, since the errors // can always be fixed by changing the title) if (!$this->mParams['stash']) { $permErrors = $this->mUpload->verifyTitlePermissions($user); if ($permErrors !== true) { $this->dieRecoverableError($permErrors[0], 'filename'); } } // Get the result based on the current upload context: $result = $this->getContextResult(); if ($result['result'] === 'Success') { $result['imageinfo'] = $this->mUpload->getImageInfo($this->getResult()); } $this->getResult()->addValue(null, $this->getModuleName(), $result); // Cleanup any temporary mess $this->mUpload->cleanupTempFile(); }
public function execute() { // Check whether upload is enabled if (!UploadBase::isEnabled()) { $this->dieUsageMsg('uploaddisabled'); } $user = $this->getUser(); // Parameter handling $this->mParams = $this->extractRequestParams(); $request = $this->getMain()->getRequest(); // Check if async mode is actually supported (jobs done in cli mode) $this->mParams['async'] = $this->mParams['async'] && $this->getConfig()->get('EnableAsyncUploads'); // Add the uploaded file to the params array $this->mParams['file'] = $request->getFileName('file'); $this->mParams['chunk'] = $request->getFileName('chunk'); // Copy the session key to the file key, for backward compatibility. if (!$this->mParams['filekey'] && $this->mParams['sessionkey']) { $this->mParams['filekey'] = $this->mParams['sessionkey']; } // Select an upload module try { if (!$this->selectUploadModule()) { return; // not a true upload, but a status request or similar } elseif (!isset($this->mUpload)) { $this->dieUsage('No upload module set', 'nomodule'); } } catch (UploadStashException $e) { // XXX: don't spam exception log $this->handleStashException($e); } // First check permission to upload $this->checkPermissions($user); // Fetch the file (usually a no-op) /** @var $status Status */ $status = $this->mUpload->fetchFile(); if (!$status->isGood()) { $errors = $status->getErrorsArray(); $error = array_shift($errors[0]); $this->dieUsage('Error fetching file from remote source', $error, 0, $errors[0]); } // Check if the uploaded file is sane if ($this->mParams['chunk']) { $maxSize = UploadBase::getMaxUploadSize(); if ($this->mParams['filesize'] > $maxSize) { $this->dieUsage('The file you submitted was too large', 'file-too-large'); } if (!$this->mUpload->getTitle()) { $this->dieUsage('Invalid file title supplied', 'internal-error'); } } elseif ($this->mParams['async'] && $this->mParams['filekey']) { // defer verification to background process } else { wfDebug(__METHOD__ . " about to verify\n"); $this->verifyUpload(); } // Check if the user has the rights to modify or overwrite the requested title // (This check is irrelevant if stashing is already requested, since the errors // can always be fixed by changing the title) if (!$this->mParams['stash']) { $permErrors = $this->mUpload->verifyTitlePermissions($user); if ($permErrors !== true) { $this->dieRecoverableError($permErrors[0], 'filename'); } } // Get the result based on the current upload context: try { $result = $this->getContextResult(); if ($result['result'] === 'Success') { $result['imageinfo'] = $this->mUpload->getImageInfo($this->getResult()); } } catch (UploadStashException $e) { // XXX: don't spam exception log $this->handleStashException($e); } $this->getResult()->addValue(null, $this->getModuleName(), $result); // Cleanup any temporary mess $this->mUpload->cleanupTempFile(); }
public function execute() { global $wgUser; // Check whether upload is enabled if (!UploadBase::isEnabled()) { $this->dieUsageMsg('uploaddisabled'); } // Parameter handling $this->mParams = $this->extractRequestParams(); $request = $this->getMain()->getRequest(); // Add the uploaded file to the params array $this->mParams['file'] = $request->getFileName('file'); // Copy the session key to the file key, for backward compatibility. if (!$this->mParams['filekey'] && $this->mParams['sessionkey']) { $this->mParams['filekey'] = $this->mParams['sessionkey']; } // Select an upload module if (!$this->selectUploadModule()) { // This is not a true upload, but a status request or similar return; } if (!isset($this->mUpload)) { $this->dieUsage('No upload module set', 'nomodule'); } // First check permission to upload $this->checkPermissions($wgUser); // Fetch the file $status = $this->mUpload->fetchFile(); if (!$status->isGood()) { $errors = $status->getErrorsArray(); $error = array_shift($errors[0]); $this->dieUsage('Error fetching file from remote source', $error, 0, $errors[0]); } // Check if the uploaded file is sane $this->verifyUpload(); // Check if the user has the rights to modify or overwrite the requested title // (This check is irrelevant if stashing is already requested, since the errors // can always be fixed by changing the title) if (!$this->mParams['stash']) { $permErrors = $this->mUpload->verifyTitlePermissions($wgUser); if ($permErrors !== true) { $this->dieRecoverableError($permErrors[0], 'filename'); } } // Prepare the API result $result = array(); $warnings = $this->getApiWarnings(); if ($warnings) { $result['result'] = 'Warning'; $result['warnings'] = $warnings; // in case the warnings can be fixed with some further user action, let's stash this upload // and return a key they can use to restart it try { $result['filekey'] = $this->performStash(); $result['sessionkey'] = $result['filekey']; // backwards compatibility } catch (MWException $e) { $result['warnings']['stashfailed'] = $e->getMessage(); } } elseif ($this->mParams['stash']) { // Some uploads can request they be stashed, so as not to publish them immediately. // In this case, a failure to stash ought to be fatal try { $result['result'] = 'Success'; $result['filekey'] = $this->performStash(); $result['sessionkey'] = $result['filekey']; // backwards compatibility } catch (MWException $e) { $this->dieUsage($e->getMessage(), 'stashfailed'); } } else { // This is the most common case -- a normal upload with no warnings // $result will be formatted properly for the API already, with a status $result = $this->performUpload(); } if ($result['result'] === 'Success') { $result['imageinfo'] = $this->mUpload->getImageInfo($this->getResult()); } $this->getResult()->addValue(null, $this->getModuleName(), $result); // Cleanup any temporary mess $this->mUpload->cleanupTempFile(); }