MediaWiki REL1_35
SpecialPasswordReset.php
Go to the documentation of this file.
1<?php
25
37 private $passwordReset = null;
38
42 private $result;
43
47 private $method;
48
49 public function __construct() {
50 parent::__construct( 'PasswordReset', 'editmyprivateinfo' );
51 }
52
53 private function getPasswordReset() {
54 if ( $this->passwordReset === null ) {
55 $this->passwordReset = MediaWikiServices::getInstance()->getPasswordReset();
56 }
58 }
59
60 public function doesWrites() {
61 return true;
62 }
63
64 public function userCanExecute( User $user ) {
65 return $this->getPasswordReset()->isAllowed( $user )->isGood();
66 }
67
68 public function checkExecutePermissions( User $user ) {
69 $status = Status::wrap( $this->getPasswordReset()->isAllowed( $user ) );
70 if ( !$status->isGood() ) {
71 throw new ErrorPageError( 'internalerror', $status->getMessage() );
72 }
73
74 parent::checkExecutePermissions( $user );
75 }
76
80 public function execute( $par ) {
81 $out = $this->getOutput();
82 $out->disallowUserJs();
83 parent::execute( $par );
84 }
85
86 protected function getFormFields() {
87 $resetRoutes = $this->getConfig()->get( 'PasswordResetRoutes' );
88 $a = [];
89 if ( isset( $resetRoutes['username'] ) && $resetRoutes['username'] ) {
90 $a['Username'] = [
91 'type' => 'text',
92 'default' => $this->getRequest()->getSession()->suggestLoginUsername(),
93 'label-message' => 'passwordreset-username',
94 ];
95
96 if ( $this->getUser()->isLoggedIn() ) {
97 $a['Username']['default'] = $this->getUser()->getName();
98 }
99 }
100
101 if ( isset( $resetRoutes['email'] ) && $resetRoutes['email'] ) {
102 $a['Email'] = [
103 'type' => 'email',
104 'label-message' => 'passwordreset-email',
105 ];
106 }
107
108 return $a;
109 }
110
111 protected function getDisplayFormat() {
112 return 'ooui';
113 }
114
115 public function alterForm( HTMLForm $form ) {
116 $resetRoutes = $this->getConfig()->get( 'PasswordResetRoutes' );
117
118 $form->setSubmitDestructive();
119
120 $form->addHiddenFields( $this->getRequest()->getValues( 'returnto', 'returntoquery' ) );
121
122 $i = 0;
123 if ( isset( $resetRoutes['username'] ) && $resetRoutes['username'] ) {
124 $i++;
125 }
126 if ( isset( $resetRoutes['email'] ) && $resetRoutes['email'] ) {
127 $i++;
128 }
129
130 $message = ( $i > 1 ) ? 'passwordreset-text-many' : 'passwordreset-text-one';
131
132 $form->setHeaderText( $this->msg( $message, $i )->parseAsBlock() );
133 $form->setSubmitTextMsg( 'mailmypassword' );
134 }
135
145 public function onSubmit( array $data ) {
146 $username = $data['Username'] ?? null;
147 $email = $data['Email'] ?? null;
148
149 $this->method = $username ? 'username' : 'email';
150 $this->result = Status::wrap(
151 $this->getPasswordReset()->execute( $this->getUser(), $username, $email ) );
152
153 if ( $this->result->hasMessage( 'actionthrottledtext' ) ) {
154 throw new ThrottledError;
155 }
156
157 return $this->result;
158 }
159
164 public function onSuccess() {
165 $output = $this->getOutput();
166
167 // Information messages.
168 $output->addWikiMsg( 'passwordreset-success' );
169 $output->addWikiMsg( 'passwordreset-success-details-generic',
170 $this->getConfig()->get( 'PasswordReminderResendTime' ) );
171
172 // Confirmation of what the user has just submitted.
173 $info = "\n";
174 $postVals = $this->getRequest()->getPostValues();
175 if ( isset( $postVals['wpUsername'] ) && $postVals['wpUsername'] !== '' ) {
176 $info .= "* " . $this->msg( 'passwordreset-username' ) . ' '
177 . wfEscapeWikiText( $postVals['wpUsername'] ) . "\n";
178 }
179 if ( isset( $postVals['wpEmail'] ) && $postVals['wpEmail'] !== '' ) {
180 $info .= "* " . $this->msg( 'passwordreset-email' ) . ' '
181 . wfEscapeWikiText( $postVals['wpEmail'] ) . "\n";
182 }
183 $output->addWikiMsg( 'passwordreset-success-info', $info );
184
185 // Link to main page.
186 $output->returnToMain();
187 }
188
193 public function isListed() {
194 if ( $this->getPasswordReset()->isAllowed( $this->getUser() )->isGood() ) {
195 return parent::isListed();
196 }
197
198 return false;
199 }
200
201 protected function getGroupName() {
202 return 'users';
203 }
204}
wfEscapeWikiText( $text)
Escapes the given text so that it may be output using addWikiText() without any linking,...
An error page which can definitely be safely rendered using the OutputPage.
Special page which uses an HTMLForm to handle processing.
string null $par
The sub-page of the special page.
Object handling generic submission, CSRF protection, layout and other logic for UI forms in a reusabl...
Definition HTMLForm.php:135
setHeaderText( $msg, $section=null)
Set header text, inside the form.
Definition HTMLForm.php:841
setSubmitTextMsg( $msg)
Set the text for the submit button to a message.
setSubmitDestructive()
Identify that the submit button in the form has a destructive action.
addHiddenFields(array $fields)
Add an array of hidden fields to the output.
Definition HTMLForm.php:974
MediaWikiServices is the service locator for the application scope of MediaWiki.
Helper class for the password reset functionality shared by the web UI and the API.
getOutput()
Get the OutputPage being used for this instance.
getUser()
Shortcut to get the User executing this instance.
msg( $key,... $params)
Wrapper around wfMessage that sets the current context.
getConfig()
Shortcut to get main config object.
getRequest()
Get the WebRequest being used for this instance.
Special page for requesting a password reset email.
getDisplayFormat()
Get display format for the form.
getFormFields()
Get an HTMLForm descriptor array.
doesWrites()
Indicates whether this special page may perform database writes.
string $method
Identifies which password reset field was specified by the user.
onSuccess()
Show a message on the successful processing of the form.
getGroupName()
Under which header this special page is listed in Special:SpecialPages See messages 'specialpages-gro...
alterForm(HTMLForm $form)
Play with the HTMLForm if you need to more substantially.
isListed()
Hide the password reset page if resets are disabled.
onSubmit(array $data)
Process the form.
checkExecutePermissions(User $user)
Called from execute() to check if the given user can perform this action.
userCanExecute(User $user)
Checks if the given user (identified by an object) can execute this special page (as defined by $mRes...
Generic operation result class Has warning/error list, boolean status and arbitrary value.
Definition Status.php:44
Show an error when the user hits a rate limit.
The User object encapsulates all of the user-specific settings (user_id, name, rights,...
Definition User.php:60