From 534476c2820674bf5ad86d5fa2d9307828c912b6 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Sat, 27 Aug 2005 23:51:29 +0000 Subject: [PATCH] * (bug 3284) Ipblocklist paging, substring search --- RELEASE-NOTES | 1 + includes/Block.php | 4 +- includes/SpecialIpblocklist.php | 141 +++++++++++++++++++++++--------- 3 files changed, 107 insertions(+), 39 deletions(-) diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 9634f30391..35ab4398be 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -65,6 +65,7 @@ fully support the editing toolbar, but was found to be too confusing. * Finally dropped MySQL 3.23.x support * Experimental feature to allow translation of block expiry times Implementation only for Finnish currently +* (bug 3284) Ipblocklist paging, substring search === Caveats === diff --git a/includes/Block.php b/includes/Block.php index f8f01864fb..da44e60b9a 100644 --- a/includes/Block.php +++ b/includes/Block.php @@ -219,10 +219,10 @@ class Block if ( !( $flags & EB_KEEP_EXPIRED ) ) { if ( !$block->deleteIfExpired() ) { - $callback( $block, $tag ); + call_user_func( $callback, $block, $tag ); } } else { - $callback( $block, $tag ); + call_user_func( $callback, $block, $tag ); } } wfFreeResult( $res ); diff --git a/includes/SpecialIpblocklist.php b/includes/SpecialIpblocklist.php index 5bcb9ccb96..f8b78d7c8a 100644 --- a/includes/SpecialIpblocklist.php +++ b/includes/SpecialIpblocklist.php @@ -126,51 +126,118 @@ class IPUnblockForm { if ( "" != $msg ) { $wgOut->setSubtitle( $msg ); } + global $wgRequest; + list( $this->limit, $this->offset ) = $wgRequest->getLimitOffset(); + $this->counter = 0; + + $paging = '

' . wfViewPrevNext( $this->offset, $this->limit, + Title::makeTitle( NS_SPECIAL, 'Ipblocklist' ), + 'ip=' . urlencode( $this->ip ) ) . "

\n"; + $wgOut->addHTML( $paging ); + + $search = $this->searchForm(); + $wgOut->addHTML( $search ); + $wgOut->addHTML( "\n" ); + $wgOut->addHTML( $paging ); } -} - -/** - * Callback function to output a block - */ -function wfAddRow( $block, $tag ) { - global $wgOut, $wgUser, $wgLang, $wgContLang; - - $sk = $wgUser->getSkin(); - - # Hide addresses blocked by User::spreadBlocks, for privacy - $addr = $block->mAuto ? "#{$block->mId}" : $block->mAddress; - - $name = $block->getByName(); - $ulink = $sk->makeKnownLinkObj( Title::makeTitle( NS_USER, $name ), $name ); - $formattedTime = $wgLang->timeanddate( $block->mTimestamp, true ); - if ( $block->mExpiry === "" ) { - $formattedExpiry = wfMsgHtml('infiniteblock'); - } else { - $formattedExpiry = wfMsgHtml('expiringblock', $wgLang->timeanddate( $block->mExpiry, true ) ); + function searchForm() { + global $wgTitle; + return + wfElement( 'form', array( + 'action' => $wgTitle->getLocalUrl() ), + null ) . + wfElement( 'input', array( + 'type' => 'hidden', + 'name' => 'action', + 'value' => 'search' ) ). + wfElement( 'input', array( + 'type' => 'hidden', + 'name' => 'limit', + 'value' => $this->limit ) ). + wfElement( 'input', array( + 'name' => 'ip', + 'value' => $this->ip ) ) . + wfElement( 'input', array( + 'type' => 'submit', + 'value' => wfMsg( 'search' ) ) ) . + ''; } + + /** + * Callback function to output a block + */ + function addRow( $block, $tag ) { + global $wgOut, $wgUser, $wgLang, $wgContLang; + + if( $this->ip != '' ) { + if( stristr( $block->mAddress, $this->ip ) == false ) { + return; + } + } + + // Loading blocks is fast; displaying them is slow. + // Quick hack for paging. + $this->counter++; + if( $this->counter <= $this->offset ) { + return; + } + if( $this->counter - $this->offset > $this->limit ) { + return; + } + + $fname = 'IPUnblockForm-addRow'; + wfProfileIn( $fname ); + + static $sk=null, $msg=null; + + if( is_null( $sk ) ) + $sk = $wgUser->getSkin(); + if( is_null( $msg ) ) { + $msg = array(); + foreach( array( 'infiniteblock', 'expiringblock', 'contribslink', 'unblocklink' ) as $key ) { + $msg[$key] = wfMsgHtml( $key ); + } + $msg['blocklistline'] = wfMsg( 'blocklistline' ); + } - $line = wfMsg( "blocklistline", $formattedTime, $ulink, $addr, $formattedExpiry ); + # Hide addresses blocked by User::spreadBlocks, for privacy + $addr = $block->mAuto ? "#{$block->mId}" : $block->mAddress; - $wgOut->addHTML( "
  • {$line}" ); - - if ( !$block->mAuto ) { - $titleObj = Title::makeTitle( NS_SPECIAL, "Contributions" ); - $wgOut->addHTML( ' (' . $sk->makeKnownLinkObj($titleObj, wfMsgHtml( 'contribslink' ), "target={$block->mAddress}") . ')' ); - } - - if ( $wgUser->isAllowed('block') ) { - $titleObj = Title::makeTitle( NS_SPECIAL, "Ipblocklist" ); - $wgOut->addHTML( ' (' . $sk->makeKnownLinkObj($titleObj, wfMsgHtml( 'unblocklink' ), 'action=unblock&ip=' . urlencode( $addr ) ) . ')' ); + $name = $block->getByName(); + $ulink = $sk->makeKnownLinkObj( Title::makeTitle( NS_USER, $name ), $name ); + $formattedTime = $wgLang->timeanddate( $block->mTimestamp, true ); + + if ( $block->mExpiry === "" ) { + $formattedExpiry = $msg['infiniteblock']; + } else { + $formattedExpiry = wfMsgReplaceArgs( $msg['expiringblock'], + array( $wgLang->timeanddate( $block->mExpiry, true ) ) ); + } + + $line = wfMsgReplaceArgs( $msg['blocklistline'], array( $formattedTime, $ulink, $addr, $formattedExpiry ) ); + + $wgOut->addHTML( "
  • {$line}" ); + + if ( !$block->mAuto ) { + $titleObj = Title::makeTitle( NS_SPECIAL, "Contributions" ); + $wgOut->addHTML( ' (' . $sk->makeKnownLinkObj($titleObj, $msg['contribslink'], "target={$block->mAddress}") . ')' ); + } + + if ( $wgUser->isAllowed('block') ) { + $titleObj = Title::makeTitle( NS_SPECIAL, "Ipblocklist" ); + $wgOut->addHTML( ' (' . $sk->makeKnownLinkObj($titleObj, $msg['unblocklink'], 'action=unblock&ip=' . urlencode( $addr ) ) . ')' ); + } + $wgOut->addHTML( $sk->commentBlock( $block->mReason ) ); + $wgOut->addHTML( "
  • \n" ); + wfProfileOut( $fname ); } - $wgOut->addHTML( $sk->commentBlock( $block->mReason ) ); - $wgOut->addHTML( "\n" ); } - ?> -- 2.20.1