}
public function execute( $par ) {
+ global $wgActorTableSchemaMigrationStage;
+
$this->setHeaders();
$this->outputHeader();
$this->getOutput()->addModules( 'mediawiki.userSuggest' );
# Handle type-specific inputs
$qc = [];
if ( $opts->getValue( 'type' ) == 'suppress' ) {
- $offender = User::newFromName( $opts->getValue( 'offender' ), false );
- if ( $offender && $offender->getId() > 0 ) {
- $qc = [ 'ls_field' => 'target_author_id', 'ls_value' => $offender->getId() ];
- } elseif ( $offender && IP::isIPAddress( $offender->getName() ) ) {
- $qc = [ 'ls_field' => 'target_author_ip', 'ls_value' => $offender->getName() ];
+ $offenderName = $opts->getValue( 'offender' );
+ $offender = empty( $offenderName ) ? null : User::newFromName( $offenderName, false );
+ if ( $offender ) {
+ if ( $wgActorTableSchemaMigrationStage === MIGRATION_NEW ) {
+ $qc = [ 'ls_field' => 'target_author_actor', 'ls_value' => $offender->getActorId() ];
+ } else {
+ if ( $offender->getId() > 0 ) {
+ $field = 'target_author_id';
+ $value = $offender->getId();
+ } else {
+ $field = 'target_author_ip';
+ $value = $offender->getName();
+ }
+ if ( !$offender->getActorId() ) {
+ $qc = [ 'ls_field' => $field, 'ls_value' => $value ];
+ } else {
+ $db = wfGetDB( DB_REPLICA );
+ $qc = [
+ 'ls_field' => [ 'target_author_actor', $field ], // So LogPager::getQueryInfo() works right
+ $db->makeList( [
+ $db->makeList(
+ [ 'ls_field' => 'target_author_actor', 'ls_value' => $offender->getActorId() ], LIST_AND
+ ),
+ $db->makeList( [ 'ls_field' => $field, 'ls_value' => $value ], LIST_AND ),
+ ], LIST_OR ),
+ ];
+ }
+ }
}
} else {
// Allow extensions to add relations to their search types