/** Produce a nice little form */ function getForm() { list($sum, $answer) = $this->pickSum(); $index = $this->storeCaptcha(array('answer' => $answer)); $form = '<table><tr><td>' . $this->fetchMath($sum) . '</td>'; $form .= '<td>' . wfInput('wpCaptchaAnswer', false, false, array('tabindex' => '1')) . '</td></tr></table>'; $form .= wfHidden('wpCaptchaId', $index); return $form; }
/** * Constructor */ function wfSpecialImport($page = '') { global $wgUser, $wgOut, $wgRequest, $wgTitle, $wgImportSources; global $wgImportTargetNamespace; $interwiki = false; $namespace = $wgImportTargetNamespace; $frompage = ''; $history = true; if ($wgRequest->wasPosted() && $wgRequest->getVal('action') == 'submit') { $isUpload = false; $namespace = $wgRequest->getIntOrNull('namespace'); switch ($wgRequest->getVal("source")) { case "upload": $isUpload = true; if ($wgUser->isAllowed('importupload')) { $source = ImportStreamSource::newFromUpload("xmlimport"); } else { return $wgOut->permissionRequired('importupload'); } break; case "interwiki": $interwiki = $wgRequest->getVal('interwiki'); $history = $wgRequest->getCheck('interwikiHistory'); $frompage = $wgRequest->getText("frompage"); $source = ImportStreamSource::newFromInterwiki($interwiki, $frompage, $history); break; default: $source = new WikiErrorMsg("importunknownsource"); } if (WikiError::isError($source)) { $wgOut->addWikiText(wfEscapeWikiText($source->getMessage())); } else { $wgOut->addWikiText(wfMsg("importstart")); $importer = new WikiImporter($source); if (!is_null($namespace)) { $importer->setTargetNamespace($namespace); } $reporter = new ImportReporter($importer, $isUpload, $interwiki); $reporter->open(); $result = $importer->doImport(); $reporter->close(); if (WikiError::isError($result)) { $wgOut->addWikiText(wfMsg("importfailed", wfEscapeWikiText($result->getMessage()))); } else { # Success! $wgOut->addWikiText(wfMsg("importsuccess")); } } } $action = $wgTitle->escapeLocalUrl('action=submit'); if ($wgUser->isAllowed('importupload')) { $wgOut->addWikiText(wfMsg("importtext")); $wgOut->addHTML("\n<fieldset>\n\t<legend>" . wfMsgHtml('upload') . "</legend>\n\t<form enctype='multipart/form-data' method='post' action=\"{$action}\">\n\t\t<input type='hidden' name='action' value='submit' />\n\t\t<input type='hidden' name='source' value='upload' />\n\t\t<input type='hidden' name='MAX_FILE_SIZE' value='2000000' />\n\t\t<input type='file' name='xmlimport' value='' size='30' />\n\t\t<input type='submit' value=\"" . wfMsgHtml("uploadbtn") . "\" />\n\t</form>\n</fieldset>\n"); } else { if (empty($wgImportSources)) { $wgOut->addWikiText(wfMsg('importnosources')); } } if (!empty($wgImportSources)) { $wgOut->addHTML("\n<fieldset>\n\t<legend>" . wfMsgHtml('importinterwiki') . "</legend>\n\t<form method='post' action=\"{$action}\">" . $wgOut->parse(wfMsg('import-interwiki-text')) . "\n\t\t<input type='hidden' name='action' value='submit' />\n\t\t<input type='hidden' name='source' value='interwiki' />\n\t\t<table>\n\t\t\t<tr>\n\t\t\t\t<td>\n\t\t\t\t\t<select name='interwiki'>"); foreach ($wgImportSources as $prefix) { $iw = htmlspecialchars($prefix); $selected = $interwiki === $prefix ? ' selected="selected"' : ''; $wgOut->addHTML("<option value=\"{$iw}\"{$selected}>{$iw}</option>\n"); } $wgOut->addHTML("\n\t\t\t\t\t</select>\n\t\t\t\t</td>\n\t\t\t\t<td>" . wfInput('frompage', 50, $frompage) . "</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td></td>\n\t\t\t\t<td>" . wfCheckLabel(wfMsg('import-interwiki-history'), 'interwikiHistory', 'interwikiHistory', $history) . "</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td></td>\n\t\t\t\t<td>\n\t\t\t\t\t" . wfMsgHtml('import-interwiki-namespace') . " " . HTMLnamespaceselector($namespace, '') . "\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td></td>\n\t\t\t\t<td>" . wfSubmitButton(wfMsg('import-interwiki-submit')) . "</td>\n\t\t\t</tr>\n\t\t</table>\n\t</form>\n</fieldset>\n"); } }
function showHistory() { global $wgLang, $wgUser, $wgOut; $sk = $wgUser->getSkin(); if ($this->mAllowed) { $wgOut->setPagetitle(wfMsg("undeletepage")); } else { $wgOut->setPagetitle(wfMsg('viewdeletedpage')); } $archive = new PageArchive($this->mTargetObj); $text = $archive->getLastRevisionText(); /* if( is_null( $text ) ) { $wgOut->addWikiText( wfMsg( "nohistory" ) ); return; } */ if ($this->mAllowed) { $wgOut->addWikiText(wfMsg("undeletehistory")); } else { $wgOut->addWikiText(wfMsg("undeletehistorynoadmin")); } # List all stored revisions $revisions = $archive->listRevisions(); $files = $archive->listFiles(); $haveRevisions = $revisions && $revisions->numRows() > 0; $haveFiles = $files && $files->numRows() > 0; # Batch existence check on user and talk pages if ($haveRevisions) { $batch = new LinkBatch(); while ($row = $revisions->fetchObject()) { $batch->addObj(Title::makeTitleSafe(NS_USER, $row->ar_user_text)); $batch->addObj(Title::makeTitleSafe(NS_USER_TALK, $row->ar_user_text)); } $batch->execute(); $revisions->seek(0); } if ($haveFiles) { $batch = new LinkBatch(); while ($row = $files->fetchObject()) { $batch->addObj(Title::makeTitleSafe(NS_USER, $row->fa_user_text)); $batch->addObj(Title::makeTitleSafe(NS_USER_TALK, $row->fa_user_text)); } $batch->execute(); $files->seek(0); } if ($this->mAllowed) { $titleObj = Title::makeTitle(NS_SPECIAL, "Undelete"); $action = $titleObj->getLocalURL("action=submit"); # Start the form here $top = wfOpenElement('form', array('method' => 'post', 'action' => $action, 'id' => 'undelete')); $wgOut->addHtml($top); } # Show relevant lines from the deletion log: $wgOut->addHTML("<h2>" . htmlspecialchars(LogPage::logName('delete')) . "</h2>\n"); $logViewer = new LogViewer(new LogReader(new FauxRequest(array('page' => $this->mTargetObj->getPrefixedText(), 'type' => 'delete')))); $logViewer->showList($wgOut); if ($this->mAllowed && ($haveRevisions || $haveFiles)) { # Format the user-visible controls (comment field, submission button) # in a nice little table $table = '<fieldset><table><tr>'; $table .= '<td colspan="2">' . wfMsgWikiHtml('undeleteextrahelp') . '</td></tr><tr>'; $table .= '<td align="right"><strong>' . wfMsgHtml('undeletecomment') . '</strong></td>'; $table .= '<td>' . wfInput('wpComment', 50, $this->mComment) . '</td>'; $table .= '</tr><tr><td> </td><td>'; $table .= wfSubmitButton(wfMsg('undeletebtn'), array('name' => 'restore')); $table .= wfElement('input', array('type' => 'reset', 'value' => wfMsg('undeletereset'))); $table .= '</td></tr></table></fieldset>'; $wgOut->addHtml($table); } $wgOut->addHTML("<h2>" . htmlspecialchars(wfMsg("history")) . "</h2>\n"); if ($haveRevisions) { # The page's stored (deleted) history: $wgOut->addHTML("<ul>"); $target = urlencode($this->mTarget); while ($row = $revisions->fetchObject()) { $ts = wfTimestamp(TS_MW, $row->ar_timestamp); if ($this->mAllowed) { $checkBox = wfCheck("ts{$ts}"); $pageLink = $sk->makeKnownLinkObj($titleObj, $wgLang->timeanddate($ts, true), "target={$target}×tamp={$ts}"); } else { $checkBox = ''; $pageLink = $wgLang->timeanddate($ts, true); } $userLink = $sk->userLink($row->ar_user, $row->ar_user_text) . $sk->userToolLinks($row->ar_user, $row->ar_user_text); $comment = $sk->commentBlock($row->ar_comment); $wgOut->addHTML("<li>{$checkBox} {$pageLink} . . {$userLink} {$comment}</li>\n"); } $revisions->free(); $wgOut->addHTML("</ul>"); } else { $wgOut->addWikiText(wfMsg("nohistory")); } if ($haveFiles) { $wgOut->addHtml("<h2>" . wfMsgHtml('imghistory') . "</h2>\n"); $wgOut->addHtml("<ul>"); while ($row = $files->fetchObject()) { $ts = wfTimestamp(TS_MW, $row->fa_timestamp); if ($this->mAllowed && $row->fa_storage_key) { $checkBox = wfCheck("fileid" . $row->fa_id); $key = urlencode($row->fa_storage_key); $target = urlencode($this->mTarget); $pageLink = $sk->makeKnownLinkObj($titleObj, $wgLang->timeanddate($ts, true), "target={$target}&file={$key}"); } else { $checkBox = ''; $pageLink = $wgLang->timeanddate($ts, true); } $userLink = $sk->userLink($row->fa_user, $row->fa_user_text) . $sk->userToolLinks($row->fa_user, $row->fa_user_text); $data = wfMsgHtml('widthheight', $wgLang->formatNum($row->fa_width), $wgLang->formatNum($row->fa_height)) . ' (' . wfMsgHtml('nbytes', $wgLang->formatNum($row->fa_size)) . ')'; $comment = $sk->commentBlock($row->fa_description); $wgOut->addHTML("<li>{$checkBox} {$pageLink} . . {$userLink} {$data} {$comment}</li>\n"); } $files->free(); $wgOut->addHTML("</ul>"); } if ($this->mAllowed) { # Slip in the hidden controls here $misc = wfHidden('target', $this->mTarget); $misc .= wfHidden('wpEditToken', $wgUser->editToken()); $wgOut->addHtml($misc . '</form>'); } return true; }
/** * Show a form for filtering namespace and username * * @return string */ function getPageHeader() { $self = Title::makeTitle(NS_SPECIAL, $this->getName()); $form = wfOpenElement('form', array('method' => 'post', 'action' => $self->getLocalUrl())); $form .= '<table><tr><td align="right">' . wfMsgHtml('namespace') . '</td>'; $form .= '<td>' . HtmlNamespaceSelector($this->namespace) . '</td><tr>'; $form .= '<tr><td align="right">' . wfMsgHtml('newpages-username') . '</td>'; $form .= '<td>' . wfInput('username', 30, $this->username) . '</td></tr>'; $form .= '<tr><td></td><td>' . wfSubmitButton(wfMsg('allpagessubmit')) . '</td></tr></table>'; $form .= wfHidden('offset', $this->offset) . wfHidden('limit', $this->limit) . '</form>'; return $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->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; # 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(SpecialPage::getTitleFor('Confirmemail'), wfMsg('emailconfirmlink')); } } else { $emailauthenticated = ''; $disableEmailPrefs = false; } if ($this->mUserEmail == '') { $emailauthenticated = wfMsg('noemailprefs'); } $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("<fieldset>\n<legend>" . wfMsg('prefs-personal') . "</legend>\n<table>\n"); $userInformationHtml = $this->addRow(wfMsg('username'), $wgUser->getName()) . $this->addRow(wfMsg('uid'), $wgUser->getID()); if (wfRunHooks('PreferencesUserInformationPanel', array($this, &$userInformationHtml))) { $wgOut->addHtml($userInformationHtml); } 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 = Language::getLanguageNames(true); 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; $options = "\n"; foreach ($languages as $code => $name) { $selected = $code == $selectedLang; $options .= Xml::option("{$code} - {$name}", $code, $selected) . "\n"; } $wgOut->addHTML($this->addRow('<label for="wpUserLanguage">' . wfMsg('yourlanguage') . '</label>', "<select name='wpUserLanguage' id='wpUserLanguage'>{$options}</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]; } } $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->addRow(wfMsg('yourvariant'), "<select name='wpUserVariant'>{$options}</select>")); } } $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($this->getToggle('ccmeonemails')); $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(); # 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 ? ' 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" . 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'))); /* BizzWiki -- can't enforce namespace dependant policies here. 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(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("\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>'); $token = $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->addWikiText('<div class="prefcache">' . wfMsg('clearyourcache') . '</div>'); }
/** * Convenience function to build an HTML text input field with a label * @return string HTML */ function wfInputLabel($label, $name, $id, $size = false, $value = false, $attribs = array()) { return wfLabel($label, $id) . ' ' . wfInput($name, $size, $value, array('id' => $id) + $attribs); }
function execute($par) { global $wgRequest, $wgOut, $wgTitle, $wgLocalDatabases, $wgUser; global $wgConf, $wgCanonicalNamespaceNames, $wgLang; $this->setHeaders(); # Check permissions if (!$wgUser->isAllowed('lookupcontribs')) { $wgOut->permissionRequired('lookupcontribs'); return; } $user = $wgRequest->getText('user'); # $userName = $user->getName(); # Show form $self = Title::makeTitle(NS_SPECIAL, 'LookupContribs'); $form = '<span>' . wfMsgHtml('lookupcontribs-summary') . '</span>'; $form .= wfOpenElement('form', array('method' => 'get', 'action' => $self->getLocalUrl())); //original was method=post $form .= '<table><tr><td align="right">' . wfMsgHtml('lookupcontribs-user') . '</td>'; $form .= '<td>' . wfInput('user', 50, $user) . '</td></tr>'; $form .= '<tr><td></td><td>' . wfSubmitButton(wfMsg('go')) . '</td></tr></table></form>'; $wgOut->addHtml($form); if ($user) { $dbr = wfGetDB(DB_SLAVE); $s = ''; foreach ($wgLocalDatabases as $db) { $sql = "SELECT rc_namespace,rc_title,rc_timestamp,rc_user_text,rc_last_oldid FROM {$db}.recentchanges WHERE rc_user_text='" . $dbr->strencode($user) . "' AND rc_this_oldid=0"; //TODO: use page & revision tables, alá Special:Contributions $res = $dbr->query($sql, "findspam.php"); //this seems to be a wikimedia-specific hack that needs a total rewrite $arr = explode('.', strtolower($_SERVER['SERVER_NAME'])); $subdomain = $arr[0]; //list( $site, $lang ) = $wgConf->siteFromDB( $db ); //if ( $lang == 'en' ) { // $baseUrl = "http://internal.jackphoenix.com"; //ugly! //} else { $baseUrl = "http://{$subdomain}.jackphoenix.com"; //} if ($dbr->numRows($res)) { $s .= "\n{$db}\n"; while ($row = $dbr->fetchObject($res)) { if ($row->rc_namespace == 0) { $title = $row->rc_title; } else { $title = $wgCanonicalNamespaceNames[$row->rc_namespace] . ':' . $row->rc_title; } $encTitle = urlencode($title); $url = "{$baseUrl}/wiki/{$encTitle}"; $user = urlencode($row->rc_user_text); $rollbackText = wfMsg('rollback'); $diffText = wfMsg('diff'); $rollbackUrl = "{$baseUrl}/w/wiki.phtml?title={$encTitle}&action=rollback&from={$user}"; $diffUrl = "{$baseUrl}/w/wiki.phtml?title={$encTitle}&diff=0&oldid=0"; if ($row->rc_last_oldid) { $lastLink = "[{$baseUrl}/w/wiki.phtml?title={$encTitle}&oldid={$row->rc_last_oldid}&action=edit last]"; } $date = $wgLang->timeanddate($row->rc_timestamp); $s .= "* {$date} [{$url} {$title}] ([{$rollbackUrl} {$rollbackText}] | [{$diffUrl} {$diffText}])\n"; $s .= "* {$date} [{$url} {$title}] ({$lastLink} | [{$diffUrl} {$diffText}])\n"; } } } if ($s == '') { $s = wfMsg('lookupcontribs-notextfound'); } /* TODO: fixme if (!$userName->exists) { wfMsg('nosuchusershort'); }*/ $wgOut->addWikiText($s . "<br />"); } }