Merge "Change AbuseFilter to use UserCache instead of user_text fields"

This commit is contained in:
Aaron Schulz 2013-04-09 22:00:51 +00:00 committed by Gerrit Code Review
commit 05b38eb613
9 changed files with 95 additions and 32 deletions

View file

@ -956,6 +956,13 @@ class AbuseFilter {
$local_log_ids = array();
global $wgAbuseFilterNotifications, $wgAbuseFilterNotificationsPrivate;
$userIds = array();
foreach ( $log_rows as $index => $data ) {
$userIds[] = $data['afl_user'];
}
UserCache::singleton()->doQuery( $userIds, array(), __METHOD__ );
foreach ( $log_rows as $index => $data ) {
$data['afl_var_dump'] = $var_dump;
$data['afl_id'] = $dbw->nextSequenceValue( 'abuse_filter_log_afl_id_seq' );
@ -970,7 +977,7 @@ class AbuseFilter {
// Construct a user object
$user = new User();
$user->setId( $data['afl_user'] );
$user->setName( $data['afl_user_text'] );
$user->setName( UserCache::singleton()->getUserName( $data['afl_user'], $data['afl_user_text'] ) );
$entry->setPerformer( $user );
// Set action target
$entry->setTarget( Title::makeTitle( $data['afl_namespace'], $data['afl_title'] ) );

View file

@ -185,7 +185,7 @@ class AbuseFilterViewDiff extends AbuseFilterView {
'meta' => array(
'history_id' => $row->afh_id,
'modified_by' => $row->afh_user,
'modified_by_text' => $row->afh_user_text,
'modified_by_text' => UserCache::singleton()->getUserName( $row->afh_user, $row->afh_user_text ),
'modified' => $row->afh_timestamp,
),
'info' => array(

View file

@ -477,10 +477,11 @@ class AbuseFilterViewEdit extends AbuseFilterView {
)
);
// Last modification details
$userName = UserCache::singleton()->getUserName( $row->af_user, $row->af_user_text );
$userLink =
Linker::userLink( $row->af_user, $row->af_user_text ) .
Linker::userToolLinks( $row->af_user, $row->af_user_text );
$userName = $row->af_user_text;
Linker::userLink( $row->af_user, $userName ) .
Linker::userToolLinks( $row->af_user, $userName );
$fields['abusefilter-edit-lastmod'] =
$this->msg( 'abusefilter-edit-lastmod-text' )
->rawParams(

View file

@ -115,6 +115,15 @@ class AbuseFilterHistoryPager extends TablePager {
return $headers;
}
function doBatchLookups() {
$userIds = array();
foreach ( $this->mResult as $row ) {
$userIds[] = $row->afh_user;
}
UserCache::singleton()->doQuery( $userIds, array( 'userpage', 'usertalk' ), __METHOD__ );
}
function formatValue( $name, $value ) {
$lang = $this->getLanguage();
@ -130,9 +139,10 @@ class AbuseFilterHistoryPager extends TablePager {
$formatted = Linker::link( $title, $lang->timeanddate( $row->afh_timestamp, true ) );
break;
case 'afh_user_text':
$name = UserCache::singleton()->getUserName( $row->afh_user, $row->afh_user_text );
$formatted =
Linker::userLink( $row->afh_user, $row->afh_user_text ) . ' ' .
Linker::userToolLinks( $row->afh_user, $row->afh_user_text );
Linker::userLink( $row->afh_user, $name ) . ' ' .
Linker::userToolLinks( $row->afh_user, $name );
break;
case 'afh_public_comments':
$formatted = htmlspecialchars( $value, ENT_QUOTES, 'UTF-8', false );

View file

@ -225,6 +225,17 @@ class AbuseFilterPager extends TablePager {
return $headers;
}
function doBatchLookups() {
$this->mResult->seek( 0 );
$userIds = array();
foreach ( $this->mResult as $row ) {
$userIds[] = $row->af_user;
}
UserCache::singleton()->doQuery( $userIds, array( 'userpage', 'usertalk' ), __METHOD__ );
}
function formatValue( $name, $value ) {
$lang = $this->getLanguage();
$row = $this->mCurrentRow;
@ -278,22 +289,22 @@ class AbuseFilterPager extends TablePager {
}
return $link;
case 'af_timestamp':
$name = UserCache::singleton()->getUserName( $row->af_user, $row->af_user_text );
$userLink =
Linker::userLink(
$row->af_user,
$row->af_user_text
$name
) .
Linker::userToolLinks(
$row->af_user,
$row->af_user_text
$name
);
$user = $row->af_user_text;
return $this->msg( 'abusefilter-edit-lastmod-text' )
->rawParams( $lang->timeanddate( $value, true ),
$userLink,
$lang->date( $value, true ),
$lang->time( $value, true ),
$user
$name
)->parse();
case 'af_group':
return AbuseFilter::nameGroup( $value );
@ -377,10 +388,9 @@ class GlobalAbuseFilterPager extends AbuseFilterPager {
}
return $this->msg( 'abusefilter-hitcount' )->numParams( $value )->parse();
case 'af_timestamp':
$user = $row->af_user_text;
return $this->msg(
'abusefilter-edit-lastmod-text',
$lang->timeanddate( $value, true ), $user
$lang->timeanddate( $value, true ), UserCache::singleton()->getUserName( $row->af_user, $row->af_user_text )
)->parse();
case 'af_group':
// If this is global, local name probably doesn't exist, but try

View file

@ -120,8 +120,9 @@ class AbuseFilterViewRevert extends AbuseFilterView {
// Database query.
$res = $dbr->select( 'abuse_filter_log', '*', $conds, __METHOD__ );
$results = array();
foreach( $res as $row ) {
$userIds = array();
$resultRows = array();
foreach ( $res as $row ) {
// Don't revert if there was no action, or the action was global
if ( !$row->afl_actions || $row->afl_wiki != null ) {
continue;
@ -131,18 +132,25 @@ class AbuseFilterViewRevert extends AbuseFilterView {
$reversibleActions = array( 'block', 'blockautopromote', 'degroup' );
$currentReversibleActions = array_intersect( $actions, $reversibleActions );
if ( count( $currentReversibleActions ) ) {
$results[] = array(
'id' => $row->afl_id,
'actions' => $currentReversibleActions,
'user' => $row->afl_user_text,
'userid' => $row->afl_user,
'vars' => AbuseFilter::loadVarDump( $row->afl_var_dump ),
'title' => Title::makeTitle( $row->afl_namespace, $row->afl_title ),
'action' => $row->afl_action,
'timestamp' => $row->afl_timestamp
);
$resultRows[] = $row;
$userIds[] = $row->afl_user;
}
}
UserCache::singleton()->doQuery( $userIds, array(), __METHOD__ );
$results = array();
foreach ( $resultRows as $row ) {
$results[] = array(
'id' => $row->afl_id,
'actions' => $currentReversibleActions,
'user' => UserCache::singleton()->getUserName( $row->afl_user, $row->afl_user_text ),
'userid' => $row->afl_user,
'vars' => AbuseFilter::loadVarDump( $row->afl_var_dump ),
'title' => Title::makeTitle( $row->afl_namespace, $row->afl_title ),
'action' => $row->afl_action,
'timestamp' => $row->afl_timestamp
);
}
return $results;
}

View file

@ -67,7 +67,7 @@ class ApiQueryAbuseFilters extends ApiQueryBase {
$this->addFieldsIf( 'af_pattern', $fld_pattern );
$this->addFieldsIf( 'af_actions', $fld_actions );
$this->addFieldsIf( 'af_comments', $fld_comments );
$this->addFieldsIf( 'af_user_text', $fld_user );
$this->addFieldsIf( array( 'af_user', 'af_user_text' ), $fld_user );
$this->addFieldsIf( 'af_timestamp', $fld_time );
$this->addOption( 'LIMIT', $params['limit'] + 1 );
@ -96,6 +96,14 @@ class ApiQueryAbuseFilters extends ApiQueryBase {
$showhidden = $user->isAllowed( 'abusefilter-modify' );
if ( $fld_user ) {
$userIds = array();
foreach ( $res as $row ) {
$userIds[] = $row->af_user;
}
UserCache::singleton()->doQuery( $userIds, array(), __METHOD__ );
}
$count = 0;
foreach ( $res as $row ) {
if ( ++$count > $params['limit'] ) {
@ -123,7 +131,7 @@ class ApiQueryAbuseFilters extends ApiQueryBase {
$entry['comments'] = $row->af_comments;
}
if ( $fld_user ) {
$entry['lasteditor'] = $row->af_user_text;
$entry['lasteditor'] = UserCache::singleton()->getUserName( $row->af_user, $row->af_user_text );
}
if ( $fld_time ) {
$ts = new MWTimestamp( $row->af_timestamp );

View file

@ -84,7 +84,7 @@ class ApiQueryAbuseLog extends ApiQueryBase {
$this->addFields( 'afl_deleted' );
$this->addFields( 'afl_filter' );
$this->addFieldsIf( 'afl_id', $fld_ids );
$this->addFieldsIf( 'afl_user_text', $fld_user );
$this->addFieldsIf( array( 'afl_user', 'afl_user_text' ), $fld_user );
$this->addFieldsIf( 'afl_ip', $fld_ip );
$this->addFieldsIf( array( 'afl_namespace', 'afl_title' ), $fld_title );
$this->addFieldsIf( 'afl_action', $fld_action );
@ -142,6 +142,12 @@ class ApiQueryAbuseLog extends ApiQueryBase {
}
$res = $this->select( __METHOD__ );
$userIds = array();
foreach ( $res as $row ) {
$userIds[] = $row->afl_user;
}
UserCache::singleton()->doQuery( $userIds, array(), __METHOD__ );
$count = 0;
foreach ( $res as $row ) {
if ( ++$count > $params['limit'] ) {
@ -167,7 +173,7 @@ class ApiQueryAbuseLog extends ApiQueryBase {
$entry['filter'] = $row->af_public_comments;
}
if ( $fld_user ) {
$entry['user'] = $row->afl_user_text;
$entry['user'] = UserCache::singleton()->getUserName( $row->afl_user, $row->afl_user_text );
}
if ( $fld_ip ) {
$entry['ip'] = $row->afl_ip;

View file

@ -406,6 +406,17 @@ class SpecialAbuseLog extends SpecialPage {
return $wgUser->isAllowed( 'abusefilter-hidden-log' );
}
function doBatchLookups() {
$this->mResult->seek( 0 );
$userIds = array();
foreach ( $this->mResult as $row ) {
$userIds[] = $row->afl_user;
}
UserCache::singleton()->doQuery( $userIds, array( 'userpage', 'usertalk' ), __METHOD__ );
}
/**
* @param $row
* @param $li bool
@ -445,12 +456,14 @@ class SpecialAbuseLog extends SpecialPage {
}
}
$name = UserCache::singleton()->getUserName( $row->afl_user, $row->afl_user_text );
if ( !$row->afl_wiki ) {
// Local user
$userLink = Linker::userLink( $row->afl_user, $row->afl_user_text ) .
Linker::userToolLinks( $row->afl_user, $row->afl_user_text, true );
$userLink = Linker::userLink( $row->afl_user, $name ) .
Linker::userToolLinks( $row->afl_user, $name, true );
} else {
$userLink = WikiMap::foreignUserLink( $row->afl_wiki, $row->afl_user_text );
$userLink = WikiMap::foreignUserLink( $row->afl_wiki, $name );
$userLink .= ' (' . WikiMap::getWikiName( $row->afl_wiki ) . ')';
}