function trySubmit() { global $wgOut, $wgUser; $errors = array(); $ip = $this->mUnblockIP; if (!IP::isIPAddress($ip) && strlen($ip)) { $errors[] = array('globalblocking-unblock-ipinvalid', $ip); $ip = ''; } if (0 == ($id = GlobalBlocking::getGlobalBlockId($ip))) { $errors[] = array('globalblocking-notblocked', $ip); } if (count($errors) > 0) { return $errors; } $dbw = GlobalBlocking::getGlobalBlockingMaster(); $dbw->delete('globalblocks', array('gb_id' => $id), __METHOD__); $page = new LogPage('gblblock'); $page->addEntry('gunblock', Title::makeTitleSafe(NS_USER, $ip), $this->mReason); $successmsg = wfMsgExt('globalblocking-unblock-unblocked', array('parse'), $ip, $id); $wgOut->addHTML($successmsg); $link = $wgUser->getSkin()->makeKnownLinkObj(SpecialPage::getTitleFor('GlobalBlockList'), wfMsg('globalblocking-return')); $wgOut->addHTML($link); $wgOut->setSubtitle(wfMsg('globalblocking-unblock-successsub')); return array(); }
function execute($par) { global $wgOut, $wgRequest, $wgUser; $this->setHeaders(); $this->loadParameters($par); $wgOut->setPageTitle(wfMsg('globalblocking-block')); $wgOut->setSubtitle(GlobalBlocking::buildSubtitleLinks('GlobalBlock')); $wgOut->setRobotPolicy("noindex,nofollow"); $wgOut->setArticleRelated(false); $wgOut->enableClientCache(false); if (!$this->userCanExecute($wgUser)) { $this->displayRestrictionError(); return; } $errors = ''; if ($wgRequest->wasPosted() && $wgUser->matchEditToken($wgRequest->getVal('wpEditToken'))) { // They want to submit. Let's have a look. $errors = $this->trySubmit(); if (!$errors) { // Success! return; } } if (GlobalBlocking::getGlobalBlockId($this->mAddress)) { $this->mModifyForm = true; } if ($this->mModifyForm) { $dbr = GlobalBlocking::getGlobalBlockingSlave(); $block = $dbr->selectRow('globalblocks', '*', array('gb_address' => $this->mAddress), __METHOD__); if ($block) { if ($block->gb_expiry == 'infinity') { $this->mExpirySelection = 'indefinite'; } else { $this->mExpiry = wfTimestamp(TS_ISO_8601, $block->gb_expiry); } $this->mAnonOnly = $block->gb_anon_only; $this->mReason = $block->gb_reason; } } $errorstr = null; if (is_array($errors) && count($errors) > 0) { $errorstr = $this->formatErrors($errors); } $this->form($errorstr); }
function trySubmit() { global $wgOut, $wgUser; $ip = $this->mAddress; // Is it blocked? if (!($id = GlobalBlocking::getGlobalBlockId($ip))) { return array(array('globalblocking-notblocked', $ip)); } $new_status = $this->mWhitelistStatus; $cur_status = $this->mCurrentStatus; // Already whitelisted. if ($cur_status == $new_status) { return array('globalblocking-whitelist-nochange'); } $dbw = wfGetDB(DB_MASTER); if ($new_status == true) { $gdbr = GlobalBlocking::getGlobalBlockingSlave(); // Find the expiry of the block. This is important so that we can store it in the // global_block_whitelist table, which allows us to purge it when the block has expired. $expiry = $gdbr->selectField('globalblocks', 'gb_expiry', array('gb_id' => $id), __METHOD__); $row = array('gbw_by' => $wgUser->getId(), 'gbw_by_text' => $wgUser->getName(), 'gbw_reason' => $this->mReason, 'gbw_address' => $ip, 'gbw_expiry' => $expiry, 'gbw_id' => $id); $dbw->replace('global_block_whitelist', array('gbw_id'), $row, __METHOD__); $page = new LogPage('gblblock'); $page->addEntry('whitelist', Title::makeTitleSafe(NS_USER, $ip), $this->mReason); $wgOut->addWikiMsg('globalblocking-whitelist-whitelisted', $ip, $id); } else { // Delete the row from the database $dbw->delete('global_block_whitelist', array('gbw_id' => $id), __METHOD__); $page = new LogPage('gblblock'); $page->addEntry('dwhitelist', Title::makeTitleSafe(NS_USER, $ip), $this->mReason); $wgOut->addWikiMsg('globalblocking-whitelist-dewhitelisted', $ip, $id); } $link = $wgUser->getSkin()->makeKnownLinkObj(SpecialPage::getTitleFor('GlobalBlockList'), wfMsg('globalblocking-return')); $wgOut->addHTML($link); $wgOut->setSubtitle(wfMsg('globalblocking-whitelist-successsub')); return array(); }
static function insertBlock($address, $reason, $expiry, $options = array()) { global $wgUser; $errors = array(); ## Purge expired blocks. GlobalBlocking::purgeExpired(); ## Validate input $ip = IP::sanitizeIP($address); $anonOnly = in_array('anon-only', $options); $modify = in_array('modify', $options); if (!IP::isIPAddress($ip)) { // Invalid IP address. $errors[] = array('globalblocking-block-ipinvalid', $ip); } if (false === $expiry) { $errors[] = array('globalblocking-block-expiryinvalid', $expiry); } $existingBlock = GlobalBlocking::getGlobalBlockId($ip); if (!$modify && $existingBlock) { $errors[] = array('globalblocking-block-alreadyblocked', $ip); } // Check for too-big ranges. list($range_start, $range_end) = IP::parseRange($ip); if (substr($range_start, 0, 4) != substr($range_end, 0, 4)) { // Range crosses a /16 boundary. $errors[] = array('globalblocking-block-bigrange', $ip); } // Normalise the range if ($range_start != $range_end) { $ip = Block::normaliseRange($ip); } if (count($errors) > 0) { return $errors; } // We're a-ok. $dbw = GlobalBlocking::getGlobalBlockingMaster(); // Delete the old block, if applicable if ($modify) { $dbw->delete('globalblocks', array('gb_id' => $existingBlock), __METHOD__); } $row = array(); $row['gb_address'] = $ip; $row['gb_by'] = $wgUser->getName(); $row['gb_by_wiki'] = wfWikiId(); $row['gb_reason'] = $reason; $row['gb_timestamp'] = $dbw->timestamp(wfTimestampNow()); $row['gb_anon_only'] = $anonOnly; $row['gb_expiry'] = Block::encodeExpiry($expiry, $dbw); list($row['gb_range_start'], $row['gb_range_end']) = array($range_start, $range_end); $dbw->insert('globalblocks', $row, __METHOD__); return array(); }