MediaWiki REL1_31
RevertAction.php
Go to the documentation of this file.
1<?php
31class RevertAction extends FormAction {
35 protected $oldFile;
36
37 public function getName() {
38 return 'revert';
39 }
40
41 public function getRestriction() {
42 return 'upload';
43 }
44
45 protected function checkCanExecute( User $user ) {
46 if ( $this->getTitle()->getNamespace() !== NS_FILE ) {
47 throw new ErrorPageError( $this->msg( 'nosuchaction' ), $this->msg( 'nosuchactiontext' ) );
48 }
49 parent::checkCanExecute( $user );
50
51 $oldimage = $this->getRequest()->getText( 'oldimage' );
52 if ( strlen( $oldimage ) < 16
53 || strpos( $oldimage, '/' ) !== false
54 || strpos( $oldimage, '\\' ) !== false
55 ) {
56 throw new ErrorPageError( 'internalerror', 'unexpected', [ 'oldimage', $oldimage ] );
57 }
58
59 $this->oldFile = RepoGroup::singleton()->getLocalRepo()->newFromArchiveName(
60 $this->getTitle(),
61 $oldimage
62 );
63
64 if ( !$this->oldFile->exists() ) {
65 throw new ErrorPageError( '', 'filerevert-badversion' );
66 }
67 }
68
69 protected function usesOOUI() {
70 return true;
71 }
72
73 protected function alterForm( HTMLForm $form ) {
74 $form->setWrapperLegendMsg( 'filerevert-legend' );
75 $form->setSubmitTextMsg( 'filerevert-submit' );
76 $form->addHiddenField( 'oldimage', $this->getRequest()->getText( 'oldimage' ) );
77 $form->setTokenSalt( [ 'revert', $this->getTitle()->getPrefixedDBkey() ] );
78 }
79
80 protected function getFormFields() {
81 global $wgContLang;
82
83 $timestamp = $this->oldFile->getTimestamp();
84
85 $user = $this->getUser();
86 $lang = $this->getLanguage();
87 $userDate = $lang->userDate( $timestamp, $user );
88 $userTime = $lang->userTime( $timestamp, $user );
89 $siteTs = MWTimestamp::getLocalInstance( $timestamp );
90 $ts = $siteTs->format( 'YmdHis' );
91 $siteDate = $wgContLang->date( $ts, false, false );
92 $siteTime = $wgContLang->time( $ts, false, false );
93 $tzMsg = $siteTs->getTimezoneMessage()->inContentLanguage()->text();
94
95 return [
96 'intro' => [
97 'type' => 'info',
98 'vertical-label' => true,
99 'raw' => true,
100 'default' => $this->msg( 'filerevert-intro',
101 $this->getTitle()->getText(), $userDate, $userTime,
103 $this->page->getFile()->getArchiveUrl( $this->getRequest()->getText( 'oldimage' ) ),
105 ) )->parseAsBlock()
106 ],
107 'comment' => [
108 'type' => 'text',
109 'label-message' => 'filerevert-comment',
110 'default' => $this->msg( 'filerevert-defaultcomment', $siteDate, $siteTime,
111 $tzMsg )->inContentLanguage()->text()
112 ]
113 ];
114 }
115
116 public function onSubmit( $data ) {
118
119 $old = $this->getRequest()->getText( 'oldimage' );
120 $localFile = $this->page->getFile();
121 $oldFile = OldLocalFile::newFromArchiveName( $this->getTitle(), $localFile->getRepo(), $old );
122
123 $source = $localFile->getArchiveVirtualUrl( $old );
124 $comment = $data['comment'];
125
126 if ( $localFile->getSha1() === $oldFile->getSha1() ) {
127 return Status::newFatal( 'filerevert-identical' );
128 }
129
130 // TODO: Preserve file properties from database instead of reloading from file
131 return $localFile->upload(
132 $source,
133 $comment,
134 $comment,
135 0,
136 false,
137 false,
138 $this->getUser()
139 );
140 }
141
142 public function onSuccess() {
143 $timestamp = $this->oldFile->getTimestamp();
144 $user = $this->getUser();
145 $lang = $this->getLanguage();
146 $userDate = $lang->userDate( $timestamp, $user );
147 $userTime = $lang->userTime( $timestamp, $user );
148
149 $this->getOutput()->addWikiMsg( 'filerevert-success', $this->getTitle()->getText(),
150 $userDate, $userTime,
151 wfExpandUrl( $this->page->getFile()->getArchiveUrl( $this->getRequest()->getText( 'oldimage' ) ),
153 ) );
154 $this->getOutput()->returnToMain( false, $this->getTitle() );
155 }
156
157 protected function getPageTitle() {
158 return $this->msg( 'filerevert', $this->getTitle()->getText() );
159 }
160
161 protected function getDescription() {
162 return OutputPage::buildBacklinkSubtitle( $this->getTitle() );
163 }
164
165 public function doesWrites() {
166 return true;
167 }
168}
wfExpandUrl( $url, $defaultProto=PROTO_CURRENT)
Expand a potentially local URL to a fully-qualified URL.
getTitle()
Shortcut to get the Title object from the page.
Definition Action.php:246
getOutput()
Get the OutputPage being used for this instance.
Definition Action.php:207
msg( $key)
Get a Message object with context set Parameters are the same as wfMessage()
Definition Action.php:256
getUser()
Shortcut to get the User being used for this instance.
Definition Action.php:217
useTransactionalTimeLimit()
Call wfTransactionalTimeLimit() if this request was POSTed.
Definition Action.php:416
getLanguage()
Shortcut to get the user Language being used for this instance.
Definition Action.php:236
getRequest()
Get the WebRequest being used for this instance.
Definition Action.php:197
An error page which can definitely be safely rendered using the OutputPage.
An action which shows a form and does something based on the input from the form.
Object handling generic submission, CSRF protection, layout and other logic for UI forms.
Definition HTMLForm.php:130
Class to represent a file in the oldimage table.
static newFromArchiveName( $title, $repo, $archiveName)
static singleton()
Get a RepoGroup instance.
Definition RepoGroup.php:59
File reversion user interface.
usesOOUI()
Whether the form should use OOUI.
OldLocalFile $oldFile
onSubmit( $data)
Process the form on POST submission.
getFormFields()
Get an HTMLForm descriptor array.
getPageTitle()
Returns the name that goes in the <h1> page title.
alterForm(HTMLForm $form)
Play with the HTMLForm if you need to more substantially.
getDescription()
Returns the description that goes below the <h1> tag.
onSuccess()
Do something exciting on successful processing of the form.
doesWrites()
Indicates whether this action may perform database writes.
getName()
Return the name of the action this object responds to.
getRestriction()
Get the permission required to perform this action.
checkCanExecute(User $user)
Checks if the given user (identified by an object) can perform this action.
The User object encapsulates all of the user-specific settings (user_id, name, rights,...
Definition User.php:53
this class mediates it Skin Encapsulates a look and feel for the wiki All of the functions that render HTML and make choices about how to render it are here and are called from various other places when and is meant to be subclassed with other skins that may override some of its functions The User object contains a reference to a and so rather than having a global skin object we just rely on the global User and get the skin with $wgUser and also has some character encoding functions and other locale stuff The current user interface language is instantiated as and the local content language as $wgContLang
Definition design.txt:57
const NS_FILE
Definition Defines.php:80
const PROTO_CURRENT
Definition Defines.php:232
$source
if(!isset( $args[0])) $lang