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();
 }