X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fspecials%2FSpecialLog.php;h=bad17466b54d7ed52804e5c8519a44920e21da7d;hb=40ced7e89ca9cd6896cd37b4b35051ed5754eb44;hp=cc4358069e415f410c3004e82bd1ccadf7002e26;hpb=ea5c2f5d2d36af57ff793e5c3db186642c584a0e;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/specials/SpecialLog.php b/includes/specials/SpecialLog.php index cc4358069e..bad17466b5 100644 --- a/includes/specials/SpecialLog.php +++ b/includes/specials/SpecialLog.php @@ -32,6 +32,8 @@ class SpecialLog extends SpecialPage { } public function execute( $par ) { + global $wgActorTableSchemaMigrationStage; + $this->setHeaders(); $this->outputHeader(); $this->getOutput()->addModules( 'mediawiki.userSuggest' ); @@ -49,6 +51,7 @@ class SpecialLog extends SpecialPage { $opts->add( 'dir', '' ); $opts->add( 'offender', '' ); $opts->add( 'subtype', '' ); + $opts->add( 'logid', '' ); // Set values $opts->fetchValuesFromRequest( $this->getRequest() ); @@ -78,12 +81,33 @@ class SpecialLog extends SpecialPage { # Handle type-specific inputs $qc = []; if ( $opts->getValue( 'type' ) == 'suppress' ) { - $offender = User::newFromName( $opts->getValue( 'offender' ), false ); + $offenderName = $opts->getValue( 'offender' ); + $offender = empty( $offenderName ) ? null : User::newFromName( $offenderName, false ); if ( $offender ) { - if ( $offender->getId() > 0 ) { - $qc = [ 'ls_field' => 'target_author_id', 'ls_value' => $offender->getId() ]; - } elseif ( !empty( $opts->getValue( 'offender' ) ) ) { - $qc = [ 'ls_field' => 'target_author_ip', 'ls_value' => $offender->getName() ]; + 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 { @@ -146,6 +170,16 @@ class SpecialLog extends SpecialPage { return $subpages; } + /** + * Set options based on the subpage title parts: + * - One part that is a valid log type: Special:Log/logtype + * - Two parts: Special:Log/logtype/username + * - Otherwise, assume the whole subpage is a username. + * + * @param FormOptions $opts + * @param $par + * @throws ConfigException + */ private function parseParams( FormOptions $opts, $par ) { # Get parameters $par = $par !== null ? $par : ''; @@ -181,7 +215,8 @@ class SpecialLog extends SpecialPage { $opts->getValue( 'year' ), $opts->getValue( 'month' ), $opts->getValue( 'tagfilter' ), - $opts->getValue( 'subtype' ) + $opts->getValue( 'subtype' ), + $opts->getValue( 'logid' ) ); $this->addHeader( $opts->getValue( 'type' ) );