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  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  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 }
alterForm(HTMLForm $form)
Suppress the submit button if there&#39;s nothing to do; provide additional message on it otherwise...
getOutput()
Get the OutputPage being used for this instance.
Special page which uses an HTMLForm to handle processing.
msg( $key,... $params)
Wrapper around wfMessage that sets the current context.
setSubmitDestructive()
Identify that the submit button in the form has a destructive action.
Definition: HTMLForm.php:1378
getTokensList()
Returns the token information list for this page after running the hook and filtering out disabled pr...
static getTitleFor( $name, $subpage=false, $fragment='')
Get a localised Title object for a specified special page name If you don&#39;t need a full Title object...
Definition: SpecialPage.php:83
Let users reset tokens like the watchlist token.
static successBox( $html, $className='')
Return a success box.
Definition: Html.php:751
string null $par
The sub-page of the special page.
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.
onSubmit(array $formData)
getConfig()
Shortcut to get main config object.
setSubmitTextMsg( $msg)
Set the text for the submit button to a message.
Definition: HTMLForm.php:1392
suppressDefaultSubmit( $suppressSubmit=true)
Stop a default submit button being shown for this form.
Definition: HTMLForm.php:1476
getFormFields()
Display appropriate message if there&#39;s nothing to do.
static run( $event, array $args=[], $deprecatedVersion=null)
Call hook functions defined in Hooks::register and $wgHooks.
Definition: Hooks.php:200