http://www.mediawiki.org/wiki/Special:Code/MediaWiki/100506
Revision: 100506 Author: johnduhart Date: 2011-10-22 17:44:14 +0000 (Sat, 22 Oct 2011) Log Message: ----------- Moved CheckUser log stuff into a separate special page Modified Paths: -------------- trunk/extensions/CheckUser/CheckUser.alias.php trunk/extensions/CheckUser/CheckUser.i18n.php trunk/extensions/CheckUser/CheckUser.php trunk/extensions/CheckUser/CheckUser_body.php Added Paths: ----------- trunk/extensions/CheckUser/CheckUserLogPager.php trunk/extensions/CheckUser/SpecialCheckUserLog.php Modified: trunk/extensions/CheckUser/CheckUser.alias.php =================================================================== --- trunk/extensions/CheckUser/CheckUser.alias.php 2011-10-22 17:35:20 UTC (rev 100505) +++ trunk/extensions/CheckUser/CheckUser.alias.php 2011-10-22 17:44:14 UTC (rev 100506) @@ -11,6 +11,7 @@ /** English (English) */ $specialPageAliases['en'] = array( 'CheckUser' => array( 'CheckUser' ), + 'CheckUserLog' => array( 'CheckUserLog' ), ); /** Arabic (العربية) */ Modified: trunk/extensions/CheckUser/CheckUser.i18n.php =================================================================== --- trunk/extensions/CheckUser/CheckUser.i18n.php 2011-10-22 17:35:20 UTC (rev 100505) +++ trunk/extensions/CheckUser/CheckUser.i18n.php 2011-10-22 17:44:14 UTC (rev 100506) @@ -20,6 +20,7 @@ 'checkuser-desc' => 'Grants users with the appropriate permission the ability to check user\'s IP addresses and other information', 'checkuser-logcase' => 'The log search is case sensitive.', 'checkuser' => 'Check user', + 'checkuserlog' => 'Check user log', 'checkuser-contribs' => 'check user IP addresses', 'group-checkuser' => 'Check users', 'group-checkuser-member' => '{{GENDER:$1|check user}}', @@ -29,7 +30,6 @@ 'checkuser-reason' => 'Reason:', 'checkuser-reason-api' => 'API: $1', 'checkuser-showlog' => 'Show log', - 'checkuser-log' => 'CheckUser log', 'checkuser-query' => 'Query recent changes', 'checkuser-target' => 'IP address or username:', 'checkuser-users' => 'Get users', @@ -124,6 +124,7 @@ 'checkuser' => 'Check user extension. The name of the special page where checkusers can check the IP addresses of users. The message is used in the list of special pages, and at the top of [[Special:Checkuser]]. {{Identical|Check user}}', + 'checkuserlog' => 'The name of the special page where checkusers can look at a log of past checkuser actions. The message is used in the list of special pages, and at the top of [[Special:CheckUserLog]].', 'group-checkuser' => '{{doc-group|checkuser}} check is a noun, not a verb here Modified: trunk/extensions/CheckUser/CheckUser.php =================================================================== --- trunk/extensions/CheckUser/CheckUser.php 2011-10-22 17:35:20 UTC (rev 100505) +++ trunk/extensions/CheckUser/CheckUser.php 2011-10-22 17:44:14 UTC (rev 100506) @@ -81,9 +81,13 @@ // Set up the new special page $wgSpecialPages['CheckUser'] = 'CheckUser'; $wgSpecialPageGroups['CheckUser'] = 'users'; +$wgSpecialPages['CheckUserLog'] = 'SpecialCheckUserLog'; +$wgSpecialPageGroups['CheckUserLog'] = 'changes'; $wgAutoloadClasses['CheckUser'] = $dir . '/CheckUser_body.php'; $wgAutoloadClasses['CheckUserHooks'] = $dir . '/CheckUser.hooks.php'; +$wgAutoloadClasses['CheckUserLogPager'] = $dir . '/CheckUserLogPager.php'; +$wgAutoloadClasses['SpecialCheckUserLog'] = $dir . '/SpecialCheckUserLog.php'; // API modules $wgAutoloadClasses['ApiQueryCheckUser'] = "$dir/api/ApiQueryCheckUser.php"; Added: trunk/extensions/CheckUser/CheckUserLogPager.php =================================================================== --- trunk/extensions/CheckUser/CheckUserLogPager.php (rev 0) +++ trunk/extensions/CheckUser/CheckUserLogPager.php 2011-10-22 17:44:14 UTC (rev 100506) @@ -0,0 +1,89 @@ +<?php + +class CheckUserLogPager extends ReverseChronologicalPager { + var $searchConds, $specialPage, $y, $m; + + function __construct( $specialPage, $searchConds, $y, $m ) { + parent::__construct(); + /* + $this->messages = array_map( 'wfMsg', + array( 'comma-separator', 'checkuser-log-userips', 'checkuser-log-ipedits', 'checkuser-log-ipusers', + 'checkuser-log-ipedits-xff', 'checkuser-log-ipusers-xff' ) );*/ + + $this->getDateCond( $y, $m ); + $this->searchConds = $searchConds ? $searchConds : array(); + $this->specialPage = $specialPage; + } + + function formatRow( $row ) { + global $wgLang; + + $skin = $this->getSkin(); + + if ( $row->cul_reason === '' ) { + $comment = ''; + } else { + $comment = $skin->commentBlock( $row->cul_reason ); + } + + $user = $skin->userLink( $row->cul_user, $row->user_name ); + + if ( $row->cul_type == 'userips' || $row->cul_type == 'useredits' ) { + $target = $skin->userLink( $row->cul_target_id, $row->cul_target_text ) . + $skin->userToolLinks( $row->cul_target_id, $row->cul_target_text ); + } else { + $target = $row->cul_target_text; + } + + return '<li>' . + $wgLang->timeanddate( wfTimestamp( TS_MW, $row->cul_timestamp ), true ) . + wfMsg( 'comma-separator' ) . + wfMsg( + 'checkuser-log-' . $row->cul_type, + $user, + $target + ) . + $comment . + '</li>'; + } + + function getStartBody() { + if ( $this->getNumRows() ) { + return '<ul>'; + } else { + return ''; + } + } + + function getEndBody() { + if ( $this->getNumRows() ) { + return '</ul>'; + } else { + return ''; + } + } + + function getEmptyBody() { + return '<p>' . wfMsgHtml( 'checkuser-empty' ) . '</p>'; + } + + function getQueryInfo() { + $this->searchConds[] = 'user_id = cul_user'; + return array( + 'tables' => array( 'cu_log', 'user' ), + 'fields' => $this->selectFields(), + 'conds' => $this->searchConds + ); + } + + function getIndexField() { + return 'cul_timestamp'; + } + + function selectFields() { + return array( + 'cul_id', 'cul_timestamp', 'cul_user', 'cul_reason', 'cul_type', + 'cul_target_id', 'cul_target_text', 'user_name' + ); + } +} Modified: trunk/extensions/CheckUser/CheckUser_body.php =================================================================== --- trunk/extensions/CheckUser/CheckUser_body.php 2011-10-22 17:35:20 UTC (rev 100505) +++ trunk/extensions/CheckUser/CheckUser_body.php 2011-10-22 17:44:14 UTC (rev 100506) @@ -11,11 +11,7 @@ */ public function __construct() { global $wgUser; - if ( $wgUser->isAllowed( 'checkuser' ) || !$wgUser->isAllowed( 'checkuser-log' ) ) { - parent::__construct( 'CheckUser', 'checkuser' ); - } else { - parent::__construct( 'CheckUser', 'checkuser-log' ); - } + parent::__construct( 'CheckUser', 'checkuser' ); $this->sk = $wgUser->getSkin(); } @@ -25,37 +21,6 @@ $this->setHeaders(); - // This is horribly shitty. - // Lacking formal aliases, it's tough to ensure we have compatibility. - // Links may break, which sucks. - // Language fallbacks will not always be properly utilized. - $logMatches = array( - wfMsgForContent( 'checkuser-log-subpage' ), - 'Log' - ); - - foreach ( $logMatches as $log ) { - if ( str_replace( '_', ' ', $wgContLang->lc( $subpage ) ) - == str_replace( '_ ', ' ', $wgContLang->lc( $log ) ) ) { - if ( !$wgUser->isAllowed( 'checkuser-log' ) ) { - $wgOut->permissionRequired( 'checkuser-log' ); - return; - } - - $this->showLog(); - return; - } - } - - if ( !$wgUser->isAllowed( 'checkuser' ) ) { - if ( $wgUser->isAllowed( 'checkuser-log' ) ) { - $this->showGuide(); - } else { - $wgOut->permissionRequired( 'checkuser' ); - } - return; - } - $user = $wgRequest->getText( 'user' ) ? $wgRequest->getText( 'user' ) : $wgRequest->getText( 'ip' ); $user = trim( $user ); @@ -130,17 +95,17 @@ /** * @return Title */ - public function getLogSubpageTitle() { + public function getLogTitle() { if ( !isset( $this->logSubpageTitle ) ) { - $this->logSubpageTitle = $this->getTitle( wfMsgForContent( 'checkuser-log-subpage' ) ); + $this->logTitle = Title::makeTitle( NS_SPECIAL, 'CheckUserLog' ); } - return $this->logSubpageTitle; + return $this->logTitle; } protected function showGuide() { global $wgOut; $wgOut->addWikiText( wfMsg( 'checkuser-summary' ) . - "\n\n[[" . $this->getLogSubpageTitle()->getPrefixedText() . + "\n\n[[" . $this->getLogTitle()->getPrefixedText() . '|' . wfMsg( 'checkuser-showlog' ) . ']]' ); } @@ -1325,133 +1290,6 @@ return "cuc_timestamp > $cutoff"; } - protected function showLog() { - global $wgRequest, $wgOut; - $type = $wgRequest->getVal( 'cuSearchType' ); - $target = $wgRequest->getVal( 'cuSearch' ); - $year = $wgRequest->getIntOrNull( 'year' ); - $month = $wgRequest->getIntOrNull( 'month' ); - $error = false; - $dbr = wfGetDB( DB_SLAVE ); - $searchConds = false; - - $wgOut->setPageTitle( wfMsg( 'checkuser-log' ) ); - - $wgOut->addHTML( $this->sk->makeKnownLinkObj( $this->getTitle(), wfMsgHtml( 'checkuser-log-return' ) ) ); - - if ( $type === null ) { - $type = 'target'; - } elseif ( $type == 'initiator' ) { - $user = User::newFromName( $target ); - if ( !$user || !$user->getID() ) { - $error = 'checkuser-user-nonexistent'; - } else { - $searchConds = array( 'cul_user' => $user->getID() ); - } - } else /* target */ { - $type = 'target'; - // Is it an IP? - list( $start, $end ) = IP::parseRange( $target ); - if ( $start !== false ) { - if ( $start == $end ) { - $searchConds = array( 'cul_target_hex = ' . $dbr->addQuotes( $start ) . ' OR ' . - '(cul_range_end >= ' . $dbr->addQuotes( $start ) . ' AND ' . - 'cul_range_start <= ' . $dbr->addQuotes( $end ) . ')' - ); - } else { - $searchConds = array( - '(cul_target_hex >= ' . $dbr->addQuotes( $start ) . ' AND ' . - 'cul_target_hex <= ' . $dbr->addQuotes( $end ) . ') OR ' . - '(cul_range_end >= ' . $dbr->addQuotes( $start ) . ' AND ' . - 'cul_range_start <= ' . $dbr->addQuotes( $end ) . ')' - ); - } - } else { - // Is it a user? - $user = User::newFromName( $target ); - if ( $user && $user->getID() ) { - $searchConds = array( - 'cul_type' => array( 'userips', 'useredits' ), - 'cul_target_id' => $user->getID(), - ); - } elseif ( $target ) { - $error = 'checkuser-user-nonexistent'; - } - } - } - - $searchTypes = array( 'initiator', 'target' ); - $select = "<select name=\"cuSearchType\" style='margin-top:.2em;'>\n"; - foreach ( $searchTypes as $searchType ) { - if ( $type == $searchType ) { - $checked = 'selected="selected"'; - } else { - $checked = ''; - } - $caption = wfMsgHtml( 'checkuser-search-' . $searchType ); - $select .= "<option value=\"$searchType\" $checked>$caption</option>\n"; - } - $select .= '</select>'; - - $encTarget = htmlspecialchars( $target ); - $msgSearch = wfMsgHtml( 'checkuser-search' ); - $input = "<input type=\"text\" name=\"cuSearch\" value=\"$encTarget\" size=\"40\"/>"; - $msgSearchForm = wfMsgHtml( 'checkuser-search-form', $select, $input ); - $formAction = $this->getLogSubpageTitle()->escapeLocalURL(); - $msgSearchSubmit = '  ' . wfMsgHtml( 'checkuser-search-submit' ) . '  '; - - $s = "<form method='get' action=\"$formAction\">\n" . - "<fieldset><legend>$msgSearch</legend>\n" . - "<p>$msgSearchForm</p>\n" . - "<p>" . $this->getDateMenu( $year, $month ) . "   \n" . - "<input type=\"submit\" name=\"cuSearchSubmit\" value=\"$msgSearchSubmit\"/></p>\n" . - "</fieldset></form>\n"; - $wgOut->addHTML( $s ); - - if ( $error !== false ) { - $wgOut->wrapWikiMsg( '<div class="errorbox">$1</div>', $error ); - return; - } - - $pager = new CheckUserLogPager( $this, $searchConds, $year, $month ); - $wgOut->addHTML( - $pager->getNavigationBar() . - $pager->getBody() . - $pager->getNavigationBar() - ); - } - - /** - * @return string Formatted HTML - * @param int $year - * @param int $month - */ - protected function getDateMenu( $year, $month ) { - # Offset overrides year/month selection - if ( $month && $month !== - 1 ) { - $encMonth = intval( $month ); - } else { - $encMonth = ''; - } - if ( $year ) { - $encYear = intval( $year ); - } elseif ( $encMonth ) { - $thisMonth = intval( gmdate( 'n' ) ); - $thisYear = intval( gmdate( 'Y' ) ); - if ( intval( $encMonth ) > $thisMonth ) { - $thisYear--; - } - $encYear = $thisYear; - } else { - $encYear = ''; - } - return Xml::label( wfMsg( 'year' ), 'year' ) . ' ' . - Xml::input( 'year', 4, $encYear, array( 'id' => 'year', 'maxlength' => 4 ) ) . - ' ' . - Xml::label( wfMsg( 'month' ), 'month' ) . ' ' . - Xml::monthSelector( $encMonth, - 1 ); - } - public static function addLogEntry( $logType, $targetType, $target, $reason, $targetID = 0 ) { global $wgUser; @@ -1485,94 +1323,3 @@ } } -class CheckUserLogPager extends ReverseChronologicalPager { - var $searchConds, $specialPage, $y, $m; - - function __construct( $specialPage, $searchConds, $y, $m ) { - parent::__construct(); - /* - $this->messages = array_map( 'wfMsg', - array( 'comma-separator', 'checkuser-log-userips', 'checkuser-log-ipedits', 'checkuser-log-ipusers', - 'checkuser-log-ipedits-xff', 'checkuser-log-ipusers-xff' ) );*/ - - $this->getDateCond( $y, $m ); - $this->searchConds = $searchConds ? $searchConds : array(); - $this->specialPage = $specialPage; - } - - function formatRow( $row ) { - global $wgLang; - - $skin = $this->getSkin(); - - if ( $row->cul_reason === '' ) { - $comment = ''; - } else { - $comment = $skin->commentBlock( $row->cul_reason ); - } - - $user = $skin->userLink( $row->cul_user, $row->user_name ); - - if ( $row->cul_type == 'userips' || $row->cul_type == 'useredits' ) { - $target = $skin->userLink( $row->cul_target_id, $row->cul_target_text ) . - $skin->userToolLinks( $row->cul_target_id, $row->cul_target_text ); - } else { - $target = $row->cul_target_text; - } - - return '<li>' . - $wgLang->timeanddate( wfTimestamp( TS_MW, $row->cul_timestamp ), true ) . - wfMsg( 'comma-separator' ) . - wfMsg( - 'checkuser-log-' . $row->cul_type, - $user, - $target - ) . - $comment . - '</li>'; - } - - function getStartBody() { - if ( $this->getNumRows() ) { - return '<ul>'; - } else { - return ''; - } - } - - function getEndBody() { - if ( $this->getNumRows() ) { - return '</ul>'; - } else { - return ''; - } - } - - function getEmptyBody() { - return '<p>' . wfMsgHtml( 'checkuser-empty' ) . '</p>'; - } - - function getQueryInfo() { - $this->searchConds[] = 'user_id = cul_user'; - return array( - 'tables' => array( 'cu_log', 'user' ), - 'fields' => $this->selectFields(), - 'conds' => $this->searchConds - ); - } - - function getIndexField() { - return 'cul_timestamp'; - } - - function getTitle() { - return $this->specialPage->getLogSubpageTitle(); - } - - function selectFields() { - return array( - 'cul_id', 'cul_timestamp', 'cul_user', 'cul_reason', 'cul_type', - 'cul_target_id', 'cul_target_text', 'user_name' - ); - } -} Added: trunk/extensions/CheckUser/SpecialCheckUserLog.php =================================================================== --- trunk/extensions/CheckUser/SpecialCheckUserLog.php (rev 0) +++ trunk/extensions/CheckUser/SpecialCheckUserLog.php 2011-10-22 17:44:14 UTC (rev 100506) @@ -0,0 +1,133 @@ +<?php + +class SpecialCheckUserLog extends SpecialPage { + public function __construct() { + parent::__construct( 'CheckUserLog', 'checkuser-log' ); + } + + function execute( $par ) { + $out = $this->getOutput(); + $request = $this->getRequest(); + $this->setHeaders(); + + $type = $request->getVal( 'cuSearchType' ); + $target = $request->getVal( 'cuSearch' ); + $year = $request->getIntOrNull( 'year' ); + $month = $request->getIntOrNull( 'month' ); + $error = false; + $dbr = wfGetDB( DB_SLAVE ); + $searchConds = false; + + if ( $type === null ) { + $type = 'target'; + } elseif ( $type == 'initiator' ) { + $user = User::newFromName( $target ); + if ( !$user || !$user->getID() ) { + $error = 'checkuser-user-nonexistent'; + } else { + $searchConds = array( 'cul_user' => $user->getID() ); + } + } else /* target */ { + $type = 'target'; + // Is it an IP? + list( $start, $end ) = IP::parseRange( $target ); + if ( $start !== false ) { + if ( $start == $end ) { + $searchConds = array( 'cul_target_hex = ' . $dbr->addQuotes( $start ) . ' OR ' . + '(cul_range_end >= ' . $dbr->addQuotes( $start ) . ' AND ' . + 'cul_range_start <= ' . $dbr->addQuotes( $end ) . ')' + ); + } else { + $searchConds = array( + '(cul_target_hex >= ' . $dbr->addQuotes( $start ) . ' AND ' . + 'cul_target_hex <= ' . $dbr->addQuotes( $end ) . ') OR ' . + '(cul_range_end >= ' . $dbr->addQuotes( $start ) . ' AND ' . + 'cul_range_start <= ' . $dbr->addQuotes( $end ) . ')' + ); + } + } else { + // Is it a user? + $user = User::newFromName( $target ); + if ( $user && $user->getID() ) { + $searchConds = array( + 'cul_type' => array( 'userips', 'useredits' ), + 'cul_target_id' => $user->getID(), + ); + } elseif ( $target ) { + $error = 'checkuser-user-nonexistent'; + } + } + } + + $searchTypes = array( 'initiator', 'target' ); + $select = "<select name=\"cuSearchType\" style='margin-top:.2em;'>\n"; + foreach ( $searchTypes as $searchType ) { + if ( $type == $searchType ) { + $checked = 'selected="selected"'; + } else { + $checked = ''; + } + $caption = wfMsgHtml( 'checkuser-search-' . $searchType ); + $select .= "<option value=\"$searchType\" $checked>$caption</option>\n"; + } + $select .= '</select>'; + + $encTarget = htmlspecialchars( $target ); + $msgSearch = wfMsgHtml( 'checkuser-search' ); + $input = "<input type=\"text\" name=\"cuSearch\" value=\"$encTarget\" size=\"40\"/>"; + $msgSearchForm = wfMsgHtml( 'checkuser-search-form', $select, $input ); + $formAction = $this->getTitle()->escapeLocalURL(); + $msgSearchSubmit = '  ' . wfMsgHtml( 'checkuser-search-submit' ) . '  '; + + $s = "<form method='get' action=\"$formAction\">\n" . + "<fieldset><legend>$msgSearch</legend>\n" . + "<p>$msgSearchForm</p>\n" . + "<p>" . $this->getDateMenu( $year, $month ) . "   \n" . + "<input type=\"submit\" name=\"cuSearchSubmit\" value=\"$msgSearchSubmit\"/></p>\n" . + "</fieldset></form>\n"; + $out->addHTML( $s ); + + if ( $error !== false ) { + $out->wrapWikiMsg( '<div class="errorbox">$1</div>', $error ); + return; + } + + $pager = new CheckUserLogPager( $this, $searchConds, $year, $month ); + $out->addHTML( + $pager->getNavigationBar() . + $pager->getBody() . + $pager->getNavigationBar() + ); + } + + /** + * @return string Formatted HTML + * @param int $year + * @param int $month + */ + protected function getDateMenu( $year, $month ) { + # Offset overrides year/month selection + if ( $month && $month !== - 1 ) { + $encMonth = intval( $month ); + } else { + $encMonth = ''; + } + if ( $year ) { + $encYear = intval( $year ); + } elseif ( $encMonth ) { + $thisMonth = intval( gmdate( 'n' ) ); + $thisYear = intval( gmdate( 'Y' ) ); + if ( intval( $encMonth ) > $thisMonth ) { + $thisYear--; + } + $encYear = $thisYear; + } else { + $encYear = ''; + } + return Xml::label( wfMsg( 'year' ), 'year' ) . ' ' . + Xml::input( 'year', 4, $encYear, array( 'id' => 'year', 'maxlength' => 4 ) ) . + ' ' . + Xml::label( wfMsg( 'month' ), 'month' ) . ' ' . + Xml::monthSelector( $encMonth, - 1 ); + } +} _______________________________________________ MediaWiki-CVS mailing list MediaWiki-CVS@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs