MediaWiki  master
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  $this->getHookRunner()->onSpecialResetTokensTokens( $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  Html::successBox( '$1' ),
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  $form->setSubmitDestructive();
125  if ( $this->getTokensList() ) {
126  $form->setSubmitTextMsg( 'resettokens-resetbutton' );
127  } else {
128  $form->suppressDefaultSubmit();
129  }
130  }
131 
132  protected function getDisplayFormat() {
133  return 'ooui';
134  }
135 
136  public function onSubmit( array $formData ) {
137  if ( $formData['tokens'] ) {
138  $user = $this->getUser();
139  foreach ( $formData['tokens'] as $tokenPref ) {
140  $user->resetTokenFromOption( $tokenPref );
141  }
142  $user->saveSettings();
143 
144  return true;
145  }
146 
147  return false;
148  }
149 
150  protected function getGroupName() {
151  return 'users';
152  }
153 
154  public function isListed() {
155  return (bool)$this->getTokensList();
156  }
157 }
SpecialResetTokens\__construct
__construct()
Definition: SpecialResetTokens.php:33
Html\successBox
static successBox( $html, $className='')
Return a success box.
Definition: Html.php:751
SpecialPage\msg
msg( $key,... $params)
Wrapper around wfMessage that sets the current context.
Definition: SpecialPage.php:800
SpecialResetTokens\getDisplayFormat
getDisplayFormat()
Get display format for the form.
Definition: SpecialResetTokens.php:132
HTMLForm\suppressDefaultSubmit
suppressDefaultSubmit( $suppressSubmit=true)
Stop a default submit button being shown for this form.
Definition: HTMLForm.php:1472
SpecialResetTokens\getTokensList
getTokensList()
Returns the token information list for this page after running the hook and filtering out disabled pr...
Definition: SpecialResetTokens.php:47
SpecialPage\getOutput
getOutput()
Get the OutputPage being used for this instance.
Definition: SpecialPage.php:716
SpecialResetTokens\$tokensList
$tokensList
Definition: SpecialResetTokens.php:31
FormSpecialPage
Special page which uses an HTMLForm to handle processing.
Definition: FormSpecialPage.php:31
SpecialPage\getTitleFor
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,...
Definition: SpecialPage.php:90
SpecialResetTokens\doesWrites
doesWrites()
Indicates whether this special page may perform database writes.
Definition: SpecialResetTokens.php:37
SpecialResetTokens\getFormFields
getFormFields()
Display appropriate message if there's nothing to do.
Definition: SpecialResetTokens.php:87
SpecialPage\getHookRunner
getHookRunner()
Definition: SpecialPage.php:974
SpecialPage\getConfig
getConfig()
Shortcut to get main config object.
Definition: SpecialPage.php:766
SpecialResetTokens\execute
execute( $par)
Basic SpecialPage workflow: get a form, send it to the user; get some data back,.
Definition: SpecialResetTokens.php:65
SpecialPage\getUser
getUser()
Shortcut to get the User executing this instance.
Definition: SpecialPage.php:726
FormSpecialPage\$par
string null $par
The sub-page of the special page.
Definition: FormSpecialPage.php:36
SpecialPage\requireLogin
requireLogin( $reasonMsg='exception-nologin-text', $titleMsg='exception-nologin')
If the user is not logged in, throws UserNotLoggedIn error.
Definition: SpecialPage.php:358
SpecialResetTokens\onSuccess
onSuccess()
Do something exciting on successful processing of the form, most likely to show a confirmation messag...
Definition: SpecialResetTokens.php:75
SpecialResetTokens\getGroupName
getGroupName()
Under which header this special page is listed in Special:SpecialPages See messages 'specialpages-gro...
Definition: SpecialResetTokens.php:150
SpecialResetTokens\alterForm
alterForm(HTMLForm $form)
Suppress the submit button if there's nothing to do; provide additional message on it otherwise.
Definition: SpecialResetTokens.php:123
SpecialResetTokens\isListed
isListed()
Whether this special page is listed in Special:SpecialPages.
Definition: SpecialResetTokens.php:154
HTMLForm\setSubmitDestructive
setSubmitDestructive()
Identify that the submit button in the form has a destructive action.
Definition: HTMLForm.php:1374
HTMLForm\setSubmitTextMsg
setSubmitTextMsg( $msg)
Set the text for the submit button to a message.
Definition: HTMLForm.php:1388
SpecialResetTokens
Let users reset tokens like the watchlist token.
Definition: SpecialResetTokens.php:30
SpecialResetTokens\onSubmit
onSubmit(array $formData)
Process the form on POST submission.
Definition: SpecialResetTokens.php:136
HTMLForm
Object handling generic submission, CSRF protection, layout and other logic for UI forms in a reusabl...
Definition: HTMLForm.php:133