MediaWiki REL1_30
SpecialResetTokens.php
Go to the documentation of this file.
1<?php
31 private $tokensList;
32
33 public function __construct() {
34 parent::__construct( 'ResetTokens' );
35 }
36
37 public function doesWrites() {
38 return true;
39 }
40
47 protected function getTokensList() {
48 if ( !isset( $this->tokensList ) ) {
49 $tokens = [
50 [ 'preference' => 'watchlisttoken', 'label-message' => 'resettokens-watchlist-token' ],
51 ];
52 Hooks::run( 'SpecialResetTokensTokens', [ &$tokens ] );
53
54 $hiddenPrefs = $this->getConfig()->get( 'HiddenPrefs' );
55 $tokens = array_filter( $tokens, function ( $tok ) use ( $hiddenPrefs ) {
56 return !in_array( $tok['preference'], $hiddenPrefs );
57 } );
58
59 $this->tokensList = $tokens;
60 }
61
62 return $this->tokensList;
63 }
64
65 public function execute( $par ) {
66 // This is a preferences page, so no user JS for y'all.
67 $this->getOutput()->disallowUserJs();
68 $this->requireLogin();
69
70 parent::execute( $par );
71
72 $this->getOutput()->addReturnTo( SpecialPage::getTitleFor( 'Preferences' ) );
73 }
74
75 public function onSuccess() {
76 $this->getOutput()->wrapWikiMsg(
77 "<div class='successbox'>\n$1\n</div>",
78 'resettokens-done'
79 );
80 }
81
87 protected function getFormFields() {
88 $user = $this->getUser();
89 $tokens = $this->getTokensList();
90
91 if ( $tokens ) {
92 $tokensForForm = [];
93 foreach ( $tokens as $tok ) {
94 $label = $this->msg( 'resettokens-token-label' )
95 ->rawParams( $this->msg( $tok['label-message'] )->parse() )
96 ->params( $user->getTokenFromOption( $tok['preference'] ) )
97 ->escaped();
98 $tokensForForm[$label] = $tok['preference'];
99 }
100
101 $desc = [
102 'label-message' => 'resettokens-tokens',
103 'type' => 'multiselect',
104 'options' => $tokensForForm,
105 ];
106 } else {
107 $desc = [
108 'label-message' => 'resettokens-no-tokens',
109 'type' => 'info',
110 ];
111 }
112
113 return [
114 'tokens' => $desc,
115 ];
116 }
117
123 protected function alterForm( HTMLForm $form ) {
124 if ( $this->getTokensList() ) {
125 $form->setSubmitTextMsg( 'resettokens-resetbutton' );
126 } else {
127 $form->suppressDefaultSubmit();
128 }
129 }
130
131 protected function getDisplayFormat() {
132 return 'ooui';
133 }
134
135 public function onSubmit( array $formData ) {
136 if ( $formData['tokens'] ) {
137 $user = $this->getUser();
138 foreach ( $formData['tokens'] as $tokenPref ) {
139 $user->resetTokenFromOption( $tokenPref );
140 }
141 $user->saveSettings();
142
143 return true;
144 }
145
146 return false;
147 }
148
149 protected function getGroupName() {
150 return 'users';
151 }
152
153 public function isListed() {
154 return (bool)$this->getTokensList();
155 }
156}
Special page which uses an HTMLForm to handle processing.
string $par
The sub-page of the special page.
Object handling generic submission, CSRF protection, layout and other logic for UI forms.
Definition HTMLForm.php:128
setSubmitTextMsg( $msg)
Set the text for the submit button to a message.
getOutput()
Get the OutputPage being used for this instance.
requireLogin( $reasonMsg='exception-nologin-text', $titleMsg='exception-nologin')
If the user is not logged in, throws UserNotLoggedIn error.
getUser()
Shortcut to get the User executing this instance.
static getTitleFor( $name, $subpage=false, $fragment='')
Get a localised Title object for a specified special page name If you don't need a full Title object,...
msg( $key)
Wrapper around wfMessage that sets the current context.
getConfig()
Shortcut to get main config object.
Let users reset tokens like the watchlist token.
onSuccess()
Do something exciting on successful processing of the form, most likely to show a confirmation messag...
doesWrites()
Indicates whether this special page may perform database writes.
getDisplayFormat()
Get display format for the form.
onSubmit(array $formData)
Process the form on POST submission.
alterForm(HTMLForm $form)
Suppress the submit button if there's nothing to do; provide additional message on it otherwise.
getTokensList()
Returns the token information list for this page after running the hook and filtering out disabled pr...
getGroupName()
Under which header this special page is listed in Special:SpecialPages See messages 'specialpages-gro...
getFormFields()
Display appropriate message if there's nothing to do.
execute( $par)
Basic SpecialPage workflow: get a form, send it to the user; get some data back,.
isListed()
Whether this special page is listed in Special:SpecialPages.
$tokens