* @throws MWException
* @param User $user
* @param IContextSource $context
- * @param array $defaultPreferences Array to load values for
+ * @param array &$defaultPreferences Array to load values for
* @return array|null
*/
static function loadPreferenceValues( $user, $context, &$defaultPreferences ) {
/**
* @param User $user
* @param IContextSource $context
- * @param array $defaultPreferences
+ * @param array &$defaultPreferences
* @return void
*/
static function profilePreferences( $user, IContextSource $context, &$defaultPreferences ) {
/**
* @param User $user
* @param IContextSource $context
- * @param array $defaultPreferences
+ * @param array &$defaultPreferences
* @return void
*/
static function skinPreferences( $user, IContextSource $context, &$defaultPreferences ) {
/**
* @param User $user
* @param IContextSource $context
- * @param array $defaultPreferences
+ * @param array &$defaultPreferences
*/
static function filesPreferences( $user, IContextSource $context, &$defaultPreferences ) {
# # Files #####################################
/**
* @param User $user
* @param IContextSource $context
- * @param array $defaultPreferences
+ * @param array &$defaultPreferences
* @return void
*/
static function datetimePreferences( $user, IContextSource $context, &$defaultPreferences ) {
/**
* @param User $user
* @param IContextSource $context
- * @param array $defaultPreferences
+ * @param array &$defaultPreferences
*/
static function renderingPreferences( $user, IContextSource $context, &$defaultPreferences ) {
# # Diffs ####################################
/**
* @param User $user
* @param IContextSource $context
- * @param array $defaultPreferences
+ * @param array &$defaultPreferences
*/
static function editingPreferences( $user, IContextSource $context, &$defaultPreferences ) {
# # Editing #####################################
'section' => 'editing/editor',
'label-message' => 'editfont-style',
'options' => [
- $context->msg( 'editfont-default' )->text() => 'default',
$context->msg( 'editfont-monospace' )->text() => 'monospace',
$context->msg( 'editfont-sansserif' )->text() => 'sans-serif',
$context->msg( 'editfont-serif' )->text() => 'serif',
+ $context->msg( 'editfont-default' )->text() => 'default',
]
];
}
/**
* @param User $user
* @param IContextSource $context
- * @param array $defaultPreferences
+ * @param array &$defaultPreferences
*/
static function rcPreferences( $user, IContextSource $context, &$defaultPreferences ) {
$config = $context->getConfig();
];
$defaultPreferences['rclimit'] = [
'type' => 'int',
+ 'min' => 0,
+ 'max' => 1000,
'label-message' => 'recentchangescount',
'help-message' => 'prefs-help-recentchangescount',
'section' => 'rc/displayrc',
$defaultPreferences['rcfilters-saved-queries'] = [
'type' => 'api',
];
+ $defaultPreferences['rcfilters-wl-saved-queries'] = [
+ 'type' => 'api',
+ ];
+ $defaultPreferences['rcfilters-rclimit'] = [
+ 'type' => 'api',
+ ];
if ( $config->get( 'RCWatchCategoryMembership' ) ) {
$defaultPreferences['hidecategorization'] = [
/**
* @param User $user
* @param IContextSource $context
- * @param array $defaultPreferences
+ * @param array &$defaultPreferences
*/
static function watchlistPreferences( $user, IContextSource $context, &$defaultPreferences ) {
$config = $context->getConfig();
'section' => 'watchlist/advancedwatchlist',
'label-message' => 'tog-watchlistreloadautomatically',
];
+ $defaultPreferences['watchlistunwatchlinks'] = [
+ 'type' => 'toggle',
+ 'section' => 'watchlist/advancedwatchlist',
+ 'label-message' => 'tog-watchlistunwatchlinks',
+ ];
if ( $config->get( 'RCWatchCategoryMembership' ) ) {
$defaultPreferences['watchlisthidecategorization'] = [
/**
* @param User $user
* @param IContextSource $context
- * @param array $defaultPreferences
+ * @param array &$defaultPreferences
*/
static function searchPreferences( $user, IContextSource $context, &$defaultPreferences ) {
foreach ( MWNamespace::getValidNamespaces() as $n ) {
/**
* Dummy, kept for backwards-compatibility.
+ * @param User $user
+ * @param IContextSource $context
+ * @param array &$defaultPreferences
*/
static function miscPreferences( $user, IContextSource $context, &$defaultPreferences ) {
}
$formClass = 'PreferencesForm',
array $remove = []
) {
- $formDescriptor = Preferences::getPreferences( $user, $context );
+ $formDescriptor = self::getPreferences( $user, $context );
if ( count( $remove ) ) {
$removeKeys = array_flip( $remove );
$formDescriptor = array_diff_key( $formDescriptor, $removeKeys );
}
if ( $user->isAllowed( 'editmyoptions' ) ) {
+ $oldUserOptions = $user->getOptions();
+
foreach ( self::$saveBlacklist as $b ) {
unset( $formData[$b] );
}
$user->setOption( $key, $value );
}
- Hooks::run( 'PreferencesFormPreSave', [ $formData, $form, $user, &$result ] );
+ Hooks::run(
+ 'PreferencesFormPreSave',
+ [ $formData, $form, $user, &$result, $oldUserOptions ]
+ );
}
MediaWiki\Auth\AuthManager::callLegacyAuthPlugin( 'updateExternalDB', [ $user ] );
$html = parent::getButtons();
if ( $this->getModifiedUser()->isAllowed( 'editmyoptions' ) ) {
- $t = SpecialPage::getTitleFor( 'Preferences', 'reset' );
+ $t = $this->getTitle()->getSubpage( 'reset' );
$linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
$html .= "\n" . $linkRenderer->makeLink( $t, $this->msg( 'restoreprefs' )->text(),