public function execute($subpage) { global $wgOut, $wgRequest, $wgCookiePrefix; wfProfileIn(__METHOD__); $this->mRequest = RequestContext::getMain()->getRequest(); $this->mOut = RequestContext::getMain()->getOutput(); $this->setHeaders(); $this->mTitle = SpecialPage::getTitleFor("Datacenter"); /** * if posted change cookie value */ if ($this->mRequest->wasPosted()) { $val = $this->mRequest->getVal("iowacookie", 0); if ($val == 2) { $this->mOut->addHTML(Wikia::successbox("cookie set to sjc")); $this->mRequest->response()->setcookie($this->mCookieName, "sjc"); $this->mCookie = "sjc"; } elseif ($val == 1) { $this->mOut->addHTML(Wikia::successbox("cookie set to iowa")); $this->mRequest->response()->setcookie($this->mCookieName, "iowa"); $this->mCookie = "iowa"; } elseif ($val == 3) { $this->mOut->addHTML(Wikia::successbox("cookie set to ash")); $this->mRequest->response()->setcookie($this->mCookieName, "ash"); $this->mCookie = "ash"; } elseif ($val == 4) { $this->mOut->addHTML(Wikia::successbox("cookie set to closest")); $this->mRequest->response()->setcookie($this->mCookieName, "closest"); $this->mCookie = "closest"; } else { $this->mOut->addHTML(Wikia::successbox("cookie removed")); $this->mRequest->response()->setcookie($this->mCookieName, "sjc", 1); $this->mCookie = false; } } else { /** * show current value of cookie */ if (isset($_COOKIE[$wgCookiePrefix . $this->mCookieName])) { $this->mCookie = $_COOKIE[$wgCookiePrefix . $this->mCookieName]; } } $this->mOut->addHTML("Current value of cookie {$wgCookiePrefix}{$this->mCookieName}: <em>" . ($this->mCookie ? $this->mCookie : "not set") . "</em>"); /** * show input chooser */ $this->mOut->addHTML(Xml::openElement("form", array("action" => $this->mTitle->getFullURL(), "method" => "post"))); $select = new XMLSelect("iowacookie", "iowacookie"); $select->addOption("Switch to the closest", 4); $select->addOption("Switch to San Jose", 2); $select->addOption("Switch to Iowa", 1); $select->addOption("Switch to Ashburn", 3); $select->addOption("Remove preferences", 0); $this->mOut->addHTML($select->getHTML()); $this->mOut->addHTML(Xml::submitButton("submit")); $this->mOut->addHTML(Xml::closeElement("form")); wfProfileOut(__METHOD__); }
/** * @access private */ function mainPrefsForm($status, $message = '') { global $wgUser, $wgOut, $wgLang, $wgContLang, $wgAuth; global $wgAllowRealName, $wgImageLimits, $wgThumbLimits; global $wgDisableLangConversion, $wgDisableTitleConversion; global $wgEnotifWatchlist, $wgEnotifUserTalk, $wgEnotifMinorEdits; global $wgRCShowWatchingUsers, $wgEnotifRevealEditorAddress; global $wgEnableEmail, $wgEnableUserEmail, $wgEmailAuthentication; global $wgContLanguageCode, $wgDefaultSkin, $wgCookieExpiration; global $wgEmailConfirmToEdit, $wgEnableMWSuggest, $wgLocalTZoffset; $wgOut->setPageTitle(wfMsg('preferences')); $wgOut->setArticleRelated(false); $wgOut->setRobotPolicy('noindex,nofollow'); $wgOut->addScriptFile('prefs.js'); $wgOut->disallowUserJs(); # Prevent hijacked user scripts from sniffing passwords etc. if ($this->mSuccess || 'success' == $status) { $wgOut->wrapWikiMsg('<div class="successbox"><strong>$1</strong></div>', 'savedprefs'); } else { if ('error' == $status) { $wgOut->addWikiText('<div class="errorbox"><strong>' . $message . '</strong></div>'); } else { if ('' != $status) { $wgOut->addWikiText($message . "\n----"); } } } $qbs = $wgLang->getQuickbarSettings(); $mathopts = $wgLang->getMathNames(); $dateopts = $wgLang->getDatePreferences(); $togs = User::getToggles(); $titleObj = SpecialPage::getTitleFor('Preferences'); # Pre-expire some toggles so they won't show if disabled $this->mUsedToggles['shownumberswatching'] = true; $this->mUsedToggles['showupdated'] = true; $this->mUsedToggles['enotifwatchlistpages'] = true; $this->mUsedToggles['enotifusertalkpages'] = true; $this->mUsedToggles['enotifminoredits'] = true; $this->mUsedToggles['enotifrevealaddr'] = true; $this->mUsedToggles['ccmeonemails'] = true; $this->mUsedToggles['uselivepreview'] = true; $this->mUsedToggles['noconvertlink'] = true; if (!$this->mEmailFlag) { $emfc = 'checked="checked"'; } else { $emfc = ''; } if ($wgEmailAuthentication && $this->mUserEmail != '') { if ($wgUser->getEmailAuthenticationTimestamp()) { // date and time are separate parameters to facilitate localisation. // $time is kept for backward compat reasons. // 'emailauthenticated' is also used in SpecialConfirmemail.php $time = $wgLang->timeAndDate($wgUser->getEmailAuthenticationTimestamp(), true); $d = $wgLang->date($wgUser->getEmailAuthenticationTimestamp(), true); $t = $wgLang->time($wgUser->getEmailAuthenticationTimestamp(), true); $emailauthenticated = wfMsg('emailauthenticated', $time, $d, $t) . '<br />'; $disableEmailPrefs = false; } else { $disableEmailPrefs = true; $skin = $wgUser->getSkin(); $emailauthenticated = wfMsg('emailnotauthenticated') . '<br />' . $skin->makeKnownLinkObj(SpecialPage::getTitleFor('Confirmemail'), wfMsg('emailconfirmlink')) . '<br />'; } } else { $emailauthenticated = ''; $disableEmailPrefs = false; } if ($this->mUserEmail == '') { $emailauthenticated = wfMsg('noemailprefs') . '<br />'; } $ps = $this->namespacesCheckboxes(); $enotifwatchlistpages = $wgEnotifWatchlist ? $this->getToggle('enotifwatchlistpages', false, $disableEmailPrefs) : ''; $enotifusertalkpages = $wgEnotifUserTalk ? $this->getToggle('enotifusertalkpages', false, $disableEmailPrefs) : ''; $enotifminoredits = $wgEnotifWatchlist && $wgEnotifMinorEdits ? $this->getToggle('enotifminoredits', false, $disableEmailPrefs) : ''; $enotifrevealaddr = ($wgEnotifWatchlist || $wgEnotifUserTalk) && $wgEnotifRevealEditorAddress ? $this->getToggle('enotifrevealaddr', false, $disableEmailPrefs) : ''; # </FIXME> $wgOut->addHTML(Xml::openElement('form', array('action' => $titleObj->getLocalUrl(), 'method' => 'post', 'id' => 'mw-preferences-form')) . Xml::openElement('div', array('id' => 'preferences'))); # User data $wgOut->addHTML(Xml::fieldset(wfMsg('prefs-personal')) . Xml::openElement('table') . $this->tableRow(Xml::element('h2', null, wfMsg('prefs-personal')))); # Get groups to which the user belongs $userEffectiveGroups = $wgUser->getEffectiveGroups(); $userEffectiveGroupsArray = array(); foreach ($userEffectiveGroups as $ueg) { if ($ueg == '*') { // Skip the default * group, seems useless here continue; } $userEffectiveGroupsArray[] = User::makeGroupLinkHTML($ueg); } asort($userEffectiveGroupsArray); $sk = $wgUser->getSkin(); $toolLinks = array(); $toolLinks[] = $sk->makeKnownLinkObj(SpecialPage::getTitleFor('ListGroupRights'), wfMsg('listgrouprights')); # At the moment one tool link only but be prepared for the future... # FIXME: Add a link to Special:Userrights for users who are allowed to use it. # $wgUser->isAllowed( 'userrights' ) seems to strict in some cases $userInformationHtml = $this->tableRow(wfMsgHtml('username'), htmlspecialchars($wgUser->getName())) . $this->tableRow(wfMsgHtml('uid'), htmlspecialchars($wgUser->getId())) . $this->tableRow(wfMsgExt('prefs-memberingroups', array('parseinline'), count($userEffectiveGroupsArray)), $wgLang->commaList($userEffectiveGroupsArray) . '<br />(' . $wgLang->pipeList($toolLinks) . ')') . $this->tableRow(wfMsgHtml('prefs-edits'), $wgLang->formatNum($wgUser->getEditCount())); if (wfRunHooks('PreferencesUserInformationPanel', array($this, &$userInformationHtml))) { $wgOut->addHTML($userInformationHtml); } if ($wgAllowRealName) { $wgOut->addHTML($this->tableRow(Xml::label(wfMsg('yourrealname'), 'wpRealName'), Xml::input('wpRealName', 25, $this->mRealName, array('id' => 'wpRealName')), Xml::tags('div', array('class' => 'prefsectiontip'), wfMsgExt('prefs-help-realname', 'parseinline')))); } if ($wgEnableEmail) { $wgOut->addHTML($this->tableRow(Xml::label(wfMsg('youremail'), 'wpUserEmail'), Xml::input('wpUserEmail', 25, $this->mUserEmail, array('id' => 'wpUserEmail')), Xml::tags('div', array('class' => 'prefsectiontip'), wfMsgExt($wgEmailConfirmToEdit ? 'prefs-help-email-required' : 'prefs-help-email', 'parseinline')))); } global $wgParser, $wgMaxSigChars; if (mb_strlen($this->mNick) > $wgMaxSigChars) { $invalidSig = $this->tableRow(' ', Xml::element('span', array('class' => 'error'), wfMsgExt('badsiglength', 'parsemag', $wgLang->formatNum($wgMaxSigChars)))); } elseif (!empty($this->mToggles['fancysig']) && false === $wgParser->validateSig($this->mNick)) { $invalidSig = $this->tableRow(' ', Xml::element('span', array('class' => 'error'), wfMsg('badsig'))); } else { $invalidSig = ''; } $wgOut->addHTML($this->tableRow(Xml::label(wfMsg('yournick'), 'wpNick'), Xml::input('wpNick', 25, $this->mNick, array('id' => 'wpNick', 'maxlength' => $wgMaxSigChars))) . $invalidSig . $this->tableRow(' ', $this->getToggle('fancysig'))); $gender = new XMLSelect('wpGender', 'wpGender', $this->mGender); $gender->addOption(wfMsg('gender-unknown'), 'unknown'); $gender->addOption(wfMsg('gender-male'), 'male'); $gender->addOption(wfMsg('gender-female'), 'female'); $wgOut->addHTML($this->tableRow(Xml::label(wfMsg('yourgender'), 'wpGender'), $gender->getHTML(), Xml::tags('div', array('class' => 'prefsectiontip'), wfMsgExt('prefs-help-gender', 'parseinline')))); list($lsLabel, $lsSelect) = Xml::languageSelector($this->mUserLanguage, false); $wgOut->addHTML($this->tableRow($lsLabel, $lsSelect)); /* see if there are multiple language variants to choose from*/ if (!$wgDisableLangConversion) { $variants = $wgContLang->getVariants(); $variantArray = array(); $languages = Language::getLanguageNames(true); foreach ($variants as $v) { $v = str_replace('_', '-', strtolower($v)); if (array_key_exists($v, $languages)) { // If it doesn't have a name, we'll pretend it doesn't exist $variantArray[$v] = $languages[$v]; } } $options = "\n"; foreach ($variantArray as $code => $name) { $selected = $code == $this->mUserVariant; $options .= Xml::option("{$code} - {$name}", $code, $selected) . "\n"; } if (count($variantArray) > 1) { $wgOut->addHTML($this->tableRow(Xml::label(wfMsg('yourvariant'), 'wpUserVariant'), Xml::tags('select', array('name' => 'wpUserVariant', 'id' => 'wpUserVariant'), $options))); } if (count($variantArray) > 1 && !$wgDisableLangConversion && !$wgDisableTitleConversion) { $wgOut->addHTML(Xml::tags('tr', null, Xml::tags('td', array('colspan' => '2'), $this->getToggle("noconvertlink")))); } } # Password if ($wgAuth->allowPasswordChange()) { $link = $wgUser->getSkin()->link(SpecialPage::getTitleFor('ResetPass'), wfMsgHtml('prefs-resetpass'), array(), array('returnto' => SpecialPage::getTitleFor('Preferences')->getPrefixedText())); $wgOut->addHTML($this->tableRow(Xml::element('h2', null, wfMsg('changepassword'))) . $this->tableRow('<ul><li>' . $link . '</li></ul>')); } # <FIXME> # Enotif if ($wgEnableEmail) { $moreEmail = ''; if ($wgEnableUserEmail) { // fixme -- the "allowemail" pseudotoggle is a hacked-together // inversion for the "disableemail" preference. $emf = wfMsg('allowemail'); $disabled = $disableEmailPrefs ? ' disabled="disabled"' : ''; $moreEmail = "<input type='checkbox' {$emfc} {$disabled} value='1' name='wpEmailFlag' id='wpEmailFlag' /> <label for='wpEmailFlag'>{$emf}</label>" . $this->getToggle('ccmeonemails', '', $disableEmailPrefs); } $wgOut->addHTML($this->tableRow(Xml::element('h2', null, wfMsg('email'))) . $this->tableRow($emailauthenticated . $enotifrevealaddr . $enotifwatchlistpages . $enotifusertalkpages . $enotifminoredits . $moreEmail)); } # </FIXME> $wgOut->addHTML(Xml::closeElement('table') . Xml::closeElement('fieldset')); # Quickbar # if ($this->mSkin == 'cologneblue' || $this->mSkin == 'standard') { $wgOut->addHTML("<fieldset>\n<legend>" . wfMsg('qbsettings') . "</legend>\n"); for ($i = 0; $i < count($qbs); ++$i) { if ($i == $this->mQuickbar) { $checked = ' checked="checked"'; } else { $checked = ""; } $wgOut->addHTML("<div><label><input type='radio' name='wpQuickbar' value=\"{$i}\"{$checked} />{$qbs[$i]}</label></div>\n"); } $wgOut->addHTML("</fieldset>\n\n"); } else { # Need to output a hidden option even if the relevant skin is not in use, # otherwise the preference will get reset to 0 on submit $wgOut->addHTML(Xml::hidden('wpQuickbar', $this->mQuickbar)); } # Skin # global $wgAllowUserSkin; if ($wgAllowUserSkin) { $wgOut->addHTML("<fieldset>\n<legend>\n" . wfMsg('skin') . "</legend>\n"); $mptitle = Title::newMainPage(); $previewtext = wfMsg('skin-preview'); # Only show members of Skin::getSkinNames() rather than # $skinNames (skins is all skin names from Language.php) $validSkinNames = Skin::getUsableSkins(); # Sort by UI skin name. First though need to update validSkinNames as sometimes # the skinkey & UI skinname differ (e.g. "standard" skinkey is "Classic" in the UI). foreach ($validSkinNames as $skinkey => &$skinname) { $msgName = "skinname-{$skinkey}"; $localisedSkinName = wfMsg($msgName); if (!wfEmptyMsg($msgName, $localisedSkinName)) { $skinname = $localisedSkinName; } } asort($validSkinNames); foreach ($validSkinNames as $skinkey => $sn) { $checked = $skinkey == $this->mSkin ? ' checked="checked"' : ''; $mplink = htmlspecialchars($mptitle->getLocalURL("useskin={$skinkey}")); $previewlink = "(<a target='_blank' href=\"{$mplink}\">{$previewtext}</a>)"; $extraLinks = ''; global $wgAllowUserCss, $wgAllowUserJs; if ($wgAllowUserCss) { $cssPage = Title::makeTitleSafe(NS_USER, $wgUser->getName() . '/' . $skinkey . '.css'); $customCSS = $sk->makeLinkObj($cssPage, wfMsgExt('prefs-custom-css', array())); $extraLinks .= " ({$customCSS})"; } if ($wgAllowUserJs) { $jsPage = Title::makeTitleSafe(NS_USER, $wgUser->getName() . '/' . $skinkey . '.js'); $customJS = $sk->makeLinkObj($jsPage, wfMsgHtml('prefs-custom-js')); $extraLinks .= " ({$customJS})"; } if ($skinkey == $wgDefaultSkin) { $sn .= ' (' . wfMsg('default') . ')'; } $wgOut->addHTML("<input type='radio' name='wpSkin' id=\"wpSkin{$skinkey}\" value=\"{$skinkey}\"{$checked} /> \n\t\t\t\t\t<label for=\"wpSkin{$skinkey}\">{$sn}</label> {$previewlink}{$extraLinks}<br />\n"); } $wgOut->addHTML("</fieldset>\n\n"); } # Math # global $wgUseTeX; if ($wgUseTeX) { $wgOut->addHTML("<fieldset>\n<legend>" . wfMsg('math') . '</legend>'); foreach ($mathopts as $k => $v) { $checked = $k == $this->mMath; $wgOut->addHTML(Xml::openElement('div') . Xml::radioLabel(wfMsg($v), 'wpMath', $k, "mw-sp-math-{$k}", $checked) . Xml::closeElement('div') . "\n"); } $wgOut->addHTML("</fieldset>\n\n"); } # Files # $imageLimitOptions = null; foreach ($wgImageLimits as $index => $limits) { $selected = $index == $this->mImageSize; $imageLimitOptions .= Xml::option("{$limits[0]}×{$limits[1]}" . wfMsg('unit-pixel'), $index, $selected); } $imageThumbOptions = null; foreach ($wgThumbLimits as $index => $size) { $selected = $index == $this->mThumbSize; $imageThumbOptions .= Xml::option($size . wfMsg('unit-pixel'), $index, $selected); } $imageSizeId = 'wpImageSize'; $thumbSizeId = 'wpThumbSize'; $wgOut->addHTML(Xml::fieldset(wfMsg('files')) . "\n" . Xml::openElement('table') . '<tr> <td class="mw-label">' . Xml::label(wfMsg('imagemaxsize'), $imageSizeId) . '</td> <td class="mw-input">' . Xml::openElement('select', array('name' => $imageSizeId, 'id' => $imageSizeId)) . $imageLimitOptions . Xml::closeElement('select') . '</td> </tr><tr> <td class="mw-label">' . Xml::label(wfMsg('thumbsize'), $thumbSizeId) . '</td> <td class="mw-input">' . Xml::openElement('select', array('name' => $thumbSizeId, 'id' => $thumbSizeId)) . $imageThumbOptions . Xml::closeElement('select') . '</td> </tr>' . Xml::closeElement('table') . Xml::closeElement('fieldset')); # Date format # # Date/Time # $wgOut->addHTML(Xml::openElement('fieldset') . Xml::element('legend', null, wfMsg('datetime')) . "\n"); if ($dateopts) { $wgOut->addHTML(Xml::openElement('fieldset') . Xml::element('legend', null, wfMsg('dateformat')) . "\n"); $idCnt = 0; $epoch = '20010115161234'; # Wikipedia day foreach ($dateopts as $key) { if ($key == 'default') { $formatted = wfMsg('datedefault'); } else { $formatted = $wgLang->timeanddate($epoch, false, $key); } $wgOut->addHTML(Xml::tags('div', null, Xml::radioLabel($formatted, 'wpDate', $key, "wpDate{$idCnt}", $key == $this->mDate)) . "\n"); $idCnt++; } $wgOut->addHTML(Xml::closeElement('fieldset') . "\n"); } $nowlocal = Xml::openElement('span', array('id' => 'wpLocalTime')) . $wgLang->time($now = wfTimestampNow(), true) . Xml::closeElement('span'); $nowserver = $wgLang->time($now, false) . Xml::hidden('wpServerTime', substr($now, 8, 2) * 60 + substr($now, 10, 2)); $wgOut->addHTML(Xml::openElement('fieldset') . Xml::element('legend', null, wfMsg('timezonelegend')) . Xml::openElement('table') . $this->addRow(wfMsg('servertime'), $nowserver) . $this->addRow(wfMsg('localtime'), $nowlocal)); $opt = Xml::openElement('select', array('name' => 'wpTimeZone', 'id' => 'wpTimeZone', 'onchange' => 'javascript:updateTimezoneSelection(false)')); $opt .= Xml::option(wfMsg('timezoneuseserverdefault'), "System|{$wgLocalTZoffset}", $this->mTimeZone === "System|{$wgLocalTZoffset}"); $opt .= Xml::option(wfMsg('timezoneuseoffset'), 'Offset', $this->mTimeZone === 'Offset'); if (function_exists('timezone_identifiers_list')) { # Read timezone list $tzs = timezone_identifiers_list(); sort($tzs); # Precache localized region names $tzRegions = array(); $tzRegions['Africa'] = wfMsg('timezoneregion-africa'); $tzRegions['America'] = wfMsg('timezoneregion-america'); $tzRegions['Antarctica'] = wfMsg('timezoneregion-antarctica'); $tzRegions['Arctic'] = wfMsg('timezoneregion-arctic'); $tzRegions['Asia'] = wfMsg('timezoneregion-asia'); $tzRegions['Atlantic'] = wfMsg('timezoneregion-atlantic'); $tzRegions['Australia'] = wfMsg('timezoneregion-australia'); $tzRegions['Europe'] = wfMsg('timezoneregion-europe'); $tzRegions['Indian'] = wfMsg('timezoneregion-indian'); $tzRegions['Pacific'] = wfMsg('timezoneregion-pacific'); asort($tzRegions); $selZone = explode('|', $this->mTimeZone, 3); $selZone = $selZone[0] == 'ZoneInfo' ? $selZone[2] : null; $now = date_create('now'); $optgroup = ''; foreach ($tzs as $tz) { $z = explode('/', $tz, 2); # timezone_identifiers_list() returns a number of # backwards-compatibility entries. This filters them out of the # list presented to the user. if (count($z) != 2 || !array_key_exists($z[0], $tzRegions)) { continue; } # Localize region $z[0] = $tzRegions[$z[0]]; # Create region groups if ($optgroup != $z[0]) { if ($optgroup !== '') { $opt .= Xml::closeElement('optgroup'); } $optgroup = $z[0]; $opt .= Xml::openElement('optgroup', array('label' => $z[0])) . "\n"; } $minDiff = floor(timezone_offset_get(timezone_open($tz), $now) / 60); $opt .= Xml::option(str_replace('_', ' ', $z[0] . '/' . $z[1]), "ZoneInfo|{$minDiff}|{$tz}", $selZone === $tz, array('label' => $z[1])) . "\n"; } if ($optgroup !== '') { $opt .= Xml::closeElement('optgroup'); } } $opt .= Xml::closeElement('select'); $wgOut->addHTML($this->addRow(Xml::label(wfMsg('timezoneselect'), 'wpTimeZone'), $opt)); $wgOut->addHTML($this->addRow(Xml::label(wfMsg('timezoneoffset'), 'wpHourDiff'), Xml::input('wpHourDiff', 6, $this->mHourDiff, array('id' => 'wpHourDiff', 'onfocus' => 'javascript:updateTimezoneSelection(true)', 'onblur' => 'javascript:updateTimezoneSelection(false)'))) . "<tr>\n\t\t\t\t<td></td>\n\t\t\t\t<td class='mw-submit'>" . Xml::element('input', array('type' => 'button', 'value' => wfMsg('guesstimezone'), 'onclick' => 'javascript:guessTimezone()', 'id' => 'guesstimezonebutton', 'style' => 'display:none;')) . "</td>\n\t\t\t</tr>" . Xml::closeElement('table') . Xml::tags('div', array('class' => 'prefsectiontip'), wfMsgExt('timezonetext', 'parseinline')) . Xml::closeElement('fieldset') . Xml::closeElement('fieldset') . "\n\n"); # Editing # global $wgLivePreview; $wgOut->addHTML(Xml::fieldset(wfMsg('textboxsize')) . wfMsgHTML('prefs-edit-boxsize') . ' ' . Xml::inputLabel(wfMsg('rows'), 'wpRows', 'wpRows', 3, $this->mRows) . ' ' . Xml::inputLabel(wfMsg('columns'), 'wpCols', 'wpCols', 3, $this->mCols) . $this->getToggles(array('editsection', 'editsectiononrightclick', 'editondblclick', 'editwidth', 'showtoolbar', 'previewonfirst', 'previewontop', 'minordefault', 'externaleditor', 'externaldiff', $wgLivePreview ? 'uselivepreview' : false, 'forceeditsummary'))); $wgOut->addHTML(Xml::closeElement('fieldset')); # Recent changes global $wgRCMaxAge, $wgUseRCPatrol; $wgOut->addHTML(Xml::fieldset(wfMsg('prefs-rc')) . Xml::openElement('table') . '<tr> <td class="mw-label">' . Xml::label(wfMsg('recentchangesdays'), 'wpRecentDays') . '</td> <td class="mw-input">' . Xml::input('wpRecentDays', 3, $this->mRecentDays, array('id' => 'wpRecentDays')) . ' ' . wfMsgExt('recentchangesdays-max', 'parsemag', $wgLang->formatNum(ceil($wgRCMaxAge / (3600 * 24)))) . '</td> </tr><tr> <td class="mw-label">' . Xml::label(wfMsg('recentchangescount'), 'wpRecent') . '</td> <td class="mw-input">' . Xml::input('wpRecent', 3, $this->mRecent, array('id' => 'wpRecent')) . '</td> </tr>' . Xml::closeElement('table') . '<br />'); $toggles[] = 'hideminor'; if ($wgUseRCPatrol) { $toggles[] = 'hidepatrolled'; $toggles[] = 'newpageshidepatrolled'; } if ($wgRCShowWatchingUsers) { $toggles[] = 'shownumberswatching'; } $toggles[] = 'usenewrc'; $wgOut->addHTML($this->getToggles($toggles) . Xml::closeElement('fieldset')); # Watchlist $watchlistToggles = array('watchlisthideminor', 'watchlisthidebots', 'watchlisthideown', 'watchlisthideanons', 'watchlisthideliu'); if ($wgUseRCPatrol) { $watchlistToggles[] = 'watchlisthidepatrolled'; } $wgOut->addHTML(Xml::fieldset(wfMsg('prefs-watchlist')) . Xml::inputLabel(wfMsg('prefs-watchlist-days'), 'wpWatchlistDays', 'wpWatchlistDays', 3, $this->mWatchlistDays) . ' ' . wfMsgHTML('prefs-watchlist-days-max') . '<br /><br />' . $this->getToggle('extendwatchlist') . Xml::inputLabel(wfMsg('prefs-watchlist-edits'), 'wpWatchlistEdits', 'wpWatchlistEdits', 3, $this->mWatchlistEdits) . ' ' . wfMsgHTML('prefs-watchlist-edits-max') . '<br /><br />' . $this->getToggles($watchlistToggles)); if ($wgUser->isAllowed('createpage') || $wgUser->isAllowed('createtalk')) { $wgOut->addHTML($this->getToggle('watchcreations')); } foreach (array('edit' => 'watchdefault', 'move' => 'watchmoves', 'delete' => 'watchdeletion') as $action => $toggle) { if ($wgUser->isAllowed($action)) { $wgOut->addHTML($this->getToggle($toggle)); } } $this->mUsedToggles['watchcreations'] = true; $this->mUsedToggles['watchdefault'] = true; $this->mUsedToggles['watchmoves'] = true; $this->mUsedToggles['watchdeletion'] = true; $wgOut->addHTML(Xml::closeElement('fieldset')); # Search $mwsuggest = $wgEnableMWSuggest ? $this->addRow(Xml::label(wfMsg('mwsuggest-disable'), 'wpDisableMWSuggest'), Xml::check('wpDisableMWSuggest', $this->mDisableMWSuggest, array('id' => 'wpDisableMWSuggest'))) : ''; $wgOut->addHTML(Xml::openElement('fieldset') . Xml::element('legend', null, wfMsg('searchresultshead')) . Xml::openElement('fieldset') . Xml::element('legend', null, wfMsg('prefs-searchoptions')) . Xml::openElement('table') . $this->addRow(Xml::label(wfMsg('resultsperpage'), 'wpSearch'), Xml::input('wpSearch', 4, $this->mSearch, array('id' => 'wpSearch'))) . $this->addRow(Xml::label(wfMsg('contextlines'), 'wpSearchLines'), Xml::input('wpSearchLines', 4, $this->mSearchLines, array('id' => 'wpSearchLines'))) . $this->addRow(Xml::label(wfMsg('contextchars'), 'wpSearchChars'), Xml::input('wpSearchChars', 4, $this->mSearchChars, array('id' => 'wpSearchChars'))) . $mwsuggest . Xml::closeElement('table') . Xml::closeElement('fieldset') . Xml::openElement('fieldset') . Xml::element('legend', null, wfMsg('prefs-namespaces')) . wfMsgExt('defaultns', array('parse')) . $ps . Xml::closeElement('fieldset') . Xml::closeElement('fieldset')); # Misc # $uopt = $wgUser->getOption('underline'); $wgOut->addHTML(Xml::fieldset(wfMsg('prefs-misc')) . Xml::openElement('table') . '<tr> <td class="mw-label">' . Xml::tags('label', array('for' => 'wpStubs'), wfMsg('stub-threshold')) . '</td> <td class="mw-input">' . Xml::input('wpStubs', 6, $this->mStubs, array('id' => 'wpStubs')) . '</td> </tr><tr> <td class="mw-label">' . Xml::label(wfMsg('tog-underline'), 'wpOpunderline') . '</td> <td class="mw-input">' . Xml::openElement('select', array('id' => 'wpOpunderline', 'name' => 'wpOpunderline')) . Xml::option(wfMsg('underline-never'), '0', $uopt == 0) . Xml::option(wfMsg('underline-always'), '1', $uopt == 1) . Xml::option(wfMsg('underline-default'), '2', $uopt == 2) . Xml::closeElement('select') . '</td> </tr>' . Xml::closeElement('table')); # And now the rest = Misc. foreach ($togs as $tname) { if (!array_key_exists($tname, $this->mUsedToggles)) { if ($tname == 'norollbackdiff' && $wgUser->isAllowed('rollback')) { $wgOut->addHTML($this->getToggle($tname)); } else { $wgOut->addHTML($this->getToggle($tname)); } } } $wgOut->addHTML('</fieldset>'); wfRunHooks('RenderPreferencesForm', array($this, $wgOut)); $token = htmlspecialchars($wgUser->editToken()); $skin = $wgUser->getSkin(); $rtl = $wgContLang->isRTL() ? 'left' : 'right'; $wgOut->addHTML("\n\t<table id='prefsubmit' cellpadding='0' width='100%' style='background:none;'><tr>\n\t\t<td><input type='submit' name='wpSaveprefs' class='btnSavePrefs' value=\"" . wfMsgHtml('saveprefs') . '"' . $skin->tooltipAndAccesskey('save') . " />\n\t\t<input type='submit' name='wpReset' value=\"" . wfMsgHtml('resetprefs') . "\" /></td>\n\t\t<td align='{$rtl}'><input type='submit' name='wpRestore' value=\"" . wfMsgHtml('restoreprefs') . "\" /></td>\n\t</tr></table>\n\n\t<input type='hidden' name='wpEditToken' value=\"{$token}\" />\n\t</div></form>\n"); $wgOut->addHTML(Xml::tags('div', array('class' => "prefcache"), wfMsgExt('clearyourcache', 'parseinline'))); }