getID() ) { $wgOut->errorpage( "prefsnologin", "prefsnologintext" ); return; } if ( wfReadOnly() ) { $wgOut->readOnlyPage(); return; } if ( isset( $wpReset ) ) { resetPrefs(); mainPrefsForm( WfMsg( "prefsreset" ) ); } else if ( "submit" == $action || isset( $wpSaveprefs ) ) { savePreferences(); } else { resetPrefs(); mainPrefsForm( "" ); } } /* private */ function validateInt( &$val, $min=0, $max=0x7fffffff ) { $val = intval($val); $val = min($val, $max); $val = max($val, $min); return $val; } /* private */ function validateIntOrNull( &$val, $min=0, $max=0x7fffffff ) { $val = trim($val); if($val === "") { return $val; } else { return validateInt( $val, $min, $max ); } } /* private */ function validateCheckbox( $cb ) { if ( $cb ) { return 1; } else { return 0; } } /* private */ function savePreferences() { global $wgUser, $wgLang, $wgDeferredUpdateList; global $wpQuickbar, $wpOldpass, $wpNewpass, $wpRetype; global $wpSkin, $wpMath, $wpDate, $wpEmail, $wpEmailFlag, $wpNick, $wpSearch, $wpRecent; global $wpSearchLines, $wpSearchChars, $wpStubs; global $wpRows, $wpCols, $wpHourDiff, $HTTP_POST_VARS; if ( "" != $wpNewpass ) { if ( $wpNewpass != $wpRetype ) { mainPrefsForm( wfMsg( "badretype" ) ); return; } $ep = $wgUser->encryptPassword( $wpOldpass ); if ( $ep != $wgUser->getPassword() ) { if ( $ep != $wgUser->getNewpassword() ) { mainPrefsForm( wfMsg( "wrongpassword" ) ); return; } } $wgUser->setPassword( $wpNewpass ); } $wgUser->setEmail( $wpEmail ); $wgUser->setOption( "nickname", $wpNick ); $wgUser->setOption( "quickbar", $wpQuickbar ); $wgUser->setOption( "skin", $wpSkin ); $wgUser->setOption( "math", $wpMath ); $wgUser->setOption( "date", $wpDate ); $wgUser->setOption( "searchlimit", validateIntOrNull( $wpSearch ) ); $wgUser->setOption( "contextlines", validateIntOrNull( $wpSearchLines ) ); $wgUser->setOption( "contextchars", validateIntOrNull( $wpSearchChars ) ); $wgUser->setOption( "rclimit", validateIntOrNull( $wpRecent ) ); $wgUser->setOption( "rows", validateInt( $wpRows, 4, 1000 ) ); $wgUser->setOption( "cols", validateInt( $wpCols, 4, 1000 ) ); $wgUser->setOption( "stubthreshold", validateIntOrNull( $wpStubs ) ); $wgUser->setOption( "timecorrection", validateIntOrNull( $wpHourDiff, -12, 14 ) ); $namespaces = $wgLang->getNamespaces(); # Set search namespace options # Note: namespaces don't necessarily have consecutive keys foreach ( $namespaces as $i => $namespaces ) { if ( $i >= 0 ) { $nsvar = "wpNs$i"; global $$nsvar; $wgUser->setOption( "searchNs{$i}", validateCheckbox( $$nsvar ) ); } } $wgUser->setOption( "disablemail", validateCheckbox( $wpEmailFlag ) ); $togs = $wgLang->getUserToggles(); foreach ( $togs as $tname => $ttext ) { if ( array_key_exists( "wpOp$tname", $HTTP_POST_VARS ) ) { $wgUser->setOption( $tname, 1 ); } else { $wgUser->setOption( $tname, 0 ); } } $wgUser->setCookies(); $up = new UserUpdate(); array_push( $wgDeferredUpdateList, $up ); mainPrefsForm( wfMsg( "savedprefs" ) ); } /* private */ function resetPrefs() { global $wgUser, $wgLang; global $wpQuickbar, $wpOldpass, $wpNewpass, $wpRetype, $wpStubs; global $wpRows, $wpCols, $wpSkin, $wpMath, $wpDate, $wpEmail, $wpEmailFlag, $wpNick; global $wpSearch, $wpRecent, $HTTP_POST_VARS; global $wpHourDiff, $wpSearchLines, $wpSearchChars; $wpOldpass = $wpNewpass = $wpRetype = ""; $wpEmail = $wgUser->getEmail(); if ( 1 == $wgUser->getOption( "disablemail" ) ) { $wpEmailFlag = 1; } else { $wpEmailFlag = 0; } $wpNick = $wgUser->getOption( "nickname" ); $wpQuickbar = $wgUser->getOption( "quickbar" ); $wpSkin = $wgUser->getOption( "skin" ); $wpMath = $wgUser->getOption( "math" ); $wpDate = $wgUser->getOption( "date" ); $wpRows = $wgUser->getOption( "rows" ); $wpCols = $wgUser->getOption( "cols" ); $wpStubs = $wgUser->getOption( "stubthreshold" ); $wpHourDiff = $wgUser->getOption( "timecorrection" ); $wpSearch = $wgUser->getOption( "searchlimit" ); $wpSearchLines = $wgUser->getOption( "contextlines" ); $wpSearchChars = $wgUser->getOption( "contextchars" ); $wpRecent = $wgUser->getOption( "rclimit" ); $togs = $wgLang->getUserToggles(); foreach ( $togs as $tname => $ttext ) { $HTTP_POST_VARS["wpOp$tname"] = $wgUser->getOption( $tname ); } } /* private */ function namespacesCheckboxes() { global $wgLang, $wgUser; # Determine namespace checkboxes $namespaces = $wgLang->getNamespaces(); $r1 = ""; foreach ( $namespaces as $i => $name ) { # Skip special or anything similar if ( $i >= 0 ) { $checked = ""; if ( $wgUser->getOption( "searchNs$i" ) ) { $checked = " checked"; } $name = str_replace( "_", " ", $namespaces[$i] ); if ( "" == $name ) { $name = wfMsg( "blanknamespace" ); } if ( 0 != $i ) { $r1 .= " "; } $r1 .= "\n"; } } return $r1; } /* private */ function mainPrefsForm( $err ) { global $wgUser, $wgOut, $wgLang, $wgUseDynamicDates; global $wpQuickbar, $wpOldpass, $wpNewpass, $wpRetype; global $wpSkin, $wpMath, $wpDate, $wpEmail, $wpEmailFlag, $wpNick, $wpSearch, $wpRecent; global $wpRows, $wpCols, $wpSaveprefs, $wpReset, $wpHourDiff; global $wpSearchLines, $wpSearchChars, $wpStubs; $wgOut->setPageTitle( wfMsg( "preferences" ) ); $wgOut->setArticleFlag( false ); $wgOut->setRobotpolicy( "noindex,nofollow" ); if ( "" != $err ) { $wgOut->addHTML( "$err\n

" ); } $uname = $wgUser->getName(); $uid = $wgUser->getID(); $wgOut->addWikiText( wfMsg( "prefslogintext", $uname, $uid ) ); $qbs = $wgLang->getQuickbarSettings(); $skins = $wgLang->getSkinNames(); $mathopts = $wgLang->getMathNames(); $dateopts = $wgLang->getDateFormats(); $togs = $wgLang->getUserToggles(); $action = wfLocalUrlE( $wgLang->specialPage( "Preferences" ), "action=submit" ); $qb = wfMsg( "qbsettings" ); $cp = wfMsg( "changepassword" ); $sk = wfMsg( "skin" ); $math = wfMsg( "math" ); $dateFormat = wfMsg("dateformat"); $opw = wfMsg( "oldpassword" ); $npw = wfMsg( "newpassword" ); $rpw = wfMsg( "retypenew" ); $svp = wfMsg( "saveprefs" ); $rsp = wfMsg( "resetprefs" ); $tbs = wfMsg( "textboxsize" ); $tbr = wfMsg( "rows" ); $tbc = wfMsg( "columns" ); $ltz = wfMsg( "localtime" ); $tzt = wfMsg( "timezonetext" ); $tzo = wfMsg( "timezoneoffset" ); $tzGuess = wfMsg( "guesstimezone" ); $tzServerTime = wfMsg( "servertime" ); $yem = wfMsg( "youremail" ); $emf = wfMsg( "emailflag" ); $ynn = wfMsg( "yournick" ); $stt = wfMsg ( "stubthreshold" ) ; $srh = wfMsg( "searchresultshead" ); $rpp = wfMsg( "resultsperpage" ); $scl = wfMsg( "contextlines" ); $scc = wfMsg( "contextchars" ); $rcc = wfMsg( "recentchangescount" ); $dsn = wfMsg( "defaultns" ); $wgOut->addHTML( "

\n" ); # Skin setting # $wgOut->addHTML( "" ); # Math setting # $wgOut->addHTML( "" ); # Date format # if ( $wgUseDynamicDates ) { $wgOut->addHTML( ""); } # Textbox rows, cols # $nowlocal = $wgLang->time( $now = wfTimestampNow(), true ); $nowserver = $wgLang->time( $now, false ); $wgOut->addHTML( "" ); # Email, etc. # $wpEmail = wfEscapeHTML( $wpEmail ); $wpNick = wfEscapeHTML( $wpNick ); if ( $wpEmailFlag ) { $emfc = "checked"; } else { $emfc = ""; } $ps = namespacesCheckboxes(); $wgOut->addHTML( "
$qb:
\n" ); # Quickbar setting # for ( $i = 0; $i < count( $qbs ); ++$i ) { if ( $i == $wpQuickbar ) { $checked = " checked"; } else { $checked = ""; } $wgOut->addHTML( "
\n" ); } # Fields for changing password # $wpOldpass = wfEscapeHTML( $wpOldpass ); $wpNewpass = wfEscapeHTML( $wpNewpass ); $wpRetype = wfEscapeHTML( $wpRetype ); $wgOut->addHTML( "
$cp:



$sk:
\n" ); for ( $i = 0; $i < count( $skins ); ++$i ) { if ( $i == $wpSkin ) { $checked = " checked"; } else { $checked = ""; } $wgOut->addHTML( "
\n" ); } # Various checkbox options # if ( $wgUseDynamicDates ) { $wgOut->addHTML( "
\n" ); } else { $wgOut->addHTML( "\n" ); } $wgOut->addHTML(""); foreach ( $togs as $tname => $ttext ) { if ( 1 == $wgUser->getOption( $tname ) ) { $checked = " checked"; } else { $checked = ""; } $wgOut->addHTML( "\n" ); } $wgOut->addHTML( "
$math:
\n" ); for ( $i = 0; $i < count( $mathopts ); ++$i ) { if ( $i == $wpMath ) { $checked = " checked"; } else { $checked = ""; } $wgOut->addHTML( "
\n" ); } $wgOut->addHTML( "
$dateFormat:
" ); for ( $i = 0; $i < count( $dateopts ); ++$i) { if ( $i == $wpDate ) { $checked = " checked"; } else { $checked = ""; } $wgOut->addHTML( "
\n" ); } $wgOut->addHTML( "
$tbs:



$tzServerTime: $nowserver
$ltz: $nowlocal






{$srh}:


$dsn
$ps
* {$tzt}
\n" ); } ?>