本文整理汇总了PHP中Block::purgeExpired方法的典型用法代码示例。如果您正苦于以下问题:PHP Block::purgeExpired方法的具体用法?PHP Block::purgeExpired怎么用?PHP Block::purgeExpired使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Block
的用法示例。
在下文中一共展示了Block::purgeExpired方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: execute
public function execute()
{
global $wgContLang;
$params = $this->extractRequestParams();
$this->requireMaxOneParameter($params, 'users', 'ip');
$prop = array_flip($params['prop']);
$fld_id = isset($prop['id']);
$fld_user = isset($prop['user']);
$fld_userid = isset($prop['userid']);
$fld_by = isset($prop['by']);
$fld_byid = isset($prop['byid']);
$fld_timestamp = isset($prop['timestamp']);
$fld_expiry = isset($prop['expiry']);
$fld_reason = isset($prop['reason']);
$fld_range = isset($prop['range']);
$fld_flags = isset($prop['flags']);
$result = $this->getResult();
$this->addTables('ipblocks');
$this->addFields('ipb_auto');
$this->addFieldsIf('ipb_id', $fld_id);
$this->addFieldsIf(array('ipb_address', 'ipb_user'), $fld_user || $fld_userid);
$this->addFieldsIf('ipb_by_text', $fld_by);
$this->addFieldsIf('ipb_by', $fld_byid);
$this->addFieldsIf('ipb_timestamp', $fld_timestamp);
$this->addFieldsIf('ipb_expiry', $fld_expiry);
$this->addFieldsIf('ipb_reason', $fld_reason);
$this->addFieldsIf(array('ipb_range_start', 'ipb_range_end'), $fld_range);
$this->addFieldsIf(array('ipb_anon_only', 'ipb_create_account', 'ipb_enable_autoblock', 'ipb_block_email', 'ipb_deleted', 'ipb_allow_usertalk'), $fld_flags);
$this->addOption('LIMIT', $params['limit'] + 1);
$this->addTimestampWhereRange('ipb_timestamp', $params['dir'], $params['start'], $params['end']);
$db = $this->getDB();
if (isset($params['ids'])) {
$this->addWhereFld('ipb_id', $params['ids']);
}
if (isset($params['users'])) {
foreach ((array) $params['users'] as $u) {
$this->prepareUsername($u);
}
$this->addWhereFld('ipb_address', $this->usernames);
$this->addWhereFld('ipb_auto', 0);
}
if (isset($params['ip'])) {
list($ip, $range) = IP::parseCIDR($params['ip']);
if ($ip && $range) {
// We got a CIDR range
if ($range < 16) {
$this->dieUsage('CIDR ranges broader than /16 are not accepted', 'cidrtoobroad');
}
$lower = wfBaseConvert($ip, 10, 16, 8, false);
$upper = wfBaseConvert($ip + pow(2, 32 - $range) - 1, 10, 16, 8, false);
} else {
$lower = $upper = IP::toHex($params['ip']);
}
$prefix = substr($lower, 0, 4);
# Fairly hard to make a malicious SQL statement out of hex characters,
# but it is good practice to add quotes
$lower = $db->addQuotes($lower);
$upper = $db->addQuotes($upper);
$this->addWhere(array('ipb_range_start' . $db->buildLike($prefix, $db->anyString()), 'ipb_range_start <= ' . $lower, 'ipb_range_end >= ' . $upper, 'ipb_auto' => 0));
}
if (!is_null($params['show'])) {
$show = array_flip($params['show']);
/* Check for conflicting parameters. */
if (isset($show['account']) && isset($show['!account']) || isset($show['ip']) && isset($show['!ip']) || isset($show['range']) && isset($show['!range']) || isset($show['temp']) && isset($show['!temp'])) {
$this->dieUsageMsg('show');
}
$this->addWhereIf('ipb_user = 0', isset($show['!account']));
$this->addWhereIf('ipb_user != 0', isset($show['account']));
$this->addWhereIf('ipb_user != 0 OR ipb_range_end > ipb_range_start', isset($show['!ip']));
$this->addWhereIf('ipb_user = 0 AND ipb_range_end = ipb_range_start', isset($show['ip']));
$this->addWhereIf('ipb_expiry = ' . $db->addQuotes($db->getInfinity()), isset($show['!temp']));
$this->addWhereIf('ipb_expiry != ' . $db->addQuotes($db->getInfinity()), isset($show['temp']));
$this->addWhereIf("ipb_range_end = ipb_range_start", isset($show['!range']));
$this->addWhereIf("ipb_range_end > ipb_range_start", isset($show['range']));
}
if (!$this->getUser()->isAllowed('hideuser')) {
$this->addWhereFld('ipb_deleted', 0);
}
// Purge expired entries on one in every 10 queries
if (!mt_rand(0, 10)) {
Block::purgeExpired();
}
$res = $this->select(__METHOD__);
$count = 0;
foreach ($res as $row) {
if (++$count > $params['limit']) {
// We've had enough
$this->setContinueEnumParameter('start', wfTimestamp(TS_ISO_8601, $row->ipb_timestamp));
break;
}
$block = array();
if ($fld_id) {
$block['id'] = $row->ipb_id;
}
if ($fld_user && !$row->ipb_auto) {
$block['user'] = $row->ipb_address;
}
if ($fld_userid && !$row->ipb_auto) {
$block['userid'] = $row->ipb_user;
}
//.........这里部分代码省略.........
示例2: insert
/**
* Insert a block into the block table. Will fail if there is a conflicting
* block (same name and options) already in the database.
*
* @param DatabaseBase $dbw If you have one available
* @return bool|array False on failure, assoc array on success:
* ('id' => block ID, 'autoIds' => array of autoblock IDs)
*/
public function insert($dbw = null)
{
wfDebug("Block::insert; timestamp {$this->mTimestamp}\n");
if ($dbw === null) {
$dbw = wfGetDB(DB_MASTER);
}
# Don't collide with expired blocks
Block::purgeExpired();
$row = $this->getDatabaseArray();
$row['ipb_id'] = $dbw->nextSequenceValue("ipblocks_ipb_id_seq");
$dbw->insert('ipblocks', $row, __METHOD__, array('IGNORE'));
$affected = $dbw->affectedRows();
$this->mId = $dbw->insertId();
if ($affected) {
$auto_ipd_ids = $this->doRetroactiveAutoblock();
return array('id' => $this->mId, 'autoIds' => $auto_ipd_ids);
}
return false;
}
示例3: execute
//.........这里部分代码省略.........
} elseif (IP::isIPv6($params['ip'])) {
$type = 'IPv6';
$cidrLimit = $blockCIDRLimit['IPv6'];
$prefixLen = 3;
// IP::toHex output is prefixed with "v6-"
} else {
$this->dieUsage('IP parameter is not valid', 'param_ip');
}
# Check range validity, if it's a CIDR
list($ip, $range) = IP::parseCIDR($params['ip']);
if ($ip !== false && $range !== false && $range < $cidrLimit) {
$this->dieUsage("{$type} CIDR ranges broader than /{$cidrLimit} are not accepted", 'cidrtoobroad');
}
# Let IP::parseRange handle calculating $upper, instead of duplicating the logic here.
list($lower, $upper) = IP::parseRange($params['ip']);
# Extract the common prefix to any rangeblock affecting this IP/CIDR
$prefix = substr($lower, 0, $prefixLen + floor($cidrLimit / 4));
# Fairly hard to make a malicious SQL statement out of hex characters,
# but it is good practice to add quotes
$lower = $db->addQuotes($lower);
$upper = $db->addQuotes($upper);
$this->addWhere(array('ipb_range_start' . $db->buildLike($prefix, $db->anyString()), 'ipb_range_start <= ' . $lower, 'ipb_range_end >= ' . $upper, 'ipb_auto' => 0));
}
if (!is_null($params['show'])) {
$show = array_flip($params['show']);
/* Check for conflicting parameters. */
if (isset($show['account']) && isset($show['!account']) || isset($show['ip']) && isset($show['!ip']) || isset($show['range']) && isset($show['!range']) || isset($show['temp']) && isset($show['!temp'])) {
$this->dieUsageMsg('show');
}
$this->addWhereIf('ipb_user = 0', isset($show['!account']));
$this->addWhereIf('ipb_user != 0', isset($show['account']));
$this->addWhereIf('ipb_user != 0 OR ipb_range_end > ipb_range_start', isset($show['!ip']));
$this->addWhereIf('ipb_user = 0 AND ipb_range_end = ipb_range_start', isset($show['ip']));
$this->addWhereIf('ipb_expiry = ' . $db->addQuotes($db->getInfinity()), isset($show['!temp']));
$this->addWhereIf('ipb_expiry != ' . $db->addQuotes($db->getInfinity()), isset($show['temp']));
$this->addWhereIf('ipb_range_end = ipb_range_start', isset($show['!range']));
$this->addWhereIf('ipb_range_end > ipb_range_start', isset($show['range']));
}
if (!$this->getUser()->isAllowed('hideuser')) {
$this->addWhereFld('ipb_deleted', 0);
}
// Purge expired entries on one in every 10 queries
if (!mt_rand(0, 10)) {
Block::purgeExpired();
}
$res = $this->select(__METHOD__);
$count = 0;
foreach ($res as $row) {
if (++$count > $params['limit']) {
// We've had enough
$this->setContinueEnumParameter('continue', "{$row->ipb_timestamp}|{$row->ipb_id}");
break;
}
$block = array(ApiResult::META_TYPE => 'assoc');
if ($fld_id) {
$block['id'] = (int) $row->ipb_id;
}
if ($fld_user && !$row->ipb_auto) {
$block['user'] = $row->ipb_address;
}
if ($fld_userid && !$row->ipb_auto) {
$block['userid'] = (int) $row->ipb_user;
}
if ($fld_by) {
$block['by'] = $row->ipb_by_text;
}
if ($fld_byid) {
$block['byid'] = (int) $row->ipb_by;
}
if ($fld_timestamp) {
$block['timestamp'] = wfTimestamp(TS_ISO_8601, $row->ipb_timestamp);
}
if ($fld_expiry) {
$block['expiry'] = $wgContLang->formatExpiry($row->ipb_expiry, TS_ISO_8601);
}
if ($fld_reason) {
$block['reason'] = $row->ipb_reason;
}
if ($fld_range && !$row->ipb_auto) {
$block['rangestart'] = IP::formatHex($row->ipb_range_start);
$block['rangeend'] = IP::formatHex($row->ipb_range_end);
}
if ($fld_flags) {
// For clarity, these flags use the same names as their action=block counterparts
$block['automatic'] = (bool) $row->ipb_auto;
$block['anononly'] = (bool) $row->ipb_anon_only;
$block['nocreate'] = (bool) $row->ipb_create_account;
$block['autoblock'] = (bool) $row->ipb_enable_autoblock;
$block['noemail'] = (bool) $row->ipb_block_email;
$block['hidden'] = (bool) $row->ipb_deleted;
$block['allowusertalk'] = (bool) $row->ipb_allow_usertalk;
}
$fit = $result->addValue(array('query', $this->getModuleName()), null, $block);
if (!$fit) {
$this->setContinueEnumParameter('continue', "{$row->ipb_timestamp}|{$row->ipb_id}");
break;
}
}
$result->addIndexedTagName(array('query', $this->getModuleName()), 'block');
}
示例4: showList
function showList()
{
# Purge expired entries on one in every 10 queries
if (!mt_rand(0, 10)) {
Block::purgeExpired();
}
$conds = array();
# Is the user allowed to see hidden blocks?
if (!$this->getUser()->isAllowed('hideuser')) {
$conds['ipb_deleted'] = 0;
}
if ($this->target !== '') {
list($target, $type) = Block::parseTarget($this->target);
switch ($type) {
case Block::TYPE_ID:
case Block::TYPE_AUTO:
$conds['ipb_id'] = $target;
break;
case Block::TYPE_IP:
case Block::TYPE_RANGE:
list($start, $end) = IP::parseRange($target);
$dbr = wfGetDB(DB_SLAVE);
$conds[] = $dbr->makeList(array('ipb_address' => $target, Block::getRangeCond($start, $end)), LIST_OR);
$conds['ipb_auto'] = 0;
break;
case Block::TYPE_USER:
$conds['ipb_address'] = (string) $this->target;
$conds['ipb_auto'] = 0;
break;
}
}
# Apply filters
if (in_array('userblocks', $this->options)) {
$conds['ipb_user'] = 0;
}
if (in_array('tempblocks', $this->options)) {
$conds['ipb_expiry'] = 'infinity';
}
if (in_array('addressblocks', $this->options)) {
$conds[] = "ipb_user != 0 OR ipb_range_end > ipb_range_start";
}
if (in_array('rangeblocks', $this->options)) {
$conds[] = "ipb_range_end = ipb_range_start";
}
# Check for other blocks, i.e. global/tor blocks
$otherBlockLink = array();
wfRunHooks('OtherBlockLogLink', array(&$otherBlockLink, $this->target));
$out = $this->getOutput();
# Show additional header for the local block only when other blocks exists.
# Not necessary in a standard installation without such extensions enabled
if (count($otherBlockLink)) {
$out->addHTML(Html::element('h2', array(), $this->msg('ipblocklist-localblock')->text()) . "\n");
}
$pager = new BlockListPager($this, $conds);
if ($pager->getNumRows()) {
$out->addHTML($pager->getNavigationBar() . $pager->getBody() . $pager->getNavigationBar());
} elseif ($this->target) {
$out->addWikiMsg('ipblocklist-no-results');
} else {
$out->addWikiMsg('ipblocklist-empty');
}
if (count($otherBlockLink)) {
$out->addHTML(Html::rawElement('h2', array(), $this->msg('ipblocklist-otherblocks', count($otherBlockLink))->parse()) . "\n");
$list = '';
foreach ($otherBlockLink as $link) {
$list .= Html::rawElement('li', array(), $link) . "\n";
}
$out->addHTML(Html::rawElement('ul', array('class' => 'mw-ipblocklist-otherblocks'), $list) . "\n");
}
}
示例5: insert
/**
* Insert a block into the block table. Will fail if there is a conflicting
* block (same name and options) already in the database.
*
* @param IDatabase $dbw If you have one available
* @return bool|array False on failure, assoc array on success:
* ('id' => block ID, 'autoIds' => array of autoblock IDs)
*/
public function insert($dbw = null)
{
wfDebug("Block::insert; timestamp {$this->mTimestamp}\n");
if ($dbw === null) {
$dbw = wfGetDB(DB_MASTER);
}
# Periodic purge via commit hooks
if (mt_rand(0, 9) == 0) {
Block::purgeExpired();
}
$row = $this->getDatabaseArray();
$row['ipb_id'] = $dbw->nextSequenceValue("ipblocks_ipb_id_seq");
$dbw->insert('ipblocks', $row, __METHOD__, array('IGNORE'));
$affected = $dbw->affectedRows();
$this->mId = $dbw->insertId();
# Don't collide with expired blocks.
# Do this after trying to insert to avoid locking.
if (!$affected) {
# T96428: The ipb_address index uses a prefix on a field, so
# use a standard SELECT + DELETE to avoid annoying gap locks.
$ids = $dbw->selectFieldValues('ipblocks', 'ipb_id', array('ipb_address' => $row['ipb_address'], 'ipb_user' => $row['ipb_user'], 'ipb_expiry < ' . $dbw->addQuotes($dbw->timestamp())), __METHOD__);
if ($ids) {
$dbw->delete('ipblocks', array('ipb_id' => $ids), __METHOD__);
$dbw->insert('ipblocks', $row, __METHOD__, array('IGNORE'));
$affected = $dbw->affectedRows();
$this->mId = $dbw->insertId();
}
}
if ($affected) {
$auto_ipd_ids = $this->doRetroactiveAutoblock();
return array('id' => $this->mId, 'autoIds' => $auto_ipd_ids);
}
return false;
}
示例6: showList
function showList($msg)
{
global $wgOut;
$wgOut->setPagetitle(wfMsg("ipblocklist"));
if ("" != $msg) {
$wgOut->setSubtitle($msg);
}
// Purge expired entries on one in every 10 queries
if (!mt_rand(0, 10)) {
Block::purgeExpired();
}
$conds = array();
if ($this->ip == '') {
// No extra conditions
} elseif (substr($this->ip, 0, 1) == '#') {
$conds['ipb_id'] = substr($this->ip, 1);
} elseif (IP::toUnsigned($this->ip) !== false) {
$conds['ipb_address'] = $this->ip;
$conds['ipb_auto'] = 0;
} elseif (preg_match("/^(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})\\/(\\d{1,2})\$/", $this->ip, $matches)) {
$conds['ipb_address'] = Block::normaliseRange($this->ip);
$conds['ipb_auto'] = 0;
} else {
$user = User::newFromName($this->ip);
if ($user && ($id = $user->getID()) != 0) {
$conds['ipb_user'] = $id;
} else {
// Uh...?
$conds['ipb_address'] = $this->ip;
$conds['ipb_auto'] = 0;
}
}
$pager = new IPBlocklistPager($this, $conds);
$s = $pager->getNavigationBar() . $this->searchForm();
if ($pager->getNumRows()) {
$s .= "<ul>" . $pager->getBody() . "</ul>";
} else {
$s .= '<p>' . wfMsgHTML('ipblocklistempty') . '</p>';
}
$s .= $pager->getNavigationBar();
$wgOut->addHTML($s);
}
示例7: execute
public function execute()
{
global $wgUser;
$params = $this->extractRequestParams();
if (isset($params['users']) && isset($params['ip'])) {
$this->dieUsage('bkusers and bkip cannot be used together', 'usersandip');
}
$prop = array_flip($params['prop']);
$fld_id = isset($prop['id']);
$fld_user = isset($prop['user']);
$fld_by = isset($prop['by']);
$fld_timestamp = isset($prop['timestamp']);
$fld_expiry = isset($prop['expiry']);
$fld_reason = isset($prop['reason']);
$fld_range = isset($prop['range']);
$fld_flags = isset($prop['flags']);
$result = $this->getResult();
$pageSet = $this->getPageSet();
$titles = $pageSet->getTitles();
$data = array();
$this->addTables('ipblocks');
if ($fld_id) {
$this->addFields('ipb_id');
}
if ($fld_user) {
$this->addFields(array('ipb_address', 'ipb_user', 'ipb_auto'));
}
if ($fld_by) {
$this->addTables('user');
$this->addFields(array('ipb_by', 'user_name'));
$this->addWhere('user_id = ipb_by');
}
if ($fld_timestamp) {
$this->addFields('ipb_timestamp');
}
if ($fld_expiry) {
$this->addFields('ipb_expiry');
}
if ($fld_reason) {
$this->addFields('ipb_reason');
}
if ($fld_range) {
$this->addFields(array('ipb_range_start', 'ipb_range_end'));
}
if ($fld_flags) {
$this->addFields(array('ipb_auto', 'ipb_anon_only', 'ipb_create_account', 'ipb_enable_autoblock', 'ipb_block_email', 'ipb_deleted', 'ipb_allow_usertalk'));
}
$this->addOption('LIMIT', $params['limit'] + 1);
$this->addWhereRange('ipb_timestamp', $params['dir'], $params['start'], $params['end']);
if (isset($params['ids'])) {
$this->addWhereFld('ipb_id', $params['ids']);
}
if (isset($params['users'])) {
foreach ((array) $params['users'] as $u) {
$this->prepareUsername($u);
}
$this->addWhereFld('ipb_address', $this->usernames);
}
if (isset($params['ip'])) {
list($ip, $range) = IP::parseCIDR($params['ip']);
if ($ip && $range) {
# We got a CIDR range
if ($range < 16) {
$this->dieUsage('CIDR ranges broader than /16 are not accepted', 'cidrtoobroad');
}
$lower = wfBaseConvert($ip, 10, 16, 8, false);
$upper = wfBaseConvert($ip + pow(2, 32 - $range) - 1, 10, 16, 8, false);
} else {
$lower = $upper = IP::toHex($params['ip']);
}
$prefix = substr($lower, 0, 4);
$this->addWhere(array("ipb_range_start LIKE '{$prefix}%'", "ipb_range_start <= '{$lower}'", "ipb_range_end >= '{$upper}'"));
}
if (!$wgUser->isAllowed('suppress')) {
$this->addWhereFld('ipb_deleted', 0);
}
// Purge expired entries on one in every 10 queries
if (!mt_rand(0, 10)) {
Block::purgeExpired();
}
$res = $this->select(__METHOD__);
$count = 0;
while ($row = $res->fetchObject()) {
if (++$count > $params['limit']) {
// We've had enough
$this->setContinueEnumParameter('start', wfTimestamp(TS_ISO_8601, $row->ipb_timestamp));
break;
}
$block = array();
if ($fld_id) {
$block['id'] = $row->ipb_id;
}
if ($fld_user && !$row->ipb_auto) {
$block['user'] = $row->ipb_address;
}
if ($fld_by) {
$block['by'] = $row->user_name;
}
if ($fld_timestamp) {
$block['timestamp'] = wfTimestamp(TS_ISO_8601, $row->ipb_timestamp);
//.........这里部分代码省略.........
示例8: insert
/**
* Insert a block into the block table.
*@return Whether or not the insertion was successful.
*/
function insert()
{
wfDebug("Block::insert; timestamp {$this->mTimestamp}\n");
$dbw = wfGetDB(DB_MASTER);
# Unset ipb_anon_only for user blocks, makes no sense
if ($this->mUser) {
$this->mAnonOnly = 0;
}
# Unset ipb_enable_autoblock for IP blocks, makes no sense
if (!$this->mUser) {
$this->mEnableAutoblock = 0;
$this->mBlockEmail = 0;
//Same goes for email...
}
# Don't collide with expired blocks
Block::purgeExpired();
$ipb_id = $dbw->nextSequenceValue('ipblocks_ipb_id_val');
$dbw->insert('ipblocks', array('ipb_id' => $ipb_id, 'ipb_address' => $this->mAddress, 'ipb_user' => $this->mUser, 'ipb_by' => $this->mBy, 'ipb_reason' => $this->mReason, 'ipb_timestamp' => $dbw->timestamp($this->mTimestamp), 'ipb_auto' => $this->mAuto, 'ipb_anon_only' => $this->mAnonOnly, 'ipb_create_account' => $this->mCreateAccount, 'ipb_enable_autoblock' => $this->mEnableAutoblock, 'ipb_expiry' => self::encodeExpiry($this->mExpiry, $dbw), 'ipb_range_start' => $this->mRangeStart, 'ipb_range_end' => $this->mRangeEnd, 'ipb_deleted' => $this->mHideName, 'ipb_block_email' => $this->mBlockEmail), 'Block::insert', array('IGNORE'));
$affected = $dbw->affectedRows();
$dbw->commit();
if ($affected) {
$this->doRetroactiveAutoblock();
}
return $affected;
}
示例9: insert
/**
* Insert a block into the block table. Will fail if there is a conflicting
* block (same name and options) already in the database.
*
* @param IDatabase $dbw If you have one available
* @return bool|array False on failure, assoc array on success:
* ('id' => block ID, 'autoIds' => array of autoblock IDs)
*/
public function insert($dbw = null)
{
global $wgBlockDisablesLogin;
wfDebug("Block::insert; timestamp {$this->mTimestamp}\n");
if ($dbw === null) {
$dbw = wfGetDB(DB_MASTER);
}
# Periodic purge via commit hooks
if (mt_rand(0, 9) == 0) {
Block::purgeExpired();
}
$row = $this->getDatabaseArray();
$row['ipb_id'] = $dbw->nextSequenceValue("ipblocks_ipb_id_seq");
$dbw->insert('ipblocks', $row, __METHOD__, ['IGNORE']);
$affected = $dbw->affectedRows();
$this->mId = $dbw->insertId();
# Don't collide with expired blocks.
# Do this after trying to insert to avoid locking.
if (!$affected) {
# T96428: The ipb_address index uses a prefix on a field, so
# use a standard SELECT + DELETE to avoid annoying gap locks.
$ids = $dbw->selectFieldValues('ipblocks', 'ipb_id', ['ipb_address' => $row['ipb_address'], 'ipb_user' => $row['ipb_user'], 'ipb_expiry < ' . $dbw->addQuotes($dbw->timestamp())], __METHOD__);
if ($ids) {
$dbw->delete('ipblocks', ['ipb_id' => $ids], __METHOD__);
$dbw->insert('ipblocks', $row, __METHOD__, ['IGNORE']);
$affected = $dbw->affectedRows();
$this->mId = $dbw->insertId();
}
}
if ($affected) {
$auto_ipd_ids = $this->doRetroactiveAutoblock();
if ($wgBlockDisablesLogin && $this->target instanceof User) {
// Change user login token to force them to be logged out.
$this->target->setToken();
$this->target->saveSettings();
}
return ['id' => $this->mId, 'autoIds' => $auto_ipd_ids];
}
return false;
}
示例10: run
private function run()
{
global $wgUser;
$params = $this->extractRequestParams();
$prop = array_flip($params['prop']);
$fld_id = isset($prop['id']);
$fld_user = isset($prop['user']);
$fld_by = isset($prop['by']);
$fld_timestamp = isset($prop['timestamp']);
$fld_expiry = isset($prop['expiry']);
$fld_reason = isset($prop['reason']);
$fld_range = isset($prop['range']);
$fld_flags = isset($prop['flags']);
$result = $this->getResult();
$pageSet = $this->getPageSet();
$titles = $pageSet->getTitles();
$data = array();
$this->addTables('ipblocks');
if ($fld_id) {
$this->addFields('ipb_id');
}
if ($fld_user) {
$this->addFields(array('ipb_address', 'ipb_user'));
}
if ($fld_by) {
$this->addTables('user');
$this->addFields(array('ipb_by', 'user_name'));
$this->addWhere('user_id = ipb_by');
}
if ($fld_timestamp) {
$this->addFields('ipb_timestamp');
}
if ($fld_expiry) {
$this->addFields('ipb_expiry');
}
if ($fld_reason) {
$this->addFields('ipb_reason');
}
if ($fld_range) {
$this->addFields(array('ipb_range_start', 'ipb_range_end'));
}
if ($fld_flags) {
$this->addFields(array('ipb_auto', 'ipb_anon_only', 'ipb_create_account', 'ipb_enable_autoblock', 'ipb_block_email', 'ipb_deleted'));
}
$this->addOption('LIMIT', $params['limit'] + 1);
$this->addWhereRange('ipb_timestamp', $params['dir'], $params['start'], $params['end']);
if (isset($params['ids'])) {
$this->addWhere(array('ipb_id' => $params['ids']));
}
if (isset($params['users'])) {
$this->addWhere(array('ipb_address' => $params['users']));
}
if (!$wgUser->isAllowed('oversight')) {
$this->addWhere(array('ipb_deleted' => 0));
}
// Purge expired entries on one in every 10 queries
if (!mt_rand(0, 10)) {
Block::purgeExpired();
}
$res = $this->select(__METHOD__);
$db = wfGetDB();
$count = 0;
while ($row = $db->fetchObject($res)) {
if ($count++ == $params['limit']) {
// We've had enough
$this->setContinueEnumParameter('start', wfTimestamp(TS_ISO_8601, $row->ipb_timestamp));
break;
}
$block = array();
if ($fld_id) {
$block['id'] = $row->ipb_id;
}
if ($fld_user && !$row->ipb_auto) {
$block['user'] = $row->ipb_address;
}
if ($fld_by) {
$block['by'] = $row->user_name;
}
if ($fld_timestamp) {
$block['timestamp'] = wfTimestamp(TS_ISO_8601, $row->ipb_timestamp);
}
if ($fld_expiry) {
$block['expiry'] = Block::decodeExpiry($row->ipb_expiry, TS_ISO_8601);
}
if ($fld_reason) {
$block['reason'] = $row->ipb_reason;
}
if ($fld_range) {
$block['rangestart'] = $this->convertHexIP($row->ipb_range_start);
$block['rangeend'] = $this->convertHexIP($row->ipb_range_end);
}
if ($fld_flags) {
// For clarity, these flags use the same names as their action=block counterparts
if ($row->ipb_auto) {
$block['automatic'] = '';
}
if ($row->ipb_anon_only) {
$block['anononly'] = '';
}
if ($row->ipb_create_account) {
//.........这里部分代码省略.........
示例11: showList
function showList($msg)
{
global $wgOut, $wgUser;
$wgOut->setPagetitle(wfMsg("ipblocklist"));
if ("" != $msg) {
$wgOut->setSubtitle($msg);
}
// Purge expired entries on one in every 10 queries
if (!mt_rand(0, 10)) {
Block::purgeExpired();
}
$conds = array();
$matches = array();
// Is user allowed to see all the blocks?
if (!$wgUser->isAllowed('oversight')) {
$conds['ipb_deleted'] = 0;
}
if ($this->ip == '') {
// No extra conditions
} elseif (substr($this->ip, 0, 1) == '#') {
$conds['ipb_id'] = substr($this->ip, 1);
} elseif (IP::toUnsigned($this->ip) !== false) {
$conds['ipb_address'] = $this->ip;
$conds['ipb_auto'] = 0;
} elseif (preg_match('/^(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})\\/(\\d{1,2})$/', $this->ip, $matches)) {
$conds['ipb_address'] = Block::normaliseRange($this->ip);
$conds['ipb_auto'] = 0;
} else {
$user = User::newFromName($this->ip);
if ($user && ($id = $user->getID()) != 0) {
$conds['ipb_user'] = $id;
} else {
// Uh...?
$conds['ipb_address'] = $this->ip;
$conds['ipb_auto'] = 0;
}
}
$pager = new IPBlocklistPager($this, $conds);
if ($pager->getNumRows()) {
$wgOut->addHTML($this->searchForm() . $pager->getNavigationBar() . Xml::tags('ul', null, $pager->getBody()) . $pager->getNavigationBar());
} elseif ($this->ip != '') {
$wgOut->addHTML($this->searchForm());
$wgOut->addWikiText(wfMsg('ipblocklist-no-results'));
} else {
$wgOut->addWikiText(wfMsg('ipblocklist-empty'));
}
}
示例12: insert
function insert()
{
wfDebug("Block::insert; timestamp {$this->mTimestamp}\n");
$dbw =& wfGetDB(DB_MASTER);
$dbw->begin();
# Unset ipb_anon_only for user blocks, makes no sense
if ($this->mUser) {
$this->mAnonOnly = 0;
}
# Don't collide with expired blocks
Block::purgeExpired();
$ipb_id = $dbw->nextSequenceValue('ipblocks_ipb_id_val');
$dbw->insert('ipblocks', array('ipb_id' => $ipb_id, 'ipb_address' => $this->mAddress, 'ipb_user' => $this->mUser, 'ipb_by' => $this->mBy, 'ipb_reason' => $this->mReason, 'ipb_timestamp' => $dbw->timestamp($this->mTimestamp), 'ipb_auto' => $this->mAuto, 'ipb_anon_only' => $this->mAnonOnly, 'ipb_create_account' => $this->mCreateAccount, 'ipb_expiry' => self::encodeExpiry($this->mExpiry, $dbw), 'ipb_range_start' => $this->mRangeStart, 'ipb_range_end' => $this->mRangeEnd), 'Block::insert', array('IGNORE'));
$affected = $dbw->affectedRows();
$dbw->commit();
return $affected;
}
示例13: insert
/**
* Insert a block into the block table. Will fail if there is a conflicting
* block (same name and options) already in the database.
*
* @return Boolean: whether or not the insertion was successful.
*/
public function insert()
{
wfDebug("Block::insert; timestamp {$this->mTimestamp}\n");
$dbw = wfGetDB(DB_MASTER);
$this->validateBlockParams();
$this->initialiseRange();
# Don't collide with expired blocks
Block::purgeExpired();
$ipb_id = $dbw->nextSequenceValue('ipblocks_ipb_id_val');
$dbw->insert('ipblocks', array('ipb_id' => $ipb_id, 'ipb_address' => $this->mAddress, 'ipb_user' => $this->mUser, 'ipb_by' => $this->mBy, 'ipb_by_text' => $this->mByName, 'ipb_reason' => $this->mReason, 'ipb_timestamp' => $dbw->timestamp($this->mTimestamp), 'ipb_auto' => $this->mAuto, 'ipb_anon_only' => $this->mAnonOnly, 'ipb_create_account' => $this->mCreateAccount, 'ipb_enable_autoblock' => $this->mEnableAutoblock, 'ipb_expiry' => self::encodeExpiry($this->mExpiry, $dbw), 'ipb_range_start' => $this->mRangeStart, 'ipb_range_end' => $this->mRangeEnd, 'ipb_deleted' => $this->mHideName, 'ipb_block_email' => $this->mBlockEmail, 'ipb_allow_usertalk' => $this->mAllowUsertalk), 'Block::insert', array('IGNORE'));
$affected = $dbw->affectedRows();
if ($affected) {
$this->doRetroactiveAutoblock();
}
return (bool) $affected;
}
示例14: showList
function showList($msg)
{
global $wgOut, $wgUser;
$wgOut->setPagetitle(wfMsg("ipblocklist"));
if ("" != $msg) {
$wgOut->setSubtitle($msg);
}
// Purge expired entries on one in every 10 queries
if (!mt_rand(0, 10)) {
Block::purgeExpired();
}
$conds = array();
$matches = array();
// Is user allowed to see all the blocks?
if (!$wgUser->isAllowed('suppress')) {
$conds['ipb_deleted'] = 0;
}
if ($this->ip == '') {
// No extra conditions
} elseif (substr($this->ip, 0, 1) == '#') {
$conds['ipb_id'] = substr($this->ip, 1);
// Single IPs
} elseif (IP::isIPAddress($this->ip) && strpos($this->ip, '/') === false) {
if ($iaddr = IP::toHex($this->ip)) {
# Only scan ranges which start in this /16, this improves search speed
# Blocks should not cross a /16 boundary.
$range = substr($iaddr, 0, 4);
// Fixme -- encapsulate this sort of query-building.
$dbr = wfGetDB(DB_SLAVE);
$encIp = $dbr->addQuotes(IP::sanitizeIP($this->ip));
$encRange = $dbr->addQuotes("{$range}%");
$encAddr = $dbr->addQuotes($iaddr);
$conds[] = "(ipb_address = {$encIp}) OR \n\t\t\t\t\t(ipb_range_start LIKE {$encRange} AND\n\t\t\t\t\tipb_range_start <= {$encAddr}\n\t\t\t\t\tAND ipb_range_end >= {$encAddr})";
} else {
$conds['ipb_address'] = IP::sanitizeIP($this->ip);
}
$conds['ipb_auto'] = 0;
// IP range
} elseif (IP::isIPAddress($this->ip)) {
$conds['ipb_address'] = Block::normaliseRange($this->ip);
$conds['ipb_auto'] = 0;
} else {
$user = User::newFromName($this->ip);
if ($user && ($id = $user->getId()) != 0) {
$conds['ipb_user'] = $id;
} else {
// Uh...?
$conds['ipb_address'] = $this->ip;
$conds['ipb_auto'] = 0;
}
}
// Apply filters
if ($this->hideuserblocks) {
$conds['ipb_user'] = 0;
}
if ($this->hidetempblocks) {
$conds['ipb_expiry'] = 'infinity';
}
if ($this->hideaddressblocks) {
$conds[] = "ipb_user != 0 OR ipb_range_end > ipb_range_start";
}
$pager = new IPBlocklistPager($this, $conds);
if ($pager->getNumRows()) {
$wgOut->addHTML($this->searchForm() . $pager->getNavigationBar() . Xml::tags('ul', null, $pager->getBody()) . $pager->getNavigationBar());
} elseif ($this->ip != '') {
$wgOut->addHTML($this->searchForm());
$wgOut->addWikiMsg('ipblocklist-no-results');
} else {
$wgOut->addHTML($this->searchForm());
$wgOut->addWikiMsg('ipblocklist-empty');
}
}
示例15: insert
/**
* Insert a block into the block table. Will fail if there is a conflicting
* block (same name and options) already in the database.
*
* @param $dbw DatabaseBase if you have one available
* @return mixed: false on failure, assoc array on success:
* ('id' => block ID, 'autoIds' => array of autoblock IDs)
*/
public function insert($dbw = null)
{
global $wgBlockDisablesLogin;
wfDebug("Block::insert; timestamp {$this->mTimestamp}\n");
if ($dbw === null) {
$dbw = wfGetDB(DB_MASTER);
}
# Don't collide with expired blocks
Block::purgeExpired();
$row = $this->getDatabaseArray();
$row['ipb_id'] = $dbw->nextSequenceValue("ipblocks_ipb_id_seq");
$dbw->insert('ipblocks', $row, __METHOD__, array('IGNORE'));
$affected = $dbw->affectedRows();
$this->mId = $dbw->insertId();
if ($affected) {
if ($wgBlockDisablesLogin && $this->target instanceof User) {
// Change user login token to force them to be logged out.
$this->target->setToken();
$this->target->saveSettings();
}
$auto_ipd_ids = $this->doRetroactiveAutoblock();
return array('id' => $this->mId, 'autoIds' => $auto_ipd_ids);
}
return false;
}