global $wgLang, $wgRCMaxAge;
$defaultPreferences = array();
+
+ self::profilePreferences( $user, $defaultPreferences );
+ self::skinPreferences( $user, $defaultPreferences );
+ self::filesPreferences( $user, $defaultPreferences );
+ self::mathPreferences( $user, $defaultPreferences );
+ self::datetimePreferences( $user, $defaultPreferences );
+ self::renderingPreferences( $user, $defaultPreferences );
+ self::editingPreferences( $user, $defaultPreferences );
+ self::rcPreferences( $user, $defaultPreferences );
+ self::watchlistPreferences( $user, $defaultPreferences );
+ self::searchPreferences( $user, $defaultPreferences );
+ self::miscPreferences( $user, $defaultPreferences );
+
+ wfRunHooks( 'GetPreferences', array( $user, &$defaultPreferences ) );
+
+ ## Prod in defaults from the user
+ global $wgDefaultUserOptions;
+ foreach( $defaultPreferences as $name => &$info ) {
+ $prefFromUser = self::getOptionFromUser( $name, $info, $user );
+ $field = HTMLForm::loadInputFromParameters( $info ); // For validation
+ $globalDefault = isset($wgDefaultUserOptions[$name])
+ ? $wgDefaultUserOptions[$name]
+ : null;
+
+ // If it validates, set it as the default
+ if ( isset($info['default']) ) {
+ // Already set, no problem
+ continue;
+ } elseif ( !is_null( $prefFromUser ) && // Make sure we're not just pulling nothing
+ $field->validate( $prefFromUser, $user->mOptions ) ) {
+ $info['default'] = $prefFromUser;
+ } elseif( $field->validate( $globalDefault, $user->mOptions ) ) {
+ $info['default'] = $globalDefault;
+ }
+ }
+
+ self::$defaultPreferences = $defaultPreferences;
+
+ return $defaultPreferences;
+ }
+
+ // Pull option from a user account. Handles stuff like array-type preferences.
+ static function getOptionFromUser( $name, $info, $user ) {
+ $val = $user->getOption( $name );
+ // Handling for array-type preferences
+ if ( ( isset($info['type']) && $info['type'] == 'multiselect' ) ||
+ ( isset($info['class']) && $info['class'] == 'HTMLMultiSelectField' ) ) {
+
+ $options = HTMLFormField::flattenOptions($info['options']);
+ $prefix = isset($info['prefix']) ? $info['prefix'] : $name;
+ $val = array();
+
+ foreach( $options as $label => $value ) {
+ if ($user->getOption( "$prefix$value" ) ) {
+ $val[] = $value;
+ }
+ }
+ }
+
+ return $val;
+ }
+
+ static function profilePreferences( $user, &$defaultPreferences ) {
+ global $wgLang;
## User info #####################################
// Information panel
$defaultPreferences['username'] =
'type' => 'info',
'label-message' => 'username',
'default' => $user->getName(),
- 'section' => 'personal',
+ 'section' => 'personal/info',
);
$defaultPreferences['userid'] =
'type' => 'info',
'label-message' => 'uid',
'default' => $user->getId(),
- 'section' => 'personal',
+ 'section' => 'personal/info',
);
# Get groups to which the user belongs
count($userEffectiveGroupsArray) ),
'default' => $wgLang->commaList( $userEffectiveGroupsArray ),
'raw' => true,
- 'section' => 'personal',
+ 'section' => 'personal/info',
);
$defaultPreferences['editcount'] =
'type' => 'info',
'label-message' => 'prefs-edits',
'default' => $user->getEditCount(),
- 'section' => 'personal',
+ 'section' => 'personal/info',
);
if ($user->getRegistration()) {
'type' => 'info',
'label-message' => 'prefs-registration',
'default' => $wgLang->timeanddate( $user->getRegistration() ),
- 'section' => 'personal',
+ 'section' => 'personal/info',
);
}
array(
'type' => 'text',
'default' => $user->getRealName(),
- 'section' => 'personal',
+ 'section' => 'personal/info',
'label-message' => 'yourrealname',
'help-message' => 'prefs-help-realname',
);
}
-
- global $wgEmailConfirmToEdit;
- $defaultPreferences['emailaddress'] =
+
+ $defaultPreferences['gender'] =
array(
- 'type' => 'text',
- 'default' => $user->getEmail(),
- 'section' => 'personal',
- 'label-message' => 'youremail',
- 'help-message' => $wgEmailConfirmToEdit
- ? 'prefs-help-email-required'
- : 'prefs-help-email',
- 'validation-callback' => array( 'Preferences', 'validateEmail' ),
+ 'type' => 'select',
+ 'section' => 'personal/info',
+ 'options' => array(
+ wfMsg('gender-male') => 'male',
+ wfMsg('gender-female') => 'female',
+ wfMsg('gender-unknown') => 'unknown',
+ ),
+ 'label-message' => 'yourgender',
+ 'help-message' => 'prefs-help-gender',
);
-
+
global $wgAuth;
if ($wgAuth->allowPasswordChange()) {
global $wgUser; // For skin.
'raw' => true,
'default' => $link,
'label-message' => 'yourpassword',
- 'section' => 'personal',
+ 'section' => 'personal/info',
);
}
- $defaultPreferences['gender'] =
+ $defaultPreferences['rememberpassword'] =
array(
- 'type' => 'select',
- 'section' => 'personal',
- 'options' => array(
- wfMsg('gender-male') => 'male',
- wfMsg('gender-female') => 'female',
- wfMsg('gender-unknown') => 'unknown',
- ),
- 'label-message' => 'yourgender',
- 'help-message' => 'prefs-help-gender',
+ 'type' => 'toggle',
+ 'label-message' => 'tog-rememberpassword',
+ 'section' => 'personal/info',
);
// Language
$defaultPreferences['language'] =
array(
'type' => 'select',
- 'section' => 'personal',
+ 'section' => 'personal/i18n',
'options' => $options,
'label-message' => 'yourlanguage',
);
'label-message' => 'yourvariant',
'type' => 'select',
'options' => $options,
- 'section' => 'personal',
+ 'section' => 'personal/i18n',
);
}
}
$defaultPreferences['noconvertlink'] =
array(
'type' => 'toggle',
- 'section' => 'misc',
+ 'section' => 'personal/i18n',
'label-message' => 'tog-noconvertlink',
);
}
'label-message' => 'yournick',
'validation-callback' =>
array( 'Preferences', 'validateSignature' ),
- 'section' => 'personal',
+ 'section' => 'personal/signature',
'filter-callback' => array( 'Preferences', 'cleanSignature' ),
);
$defaultPreferences['fancysig'] =
array(
'type' => 'toggle',
'label-message' => 'tog-fancysig',
- 'section' => 'personal'
+ 'section' => 'personal/signature'
);
- $defaultPreferences['rememberpassword'] =
+ ## Email stuff
+
+ global $wgEmailConfirmToEdit;
+
+ $defaultPreferences['emailaddress'] =
array(
- 'type' => 'toggle',
- 'label-message' => 'tog-rememberpassword',
- 'section' => 'personal',
+ 'type' => 'text',
+ 'default' => $user->getEmail(),
+ 'section' => 'personal/email',
+ 'label-message' => 'youremail',
+ 'help-message' => $wgEmailConfirmToEdit
+ ? 'prefs-help-email-required'
+ : 'prefs-help-email',
+ 'validation-callback' => array( 'Preferences', 'validateEmail' ),
);
-
-
- ## Email #######################################
- ## Email stuff
+
global $wgEnableEmail, $wgEnableUserEmail, $wgEmailAuthentication;
+ $disableEmailPrefs = false;
+
if ( $wgEmailAuthentication ) {
if ( $user->getEmail() ) {
if( $user->getEmailAuthenticationTimestamp() ) {
$disableEmailPrefs = false;
} else {
$disableEmailPrefs = true;
+ global $wgUser; // wgUser is okay here, it's for display
$skin = $wgUser->getSkin();
$emailauthenticated = wfMsg('emailnotauthenticated').'<br />' .
$skin->makeKnownLinkObj( SpecialPage::getTitleFor( 'Confirmemail' ),
wfMsg( 'emailconfirmlink' ) ) . '<br />';
}
} else {
+ $disableEmailPrefs = true;
$emailauthenticated = wfMsg( 'noemailprefs' );
}
array(
'type' => 'info',
'raw' => true,
- 'section' => 'email',
+ 'section' => 'personal/email',
'label-message' => 'prefs-emailconfirm-label',
'default' => $emailauthenticated,
);
array(
'type' => 'toggle',
'invert' => true,
- 'section' => 'email',
+ 'section' => 'personal/email',
'label-message' => 'allowemail',
+ 'disabled' => $disableEmailPrefs,
);
$defaultPreferences['ccmeonemails'] =
array(
'type' => 'toggle',
- 'section' => 'email',
+ 'section' => 'personal/email',
'label-message' => 'tog-ccmeonemails',
+ 'disabled' => $disableEmailPrefs,
);
}
$defaultPreferences['enotifwatchlistpages'] =
array(
'type' => 'toggle',
- 'section' => 'email',
+ 'section' => 'personal/email',
'label-message' => 'tog-enotifwatchlistpages',
+ 'disabled' => $disableEmailPrefs,
);
$defaultPreferences['enotifusertalkpages'] =
array(
'type' => 'toggle',
- 'section' => 'email',
+ 'section' => 'personal/email',
'label-message' => 'tog-enotifusertalkpages',
+ 'disabled' => $disableEmailPrefs,
);
$defaultPreferences['enotifminoredits'] =
array(
'type' => 'toggle',
- 'section' => 'email',
+ 'section' => 'personal/email',
'label-message' => 'tog-enotifminoredits',
+ 'disabled' => $disableEmailPrefs,
);
$defaultPreferences['enotifrevealaddr'] =
array(
'type' => 'toggle',
- 'section' => 'email',
- 'label-message' => 'tog-enotifrevealaddr'
+ 'section' => 'personal/email',
+ 'label-message' => 'tog-enotifrevealaddr',
+ 'disabled' => $disableEmailPrefs,
);
}
-
+ }
+
+ static function skinPreferences( $user, &$defaultPreferences ) {
## Skin #####################################
- global $wgAllowUserSkin;
+ global $wgAllowUserSkin, $wgLang;
if ($wgAllowUserSkin) {
$defaultPreferences['skin'] =
'type' => 'radio',
'options' => self::generateSkinOptions( $user ),
'label' => ' ',
- 'section' => 'skin',
+ 'section' => 'rendering/skin',
);
}
'label-message' => 'qbsettings',
);
}
-
+ }
+
+ static function mathPreferences( $user, &$defaultPreferences ) {
## Math #####################################
- global $wgUseTeX;
+ global $wgUseTeX, $wgLang;
if ($wgUseTeX) {
$defaultPreferences['math'] =
array(
'options' =>
array_flip( array_map( 'wfMsg', $wgLang->getMathNames() ) ),
'label' => ' ',
- 'section' => 'math',
+ 'section' => 'rendering/math',
);
}
-
+ }
+
+ static function filesPreferences( $user, &$defaultPreferences ) {
## Files #####################################
$defaultPreferences['imagesize'] =
array(
'type' => 'select',
'options' => self::getImageSizes(),
'label-message' => 'imagemaxsize',
- 'section' => 'files',
+ 'section' => 'rendering/files',
);
$defaultPreferences['thumbsize'] =
array(
'type' => 'select',
'options' => self::getThumbSizes(),
'label-message' => 'thumbsize',
- 'section' => 'files',
+ 'section' => 'rendering/files',
);
+ }
+
+ static function datetimePreferences( $user, &$defaultPreferences ) {
+ global $wgLang;
## Date and time #####################################
$dateOptions = self::getDateOptions();
'default' => $tzSetting,
'section' => 'datetime',
);
-
+ }
+
+ static function renderingPreferences( $user, &$defaultPreferences ) {
## Page Rendering ##############################
$defaultPreferences['underline'] =
array(
'section' => 'rendering',
'label-message' => 'tog-numberheadings',
);
-
+ }
+
+ static function editingPreferences( $user, &$defaultPreferences ) {
## Editing #####################################
$defaultPreferences['cols'] =
array(
'type' => 'int',
'label-message' => 'columns',
- 'section' => 'editing',
+ 'section' => 'editing/textboxsize',
'min' => 4,
'max' => 1000,
);
array(
'type' => 'int',
'label-message' => 'rows',
- 'section' => 'editing',
+ 'section' => 'editing/textboxsize',
'min' => 4,
'max' => 1000,
);
'section' => 'editing',
'label-message' => 'tog-uselivepreview',
);
-
+ }
+
+ static function rcPreferences( $user, &$defaultPreferences ) {
+ global $wgRCMaxAge, $wgUseRCPatrol;
## RecentChanges #####################################
$defaultPreferences['rcdays'] =
array(
'label-message' => 'tog-shownumberswatching',
);
}
-
+ }
+
+ static function watchlistPreferences( $user, &$defaultPreferences ) {
+ global $wgUseRCPatrol;
## Watchlist #####################################
$defaultPreferences['wllimit'] =
array(
);
}
}
+ }
+
+ static function searchPreferences( $user, &$defaultPreferences ) {
+ global $wgContLang;
## Search #####################################
$defaultPreferences['searchlimit'] =
'label-message' => 'contextchars',
'section' => 'searchoptions',
'min' => 0,
- );
+ );
+ global $wgEnableMWSuggest;
+ if ($wgEnableMWSuggest) {
+ $defaultPreferences['disablesuggest'] =
+ array(
+ 'type' => 'toggle',
+ 'label-message' => 'mwsuggest-disable',
+ 'section' => 'searchoptions',
+ );
+ }
// Searchable namespaces back-compat with old format
$searchableNamespaces = SearchEngine::searchableNamespaces();
'section' => 'searchoptions',
'prefix' => 'searchNs',
);
-
- global $wgEnableMWSuggest;
- if ($wgEnableMWSuggest) {
- $defaultPreferences['disablesuggest'] =
- array(
- 'type' => 'toggle',
- 'label-message' => 'mwsuggest-disable',
- 'section' => 'searchoptions',
- );
- }
-
+ }
+
+ static function miscPreferences( $user, &$defaultPreferences ) {
## Misc #####################################
$defaultPreferences['diffonly'] =
array(
'section' => 'misc',
'label-message' => 'tog-norollbackdiff',
);
-
- wfRunHooks( 'GetPreferences', array( $user, &$defaultPreferences ) );
-
- ## Prod in defaults from the user
- global $wgDefaultUserOptions;
- foreach( $defaultPreferences as $name => &$info ) {
- $prefFromUser = self::getOptionFromUser( $name, $info, $user );
- $field = HTMLForm::loadInputFromParameters( $info ); // For validation
- $globalDefault = isset($wgDefaultUserOptions[$name])
- ? $wgDefaultUserOptions[$name]
- : null;
-
- // If it validates, set it as the default
- if ( isset($info['default']) ) {
- // Already set, no problem
- continue;
- } elseif ( !is_null( $prefFromUser ) && // Make sure we're not just pulling nothing
- $field->validate( $prefFromUser, $user->mOptions ) ) {
- $info['default'] = $prefFromUser;
- } elseif( $field->validate( $globalDefault, $user->mOptions ) ) {
- $info['default'] = $globalDefault;
- }
- }
-
- self::$defaultPreferences = $defaultPreferences;
-
- return $defaultPreferences;
- }
-
- // Pull option from a user account. Handles stuff like array-type preferences.
- static function getOptionFromUser( $name, $info, $user ) {
- $val = $user->getOption( $name );
-
- // Handling for array-type preferences
- if ( ( isset($info['type']) && $info['type'] == 'multiselect' ) ||
- ( isset($info['class']) && $info['class'] == 'HTMLMultiSelectField' ) ) {
-
- $options = HTMLFormField::flattenOptions($info['options']);
- $prefix = isset($info['prefix']) ? $info['prefix'] : $name;
- $val = array();
-
- foreach( $options as $label => $value ) {
- if ($user->getOption( "$prefix$value" ) ) {
- $val[] = $value;
- }
- }
- }
-
- return $val;
}
static function generateSkinOptions( $user ) {
}
}
- static function tryFormSubmit( $formData ) {
+ static function tryFormSubmit( $formData, $entryPoint = 'internal' ) {
global $wgUser, $wgEmailAuthentication, $wgEnableEmail;
+ $result = true;
+
// Filter input
foreach( array_keys($formData) as $name ) {
if ( isset(self::$saveFilters[$name]) ) {
$result = $wgUser->sendConfirmationMail();
if( WikiError::isError( $result ) ) {
return wfMsg( 'mailerror', htmlspecialchars( $result->getMessage() ) );
- } else {
- // TODO return this somehow
-# wfMsg( 'eauthentsent', $wgUser->getName() );
+ } elseif ($entryPoint == 'ui') {
+ $result = 'eauth';
}
}
} else {
$wgUser->saveSettings();
- // Done
- global $wgOut;
- $wgOut->redirect( SpecialPage::getTitleFor( 'Preferences' )->getFullURL( 'success' ) );
+ return $result;
+ }
+
+ public static function tryUISubmit( $formData ) {
+ $res = self::tryFormSubmit( $formData, 'ui' );
+
+ if ($res) {
+ $urlOptions = array( 'success' );
+ if ($res === 'eauth')
+ $urlOptions[] = 'eauth';
+
+ $queryString = implode( '&', $urlOptions );
+
+ $url = SpecialPage::getTitleFor( 'Preferences' )->getFullURL( $queryString );
+ global $wgOut;
+ $wgOut->redirect( $url );
+ }
return true;
}
$html .= "\n" . $sk->link( $t, wfMsg( 'restoreprefs' ) );
+ $html = Xml::tags( 'div', array( 'class' => 'mw-prefs-buttons' ), $html );
+
return $html;
}