X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FSpecialPreferences.php;h=4616fcc02583dde1199f9e45cc479c67bdc15fc0;hb=1807fc9c85141e7bf23bd5c936396fc2bd1ee16d;hp=d860d7cef54d4e8e37a1ef3b309fe3afb983e25e;hpb=f0f8d2a32933c08b6ae01d1fa28b9a232d62ef07;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/SpecialPreferences.php b/includes/SpecialPreferences.php index d860d7cef5..4616fcc025 100644 --- a/includes/SpecialPreferences.php +++ b/includes/SpecialPreferences.php @@ -8,9 +8,6 @@ if( !defined( 'MEDIAWIKI' ) ) die(); -/* to get a list of languages in setting user's language preference */ -require_once('languages/Names.php'); - /** * Entry point that create the "Preferences" object */ @@ -33,13 +30,14 @@ class PreferencesForm { var $mUserLanguage, $mUserVariant; var $mSearch, $mRecent, $mHourDiff, $mSearchLines, $mSearchChars, $mAction; var $mReset, $mPosted, $mToggles, $mSearchNs, $mRealName, $mImageSize; + var $mUnderline; /** * Constructor * Load some values */ function PreferencesForm( &$request ) { - global $wgLang, $wgContLang, $wgAllowRealName; + global $wgLang, $wgContLang, $wgUser, $wgAllowRealName; $this->mQuickbar = $request->getVal( 'wpQuickbar' ); $this->mOldpass = $request->getVal( 'wpOldpass' ); @@ -52,22 +50,26 @@ class PreferencesForm { $this->mMath = $request->getVal( 'wpMath' ); $this->mDate = $request->getVal( 'wpDate' ); $this->mUserEmail = $request->getVal( 'wpUserEmail' ); - $this->mRealName = ($wgAllowRealName) ? $request->getVal( 'wpRealName' ) : ''; + $this->mRealName = $wgAllowRealName ? $request->getVal( 'wpRealName' ) : ''; $this->mEmailFlag = $request->getCheck( 'wpEmailFlag' ) ? 1 : 0; $this->mNick = $request->getVal( 'wpNick' ); $this->mUserLanguage = $request->getVal( 'wpUserLanguage' ); - $this->mUserVariant = $request->getVal( 'wpUserVariant' ); + $this->mUserVariant = $request->getVal( 'wpUserVariant' ); $this->mSearch = $request->getVal( 'wpSearch' ); $this->mRecent = $request->getVal( 'wpRecent' ); $this->mHourDiff = $request->getVal( 'wpHourDiff' ); $this->mSearchLines = $request->getVal( 'wpSearchLines' ); $this->mSearchChars = $request->getVal( 'wpSearchChars' ); $this->mImageSize = $request->getVal( 'wpImageSize' ); - + $this->mThumbSize = $request->getInt( 'wpThumbSize' ); + $this->mUnderline = $request->getInt( 'wpOpunderline' ); $this->mAction = $request->getVal( 'action' ); $this->mReset = $request->getCheck( 'wpReset' ); $this->mPosted = $request->wasPosted(); - $this->mSaveprefs = $request->getCheck( 'wpSaveprefs' ) && $this->mPosted; + + $this->mSaveprefs = $request->getCheck( 'wpSaveprefs' ) && + $this->mPosted && + $wgUser->matchEditToken( $request->getVal( 'wpEditToken' ) ); # User toggles (the big ugly unsorted list of checkboxes) $this->mToggles = array(); @@ -99,9 +101,9 @@ class PreferencesForm { } function execute() { - global $wgUser, $wgOut, $wgUseDynamicDates; + global $wgUser, $wgOut; - if ( 0 == $wgUser->getID() ) { + if ( $wgUser->isAnon() ) { $wgOut->errorpage( 'prefsnologin', 'prefsnologintext' ); return; } @@ -120,7 +122,7 @@ class PreferencesForm { } } - /** + /** * @access private */ function validateInt( &$val, $min=0, $max=0x7fffffff ) { @@ -143,7 +145,13 @@ class PreferencesForm { } /** + * Used to validate the user inputed timezone before saving it as + * 'timeciorrection', will return '00:00' if fed bogus data. + * Note: It's not a 100% correct implementation timezone-wise, it will + * accept stuff like '14:30', * @access private + * @param string $s the user input + * @return string */ function validateTimeZone( $s ) { if ( $s !== '' ) { @@ -157,8 +165,10 @@ class PreferencesForm { $hour = intval( $minute / 60 ); $minute = abs( $minute ) % 60; } - $hour = min( $hour, 15 ); - $hour = max( $hour, -15 ); + # Max is +14:00 and min is -12:00, see: + # http://en.wikipedia.org/wiki/Timezone + $hour = min( $hour, 14 ); + $hour = max( $hour, -12 ); $minute = min( $minute, 59 ); $minute = max( $minute, 0 ); $s = sprintf( "%02d:%02d", $hour, $minute ); @@ -172,7 +182,9 @@ class PreferencesForm { function savePreferences() { global $wgUser, $wgLang, $wgOut; global $wgEnableUserEmail, $wgEnableEmail; - global $wgEmailAuthentication; + global $wgEmailAuthentication, $wgMinimalPasswordLength; + global $wgAuth; + if ( '' != $this->mNewpass ) { if ( $this->mNewpass != $this->mRetypePass ) { @@ -180,20 +192,32 @@ class PreferencesForm { return; } + if ( strlen( $this->mNewpass ) < $wgMinimalPasswordLength ) { + $this->mainPrefsForm( wfMsg( 'passwordtooshort', $wgMinimalPasswordLength ) ); + return; + } + if (!$wgUser->checkPassword( $this->mOldpass )) { $this->mainPrefsForm( wfMsg( 'wrongpassword' ) ); return; } + if (!$wgAuth->setPassword( $wgUser, $this->mNewpass )) { + $this->mainPrefsForm( wfMsg( 'externaldberror' ) ); + return; + } $wgUser->setPassword( $this->mNewpass ); } $wgUser->setRealName( $this->mRealName ); $wgUser->setOption( 'language', $this->mUserLanguage ); - $wgUser->setOption( 'variant', $this->mUserVariant ); + $wgUser->setOption( 'variant', $this->mUserVariant ); $wgUser->setOption( 'nickname', $this->mNick ); $wgUser->setOption( 'quickbar', $this->mQuickbar ); $wgUser->setOption( 'skin', $this->mSkin ); - $wgUser->setOption( 'math', $this->mMath ); - $wgUser->setOption( 'date', $this->mDate ); + global $wgUseTeX; + if( $wgUseTeX ) { + $wgUser->setOption( 'math', $this->mMath ); + } + $wgUser->setOption( 'date', $this->validateInt( $this->mDate, 0, 10 ) ); $wgUser->setOption( 'searchlimit', $this->validateIntOrNull( $this->mSearch ) ); $wgUser->setOption( 'contextlines', $this->validateIntOrNull( $this->mSearchLines ) ); $wgUser->setOption( 'contextchars', $this->validateIntOrNull( $this->mSearchChars ) ); @@ -203,6 +227,8 @@ class PreferencesForm { $wgUser->setOption( 'stubthreshold', $this->validateIntOrNull( $this->mStubs ) ); $wgUser->setOption( 'timecorrection', $this->validateTimeZone( $this->mHourDiff, -12, 14 ) ); $wgUser->setOption( 'imagesize', $this->mImageSize ); + $wgUser->setOption( 'thumbsize', $this->mThumbSize ); + $wgUser->setOption( 'underline', $this->validateInt($this->mUnderline, 0, 2) ); # Set search namespace options foreach( $this->mSearchNs as $i => $value ) { @@ -217,35 +243,38 @@ class PreferencesForm { foreach ( $this->mToggles as $tname => $tvalue ) { $wgUser->setOption( $tname, $tvalue ); } + if (!$wgAuth->updateExternalDB($wgUser)) { + $this->mainPrefsForm( wfMsg( 'externaldberror' ) ); + return; + } $wgUser->setCookies(); $wgUser->saveSettings(); + $error = wfMsg( 'savedprefs' ); if( $wgEnableEmail ) { - $newadr = strtolower( $this->mUserEmail ); - $oldadr = strtolower($wgUser->getEmail()); - if (($newadr <> '') && ($newadr <> $oldadr)) { # the user has supplied a new email address on the login page - # prepare for authentication and mail a temporary password to newadr - require_once( 'SpecialUserlogin.php' ); - if ( !$wgUser->isValidEmailAddr( $newadr ) ) { - $this->mainPrefsForm( wfMsg( 'invalidemailaddress' ) ); - return; - } - $wgUser->mEmail = $newadr; # new behaviour: set this new emailaddr from login-page into user database record - $wgUser->mEmailAuthenticationtimestamp = 0; # but flag as "dirty" = unauthenticated - $wgUser->saveSettings(); - if ($wgEmailAuthentication) { - # mail a temporary password to the dirty address - # on "save options", this user will be logged-out automatically - $error = LoginForm::mailPasswordInternal( $wgUser, true, $dummy ); - if ($error === '') { - return LoginForm::mainLoginForm( wfMsg( 'passwordsentforemailauthentication', $wgUser->getName() ) ); - } else { - return LoginForm::mainLoginForm( wfMsg( 'mailerror', $error ) ); + $newadr = $this->mUserEmail; + $oldadr = $wgUser->getEmail(); + if( ($newadr != '') && ($newadr != $oldadr) ) { + # the user has supplied a new email address on the login page + if( $wgUser->isValidEmailAddr( $newadr ) ) { + $wgUser->mEmail = $newadr; # new behaviour: set this new emailaddr from login-page into user database record + $wgUser->mEmailAuthenticated = null; # but flag as "dirty" = unauthenticated + $wgUser->saveSettings(); + if ($wgEmailAuthentication) { + # Mail a temporary password to the dirty address. + # User can come back through the confirmation URL to re-enable email. + $result = $wgUser->sendConfirmationMail(); + if( WikiError::isError( $result ) ) { + $error = wfMsg( 'mailerror', $result->getMessage() ); + } else { + $error = wfMsg( 'eauthentsent', $wgUser->getName() ); + } } - # if user returns, that new email address gets authenticated in checkpassword() + } else { + $error = wfMsg( 'invalidemailaddress' ); } } else { - $wgUser->setEmail( strtolower($this->mUserEmail) ); + $wgUser->setEmail( $this->mUserEmail ); $wgUser->setCookies(); $wgUser->saveSettings(); } @@ -253,7 +282,7 @@ class PreferencesForm { $wgOut->setParserOptions( ParserOptions::newFromUser( $wgUser ) ); $po = ParserOptions::newFromUser( $wgUser ); - $this->mainPrefsForm( wfMsg( 'savedprefs' ) ); + $this->mainPrefsForm( $error ); } /** @@ -272,9 +301,8 @@ class PreferencesForm { global $wgContLanguageCode; $this->mUserLanguage = $wgContLanguageCode; } - $this->mUserVariant = $wgUser->getOption( 'variant'); - if ( 1 == $wgUser->getOption( 'disablemail' ) ) { $this->mEmailFlag = 1; } - else { $this->mEmailFlag = 0; } + $this->mUserVariant = $wgUser->getOption( 'variant'); + $this->mEmailFlag = $wgUser->getOption( 'disablemail' ) == 1 ? 1 : 0; $this->mNick = $wgUser->getOption( 'nickname' ); $this->mQuickbar = $wgUser->getOption( 'quickbar' ); @@ -289,7 +317,9 @@ class PreferencesForm { $this->mSearchLines = $wgUser->getOption( 'contextlines' ); $this->mSearchChars = $wgUser->getOption( 'contextchars' ); $this->mImageSize = $wgUser->getOption( 'imagesize' ); + $this->mThumbSize = $wgUser->getOption( 'thumbsize' ); $this->mRecent = $wgUser->getOption( 'rclimit' ); + $this->mUnderline = $wgUser->getOption( 'underline' ); $togs = $wgLang->getUserToggles(); foreach ( $togs as $tname ) { @@ -299,7 +329,7 @@ class PreferencesForm { $namespaces = $wgContLang->getNamespaces(); foreach ( $namespaces as $i => $namespace ) { - if ( $i >= 0 ) { + if ( $i >= NS_MAIN ) { $this->mSearchNs[$i] = $wgUser->getOption( 'searchNs'.$i ); } } @@ -313,28 +343,19 @@ class PreferencesForm { # Determine namespace checkboxes $namespaces = $wgContLang->getNamespaces(); - $r1 = ''; + $r1 = null; foreach ( $namespaces as $i => $name ) { - # Skip special or anything similar - if ( $i >= 0 ) { - $checked = ''; - if ( $this->mSearchNs[$i] ) { - $checked = ' checked="checked"'; - } - $name = str_replace( '_', ' ', $namespaces[$i] ); - if ( '' == $name ) { - $name = wfMsg( 'blanknamespace' ); - } - - if ( 0 != $i ) { - $r1 .= ' '; - } - $r1 .= "\n"; - } + if ($i < 0) + continue; + $checked = $this->mSearchNs[$i] ? "checked='checked'" : ''; + $name = str_replace( '_', ' ', $namespaces[$i] ); + + if ( empty($name) ) + $name = wfMsg( 'blanknamespace' ); + + $r1 .= "\n"; } - return $r1; } @@ -345,27 +366,43 @@ class PreferencesForm { $this->mUsedToggles[$tname] = true; $ttext = $wgLang->getUserToggle( $tname ); - if ( 1 == $wgUser->getOption( $tname ) ) { - $checked = ' checked="checked"'; - } else { - $checked = ''; - } - $trailer =($trailer) ? $trailer : ''; - return "