MediaWiki REL1_39
ApiFileRevert.php
Go to the documentation of this file.
1<?php
24
28class ApiFileRevert extends ApiBase {
30 protected $file;
31
33 protected $archiveName;
34
36 protected $params;
37
39 private $repoGroup;
40
46 public function __construct(
47 ApiMain $main,
48 $action,
49 RepoGroup $repoGroup
50 ) {
51 parent::__construct( $main, $action );
52 $this->repoGroup = $repoGroup;
53 }
54
55 public function execute() {
57
58 $this->params = $this->extractRequestParams();
59 // Extract the file and archiveName from the request parameters
60 $this->validateParameters();
61
62 // Check whether we're allowed to revert this file
63 $this->checkTitleUserPermissions( $this->file->getTitle(), [ 'edit', 'upload' ] );
64 $rights = [ 'reupload' ];
65 if ( $this->getUser()->equals( $this->file->getUploader() ) ) {
66 // reupload-own is more basic, put it in the front for error messages.
67 array_unshift( $rights, 'reupload-own' );
68 }
69 $this->checkUserRightsAny( $rights );
70
71 $sourceUrl = $this->file->getArchiveVirtualUrl( $this->archiveName );
72 $status = $this->file->upload(
73 $sourceUrl,
74 $this->params['comment'],
75 $this->params['comment'],
76 0,
77 false,
78 false,
79 $this->getAuthority()
80 );
81
82 if ( $status->isGood() ) {
83 $result = [ 'result' => 'Success' ];
84 } else {
85 $result = [
86 'result' => 'Failure',
87 'errors' => $this->getErrorFormatter()->arrayFromStatus( $status ),
88 ];
89 }
90
91 $this->getResult()->addValue( null, $this->getModuleName(), $result );
92 }
93
98 protected function validateParameters() {
99 // Validate the input title
100 $title = Title::makeTitleSafe( NS_FILE, $this->params['filename'] );
101 if ( $title === null ) {
102 $this->dieWithError(
103 [ 'apierror-invalidtitle', wfEscapeWikiText( $this->params['filename'] ) ]
104 );
105 }
106 $localRepo = $this->repoGroup->getLocalRepo();
107
108 // Check if the file really exists
109 $this->file = $localRepo->newFile( $title );
110 if ( !$this->file->exists() ) {
111 $this->dieWithError( 'apierror-missingtitle' );
112 }
113
114 // Check if the archivename is valid for this file
115 $this->archiveName = $this->params['archivename'];
116 // @phan-suppress-next-line PhanTypeMismatchArgumentNullable T240141
117 $oldFile = $localRepo->newFromArchiveName( $title, $this->archiveName );
118 if ( !$oldFile->exists() ) {
119 $this->dieWithError( 'filerevert-badversion' );
120 }
121 }
122
123 public function mustBePosted() {
124 return true;
125 }
126
127 public function isWriteMode() {
128 return true;
129 }
130
131 public function getAllowedParams() {
132 return [
133 'filename' => [
134 ParamValidator::PARAM_TYPE => 'string',
135 ParamValidator::PARAM_REQUIRED => true,
136 ],
137 'comment' => [
138 ParamValidator::PARAM_DEFAULT => '',
139 ],
140 'archivename' => [
141 ParamValidator::PARAM_TYPE => 'string',
142 ParamValidator::PARAM_REQUIRED => true,
143 ],
144 ];
145 }
146
147 public function needsToken() {
148 return 'csrf';
149 }
150
151 protected function getExamplesMessages() {
152 return [
153 'action=filerevert&filename=Wiki.png&comment=Revert&' .
154 'archivename=20110305152740!Wiki.png&token=123ABC'
155 => 'apihelp-filerevert-example-revert',
156 ];
157 }
158}
const NS_FILE
Definition Defines.php:70
wfEscapeWikiText( $text)
Escapes the given text so that it may be output using addWikiText() without any linking,...
This abstract class implements many basic API functions, and is the base of all API classes.
Definition ApiBase.php:56
dieWithError( $msg, $code=null, $data=null, $httpCode=0)
Abort execution with an error.
Definition ApiBase.php:1454
checkUserRightsAny( $rights, $user=null)
Helper function for permission-denied errors.
Definition ApiBase.php:1560
getErrorFormatter()
Definition ApiBase.php:640
getResult()
Get the result object.
Definition ApiBase.php:629
extractRequestParams( $options=[])
Using getAllowedParams(), this function makes an array of the values provided by the user,...
Definition ApiBase.php:765
checkTitleUserPermissions( $pageIdentity, $actions, array $options=[])
Helper function for permission-denied errors.
Definition ApiBase.php:1586
getModuleName()
Get the name of the module being executed by this instance.
Definition ApiBase.php:498
useTransactionalTimeLimit()
Call wfTransactionalTimeLimit() if this request was POSTed.
Definition ApiBase.php:1299
LocalFile $file
getAllowedParams()
Returns an array of allowed parameters (parameter name) => (default value) or (parameter name) => (ar...
isWriteMode()
Indicates whether this module requires write mode.
validateParameters()
Validate the user parameters and set $this->archiveName and $this->file.
__construct(ApiMain $main, $action, RepoGroup $repoGroup)
execute()
Evaluates the parameters, performs the requested query, and sets up the result.
mustBePosted()
Indicates whether this module must be called with a POST request.
needsToken()
Returns the token type this module requires in order to execute.
getExamplesMessages()
Returns usage examples for this module.
This is the main API class, used for both external and internal processing.
Definition ApiMain.php:52
Local file in the wiki's own database.
Definition LocalFile.php:60
Prioritized list of file repositories.
Definition RepoGroup.php:29
Service for formatting and validating API parameters.