X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;ds=sidebyside;f=includes%2Fspecials%2FSpecialLog.php;h=9931614458cf29d2886caf7bf3c87d0ee40fdc28;hb=0ecfa4b91961269e33c085bc5d88eb8850439d40;hp=d700c397d6a221f05a89e4b790be99d99339f676;hpb=749a159cc93360272c62965445e0f8c0ee89f9a6;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/specials/SpecialLog.php b/includes/specials/SpecialLog.php index d700c397d6..9931614458 100644 --- a/includes/specials/SpecialLog.php +++ b/includes/specials/SpecialLog.php @@ -21,6 +21,8 @@ * @ingroup SpecialPage */ +use Wikimedia\Timestamp\TimestampException; + /** * A special page that lists log entries * @@ -63,10 +65,18 @@ class SpecialLog extends SpecialPage { // Set date values $dateString = $this->getRequest()->getVal( 'wpdate' ); if ( !empty( $dateString ) ) { - $dateStamp = MWTimestamp::getInstance( $dateString . ' 00:00:00' ); - $opts->setValue( 'year', (int)$dateStamp->format( 'Y' ) ); - $opts->setValue( 'month', (int)$dateStamp->format( 'm' ) ); - $opts->setValue( 'day', (int)$dateStamp->format( 'd' ) ); + try { + $dateStamp = MWTimestamp::getInstance( $dateString . ' 00:00:00' ); + } catch ( TimestampException $e ) { + // If users provide an invalid date, silently ignore it + // instead of letting an exception bubble up (T201411) + $dateStamp = false; + } + if ( $dateStamp ) { + $opts->setValue( 'year', (int)$dateStamp->format( 'Y' ) ); + $opts->setValue( 'month', (int)$dateStamp->format( 'm' ) ); + $opts->setValue( 'day', (int)$dateStamp->format( 'd' ) ); + } } # Don't let the user get stuck with a certain date @@ -94,30 +104,12 @@ class SpecialLog extends SpecialPage { $offenderName = $opts->getValue( 'offender' ); $offender = empty( $offenderName ) ? null : User::newFromName( $offenderName, false ); if ( $offender ) { - if ( $wgActorTableSchemaMigrationStage === MIGRATION_NEW ) { + if ( $wgActorTableSchemaMigrationStage & SCHEMA_COMPAT_READ_NEW ) { $qc = [ 'ls_field' => 'target_author_actor', 'ls_value' => $offender->getActorId() ]; + } elseif ( $offender->getId() > 0 ) { + $qc = [ 'ls_field' => 'target_author_id', 'ls_value' => $offender->getId() ]; } 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 ), - ]; - } + $qc = [ 'ls_field' => 'target_author_ip', 'ls_value' => $offender->getName() ]; } } } else {