/** * @param WebRequest $request */ function show($request) { global $wgOut, $wgUser; $first = $this->revisions[0]; $wgOut->addWikiText(wfMsg('revdelete-selected', $this->page->getPrefixedText())); $wgOut->addHtml("<ul>"); foreach ($this->revisions as $revid) { $rev = Revision::newFromTitle($this->page, $revid); $wgOut->addHtml($this->historyLine($rev)); $bitfields[] = $rev->mDeleted; // FIXME } $wgOut->addHtml("</ul>"); $wgOut->addWikiText(wfMsg('revdelete-text')); $items = array(wfInputLabel(wfMsg('revdelete-log'), 'wpReason', 'wpReason', 60), wfSubmitButton(wfMsg('revdelete-submit'))); $hidden = array(wfHidden('wpEditToken', $wgUser->editToken()), wfHidden('target', $this->page->getPrefixedText())); foreach ($this->revisions as $revid) { $hidden[] = wfHidden('oldid[]', $revid); } $special = Title::makeTitle(NS_SPECIAL, 'Revisiondelete'); $wgOut->addHtml(wfElement('form', array('method' => 'post', 'action' => $special->getLocalUrl('action=submit')))); $wgOut->addHtml('<fieldset><legend>' . wfMsgHtml('revdelete-legend') . '</legend>'); foreach ($this->checks as $item) { list($message, $name, $field) = $item; $wgOut->addHtml('<div>' . wfCheckLabel(wfMsg($message), $name, $name, $rev->isDeleted($field)) . '</div>'); } $wgOut->addHtml('</fieldset>'); foreach ($items as $item) { $wgOut->addHtml('<p>' . $item . '</p>'); } foreach ($hidden as $item) { $wgOut->addHtml($item); } $wgOut->addHtml('</form>'); }
/** * @access private */ function mainPrefsForm($status, $message = '') { global $wgUser, $wgOut, $wgLang, $wgContLang; global $wgAllowRealName, $wgImageLimits, $wgThumbLimits; global $wgDisableLangConversion; global $wgEnotifWatchlist, $wgEnotifUserTalk, $wgEnotifMinorEdits; global $wgRCShowWatchingUsers, $wgEnotifRevealEditorAddress; global $wgEnableEmail, $wgEnableUserEmail, $wgEmailAuthentication; global $wgContLanguageCode, $wgDefaultSkin, $wgSkipSkins, $wgAuth; $wgOut->setPageTitle(wfMsg('preferences')); $wgOut->setArticleRelated(false); $wgOut->setRobotpolicy('noindex,nofollow'); if ($this->mSuccess || 'success' == $status) { $wgOut->addWikitext('<div class="successbox"><strong>' . wfMsg('savedprefs') . '</strong></div>'); } else { if ('error' == $status) { $wgOut->addWikitext('<div class="errorbox"><strong>' . $message . '</strong></div>'); } else { if ('' != $status) { $wgOut->addWikitext($message . "\n----"); } } } $qbs = $wgLang->getQuickbarSettings(); $skinNames = $wgLang->getSkinNames(); $mathopts = $wgLang->getMathNames(); $dateopts = $wgLang->getDateFormats(); $togs = $wgLang->getUserToggles(); $titleObj = Title::makeTitle(NS_SPECIAL, 'Preferences'); $action = $titleObj->escapeLocalURL(); # 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['uselivepreview'] = true; # Enotif # <FIXME> $this->mUserEmail = htmlspecialchars($this->mUserEmail); $this->mRealName = htmlspecialchars($this->mRealName); $rawNick = $this->mNick; $this->mNick = htmlspecialchars($this->mNick); if (!$this->mEmailFlag) { $emfc = 'checked="checked"'; } else { $emfc = ''; } if ($wgEmailAuthentication && $this->mUserEmail != '') { if ($wgUser->getEmailAuthenticationTimestamp()) { $emailauthenticated = wfMsg('emailauthenticated', $wgLang->timeanddate($wgUser->getEmailAuthenticationTimestamp(), true)) . '<br />'; $disableEmailPrefs = false; } else { $disableEmailPrefs = true; $skin = $wgUser->getSkin(); $emailauthenticated = wfMsg('emailnotauthenticated') . '<br />' . $skin->makeKnownLinkObj(Title::makeTitle(NS_SPECIAL, 'Confirmemail'), wfMsg('emailconfirmlink')); } } else { $emailauthenticated = ''; $disableEmailPrefs = false; } if ($this->mUserEmail == '') { $emailauthenticated = wfMsg('noemailprefs'); } // WERELATE removed // $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) : ''; $prefs_help_email_enotif = $wgEnotifWatchlist || $wgEnotifUserTalk ? ' ' . wfMsg('prefs-help-email-enotif') : ''; $prefs_help_realname = ''; # </FIXME> $wgOut->addHTML("<form action=\"{$action}\" method='post'>"); $wgOut->addHTML("<div id='preferences'>"); # User data # $wgOut->addHTML("<fieldset>\n<legend>" . wfMsg('prefs-personal') . "</legend>\n<table>\n"); $wgOut->addHTML($this->addRow(wfMsg('username'), $wgUser->getName())); $wgOut->addHTML($this->addRow(wfMsg('uid'), $wgUser->getID())); if ($wgAllowRealName) { $wgOut->addHTML($this->addRow('<label for="wpRealName">' . wfMsg('yourrealname') . '</label>', "<input type='text' name='wpRealName' id='wpRealName' value=\"{$this->mRealName}\" size='25' />")); } if ($wgEnableEmail) { $wgOut->addHTML($this->addRow('<label for="wpUserEmail">' . wfMsg('youremail') . '</label>', "<input type='text' name='wpUserEmail' id='wpUserEmail' value=\"{$this->mUserEmail}\" size='25' />")); } global $wgParser; if (!empty($this->mToggles['fancysig']) && false === $wgParser->validateSig($rawNick)) { $invalidSig = $this->addRow(' ', '<span class="error">' . wfMsgHtml('badsig') . '<span>'); } else { $invalidSig = ''; } $wgOut->addHTML($this->addRow('<label for="wpNick">' . wfMsg('yournick') . '</label>', "<input type='text' name='wpNick' id='wpNick' value=\"{$this->mNick}\" size='25' />") . $invalidSig . $this->addRow(' ', $this->getToggle('fancysig'))); /** * Make sure the site language is in the list; a custom language code * might not have a defined name... */ $languages = $wgLang->getLanguageNames(); if (!array_key_exists($wgContLanguageCode, $languages)) { $languages[$wgContLanguageCode] = $wgContLanguageCode; } ksort($languages); /** * If a bogus value is set, default to the content language. * Otherwise, no default is selected and the user ends up * with an Afrikaans interface since it's first in the list. */ $selectedLang = isset($languages[$this->mUserLanguage]) ? $this->mUserLanguage : $wgContLanguageCode; $selbox = null; foreach ($languages as $code => $name) { global $IP; /* only add languages that have a file */ $langfile = "{$IP}/languages/Language" . str_replace('-', '_', ucfirst($code)) . ".php"; if (file_exists($langfile) || $code == $wgContLanguageCode) { $sel = $code == $selectedLang ? ' selected="selected"' : ''; $selbox .= "<option value=\"{$code}\"{$sel}>{$code} - {$name}</option>\n"; } } $wgOut->addHTML($this->addRow('<label for="wpUserLanguage">' . wfMsg('yourlanguage') . '</label>', "<select name='wpUserLanguage' id='wpUserLanguage'>{$selbox}</select>")); /* see if there are multiple language variants to choose from*/ if (!$wgDisableLangConversion) { $variants = $wgContLang->getVariants(); $variantArray = array(); 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]; } } $selbox = null; foreach ($variantArray as $code => $name) { $sel = $code == $this->mUserVariant ? 'selected="selected"' : ''; $selbox .= "<option value=\"{$code}\" {$sel}>{$code} - {$name}</option>"; } if (count($variantArray) > 1) { $wgOut->addHtml($this->addRow(wfMsg('yourvariant'), "<select name='wpUserVariant'>{$selbox}</select>")); } } // WERELATE ADDED if ($wgUser->getOption('wrnoads') > '') { $donateLink = ''; if ($wgUser->getOption('wrnoads') < wfTimestampNow()) { $donateLink = ' - <a href="/wiki/WeRelate:Donate">Donate</a>'; } $wgOut->addHTML($this->addRow('<label for="wrNoAds">' . 'Ads disabled until:' . '</label>', '<span id="wrNoAds">' . $wgLang->date($wgUser->getOption('wrnoads')) . $donateLink . '</span>')); } $wgOut->addHTML('</table>'); # Password if ($wgAuth->allowPasswordChange()) { $this->mOldpass = htmlspecialchars($this->mOldpass); $this->mNewpass = htmlspecialchars($this->mNewpass); $this->mRetypePass = htmlspecialchars($this->mRetypePass); $wgOut->addHTML('<fieldset><legend>' . wfMsg('changepassword') . '</legend><table>'); $wgOut->addHTML($this->addRow('<label for="wpOldpass">' . wfMsg('oldpassword') . '</label>', "<input type='password' name='wpOldpass' id='wpOldpass' value=\"{$this->mOldpass}\" size='20' />") . $this->addRow('<label for="wpNewpass">' . wfMsg('newpassword') . '</label>', "<input type='password' name='wpNewpass' id='wpNewpass' value=\"{$this->mNewpass}\" size='20' />") . $this->addRow('<label for="wpRetypePass">' . wfMsg('retypenew') . '</label>', "<input type='password' name='wpRetypePass' id='wpRetypePass' value=\"{$this->mRetypePass}\" size='20' />") . "</table>\n" . $this->getToggle("rememberpassword") . "</fieldset>\n\n"); } # <FIXME> # Enotif if ($wgEnableEmail) { $wgOut->addHTML('<fieldset><legend>' . wfMsg('email') . '</legend>'); $wgOut->addHTML($emailauthenticated . $enotifrevealaddr . $enotifwatchlistpages . $enotifusertalkpages . $enotifminoredits); if ($wgEnableUserEmail) { $emf = wfMsg('allowemail'); $disabled = $disableEmailPrefs ? ' disabled="disabled"' : ''; $wgOut->addHTML("<div><input type='checkbox' {$emfc} {$disabled} value='1' name='wpEmailFlag' id='wpEmailFlag' /> <label for='wpEmailFlag'>{$emf}</label></div>"); } $wgOut->addHTML('</fieldset>'); } # </FIXME> # Show little "help" tips for the real name and email address options if ($wgAllowRealName || $wgEnableEmail) { if ($wgAllowRealName) { $tips[] = wfMsg('prefs-help-realname'); } if ($wgEnableEmail) { $tips[] = wfMsg('prefs-help-email'); } $wgOut->addHtml('<div class="prefsectiontip">' . implode('<br />', $tips) . '</div>'); } $wgOut->addHTML('</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(wfHidden('wpQuickbar', $this->mQuickbar)); } # Skin # $wgOut->addHTML("<fieldset>\n<legend>\n" . wfMsg('skin') . "</legend>\n"); $mptitle = Title::newMainPage(); $previewtext = wfMsg('skinpreview'); # Only show members of Skin::getSkinNames() rather than # $skinNames (skins is all skin names from Language.php) $validSkinNames = Skin::getSkinNames(); foreach ($validSkinNames as $skinkey => $skinname) { if (in_array($skinkey, $wgSkipSkins)) { continue; } $checked = $skinkey == $this->mSkin ? ' checked="checked"' : ''; $sn = isset($skinNames[$skinkey]) ? $skinNames[$skinkey] : $skinname; $mplink = htmlspecialchars($mptitle->getLocalURL("useskin={$skinkey}")); $previewlink = "<a target='_blank' href=\"{$mplink}\">{$previewtext}</a>"; if ($skinkey == $wgDefaultSkin) { $sn .= ' (' . wfMsg('default') . ')'; } $wgOut->addHTML("<input type='radio' name='wpSkin' id=\"wpSkin{$skinkey}\" value=\"{$skinkey}\"{$checked} /> <label for=\"wpSkin{$skinkey}\">{$sn}</label> {$previewlink}<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 ? ' checked="checked"' : ''; $wgOut->addHTML("<div><label><input type='radio' name='wpMath' value=\"{$k}\"{$checked} /> " . wfMsg($v) . "</label></div>\n"); } $wgOut->addHTML("</fieldset>\n\n"); } # Files # $wgOut->addHTML("<fieldset>\n\t\t\t<legend>" . wfMsg('files') . "</legend>\n\t\t\t<div><label for='wpImageSize'>" . wfMsg('imagemaxsize') . "</label> <select id='wpImageSize' name='wpImageSize'>"); $imageLimitOptions = null; foreach ($wgImageLimits as $index => $limits) { $selected = $index == $this->mImageSize ? 'selected="selected"' : ''; $imageLimitOptions .= "<option value=\"{$index}\" {$selected}>{$limits[0]}×{$limits[1]}" . wfMsgHtml('unit-pixel') . "</option>\n"; } $imageThumbOptions = null; $wgOut->addHTML("{$imageLimitOptions}</select></div>\n\t\t\t\t<div><label for='wpThumbSize'>" . wfMsg('thumbsize') . "</label> <select name='wpThumbSize' id='wpThumbSize'>"); foreach ($wgThumbLimits as $index => $size) { $selected = $index == $this->mThumbSize ? 'selected="selected"' : ''; $imageThumbOptions .= "<option value=\"{$index}\" {$selected}>{$size}" . wfMsgHtml('unit-pixel') . "</option>\n"; } $wgOut->addHTML("{$imageThumbOptions}</select></div></fieldset>\n\n"); # Date format # # Date/Time # $wgOut->addHTML("<fieldset>\n<legend>" . wfMsg('datetime') . "</legend>\n"); if ($dateopts) { $wgOut->addHTML("<fieldset>\n<legend>" . wfMsg('dateformat') . "</legend>\n"); $idCnt = 0; $epoch = '20010408091234'; foreach ($dateopts as $key => $option) { if ($key == MW_DATE_DEFAULT) { $formatted = wfMsgHtml('datedefault'); } else { $formatted = htmlspecialchars($wgLang->timeanddate($epoch, false, $key)); } $key == $this->mDate ? $checked = ' checked="checked"' : ($checked = ''); $wgOut->addHTML("<div><input type='radio' name=\"wpDate\" id=\"wpDate{$idCnt}\" " . "value=\"{$key}\"{$checked} /> <label for=\"wpDate{$idCnt}\">{$formatted}</label></div>\n"); $idCnt++; } $wgOut->addHTML("</fieldset>\n"); } $nowlocal = $wgLang->time($now = wfTimestampNow(), true); $nowserver = $wgLang->time($now, false); $wgOut->addHTML('<fieldset><legend>' . wfMsg('timezonelegend') . '</legend><table>' . $this->addRow(wfMsg('servertime'), $nowserver) . $this->addRow(wfMsg('localtime'), $nowlocal) . $this->addRow('<label for="wpHourDiff">' . wfMsg('timezoneoffset') . '</label>', "<input type='text' name='wpHourDiff' id='wpHourDiff' value=\"" . htmlspecialchars($this->mHourDiff) . "\" size='6' />") . "<tr><td colspan='2'>\n\t\t\t\t<input type='button' value=\"" . wfMsg('guesstimezone') . "\"\n\t\t\t\tonclick='javascript:guessTimezone()' id='guesstimezonebutton' style='display:none;' />\n\t\t\t\t</td></tr></table></fieldset>\n\t\t\t<div class='prefsectiontip'>¹" . wfMsg('timezonetext') . "</div>\n\t\t</fieldset>\n\n"); # Editing # global $wgLivePreview, $wgUseRCPatrol; $wgOut->addHTML('<fieldset><legend>' . wfMsg('textboxsize') . '</legend> <div>' . wfInputLabel(wfMsg('rows'), 'wpRows', 'wpRows', 3, $this->mRows) . ' ' . wfInputLabel(wfMsg('columns'), 'wpCols', 'wpCols', 3, $this->mCols) . "</div>" . $this->getToggles(array('editsection', 'editsectiononrightclick', 'editondblclick', 'editwidth', 'showtoolbar', 'previewonfirst', 'previewontop', 'watchcreations', 'watchdefault', 'minordefault', 'externaleditor', 'externaldiff', $wgLivePreview ? 'uselivepreview' : false, $wgUser->isAllowed('patrol') && $wgUseRCPatrol ? 'autopatrol' : false, 'forceeditsummary')) . '</fieldset>'); $this->mUsedToggles['autopatrol'] = true; # Don't show this up for users who can't; the handler below is dumb and doesn't know it $wgOut->addHTML('<fieldset><legend>' . htmlspecialchars(wfMsg('prefs-rc')) . '</legend>' . wfInputLabel(wfMsg('recentchangescount'), 'wpRecent', 'wpRecent', 3, $this->mRecent) . $this->getToggles(array('hideminor', $wgRCShowWatchingUsers ? 'shownumberswatching' : false, 'usenewrc')) . '</fieldset>'); # Watchlist $wgOut->addHTML('<fieldset><legend>' . wfMsgHtml('prefs-watchlist') . '</legend>'); $wgOut->addHTML(wfInputLabel(wfMsg('prefs-watchlist-days'), 'wpWatchlistDays', 'wpWatchlistDays', 3, $this->mWatchlistDays)); $wgOut->addHTML('<br /><br />'); # Spacing $wgOut->addHTML($this->getToggles(array('watchlisthideown', 'watchlisthidebots', 'extendwatchlist'))); $wgOut->addHTML(wfInputLabel(wfMsg('prefs-watchlist-edits'), 'wpWatchlistEdits', 'wpWatchlistEdits', 3, $this->mWatchlistEdits)); $wgOut->addHTML('</fieldset>'); # Search // WERELATE removed // $wgOut->addHTML( '<fieldset><legend>' . wfMsg( 'searchresultshead' ) . '</legend><table>' . // $this->addRow( // wfLabel( wfMsg( 'resultsperpage' ), 'wpSearch' ), // wfInput( 'wpSearch', 4, $this->mSearch, array( 'id' => 'wpSearch' ) ) // ) . // $this->addRow( // wfLabel( wfMsg( 'contextlines' ), 'wpSearchLines' ), // wfInput( 'wpSearchLines', 4, $this->mSearchLines, array( 'id' => 'wpSearchLines' ) ) // ) . // $this->addRow( // wfLabel( wfMsg( 'contextchars' ), 'wpSearchChars' ), // wfInput( 'wpSearchChars', 4, $this->mSearchChars, array( 'id' => 'wpSearchChars' ) ) // ) . // "</table><fieldset><legend>" . wfMsg( 'defaultns' ) . "</legend>$ps</fieldset></fieldset>" ); # Misc # $wgOut->addHTML('<fieldset><legend>' . wfMsg('prefs-misc') . '</legend>'); $wgOut->addHTML(wfInputLabel(wfMsg('stubthreshold'), 'wpStubs', 'wpStubs', 6, $this->mStubs)); $msgUnderline = htmlspecialchars(wfMsg('tog-underline')); $msgUnderlinenever = htmlspecialchars(wfMsg('underline-never')); $msgUnderlinealways = htmlspecialchars(wfMsg('underline-always')); $msgUnderlinedefault = htmlspecialchars(wfMsg('underline-default')); $uopt = $wgUser->getOption("underline"); $s0 = $uopt == 0 ? ' selected="selected"' : ''; $s1 = $uopt == 1 ? ' selected="selected"' : ''; $s2 = $uopt == 2 ? ' selected="selected"' : ''; $wgOut->addHTML("\n<div class='toggle'><label for='wpOpunderline'>{$msgUnderline}</label>\n<select name='wpOpunderline' id='wpOpunderline'>\n<option value=\"0\"{$s0}>{$msgUnderlinenever}</option>\n<option value=\"1\"{$s1}>{$msgUnderlinealways}</option>\n<option value=\"2\"{$s2}>{$msgUnderlinedefault}</option>\n</select>\n</div>\n"); foreach ($togs as $tname) { if (!array_key_exists($tname, $this->mUsedToggles)) { $wgOut->addHTML($this->getToggle($tname)); } } $wgOut->addHTML('</fieldset>'); $token = $wgUser->editToken(); $wgOut->addHTML("\n\t<div id='prefsubmit'>\n\t<div>\n\t\t<input type='submit' name='wpSaveprefs' class='btnSavePrefs' value=\"" . wfMsgHtml('saveprefs') . "\" accesskey=\"" . wfMsgHtml('accesskey-save') . "\" title=\"" . wfMsgHtml('tooltip-save') . "\" />\n\t\t<input type='submit' name='wpReset' value=\"" . wfMsgHtml('resetprefs') . "\" />\n\t</div>\n\n\t</div>\n\n\t<input type='hidden' name='wpEditToken' value='{$token}' />\n\t</div></form>\n"); $wgOut->addWikiText('<div class="prefcache">' . wfMsg('clearyourcache') . '</div>'); }
/** * @access private */ function mainPrefsForm($status, $message = '') { global $wgUser, $wgOut, $wgLang, $wgContLang; global $wgAllowRealName, $wgImageLimits, $wgThumbLimits; global $wgDisableLangConversion; global $wgEnotifWatchlist, $wgEnotifUserTalk, $wgEnotifMinorEdits; global $wgRCShowWatchingUsers, $wgEnotifRevealEditorAddress; global $wgEnableEmail, $wgEnableUserEmail, $wgEmailAuthentication; global $wgContLanguageCode, $wgDefaultSkin, $wgSkipSkins, $wgAuth; $wgOut->setPageTitle(wfMsg('preferences')); $wgOut->setArticleRelated(false); $wgOut->setRobotpolicy('noindex,nofollow'); $wgOut->disallowUserJs(); # Prevent hijacked user scripts from sniffing passwords etc. if ($this->mSuccess || 'success' == $status) { $wgOut->addWikitext('<div class="successbox"><strong>' . wfMsg('savedprefs') . '</strong></div>'); } else { if ('error' == $status) { $wgOut->addWikitext('<div class="errorbox"><strong>' . $message . '</strong></div>'); } else { if ('' != $status) { $wgOut->addWikitext($message . "\n----"); } } } $qbs = $wgLang->getQuickbarSettings(); $skinNames = $wgLang->getSkinNames(); $mathopts = $wgLang->getMathNames(); $dateopts = $wgLang->getDatePreferences(); $togs = User::getToggles(); $titleObj = SpecialPage::getTitleFor('Preferences'); $action = $titleObj->escapeLocalURL(); # 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; if (!$this->mEmailFlag) { $emfc = 'checked="checked"'; } else { $emfc = ''; } if ($wgEmailAuthentication && $this->mUserEmail != '') { if ($wgUser->getEmailAuthenticationTimestamp()) { $emailauthenticated = wfMsg('emailauthenticated', $wgLang->timeanddate($wgUser->getEmailAuthenticationTimestamp(), true)) . '<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("<form action=\"{$action}\" method='post'>"); $wgOut->addHTML("<div id='preferences'>"); # User data $wgOut->addHTML(Xml::openElement('fieldset ') . Xml::element('legend', null, wfMsg('prefs-personal')) . Xml::openElement('table') . $this->tableRow(Xml::element('h2', null, wfMsg('prefs-personal')))); $userInformationHtml = $this->tableRow(wfMsgHtml('username'), htmlspecialchars($wgUser->getName())) . $this->tableRow(wfMsgHtml('uid'), htmlspecialchars($wgUser->getID())) . $this->tableRow(wfMsgHtml('prefs-edits'), $wgLang->formatNum(User::edits($wgUser->getId()))); 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('prefs-help-email', 'parseinline')))); } global $wgParser, $wgMaxSigChars; if (mb_strlen($this->mNick) > $wgMaxSigChars) { $invalidSig = $this->tableRow(' ', Xml::element('span', array('class' => 'error'), wfMsg('badsiglength', $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'))); list($lsLabel, $lsSelect) = Xml::languageSelector($this->mUserLanguage); $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))); } } # Password if ($wgAuth->allowPasswordChange()) { $wgOut->addHTML($this->tableRow(Xml::element('h2', null, wfMsg('changepassword'))) . $this->tableRow(Xml::label(wfMsg('oldpassword'), 'wpOldpass'), Xml::password('wpOldpass', 25, $this->mOldpass, array('id' => 'wpOldpass'))) . $this->tableRow(Xml::label(wfMsg('newpassword'), 'wpNewpass'), Xml::password('wpNewpass', 25, $this->mNewpass, array('id' => 'wpNewpass'))) . $this->tableRow(Xml::label(wfMsg('retypenew'), 'wpRetypePass'), Xml::password('wpRetypePass', 25, $this->mRetypePass, array('id' => 'wpRetypePass'))) . Xml::tags('tr', null, Xml::tags('td', array('colspan' => '2'), $this->getToggle("rememberpassword")))); } # <FIXME> # Enotif if ($wgEnableEmail) { $moreEmail = ''; if ($wgEnableUserEmail) { $emf = wfMsg('allowemail'); $disabled = $disableEmailPrefs ? ' disabled="disabled"' : ''; $moreEmail = "<input type='checkbox' {$emfc} {$disabled} value='1' name='wpEmailFlag' id='wpEmailFlag' /> <label for='wpEmailFlag'>{$emf}</label>"; } $wgOut->addHTML($this->tableRow(Xml::element('h2', null, wfMsg('email'))) . $this->tableRow($emailauthenticated . $enotifrevealaddr . $enotifwatchlistpages . $enotifusertalkpages . $enotifminoredits . $moreEmail . $this->getToggle('ccmeonemails'))); } # </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(wfHidden('wpQuickbar', $this->mQuickbar)); } # Skin # $wgOut->addHTML("<fieldset>\n<legend>\n" . wfMsg('skin') . "</legend>\n"); $mptitle = Title::newMainPage(); $previewtext = wfMsg('skinpreview'); # Only show members of Skin::getSkinNames() rather than # $skinNames (skins is all skin names from Language.php) $validSkinNames = Skin::getSkinNames(); # 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) { if (isset($skinNames[$skinkey])) { $skinname = $skinNames[$skinkey]; } } asort($validSkinNames); foreach ($validSkinNames as $skinkey => $sn) { if (in_array($skinkey, $wgSkipSkins)) { continue; } $checked = $skinkey == $this->mSkin ? ' checked="checked"' : ''; $mplink = htmlspecialchars($mptitle->getLocalURL("useskin={$skinkey}")); $previewlink = "<a target='_blank' href=\"{$mplink}\">{$previewtext}</a>"; if ($skinkey == $wgDefaultSkin) { $sn .= ' (' . wfMsg('default') . ')'; } $wgOut->addHTML("<input type='radio' name='wpSkin' id=\"wpSkin{$skinkey}\" value=\"{$skinkey}\"{$checked} /> <label for=\"wpSkin{$skinkey}\">{$sn}</label> {$previewlink}<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 # $wgOut->addHTML("<fieldset>\n" . Xml::element('legend', null, wfMsg('files')) . "\n"); $imageLimitOptions = null; foreach ($wgImageLimits as $index => $limits) { $selected = $index == $this->mImageSize; $imageLimitOptions .= Xml::option("{$limits[0]}×{$limits[1]}" . wfMsg('unit-pixel'), $index, $selected); } $imageSizeId = 'wpImageSize'; $wgOut->addHTML("<div>" . Xml::label(wfMsg('imagemaxsize'), $imageSizeId) . " " . Xml::openElement('select', array('name' => $imageSizeId, 'id' => $imageSizeId)) . $imageLimitOptions . Xml::closeElement('select') . "</div>\n"); $imageThumbOptions = null; foreach ($wgThumbLimits as $index => $size) { $selected = $index == $this->mThumbSize; $imageThumbOptions .= Xml::option($size . wfMsg('unit-pixel'), $index, $selected); } $thumbSizeId = 'wpThumbSize'; $wgOut->addHTML("<div>" . Xml::label(wfMsg('thumbsize'), $thumbSizeId) . " " . Xml::openElement('select', array('name' => $thumbSizeId, 'id' => $thumbSizeId)) . $imageThumbOptions . Xml::closeElement('select') . "</div>\n"); $wgOut->addHTML("</fieldset>\n\n"); # Date format # # Date/Time # $wgOut->addHTML("<fieldset>\n<legend>" . wfMsg('datetime') . "</legend>\n"); if ($dateopts) { $wgOut->addHTML("<fieldset>\n<legend>" . wfMsg('dateformat') . "</legend>\n"); $idCnt = 0; $epoch = '20010115161234'; # Wikipedia day foreach ($dateopts as $key) { if ($key == 'default') { $formatted = wfMsgHtml('datedefault'); } else { $formatted = htmlspecialchars($wgLang->timeanddate($epoch, false, $key)); } $key == $this->mDate ? $checked = ' checked="checked"' : ($checked = ''); $wgOut->addHTML("<div><input type='radio' name=\"wpDate\" id=\"wpDate{$idCnt}\" " . "value=\"{$key}\"{$checked} /> <label for=\"wpDate{$idCnt}\">{$formatted}</label></div>\n"); $idCnt++; } $wgOut->addHTML("</fieldset>\n"); } $nowlocal = $wgLang->time($now = wfTimestampNow(), true); $nowserver = $wgLang->time($now, false); $wgOut->addHTML('<fieldset><legend>' . wfMsg('timezonelegend') . '</legend><table>' . $this->addRow(wfMsg('servertime'), $nowserver) . $this->addRow(wfMsg('localtime'), $nowlocal) . $this->addRow('<label for="wpHourDiff">' . wfMsg('timezoneoffset') . '</label>', "<input type='text' name='wpHourDiff' id='wpHourDiff' value=\"" . htmlspecialchars($this->mHourDiff) . "\" size='6' />") . "<tr><td colspan='2'>\r\n\t\t\t\t<input type='button' value=\"" . wfMsg('guesstimezone') . "\"\r\n\t\t\t\tonclick='javascript:guessTimezone()' id='guesstimezonebutton' style='display:none;' />\r\n\t\t\t\t</td></tr></table><div class='prefsectiontip'>¹" . wfMsg('timezonetext') . "</div></fieldset>\r\n\t\t</fieldset>\n\n"); # Editing # global $wgLivePreview; $wgOut->addHTML('<fieldset><legend>' . wfMsg('textboxsize') . '</legend> <div>' . wfInputLabel(wfMsg('rows'), 'wpRows', 'wpRows', 3, $this->mRows) . ' ' . wfInputLabel(wfMsg('columns'), 'wpCols', 'wpCols', 3, $this->mCols) . "</div>" . $this->getToggles(array('editsection', 'editsectiononrightclick', 'editondblclick', 'editwidth', 'showtoolbar', 'previewonfirst', 'previewontop', 'minordefault', 'externaleditor', 'externaldiff', $wgLivePreview ? 'uselivepreview' : false, 'forceeditsummary')) . '</fieldset>'); # Recent changes $wgOut->addHtml('<fieldset><legend>' . wfMsgHtml('prefs-rc') . '</legend>'); $rc = '<table><tr>'; $rc .= '<td>' . Xml::label(wfMsg('recentchangesdays'), 'wpRecentDays') . '</td>'; $rc .= '<td>' . Xml::input('wpRecentDays', 3, $this->mRecentDays, array('id' => 'wpRecentDays')) . '</td>'; $rc .= '</tr><tr>'; $rc .= '<td>' . Xml::label(wfMsg('recentchangescount'), 'wpRecent') . '</td>'; $rc .= '<td>' . Xml::input('wpRecent', 3, $this->mRecent, array('id' => 'wpRecent')) . '</td>'; $rc .= '</tr></table>'; $wgOut->addHtml($rc); $wgOut->addHtml('<br />'); $toggles[] = 'hideminor'; if ($wgRCShowWatchingUsers) { $toggles[] = 'shownumberswatching'; } $toggles[] = 'usenewrc'; $wgOut->addHtml($this->getToggles($toggles)); $wgOut->addHtml('</fieldset>'); # Watchlist $wgOut->addHtml('<fieldset><legend>' . wfMsgHtml('prefs-watchlist') . '</legend>'); $wgOut->addHtml(wfInputLabel(wfMsg('prefs-watchlist-days'), 'wpWatchlistDays', 'wpWatchlistDays', 3, $this->mWatchlistDays)); $wgOut->addHtml('<br /><br />'); $wgOut->addHtml($this->getToggle('extendwatchlist')); $wgOut->addHtml(wfInputLabel(wfMsg('prefs-watchlist-edits'), 'wpWatchlistEdits', 'wpWatchlistEdits', 3, $this->mWatchlistEdits)); $wgOut->addHtml('<br /><br />'); $wgOut->addHtml($this->getToggles(array('watchlisthideown', 'watchlisthidebots', 'watchlisthideminor'))); 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('</fieldset>'); # Search $wgOut->addHTML('<fieldset><legend>' . wfMsg('searchresultshead') . '</legend><table>' . $this->addRow(wfLabel(wfMsg('resultsperpage'), 'wpSearch'), wfInput('wpSearch', 4, $this->mSearch, array('id' => 'wpSearch'))) . $this->addRow(wfLabel(wfMsg('contextlines'), 'wpSearchLines'), wfInput('wpSearchLines', 4, $this->mSearchLines, array('id' => 'wpSearchLines'))) . $this->addRow(wfLabel(wfMsg('contextchars'), 'wpSearchChars'), wfInput('wpSearchChars', 4, $this->mSearchChars, array('id' => 'wpSearchChars'))) . "</table><fieldset><legend>" . wfMsg('defaultns') . "</legend>{$ps}</fieldset></fieldset>"); # Misc # $wgOut->addHTML('<fieldset><legend>' . wfMsg('prefs-misc') . '</legend>'); $wgOut->addHtml('<label for="wpStubs">' . wfMsg('stub-threshold') . '</label> '); $wgOut->addHtml(Xml::input('wpStubs', 6, $this->mStubs, array('id' => 'wpStubs'))); $msgUnderline = htmlspecialchars(wfMsg('tog-underline')); $msgUnderlinenever = htmlspecialchars(wfMsg('underline-never')); $msgUnderlinealways = htmlspecialchars(wfMsg('underline-always')); $msgUnderlinedefault = htmlspecialchars(wfMsg('underline-default')); $uopt = $wgUser->getOption("underline"); $s0 = $uopt == 0 ? ' selected="selected"' : ''; $s1 = $uopt == 1 ? ' selected="selected"' : ''; $s2 = $uopt == 2 ? ' selected="selected"' : ''; $wgOut->addHTML("\r\n<div class='toggle'><p><label for='wpOpunderline'>{$msgUnderline}</label>\r\n<select name='wpOpunderline' id='wpOpunderline'>\r\n<option value=\"0\"{$s0}>{$msgUnderlinenever}</option>\r\n<option value=\"1\"{$s1}>{$msgUnderlinealways}</option>\r\n<option value=\"2\"{$s2}>{$msgUnderlinedefault}</option>\r\n</select></p></div>"); foreach ($togs as $tname) { if (!array_key_exists($tname, $this->mUsedToggles)) { $wgOut->addHTML($this->getToggle($tname)); } } $wgOut->addHTML('</fieldset>'); wfRunHooks("RenderPreferencesForm", array($this, $wgOut)); $token = htmlspecialchars($wgUser->editToken()); $skin = $wgUser->getSkin(); $wgOut->addHTML("\r\n\t<div id='prefsubmit'>\r\n\t<div>\r\n\t\t<input type='submit' name='wpSaveprefs' class='btnSavePrefs' value=\"" . wfMsgHtml('saveprefs') . '"' . $skin->tooltipAndAccesskey('save') . " />\r\n\t\t<input type='submit' name='wpReset' value=\"" . wfMsgHtml('resetprefs') . "\" />\r\n\t</div>\r\n\r\n\t</div>\r\n\r\n\t<input type='hidden' name='wpEditToken' value=\"{$token}\" />\r\n\t</div></form>\n"); $wgOut->addHtml(Xml::tags('div', array('class' => "prefcache"), wfMsgExt('clearyourcache', 'parseinline'))); }
/** * @access private */ function mainPrefsForm($status, $message = '') { global $wgUser, $wgOut, $wgLang, $wgContLang; global $wgAllowRealName, $wgImageLimits, $wgThumbLimits; global $wgDisableLangConversion; global $wgEnotifWatchlist, $wgEnotifUserTalk, $wgEnotifMinorEdits; global $wgRCShowWatchingUsers, $wgEnotifRevealEditorAddress; global $wgEnableEmail, $wgEnableUserEmail, $wgEmailAuthentication; global $wgContLanguageCode, $wgDefaultSkin, $wgSkipSkins, $wgAuth; global $wgEmailConfirmToEdit; $wgOut->setPageTitle(wfMsg('preferences')); $wgOut->setArticleRelated(false); $wgOut->setRobotpolicy('noindex,nofollow'); $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(); $skinNames = $wgLang->getSkinNames(); $mathopts = $wgLang->getMathNames(); $dateopts = $wgLang->getDatePreferences(); $togs = User::getToggles(); $titleObj = SpecialPage::getTitleFor('Preferences'); $action = $titleObj->escapeLocalURL(); # 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; if (!$this->mEmailFlag) { $emfc = 'checked="checked"'; } else { $emfc = ''; } //XXADDED Marketing emails if (!$this->mMarketingEmailFlag) { $memfc = 'checked="checked"'; } else { $memfc = ''; } if (!$this->mAuthorEmailNotifications) { $auth_emfc = 'checked="checked"'; } else { $auth_emfc = ''; } if ($this->mUserTalkNotifications == '0') { $ut_emfc = 'checked="checked"'; } else { $ut_emfc = ''; } if (class_exists('ThumbsUp')) { if (intval($this->mThumbsNotifications) === 0) { $thumbs_checked = 'checked="checked"'; } else { $thumbs_checked = ''; } if (intval($this->mThumbsEmailNotifications) === 0) { $thumbs_email_checked = 'checked="checked"'; } else { $thumbs_email_checked = ''; } } if ($wgEmailAuthentication && $this->mUserEmail != '') { if ($wgUser->getEmailAuthenticationTimestamp()) { $emailauthenticated = wfMsg('emailauthenticated', $wgLang->timeanddate($wgUser->getEmailAuthenticationTimestamp(), true)) . '<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 />'; } $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("<form action=\"{$action}\" method='post'>"); $wgOut->addHTML("<div id='preferences'>"); # User data $wgOut->addHTML(Xml::openElement('fieldset ', array('id' => 'prefsection-0', 'class' => 'prefsection')) . "<legend class='mainLegend'> </legend>" . Xml::openElement('table') . $this->tableRow(Xml::element('legend', null, wfMsg('prefs-personal')))); $userInformationHtml = $this->tableRow(wfMsgHtml('username'), htmlspecialchars($wgUser->getName())) . $this->tableRow(wfMsgHtml('uid'), htmlspecialchars($wgUser->getID())) . $this->tableRow(wfMsgHtml('prefs-edits'), $wgLang->formatNum(User::edits($wgUser->getId()))); 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('class' => 'input_med', '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('class' => 'input_med', 'id' => 'wpUserEmail')))); } global $wgParser, $wgMaxSigChars; if (mb_strlen($this->mNick) > $wgMaxSigChars) { $invalidSig = $this->tableRow(' ', Xml::element('span', array('class' => 'error'), wfMsg('badsiglength', $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', 'class' => 'input_med', 'maxlength' => $wgMaxSigChars))) . $invalidSig . $this->tableRow(' ', $this->getToggle('fancysig'))); list($lsLabel, $lsSelect) = Xml::languageSelector($this->mUserLanguage); $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))); } } // TEEN FILTER $options = Xml::radioLabel(wfMsg('pref_content_preferences_all'), 'wpContentFilter', 0, 'wpContentFilter_0', $this->mContentFilter == 0, array('class' => 'normal_font')) . "<br/><br/>" . Xml::radioLabel(wfMsg('pref_content_preferences_young'), 'wpContentFilter', 1, 'wpContentFilter_1', $this->mContentFilter == 1, array('class' => 'normal_font')) . "<br/><br/>" . Xml::radioLabel(wfMsg('pref_content_preferences_adult'), 'wpContentFilter', 2, 'wpContentFilter_2', $this->mContentFilter == 2, array('class' => 'normal_font')) . "<br/><br/>"; $wgOut->addHtml($this->tableRow(wfMsg('pref_content_preferences_info'), $options)); # Password if ($wgAuth->allowPasswordChange()) { $wgOut->addHTML($this->tableRow(Xml::element('legend', null, wfMsg('changepassword'))) . $this->tableRow(Xml::label(wfMsg('oldpassword'), 'wpOldpass'), Xml::password('wpOldpass', 25, $this->mOldpass, array('id' => 'wpOldpass', 'class' => 'input_med'))) . $this->tableRow(Xml::label(wfMsg('newpassword'), 'wpNewpass'), Xml::password('wpNewpass', 25, $this->mNewpass, array('id' => 'wpNewpass', 'class' => 'input_med'))) . $this->tableRow(Xml::label(wfMsg('retypenew'), 'wpRetypePass'), Xml::password('wpRetypePass', 25, $this->mRetypePass, array('id' => 'wpRetypePass', 'class' => 'input_med'))) . Xml::tags('tr', null, Xml::tags('td', array('colspan' => '2'), $this->getToggle("rememberpassword"))) . Xml::tags('tr', null, Xml::tags('td', array('colspan' => '2'), ""))); } # <FIXME> # Enotif if ($wgEnableEmail) { $moreEmail = ''; $marketingEmail = ''; $authorEmail = ''; if ($wgEnableUserEmail) { $emf = wfMsg('allowemail'); $disabled = $disableEmailPrefs ? ' disabled="disabled"' : ''; $moreEmail = "<input type='checkbox' class='input_med' {$emfc} {$disabled} value='1' name='wpEmailFlag' id='wpEmailFlag' /> <label class='normal_font' for='wpEmailFlag'>{$emf}</label>"; //XXADDED Author emails $auth_emf = wfMsg('allowauthornotificationdialog'); $authorEmail = "<div><input type='checkbox' class='input_med' {$auth_emfc} {$disabled} value='1' name='wpAuthorEmailNotifications' id='wpAuthorEmailNotifications' /> <label class='normal_font' for='wpAuthorEmailNotifications'>{$auth_emf}</label></div>"; if (class_exists('ThumbsUp')) { // Thumbs up talk notifications $thumbs_label = wfMsg('allowthumbsupnotifications'); $thumbsNotifyField = "<div><input type='checkbox' class='input_med' {$thumbs_checked} value='1' name='wpThumbsNotifications' id='wpThumbsNotifications' /> <label class='normal_font' for='wpThumbsNotifications'>" . "{$thumbs_label}</label></div>"; // Thumbs up email notifications $thumbs_label = wfMsg('allowthumbsupemailnotifications'); $thumbsEmailNotifyField = "<div><input type='checkbox' class='input_med' {$thumbs_email_checked} value='1' name='wpThumbsEmailNotifications' id='wpThumbsNotifications' /> " . "<label class='normal_font' for='wpThumbsEmailNotifications'>{$thumbs_label}</label></div>"; //$thumbsboxoptions = "<div style='border:2px solid #DDD;margin:3px 0 3px 0;padding:3px;'>$thumbsNotifyField</div>\n"; $thumbsboxoptions = "<div style='margin:3px 0 3px 0;padding:3px;'>{$thumbsNotifyField} {$thumbsEmailNotifyField}</div>\n"; } else { $thumbsboxoptions = ""; } //XXADDED Marketing emails $memf = wfMsg('allowmarketingemail'); //XXADDED UserTalk emails $ut_emf = wfMsg('usertalknotifications'); $marketingEmail = "<div><input type='checkbox' class='input_med' {$memfc} {$disabled} value='1' name='wpMarketingEmailFlag' id='wpMarketingEmailFlag' /> <label class='normal_font' for='wpMarketingEmailFlag'>{$memf}</label></div>"; $usertalkEmail = "<div><input type='checkbox' class='input_med' {$ut_emfc} {$disabled} value='1' name='wpUserTalkNotifications' id='wpUserTalkNotifications' /> <label class='normal_font' for='wpUserTalkNotifications'>{$ut_emf}</label></div>"; $articleEmail = "<div><a href='/Special:AuthorEmailNotification'>" . wfMsg('author_emails') . "</a></div>"; $emailboxoptions = "<div style='margin:3px 0 3px 0;padding:3px;'>{$marketingEmail} {$usertalkEmail} {$articleEmail}</div>\n"; } $wgOut->addHTML($this->tableRow(Xml::element('legend', null, wfMsg('email'))) . $this->tableRow($emailboxoptions . $thumbsboxoptions . $emailauthenticated . $enotifrevealaddr . $enotifwatchlistpages . $enotifusertalkpages . $enotifminoredits . $moreEmail . $authorEmail . $this->getToggle('ccmeonemails'))); } # </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' class='input_med' 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(wfHidden('wpQuickbar', $this->mQuickbar)); } /* # Skin # $wgOut->addHTML( "<fieldset>\n<h2>\n" . wfMsg('skin') . "</h2>\n" ); $mptitle = Title::newMainPage(); $previewtext = wfMsg('skinpreview'); # Only show members of Skin::getSkinNames() rather than # $skinNames (skins is all skin names from Language.php) $validSkinNames = Skin::getSkinNames(); # 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 ) { if ( isset( $skinNames[$skinkey] ) ) { $skinname = $skinNames[$skinkey]; } } asort($validSkinNames); foreach ($validSkinNames as $skinkey => $sn ) { if ( in_array( $skinkey, $wgSkipSkins ) ) { continue; } $checked = $skinkey == $this->mSkin ? ' checked="checked"' : ''; $mplink = htmlspecialchars($mptitle->getLocalURL("useskin=$skinkey")); $previewlink = "<a target='_blank' href=\"$mplink\">$previewtext</a>"; if( $skinkey == $wgDefaultSkin ) $sn .= ' (' . wfMsg( 'default' ) . ')'; $wgOut->addHTML( "<input type='radio' name='wpSkin' id=\"wpSkin$skinkey\" value=\"$skinkey\"$checked /> <label for=\"wpSkin$skinkey\">{$sn}</label> $previewlink<br />\n" ); } $wgOut->addHTML( "</fieldset>\n\n" ); # Math # global $wgUseTeX; if( $wgUseTeX ) { $wgOut->addHTML( "<fieldset>\n<h2>" . wfMsg('math') . '</h2>' ); 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 # $wgOut->addHTML("<fieldset id='prefsection-1' class='prefsection'>\n<legend>" . wfMsg('files') . "</legend>\n"); $imageLimitOptions = null; foreach ($wgImageLimits as $index => $limits) { $selected = $index == $this->mImageSize; $imageLimitOptions .= Xml::option("{$limits[0]}×{$limits[1]}" . wfMsg('unit-pixel'), $index, $selected); } $imageSizeId = 'wpImageSize'; $wgOut->addHTML("<div>" . Xml::label(wfMsg('imagemaxsize'), $imageSizeId) . " " . Xml::openElement('select', array('name' => $imageSizeId, 'id' => $imageSizeId)) . $imageLimitOptions . Xml::closeElement('select') . "</div>\n"); $imageThumbOptions = null; foreach ($wgThumbLimits as $index => $size) { $selected = $index == $this->mThumbSize; $imageThumbOptions .= Xml::option($size . wfMsg('unit-pixel'), $index, $selected); } $thumbSizeId = 'wpThumbSize'; $wgOut->addHTML("<div>" . Xml::label(wfMsg('thumbsize'), $thumbSizeId) . " " . Xml::openElement('select', array('name' => $thumbSizeId, 'id' => $thumbSizeId)) . $imageThumbOptions . Xml::closeElement('select') . "</div>\n"); $wgOut->addHTML("</fieldset>\n\n"); # Date format # # Date/Time # $wgOut->addHTML("<fieldset id='prefsection-2' class='prefsection'>\n<legend>" . wfMsg('datetime') . "</legend>\n"); if ($dateopts) { $wgOut->addHTML("<fieldset>\n<h5>" . wfMsg('dateformat') . "</h5>\n"); $idCnt = 0; $epoch = '20010115161234'; # Wikipedia day foreach ($dateopts as $key) { if ($key == 'default') { $formatted = wfMsgHtml('datedefault'); } else { $formatted = htmlspecialchars($wgLang->timeanddate($epoch, false, $key)); } $key == $this->mDate ? $checked = ' checked="checked"' : ($checked = ''); $wgOut->addHTML("<div><input type='radio' class='input_med' name=\"wpDate\" id=\"wpDate{$idCnt}\" " . "value=\"{$key}\"{$checked} /> <label class='normal_font' for=\"wpDate{$idCnt}\">{$formatted}</label></div>\n"); $idCnt++; } $wgOut->addHTML("</fieldset>\n"); } $nowlocal = $wgLang->time($now = wfTimestampNow(), true); $nowserver = $wgLang->time($now, false); $wgOut->addHTML('<fieldset><h5>' . wfMsg('timezonelegend') . '</h5><table>' . $this->addRow(wfMsg('servertime'), $nowserver) . $this->addRow(wfMsg('localtime'), $nowlocal) . $this->addRow('<label for="wpHourDiff">' . wfMsg('timezoneoffset') . '</label>', "<input type='text' class='input_med' name='wpHourDiff' id='wpHourDiff' value=\"" . htmlspecialchars($this->mHourDiff) . "\" size='6' />") . "<tr><td colspan='2'>\n\t\t\t\t<input type='button' class='button' value=\"" . wfMsg('guesstimezone') . "\"\n\t\t\t\tonclick='javascript:guessTimezone()' id='guesstimezonebutton' style='display:none;' />\n\t\t\t\t</td></tr></table><div class='prefsectiontip'>¹" . wfMsg('timezonetext') . "</div></fieldset>\n\t\t</fieldset>\n\n"); # Editing # global $wgLivePreview, $wgUser; # Editor choice $current = $wgUser->getOption('defaulteditor', ''); if (empty($current)) { # backwards compatibility with old advanced editor option $current = $wgUser->getOption('useadvanced', false) ? 'advanced' : 'visual'; } $opts = ''; //$opts .= Xml::option(wfMsg('pref_visual_editor'), 'visual', $current != 'advanced' && $current != 'guided'); $opts .= Xml::option(wfMsg('pref_advanced_editor'), 'advanced', $current == 'advanced'); $opts .= Xml::option(wfMsg('pref_guided_editor'), 'guided', $current == 'guided'); $editorChoice = $this->tableRow(Xml::label(wfMsg('pref_default_editor') . ' ', 'wpDefaultEditor'), Xml::tags('select', array('name' => 'wpDefaultEditor', 'id' => 'wpDefaultEditor'), $opts)); $wgOut->addHTML('<fieldset id="prefsection-3" class="prefsection"><legend>' . wfMsg('textboxsize') . '</legend> <div>' . wfInputLabel(wfMsg('rows'), 'wpRows', 'wpRows', 3, $this->mRows, array('class' => 'input_med')) . '<br />' . wfInputLabel(wfMsg('columns'), 'wpCols', 'wpCols', 3, $this->mCols, array('class' => 'input_med')) . " " . wfMsg('Pref_adv_only') . "</div><br/>" . $this->getToggles(array('editsection', 'editondblclick', 'editwidth', 'disablewarning', 'hidepersistantsavebar', 'ignorefanmail', 'scrolltalk', 'showtoolbar', 'previewonfirst', 'previewontop', 'minordefault', 'externaleditor', 'externaldiff', $wgLivePreview ? 'uselivepreview' : false, $wgUser->isSysop() || in_array('staff', $wgUser->getGroups()) ? 'autopatrol' : false, 'forceeditsummary')) . '<br/>' . $editorChoice . '</fieldset>'); $this->mUsedToggles['autopatrol'] = true; # Don't show this up for users who can't; the handler below is dumb and doesn't know it # Recent changes $wgOut->addHtml('<fieldset id="prefsection-4" class="prefsection"><legend>' . wfMsgHtml('prefs-rc') . '</legend>'); $rc = '<table><tr>'; $rc .= '<td>' . Xml::label(wfMsg('recentchangesdays'), 'wpRecentDays') . '</td>'; $rc .= '<td>' . Xml::input('wpRecentDays', 3, $this->mRecentDays, array('class' => 'input_med', 'id' => 'wpRecentDays')) . '</td>'; $rc .= '</tr><tr>'; $rc .= '<td>' . Xml::label(wfMsg('recentchangescount'), 'wpRecent') . '</td>'; $rc .= '<td>' . Xml::input('wpRecent', 3, $this->mRecent, array('class' => 'input_med', 'id' => 'wpRecent')) . '</td>'; $rc .= '</tr></table>'; $wgOut->addHtml($rc); $wgOut->addHtml('<br />'); $toggles[] = 'hideminor'; if ($wgRCShowWatchingUsers) { $toggles[] = 'shownumberswatching'; } $toggles[] = 'usenewrc'; $wgOut->addHtml($this->getToggles($toggles)); if (class_exists('RCTest')) { $userGroups = $wgUser->getGroups(); if (in_array('staff', $userGroups) || in_array('admin', $userGroups) || in_array('newarticlepatrol', $userGroups)) { $wgOut->addHtml($this->getToggle('rctest', false, false, intval($this->mRCTest) === 0)); } } $wgOut->addHtml('</fieldset>'); # Watchlist $wgOut->addHtml('<fieldset id="prefsection-5" class="prefsection"><legend>' . wfMsgHtml('prefs-watchlist') . '</legend>'); $wgOut->addHtml(wfInputLabel(wfMsg('prefs-watchlist-days'), 'wpWatchlistDays', 'wpWatchlistDays', 3, $this->mWatchlistDays, array('class' => 'input_med'))); $wgOut->addHtml('<br /><br />'); $wgOut->addHtml($this->getToggle('extendwatchlist')); $wgOut->addHtml(wfInputLabel(wfMsg('prefs-watchlist-edits'), 'wpWatchlistEdits', 'wpWatchlistEdits', 3, $this->mWatchlistEdits, array('class' => 'input_med'))); $wgOut->addHtml('<br /><br />'); $wgOut->addHtml($this->getToggles(array('watchlisthideown', 'watchlisthidebots', 'watchlisthideminor'))); 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('</fieldset>'); # Misc # $wgOut->addHTML('<fieldset id="prefsection-6" class="prefsection"><legend>' . wfMsg('prefs-misc') . '</legend>'); $wgOut->addHtml('<label for="wpStubs">' . wfMsg('stub-threshold') . '</label> '); $wgOut->addHtml(Xml::input('wpStubs', 6, $this->mStubs, array('class' => 'input_med', 'id' => 'wpStubs'))); $msgUnderline = htmlspecialchars(wfMsg('tog-underline')); $msgUnderlinenever = htmlspecialchars(wfMsg('underline-never')); $msgUnderlinealways = htmlspecialchars(wfMsg('underline-always')); $msgUnderlinedefault = htmlspecialchars(wfMsg('underline-default')); $uopt = $wgUser->getOption("underline"); $s0 = $uopt == 0 ? ' selected="selected"' : ''; $s1 = $uopt == 1 ? ' selected="selected"' : ''; $s2 = $uopt == 2 ? ' selected="selected"' : ''; $wgOut->addHTML("\n<div class='toggle'><p><label for='wpOpunderline'>{$msgUnderline}</label>\n<select name='wpOpunderline' id='wpOpunderline'>\n<option value=\"0\"{$s0}>{$msgUnderlinenever}</option>\n<option value=\"1\"{$s1}>{$msgUnderlinealways}</option>\n<option value=\"2\"{$s2}>{$msgUnderlinedefault}</option>\n</select></p></div>"); $userGroups = $wgUser->getGroups(); if (!in_array('sysop', $userGroups) && !in_array('newarticlepatrol', $userGroups)) { $this->mUsedToggles['welcomer'] = true; } foreach ($togs as $tname) { if (!array_key_exists($tname, $this->mUsedToggles)) { $wgOut->addHTML($this->getToggle($tname)); } } if ($wgUser->isGPlusUser()) { $wgOut->addHTML('<br /><div id="gplus_disco_link" style="display:inline;"><a href="#" id="pb-gp-disco">Disconnect from Google+</a></div><br />'); } $wgOut->addHTML('</fieldset>'); wfRunHooks('RenderPreferencesForm', array($this, $wgOut)); $token = htmlspecialchars($wgUser->editToken()); $skin = $wgUser->getSkin(); $wgOut->addHTML("\n\t<div id='prefsubmit'>\n\t<div>\n\t\t<input class='button primary' type='submit' name='wpSaveprefs' class='btnSavePrefs' value=\"" . wfMsgHtml('saveprefs') . '"' . $skin->tooltipAndAccesskey('save') . " />\n\t\t<input class='button secondary' type='submit' name='wpReset' value=\"" . wfMsgHtml('resetprefs') . "\" />\n\t\t<div style='clear:both'></div>\n\t</div>\n\n\t</div>\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' ) ) );*/ }