* replace hard coded namespace numbers by the php define
[lhc/web/wiklou.git] / includes / Preferences.php
index fec3a74..e076b3f 100644 (file)
@@ -11,14 +11,14 @@ class Preferences {
                if (self::$defaultPreferences)
                        return self::$defaultPreferences;
        
-               global $wgLang, $wgRCMaxAge;
-               
+               global $wgRCMaxAge;
+
                $defaultPreferences = array();
 
                self::profilePreferences( $user, $defaultPreferences );
                self::skinPreferences( $user, $defaultPreferences );
-               self::mathPreferences( $user, $defaultPreferences );
                self::filesPreferences( $user, $defaultPreferences );
+               self::mathPreferences( $user, $defaultPreferences );
                self::datetimePreferences( $user, $defaultPreferences );
                self::renderingPreferences( $user, $defaultPreferences );
                self::editingPreferences( $user, $defaultPreferences );
@@ -26,9 +26,9 @@ class Preferences {
                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 ) {
@@ -86,7 +86,7 @@ class Preferences {
                                        'type' => 'info',
                                        'label-message' => 'username',
                                        'default' => $user->getName(),
-                                       'section' => 'personal',
+                                       'section' => 'personal/info',
                                );
                
                $defaultPreferences['userid'] =
@@ -94,7 +94,7 @@ class Preferences {
                                        'type' => 'info',
                                        'label-message' => 'uid',
                                        'default' => $user->getId(),
-                                       'section' => 'personal',
+                                       'section' => 'personal/info',
                                );
                
                # Get groups to which the user belongs
@@ -116,7 +116,7 @@ class Preferences {
                                                                count($userEffectiveGroupsArray) ),
                                        'default' => $wgLang->commaList( $userEffectiveGroupsArray ),
                                        'raw' => true,
-                                       'section' => 'personal',
+                                       'section' => 'personal/info',
                                );
                
                $defaultPreferences['editcount'] =
@@ -124,7 +124,7 @@ class Preferences {
                                        'type' => 'info',
                                        'label-message' => 'prefs-edits',
                                        'default' => $user->getEditCount(),
-                                       'section' => 'personal',
+                                       'section' => 'personal/info',
                                );
                
                if ($user->getRegistration()) {
@@ -133,24 +133,37 @@ class Preferences {
                                                'type' => 'info',
                                                'label-message' => 'prefs-registration',
                                                'default' => $wgLang->timeanddate( $user->getRegistration() ),
-                                               'section' => 'personal',
+                                               'section' => 'personal/info',
                                        );
                }
                                
                // Actually changeable stuff
-               global $wgAllowRealName;
+               global $wgAllowRealName, $wgAuth;
                if ($wgAllowRealName) {
                        $defaultPreferences['realname'] =
                                        array(
-                                               'type' => 'text',
+                                               'type' => $wgAuth->allowRealNameChange() ? 'text' : 'info',
                                                'default' => $user->getRealName(),
-                                               'section' => 'personal',
+                                               'section' => 'personal/info',
                                                'label-message' => 'yourrealname',
                                                'help-message' => 'prefs-help-realname',
                                        );
                }
                
-               global $wgAuth;
+               
+               $defaultPreferences['gender'] =
+                               array(
+                                       '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',
+                               );
+
                if ($wgAuth->allowPasswordChange()) {
                        global $wgUser; // For skin.
                        $link = $wgUser->getSkin()->link( SpecialPage::getTitleFor( 'ResetPass' ),
@@ -163,21 +176,15 @@ class Preferences {
                                                '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
@@ -196,7 +203,7 @@ class Preferences {
                $defaultPreferences['language'] =
                                array(
                                        'type' => 'select',
-                                       'section' => 'personal',
+                                       'section' => 'personal/i18n',
                                        'options' => $options,
                                        'label-message' => 'yourlanguage',
                                );
@@ -228,7 +235,7 @@ class Preferences {
                                                'label-message' => 'yourvariant',
                                                'type' => 'select',
                                                'options' => $options,
-                                               'section' => 'personal',
+                                               'section' => 'personal/i18n',
                                        );
                        }
                }
@@ -237,7 +244,7 @@ class Preferences {
                        $defaultPreferences['noconvertlink'] =
                                        array(
                                                'type' => 'toggle',
-                                               'section' => 'misc',
+                                               'section' => 'personal/i18n',
                                                'label-message' => 'tog-noconvertlink',
                                        );
                }
@@ -245,26 +252,19 @@ class Preferences {
                global $wgMaxSigChars;
                $defaultPreferences['nickname'] =
                                array(
-                                       'type' => 'text',
+                                       'type' => $wgAuth->allowNickChange() ? 'text' : 'info',
                                        'maxlength' => $wgMaxSigChars,
                                        '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'
-                               );
-                               
-               $defaultPreferences['rememberpassword'] =
-                               array(
-                                       'type' => 'toggle',
-                                       'label-message' => 'tog-rememberpassword',
-                                       'section' => 'personal',
+                                       'section' => 'personal/signature'
                                );
                                
                ## Email stuff
@@ -273,9 +273,9 @@ class Preferences {
                
                $defaultPreferences['emailaddress'] =
                                array(
-                                       'type' => 'text',
+                                       'type' => $wgAuth->allowEmailChange() ? 'text' : 'info',
                                        'default' => $user->getEmail(),
-                                       'section' => 'personal',
+                                       'section' => 'personal/email',
                                        'label-message' => 'youremail',
                                        'help-message' => $wgEmailConfirmToEdit
                                                                                ? 'prefs-help-email-required'
@@ -285,6 +285,8 @@ class Preferences {
                                
                global $wgEnableEmail, $wgEnableUserEmail, $wgEmailAuthentication;
                
+               $disableEmailPrefs = false;
+               
                if ( $wgEmailAuthentication ) {
                        if ( $user->getEmail() ) {
                                if( $user->getEmailAuthenticationTimestamp() ) {
@@ -305,6 +307,7 @@ class Preferences {
                                                        wfMsg( 'emailconfirmlink' ) ) . '<br />';
                                }
                        } else {
+                               $disableEmailPrefs = true;
                                $emailauthenticated = wfMsg( 'noemailprefs' );
                        }
                        
@@ -312,7 +315,7 @@ class Preferences {
                                        array(
                                                'type' => 'info',
                                                'raw' => true,
-                                               'section' => 'personal',
+                                               'section' => 'personal/email',
                                                'label-message' => 'prefs-emailconfirm-label',
                                                'default' => $emailauthenticated,
                                        );
@@ -325,40 +328,46 @@ class Preferences {
                                                array(
                                                        'type' => 'toggle',
                                                        'invert' => true,
-                                                       'section' => 'personal',
+                                                       'section' => 'personal/email',
                                                        'label-message' => 'allowemail',
+                                                       'disabled' => $disableEmailPrefs,
                                                );
                                $defaultPreferences['ccmeonemails'] =
                                                array(
                                                        'type' => 'toggle',
-                                                       'section' => 'personal',
+                                                       'section' => 'personal/email',
                                                        'label-message' => 'tog-ccmeonemails',
+                                                       'disabled' => $disableEmailPrefs,
                                                );
                        }
                        
                        $defaultPreferences['enotifwatchlistpages'] =
                                        array(
                                                'type' => 'toggle',
-                                               'section' => 'personal',
+                                               'section' => 'personal/email',
                                                'label-message' => 'tog-enotifwatchlistpages',
+                                               'disabled' => $disableEmailPrefs,
                                        );
                        $defaultPreferences['enotifusertalkpages'] =
                                        array(
                                                'type' => 'toggle',
-                                               'section' => 'personal',
+                                               'section' => 'personal/email',
                                                'label-message' => 'tog-enotifusertalkpages',
+                                               'disabled' => $disableEmailPrefs,
                                        );
                        $defaultPreferences['enotifminoredits'] =
                                        array(
                                                'type' => 'toggle',
-                                               'section' => 'personal',
+                                               'section' => 'personal/email',
                                                'label-message' => 'tog-enotifminoredits',
+                                               'disabled' => $disableEmailPrefs,
                                        );
                        $defaultPreferences['enotifrevealaddr'] =
                                        array(
                                                'type' => 'toggle',
-                                               'section' => 'personal',
-                                               'label-message' => 'tog-enotifrevealaddr'
+                                               'section' => 'personal/email',
+                                               'label-message' => 'tog-enotifrevealaddr',
+                                               'disabled' => $disableEmailPrefs,
                                        );
                }
        }
@@ -373,7 +382,7 @@ class Preferences {
                                                'type' => 'radio',
                                                'options' => self::generateSkinOptions( $user ),
                                                'label' => '&nbsp;',
-                                               'section' => 'skin',
+                                               'section' => 'rendering/skin',
                                        );
                }
                
@@ -401,7 +410,7 @@ class Preferences {
                                                'options' =>
                                                        array_flip( array_map( 'wfMsg', $wgLang->getMathNames() ) ),
                                                'label' => '&nbsp;',
-                                               'section' => 'math',
+                                               'section' => 'rendering/math',
                                        );
                }
        }
@@ -413,14 +422,14 @@ class Preferences {
                                        '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',
                                );
        }
        
@@ -560,7 +569,7 @@ class Preferences {
                                array(
                                        'type' => 'int',
                                        'label-message' => 'columns',
-                                       'section' => 'editing',
+                                       'section' => 'editing/textboxsize',
                                        'min' => 4,
                                        'max' => 1000,
                                );
@@ -568,7 +577,7 @@ class Preferences {
                                array(
                                        'type' => 'int',
                                        'label-message' => 'rows',
-                                       'section' => 'editing',
+                                       'section' => 'editing/textboxsize',
                                        'min' => 4,
                                        'max' => 1000,
                                );
@@ -812,7 +821,16 @@ class Preferences {
                                        '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();
@@ -835,16 +853,6 @@ class Preferences {
                                        'section' => 'searchoptions',
                                        'prefix' => 'searchNs',
                                );
-                               
-               global $wgEnableMWSuggest;
-               if ($wgEnableMWSuggest) {
-                       $defaultPreferences['disablesuggest'] =
-                                       array(
-                                               'type' => 'toggle',
-                                               'label-message' => 'mwsuggest-disable',
-                                               'section' => 'searchoptions',
-                                       );
-               }
        }
        
        static function miscPreferences( $user, &$defaultPreferences ) {
@@ -891,12 +899,12 @@ class Preferences {
                        global $wgAllowUserCss, $wgAllowUserJs;
                        if( $wgAllowUserCss ) {
                                $cssPage = Title::makeTitleSafe( NS_USER, $user->getName().'/'.$skinkey.'.css' );
-                               $customCSS = $sk->makeLinkObj( $cssPage, wfMsgExt('prefs-custom-css', array() ) );
+                               $customCSS = $sk->link( $cssPage, wfMsgExt( 'prefs-custom-css', array() ) );
                                $extraLinks .= " ($customCSS)";
                        }
                        if( $wgAllowUserJs ) {
                                $jsPage = Title::makeTitleSafe( NS_USER, $user->getName().'/'.$skinkey.'.js' );
-                               $customJS = $sk->makeLinkObj( $jsPage, wfMsgHtml('prefs-custom-js') );
+                               $customJS = $sk->link( $jsPage, wfMsgHtml( 'prefs-custom-js' ) );
                                $extraLinks .= " ($customJS)";
                        }
                        if( $skinkey == $wgDefaultSkin )
@@ -985,9 +993,7 @@ class Preferences {
        }
        
        static function validateEmail( $email, $alldata ) {
-               global $wgUser; // To check
-               
-               if ( $email && !$wgUser->isValidEmailAddr( $email ) ) {
+               if ( $email && !User::isValidEmailAddr( $email ) ) {
                        return wfMsgExt( 'invalidemailaddress', 'parseinline' );
                }
                
@@ -1212,6 +1218,8 @@ class PreferencesForm extends HTMLForm {
                
                $html .= "\n" . $sk->link( $t, wfMsg( 'restoreprefs' ) );
                
+               $html = Xml::tags( 'div', array( 'class' => 'mw-prefs-buttons' ), $html );
+               
                return $html;
        }