/**
  * main()
  */
 public function execute($par)
 {
     global $wgRequest, $wgOut, $wgContLang;
     wfLoadExtensionMessages('Editcount');
     $target = isset($par) ? $par : $wgRequest->getText('username');
     list($username, $namespace) = $this->extractParamaters($target);
     $username = Title::newFromText($username);
     $username = is_object($username) ? $username->getText() : '';
     $uid = User::idFromName($username);
     if ($this->including()) {
         if ($namespace === null) {
             if ($uid != 0) {
                 $out = $wgContLang->formatNum(User::edits($uid));
             } else {
                 $out = "";
             }
         } else {
             $out = $wgContLang->formatNum($this->editsInNs($uid, $namespace));
         }
         $wgOut->addHTML($out);
     } else {
         if ($uid != 0) {
             $total = $this->getTotal($nscount = $this->editsByNs($uid));
         }
         $html = new EditcountHTML();
         $html->outputHTML($username, $uid, @$nscount, @$total);
     }
 }
function FacebookNotify(&$article, &$user, &$text, &$summary, &$minoredit, &$watchthis, &$sectionanchor, &$flags, $revision)
{
    global $wgRequest;
    $fbdata = FacebookGetFBUserInfo($user);
    error_log(print_r($fbdata, true));
    $fb_userid = $fbdata['fb_userid'];
    if (isset($fb_userid) && strlen($fb_userid) != 0) {
        $facebook = new Facebook(MEDIAWIKI_FACEBOOK_APIKEY, MEDIAWIKI_FACEBOOK_SECRET);
        if (!$facebook) {
            return false;
        }
        $facebook->user = $fb_userid;
        $facebook->api_client->session_key = $fbdata['session_key'];
        $article_title = $article->mTitle;
        $article_url = $wgRequest->getRequestURL();
        $total_edits = User::edits($user->getId());
        $subtitle = '<fb:subtitle>Last updated on ' . date("M jS, Y - g\\:i a") . '</fb:subtitle>';
        $profile_content = "<p><fb:name uid=\"{$fb_userid}\" useyou=\"false\" firstnameonly=\"true\" /> last updated the wiki page {$article_title}.</p>";
        $profile_content .= "<p><fb:name uid=\"{$fb_userid}\" useyou=\"false\" firstnameonly=\"true\" /> has made {$total_edits} edits to the wiki.</p>";
        $profile_body = "<fb:wide>{$subtitle} {$profile_content}</fb:wide>";
        $profile_body .= "<fb:narrow>{$subtitle} {$profile_content}</fb:narrow>";
        try {
            $facebook->api_client->profile_setFBML($profile_body, $fb_userid);
        } catch (Exception $e) {
            error_log($e);
            return false;
        }
    }
    return true;
}
function wfContributionseditcount($uid)
{
    if ($uid != 0) {
        global $wgOut, $wgLang;
        $wgOut->addWikiText(wfMsgExt('contributionseditcount', array('parsemag'), $wgLang->formatNum(User::edits($uid)), User::whoIs($uid)));
    }
    return true;
}
Пример #4
0
 /**
  * Constructor
  *
  * @param string $old The old username
  * @param string $new The new username
  */
 function RenameuserSQL($old, $new, $uid)
 {
     $this->old = $old;
     $this->new = $new;
     $this->uid = $uid;
     $this->tables = array();
     // Immediate updates
     $this->tables['image'] = 'img_user_text';
     $this->tables['oldimage'] = 'oi_user_text';
     # FIXME: $this->tables['filearchive'] = 'fa_user_text'; (not indexed yet)
     $this->tablesJob = array();
     // Slow updates
     // If this user has a large number of edits, use the jobqueue
     if (User::edits($this->uid) > RENAMEUSER_CONTRIBJOB) {
         $this->tablesJob['revision'] = array('rev_user_text', 'rev_user', 'rev_timestamp');
         $this->tablesJob['archive'] = array('ar_user_text', 'ar_user', 'ar_timestamp');
     } else {
         $this->tables['revision'] = 'rev_user_text';
         $this->tables['archive'] = 'ar_user_text';
     }
     // Recent changes is pretty hot, deadlocks occur if done all at once
     if (wfQueriesMustScale()) {
         $this->tablesJob['recentchanges'] = array('rc_user_text', 'rc_user', 'rc_timestamp');
     } else {
         $this->tables['recentchanges'] = 'rc_user_text';
     }
 }
Пример #5
0
 /**
  * Generate standard user tool links (talk, contributions, block link, etc.)
  *
  * @param $userId Integer: user identifier
  * @param $userText String: user name or IP address
  * @param $redContribsWhenNoEdits Boolean: should the contributions link be
  *        red if the user has no edits?
  * @param $flags Integer: customisation flags (e.g. Linker::TOOL_LINKS_NOBLOCK)
  * @param $edits Integer: user edit count (optional, for performance)
  * @return String: HTML fragment
  */
 public static function userToolLinks($userId, $userText, $redContribsWhenNoEdits = false, $flags = 0, $edits = null)
 {
     global $wgUser, $wgDisableAnonTalk, $wgLang;
     $talkable = !($wgDisableAnonTalk && 0 == $userId);
     $blockable = !$flags & self::TOOL_LINKS_NOBLOCK;
     $items = array();
     if ($talkable) {
         $items[] = self::userTalkLink($userId, $userText);
     }
     if ($userId) {
         // check if the user has an edit
         $attribs = array();
         if ($redContribsWhenNoEdits) {
             $count = !is_null($edits) ? $edits : User::edits($userId);
             if ($count == 0) {
                 $attribs['class'] = 'new';
             }
         }
         $contribsPage = SpecialPage::getTitleFor('Contributions', $userText);
         $items[] = self::link($contribsPage, wfMsgHtml('contribslink'), $attribs);
     }
     if ($blockable && $wgUser->isAllowed('block')) {
         $items[] = self::blockLink($userId, $userText);
     }
     if ($items) {
         return ' <span class="mw-usertoollinks">(' . $wgLang->pipeList($items) . ')</span>';
     } else {
         return '';
     }
 }
Пример #6
0
 /**
  * Get the user's edit count.
  * @return Int
  */
 public function getEditCount()
 {
     if ($this->getId()) {
         if (!isset($this->mEditCount)) {
             /* Populate the count, if it has not been populated yet */
             $this->mEditCount = User::edits($this->mId);
         }
         return $this->mEditCount;
     } else {
         /* nil */
         return null;
     }
 }
Пример #7
0
 /**
  * Generate standard user tool links (talk, contributions, block link, etc.)
  *
  * @param $userId Integer: user identifier
  * @param $userText String: user name or IP address
  * @param $redContribsWhenNoEdits Boolean: should the contributions link be
  *        red if the user has no edits?
  * @param $flags Integer: customisation flags (e.g. Linker::TOOL_LINKS_NOBLOCK and Linker::TOOL_LINKS_EMAIL)
  * @param $edits Integer: user edit count (optional, for performance)
  * @return String: HTML fragment
  */
 public static function userToolLinks($userId, $userText, $redContribsWhenNoEdits = false, $flags = 0, $edits = null)
 {
     global $wgUser, $wgDisableAnonTalk, $wgLang;
     $talkable = !($wgDisableAnonTalk && 0 == $userId);
     $blockable = !($flags & self::TOOL_LINKS_NOBLOCK);
     $addEmailLink = $flags & self::TOOL_LINKS_EMAIL && $userId;
     $items = array();
     if ($talkable) {
         $items[] = self::userTalkLink($userId, $userText);
     }
     if ($userId) {
         // check if the user has an edit
         $attribs = array();
         if ($redContribsWhenNoEdits) {
             $count = !is_null($edits) ? $edits : User::edits($userId);
             if ($count == 0) {
                 $attribs['class'] = 'new';
             }
         }
         $contribsPage = SpecialPage::getTitleFor('Contributions', $userText);
         $items[] = self::link($contribsPage, wfMessage('contribslink')->escaped(), $attribs);
     }
     if ($blockable && $wgUser->isAllowed('block')) {
         $items[] = self::blockLink($userId, $userText);
     }
     if ($addEmailLink && $wgUser->canSendEmail()) {
         $items[] = self::emailLink($userId, $userText);
     }
     wfRunHooks('UserToolLinksEdit', array($userId, $userText, &$items));
     if ($items) {
         return wfMessage('word-separator')->plain() . '<span class="mw-usertoollinks">' . wfMessage('parentheses')->rawParams($wgLang->pipeList($items))->escaped() . '</span>';
     } else {
         return '';
     }
 }
Пример #8
0
 /**
  * Constructor
  *
  * @param $old string The old username
  * @param $new string The new username
  * @param $uid
  */
 function __construct($old, $new, $uid)
 {
     $this->old = $old;
     $this->new = $new;
     $this->uid = $uid;
     $this->tables = array();
     // Immediate updates
     $this->tables['image'] = array('img_user_text', 'img_user');
     $this->tables['oldimage'] = array('oi_user_text', 'oi_user');
     $this->tables['filearchive'] = array('fa_user_text', 'fa_user');
     $this->tablesJob = array();
     // Slow updates
     // If this user has a large number of edits, use the jobqueue
     if (User::edits($this->uid) > RENAMEUSER_CONTRIBJOB) {
         $this->tablesJob['revision'] = array('rev_user_text', 'rev_user', 'rev_timestamp');
         $this->tablesJob['archive'] = array('ar_user_text', 'ar_user', 'ar_timestamp');
         $this->tablesJob['logging'] = array('log_user_text', 'log_user', 'log_timestamp');
     } else {
         $this->tables['revision'] = array('rev_user_text', 'rev_user');
         $this->tables['archive'] = array('ar_user_text', 'ar_user');
         $this->tables['logging'] = array('log_user_text', 'log_user');
     }
     // Recent changes is pretty hot, deadlocks occur if done all at once
     if (wfQueriesMustScale()) {
         $this->tablesJob['recentchanges'] = array('rc_user_text', 'rc_user', 'rc_timestamp');
     } else {
         $this->tables['recentchanges'] = array('rc_user_text', 'rc_user');
     }
     wfRunHooks('RenameUserSQL', array($this));
 }
Пример #9
0
 /**
  * Backend block code.
  * $userID and $expiry will be filled accordingly
  * @return array(message key, arguments) on failure, empty array on success
  */
 function doBlock(&$userId = null, &$expiry = null)
 {
     global $wgUser, $wgSysopUserBans, $wgSysopRangeBans, $wgBlockAllowsUTEdit, $wgBlockCIDRLimit;
     $userId = 0;
     # Expand valid IPv6 addresses, usernames are left as is
     $this->BlockAddress = IP::sanitizeIP($this->BlockAddress);
     # isIPv4() and IPv6() are used for final validation
     $rxIP4 = '\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}';
     $rxIP6 = '\\w{1,4}:\\w{1,4}:\\w{1,4}:\\w{1,4}:\\w{1,4}:\\w{1,4}:\\w{1,4}:\\w{1,4}';
     $rxIP = "({$rxIP4}|{$rxIP6})";
     # Check for invalid specifications
     if (!preg_match("/^{$rxIP}\$/", $this->BlockAddress)) {
         $matches = array();
         if (preg_match("/^({$rxIP4})\\/(\\d{1,2})\$/", $this->BlockAddress, $matches)) {
             # IPv4
             if ($wgSysopRangeBans) {
                 if (!IP::isIPv4($this->BlockAddress) || $matches[2] > 32) {
                     return array('ip_range_invalid');
                 } elseif ($matches[2] < $wgBlockCIDRLimit['IPv4']) {
                     return array('ip_range_toolarge', $wgBlockCIDRLimit['IPv4']);
                 }
                 $this->BlockAddress = Block::normaliseRange($this->BlockAddress);
             } else {
                 # Range block illegal
                 return array('range_block_disabled');
             }
         } elseif (preg_match("/^({$rxIP6})\\/(\\d{1,3})\$/", $this->BlockAddress, $matches)) {
             # IPv6
             if ($wgSysopRangeBans) {
                 if (!IP::isIPv6($this->BlockAddress) || $matches[2] > 128) {
                     return array('ip_range_invalid');
                 } elseif ($matches[2] < $wgBlockCIDRLimit['IPv6']) {
                     return array('ip_range_toolarge', $wgBlockCIDRLimit['IPv6']);
                 }
                 $this->BlockAddress = Block::normaliseRange($this->BlockAddress);
             } else {
                 # Range block illegal
                 return array('range_block_disabled');
             }
         } else {
             # Username block
             if ($wgSysopUserBans) {
                 $user = User::newFromName($this->BlockAddress);
                 if (!is_null($user) && $user->getId()) {
                     # Use canonical name
                     $userId = $user->getId();
                     $this->BlockAddress = $user->getName();
                 } else {
                     return array('nosuchusershort', htmlspecialchars($user ? $user->getName() : $this->BlockAddress));
                 }
             } else {
                 return array('badipaddress');
             }
         }
     }
     if ($wgUser->isBlocked() && $wgUser->getId() !== $userId) {
         return array('cant-block-while-blocked');
     }
     $reasonstr = $this->BlockReasonList;
     if ($reasonstr != 'other' && $this->BlockReason != '') {
         // Entry from drop down menu + additional comment
         $reasonstr .= wfMsgForContent('colon-separator') . $this->BlockReason;
     } elseif ($reasonstr == 'other') {
         $reasonstr = $this->BlockReason;
     }
     $expirestr = $this->BlockExpiry;
     if ($expirestr == 'other') {
         $expirestr = $this->BlockOther;
     }
     if (strlen($expirestr) == 0 || strlen($expirestr) > 50) {
         return array('ipb_expiry_invalid');
     }
     if (false === ($expiry = Block::parseExpiryInput($expirestr))) {
         // Bad expiry.
         return array('ipb_expiry_invalid');
     }
     if ($this->BlockHideName) {
         // Recheck params here...
         if (!$userId || !$wgUser->isAllowed('hideuser')) {
             $this->BlockHideName = false;
             // IP users should not be hidden
         } elseif ($expiry !== 'infinity') {
             // Bad expiry.
             return array('ipb_expiry_temp');
         } elseif (User::edits($userId) > self::HIDEUSER_CONTRIBLIMIT) {
             // Typically, the user should have a handful of edits.
             // Disallow hiding users with many edits for performance.
             return array('ipb_hide_invalid');
         }
     }
     # Create block object
     # Note: for a user block, ipb_address is only for display purposes
     $block = new Block($this->BlockAddress, $userId, $wgUser->getId(), $reasonstr, wfTimestampNow(), 0, $expiry, $this->BlockAnonOnly, $this->BlockCreateAccount, $this->BlockEnableAutoblock, $this->BlockHideName, $this->BlockEmail, isset($this->BlockAllowUsertalk) ? $this->BlockAllowUsertalk : $wgBlockAllowsUTEdit);
     # Should this be privately logged?
     $suppressLog = (bool) $this->BlockHideName;
     if (wfRunHooks('BlockIp', array(&$block, &$wgUser))) {
         # Try to insert block. Is there a conflicting block?
         if (!$block->insert()) {
             # Show form unless the user is already aware of this...
             if (!$this->BlockReblock) {
                 return array('ipb_already_blocked');
                 # Otherwise, try to update the block...
             } else {
                 # This returns direct blocks before autoblocks/rangeblocks, since we should
                 # be sure the user is blocked by now it should work for our purposes
                 $currentBlock = Block::newFromDB($this->BlockAddress, $userId);
                 if ($block->equals($currentBlock)) {
                     return array('ipb_already_blocked');
                 }
                 # If the name was hidden and the blocking user cannot hide
                 # names, then don't allow any block changes...
                 if ($currentBlock->mHideName && !$wgUser->isAllowed('hideuser')) {
                     return array('cant-see-hidden-user');
                 }
                 $currentBlock->delete();
                 $block->insert();
                 # If hiding/unhiding a name, this should go in the private logs
                 $suppressLog = $suppressLog || (bool) $currentBlock->mHideName;
                 $log_action = 'reblock';
                 # Unset _deleted fields if requested
                 if ($currentBlock->mHideName && !$this->BlockHideName) {
                     self::unsuppressUserName($this->BlockAddress, $userId);
                 }
             }
         } else {
             $log_action = 'block';
         }
         wfRunHooks('BlockIpComplete', array($block, $wgUser));
         # Set *_deleted fields if requested
         if ($this->BlockHideName) {
             self::suppressUserName($this->BlockAddress, $userId);
         }
         # Only show watch link when this is no range block
         if ($this->BlockWatchUser && $block->mRangeStart == $block->mRangeEnd) {
             $wgUser->addWatch(Title::makeTitle(NS_USER, $this->BlockAddress));
         }
         # Block constructor sanitizes certain block options on insert
         $this->BlockEmail = $block->mBlockEmail;
         $this->BlockEnableAutoblock = $block->mEnableAutoblock;
         # Prepare log parameters
         $logParams = array();
         $logParams[] = $expirestr;
         $logParams[] = $this->blockLogFlags();
         # Make log entry, if the name is hidden, put it in the oversight log
         $log_type = $suppressLog ? 'suppress' : 'block';
         $log = new LogPage($log_type);
         $log->addEntry($log_action, Title::makeTitle(NS_USER, $this->BlockAddress), $reasonstr, $logParams);
         # Report to the user
         return array();
     } else {
         return array('hookaborted');
     }
 }
    /**
     * @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('&nbsp;', Xml::element('span', array('class' => 'error'), wfMsg('badsiglength', $wgLang->formatNum($wgMaxSigChars))));
        } elseif (!empty($this->mToggles['fancysig']) && false === $wgParser->validateSig($this->mNick)) {
            $invalidSig = $this->tableRow('&nbsp;', 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('&nbsp;', $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>&nbsp;');
        $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')));
    }
Пример #11
0
 /**
  * Generate standard user tool links (talk, contributions, block link, etc.)
  *
  * @param int $userId User identifier
  * @param string $userText User name or IP address
  * @param bool $redContribsWhenNoEdits Should the contributions link be red if the user has no edits?
  * @param int $flags Customisation flags (e.g. self::TOOL_LINKS_NOBLOCK)
  * @return string
  */
 public function userToolLinks($userId, $userText, $redContribsWhenNoEdits = false, $flags = 0)
 {
     global $wgUser, $wgDisableAnonTalk, $wgSysopUserBans;
     $talkable = !($wgDisableAnonTalk && 0 == $userId);
     $blockable = ($wgSysopUserBans || 0 == $userId) && !$flags & self::TOOL_LINKS_NOBLOCK;
     $items = array();
     if ($talkable) {
         $items[] = $this->userTalkLink($userId, $userText);
     }
     //if( $userId ) {
     // check if the user has an edit
     if ($redContribsWhenNoEdits && User::edits($userId) == 0) {
         $style = " class='new'";
     } else {
         $style = '';
     }
     $contribsPage = SpecialPage::getTitleFor('Contributions', $userText);
     $items[] = $this->makeKnownLinkObj($contribsPage, wfMsgHtml('contribslink'), '', '', '', '', $style);
     //	}
     if ($blockable && $wgUser->isAllowed('block')) {
         $items[] = $this->blockLink($userId, $userText);
     }
     if ($items) {
         return ' (' . implode(' | ', $items) . ')';
     } else {
         return '';
     }
 }
Пример #12
0
    /**
     * @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'>&nbsp;</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('&nbsp;', Xml::element('span', array('class' => 'error'), wfMsg('badsiglength', $wgLang->formatNum($wgMaxSigChars))));
        } elseif (!empty($this->mToggles['fancysig']) && false === $wgParser->validateSig($this->mNick)) {
            $invalidSig = $this->tableRow('&nbsp;', 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('&nbsp;', $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>&nbsp;');
        $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' ) )
        		);*/
    }
Пример #13
0
 public function updateUserGroups($user, $addgroup = array(), $removegroup = array())
 {
     wfProfileIn(__METHOD__);
     if (!$user instanceof User) {
         wfProfileOut(__METHOD__);
         return true;
     }
     $user_id = $user->getID();
     $dbr = wfGetDB(DB_SLAVE, array(), $this->mDBh);
     $where = array("user_id" => $user_id, "wiki_id" => $this->mCityId);
     $oRow = $dbr->selectRow(array($this->mTable), array("all_groups"), $where, __METHOD__);
     $groups = array();
     if ($oRow !== false) {
         $tmp = explode(";", $oRow->all_groups);
         if (!empty($tmp)) {
             foreach ($tmp as $g) {
                 if (!empty($g)) {
                     $groups[] = $g;
                 }
             }
         }
     }
     $central_groups = array();
     if (class_exists('UserRights')) {
         if (!UserRights::isCentralWiki()) {
             $central_groups = UserRights::getGlobalGroups($user);
         }
     }
     # add groups
     if (!empty($addgroup)) {
         $groups = array_unique(array_merge($groups, $addgroup));
     }
     # remove groups
     if (!empty($removegroup)) {
         $groups = array_unique(array_diff($groups, $removegroup));
     }
     #central groups
     if (!empty($central_groups)) {
         $groups = array_unique(array_merge($groups, $central_groups));
     }
     if (!empty($groups)) {
         sort($groups);
     }
     $elements = count($groups);
     $singlegroup = $elements > 0 ? $groups[$elements - 1] : "";
     $allgroups = $elements > 0 ? implode(";", $groups) : "";
     $dbw = wfGetDB(DB_MASTER, array(), $this->mDBh);
     if (empty($oRow)) {
         $edits = User::edits($user_id);
         $dbr = wfGetDB(DB_SLAVE);
         $revRow = $dbr->selectRow('revision', array('rev_id', 'rev_timestamp'), array('rev_user' => $user_id), __METHOD__, array('ORDER BY' => 'rev_timestamp DESC'));
         if (empty($revRow)) {
             $editdate = '0000-00-00 00:00:00';
             $lastrev = 0;
         } else {
             $editdate = wfTimestamp(TS_DB, $revRow->rev_timestamp);
             $lastrev = $revRow->rev_id;
         }
         $dbw->replace($this->mTable, array('wiki_id', 'user_id', 'user_name'), array("wiki_id" => $this->mCityId, "user_id" => $user_id, "user_name" => $user->getName(), "last_ip" => 0, "edits" => $edits, "editdate" => $editdate, "last_revision" => intval($lastrev), "cnt_groups" => $elements, "single_group" => $singlegroup, "all_groups" => $allgroups), __METHOD__);
     } else {
         $dbw->update($this->mTable, array("cnt_groups" => $elements, "single_group" => $singlegroup, "all_groups" => $allgroups), $where, __METHOD__);
     }
     wfProfileOut(__METHOD__);
     return true;
 }
Пример #14
0
 function execute()
 {
     global $wgOut, $wgUser, $wgTitle, $wgRequest, $wgContLang, $wgLang;
     global $wgVersion, $wgMaxNameChars;
     $fname = 'Renameuser::execute';
     $this->setHeaders();
     if (!$wgUser->isAllowed('renameuser')) {
         $wgOut->permissionRequired('renameuser');
         return;
     }
     if (wfReadOnly()) {
         $wgOut->readOnlyPage();
         return;
     }
     if (version_compare($wgVersion, '1.7.0', '<')) {
         $wgOut->versionRequired('1.7.0');
         return;
     }
     $oldusername = Title::newFromText($wgRequest->getText('oldusername'));
     $newusername = Title::newFromText($wgRequest->getText('newusername'));
     // WERELATE: added isVandal
     $isVandal = $wgRequest->getVal('isvandal');
     $action = $wgTitle->escapeLocalUrl();
     $renameuserold = wfMsgHtml('renameuserold');
     $renameusernew = wfMsgHtml('renameusernew');
     $movepages = wfMsgHtml('renameusermove');
     $oun = is_object($oldusername) ? $oldusername->getText() : '';
     $nun = is_object($newusername) ? $newusername->getText() : '';
     $submit = wfMsgHtml('renameusersubmit');
     $token = $wgUser->editToken();
     $wgOut->addHTML("\n<!-- Current contributions limit is " . RENAMEUSER_CONTRIBLIMIT . " -->\n<form id='renameuser' method='post' action=\"{$action}\">\n<table>\n\t<tr>\n\t\t<td align='right'>{$renameuserold} </td>\n\t\t<td align='left'><input tabindex='1' type='text' size='20' name='oldusername' value=\"{$oun}\" /></td>\n\t</tr>\n\t<tr>\n\t\t<td align='right'>{$renameusernew} </td>\n\t\t<td align='left'><input tabindex='2' type='text' size='20' name='newusername' value=\"{$nun}\"/></td>\n\t</tr>");
     // WERELATE: added isVandal
     $checkedVandal = $isVandal ? ' checked' : '';
     $wgOut->addHTML("\n   <tr>\n      <td align='right'>Delete watchlist, reset password and email</td>\n      <td align='left'><input tabindex='3' type='checkbox' name='isvandal' value=\"yes\"{$checkedVandal}/></td>\n   </tr>");
     if ($wgUser->isAllowed('move') && version_compare($wgVersion, '1.9alpha', '>=')) {
         $wgOut->addHTML("\n\t<tr>\n\t\t<td>&nbsp;</td>\n\t\t<td>\n\t\t\t<input tabindex='3' type='checkbox' name='movepages' id='movepages' checked='checked' />\n\t\t\t<label for='movepages'>{$movepages}</label>\n\t\t</td>\n\t</tr>");
     }
     $wgOut->addHTML("\n\t<tr>\n\t\t<td>&nbsp;</td>\n\t\t<td><input type='submit' name='submit' value=\"{$submit}\" /></td>\n\t</tr>\n</table>\n<input type='hidden' name='token' value='{$token}' />\n</form>");
     // Sanity checks
     if (!$wgRequest->wasPosted() || !$wgUser->matchEditToken($wgRequest->getVal('token'))) {
         return;
     }
     if (!is_object($oldusername) || !is_object($newusername) || $oldusername->getText() == $newusername->getText()) {
         return;
     }
     $wgOut->addHTML('<hr />');
     // Suppress username validation of old username
     $olduser = User::newFromName($oldusername->getText(), false);
     $newuser = User::newFromName($newusername->getText());
     // It won't be an object if for instance "|" is supplied as a value
     if (!is_object($olduser)) {
         $wgOut->addWikiText(wfMsg('renameusererrorinvalid', $oldusername->getText()));
         return;
     }
     if (!is_object($newuser)) {
         $wgOut->addWikiText(wfMsg('renameusererrorinvalid', $newusername->getText()));
         return;
     }
     $uid = $olduser->idForName();
     if ($uid == 0) {
         $wgOut->addWikiText(wfMsg('renameusererrordoesnotexist', $oldusername->getText()));
         return;
     }
     // WERELATE: check case-insensitive match
     //		if ($newuser->idForName() != 0) {
     $dbr =& wfGetDB(DB_SLAVE);
     $userName = $dbr->selectField('user', 'user_name', array('LOWER(user_name)' => mb_strtolower($newusername->getText())));
     if ($userName !== false && $userName != $oldusername->getText()) {
         $wgOut->addWikiText(wfMsg('renameusererrorexists', $userName));
         return;
     }
     // Check edit count
     if (!$wgUser->isAllowed('siteadmin')) {
         $contribs = User::edits($uid);
         if (RENAMEUSER_CONTRIBLIMIT != 0 && $contribs > RENAMEUSER_CONTRIBLIMIT) {
             $wgOut->addWikiText(wfMsg('renameusererrortoomany', $oldusername->getText(), $wgLang->formatNum($contribs), $wgLang->formatNum(RENAMEUSER_CONTRIBLIMIT)));
             return;
         }
     }
     // WERELATE: added isVandal
     $rename = new RenameuserSQL($oldusername->getText(), $newusername->getText(), $uid, $isVandal);
     $rename->rename();
     // WERELATE: don't show in RC
     $log = new LogPage('renameuser', false);
     $log->addEntry('renameuser', $oldusername, wfMsgForContent('renameuserlog', $oldusername->getText(), $newusername->getText(), $wgContLang->formatNum($contribs)));
     $wgOut->addWikiText(wfMsg('renameusersuccess', $oldusername->getText(), $newusername->getText()));
     if ($wgRequest->getCheck('movepages') && $wgUser->isAllowed('move') && version_compare($wgVersion, '1.9alpha', '>=')) {
         $dbr =& wfGetDB(DB_SLAVE);
         $pages = $dbr->select('page', array('page_namespace', 'page_title'), array('page_namespace IN (' . NS_USER . ',' . NS_USER_TALK . ')', '(page_title LIKE "' . $dbr->escapeLike($oldusername->getDbKey() . '/') . '%" OR page_title = "' . $oldusername->getDbKey() . '")'), __METHOD__);
         $output = '';
         $skin =& $wgUser->getSkin();
         while ($row = $dbr->fetchObject($pages)) {
             $oldPage = Title::makeTitleSafe($row->page_namespace, $row->page_title);
             $newPage = Title::makeTitleSafe($row->page_namespace, preg_replace('!^[^/]+!', $newusername->getDbKey(), $row->page_title));
             if ($newPage->exists() && !$oldPage->isValidMoveTarget($newPage)) {
                 $link = $skin->makeKnownLinkObj($oldPage);
                 $output .= '<li>' . wfMsgHtml('renameuser-page-exists', $link) . '</li>';
             } else {
                 $success = $oldPage->moveTo($newPage, false, wfMsg('renameuser-move-log', $oldusername->getText(), $newusername->getText()));
                 if ($success === true) {
                     $oldLink = $skin->makeKnownLinkObj($oldPage);
                     $newLink = $skin->makeKnownLinkObj($newPage);
                     $output .= '<li>' . wfMsgHtml('renameuser-page-moved', $oldLink, $newLink) . '</li>';
                 } else {
                     $oldLink = $skin->makeKnownLinkObj($oldPage);
                     $newLink = $skin->makeLinkObj($newPage);
                     $output .= '<li>' . wfMsgHtml('renameuser-page-unmoved', $oldLink, $newLink) . '</li>';
                 }
             }
         }
         if ($output) {
             $wgOut->addHtml('<ul>' . $output . '</ul>');
         }
     }
 }