- /*static*/ function enumBlocks( $callback, $tag, $flags = 0 )
- {
- global $wgAntiLockFlags;
-
- $block = new Block();
- if ( $flags & Block::EB_FOR_UPDATE ) {
- $db =& wfGetDB( DB_MASTER );
- if ( $wgAntiLockFlags & ALF_NO_BLOCK_LOCK ) {
- $options = '';
- } else {
- $options = 'FOR UPDATE';
- }
- $block->forUpdate( true );
- } else {
- $db =& wfGetDB( DB_SLAVE );
- $options = '';
- }
- if ( $flags & Block::EB_RANGE_ONLY ) {
- $cond = " AND ipb_range_start <> ''";
- } else {
- $cond = '';
- }
-
- $now = wfTimestampNow();
-
- list( $ipblocks, $user ) = $db->tableNamesN( 'ipblocks', 'user' );
-
- $sql = "SELECT $ipblocks.*,user_name FROM $ipblocks,$user " .
- "WHERE user_id=ipb_by $cond ORDER BY ipb_timestamp DESC $options";
- $res = $db->query( $sql, 'Block::enumBlocks' );
- $num_rows = $db->numRows( $res );
-
- while ( $row = $db->fetchObject( $res ) ) {
- $block->initFromRow( $row );
- if ( ( $flags & Block::EB_RANGE_ONLY ) && $block->mRangeStart == '' ) {
- continue;
- }
-
- if ( !( $flags & Block::EB_KEEP_EXPIRED ) ) {
- if ( $block->mExpiry && $now > $block->mExpiry ) {
- $block->delete();
- } else {
- call_user_func( $callback, $block, $tag );
- }
- } else {
- call_user_func( $callback, $block, $tag );
- }
- }
- $db->freeResult( $res );
- return $num_rows;
- }
-
- function delete()
- {
- if (wfReadOnly()) {