X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Flogging%2FLogEntry.php;h=395110b9a4a43cad83164cf73613c4c98e27cae6;hb=64d22694b34eb2ad73f184708f5a904876db0a98;hp=bf35d78d25a80c4067ffc6764ebca655340709af;hpb=7babd362babcbf7f20adb8e12edb4f4bc1d4249f;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/logging/LogEntry.php b/includes/logging/LogEntry.php index bf35d78d25..395110b9a4 100644 --- a/includes/logging/LogEntry.php +++ b/includes/logging/LogEntry.php @@ -170,21 +170,23 @@ class DatabaseLogEntry extends LogEntryBase { * @return array */ public static function getSelectQueryData() { - $commentQuery = CommentStore::newKey( 'log_comment' )->getJoin(); + $commentQuery = CommentStore::getStore()->getJoin( 'log_comment' ); + $actorQuery = ActorMigration::newMigration()->getJoin( 'log_user' ); - $tables = [ 'logging', 'user' ] + $commentQuery['tables']; + $tables = array_merge( + [ 'logging' ], $commentQuery['tables'], $actorQuery['tables'], [ 'user' ] + ); $fields = [ 'log_id', 'log_type', 'log_action', 'log_timestamp', - 'log_user', 'log_user_text', 'log_namespace', 'log_title', // unused log_page 'log_params', 'log_deleted', 'user_id', 'user_name', 'user_editcount', - ] + $commentQuery['fields']; + ] + $commentQuery['fields'] + $actorQuery['fields']; $joins = [ // IPs don't have an entry in user table - 'user' => [ 'LEFT JOIN', 'log_user=user_id' ], - ] + $commentQuery['joins']; + 'user' => [ 'LEFT JOIN', 'user_id=' . $actorQuery['fields']['log_user'] ], + ] + $commentQuery['joins'] + $actorQuery['joins']; return [ 'tables' => $tables, @@ -265,9 +267,9 @@ class DatabaseLogEntry extends LogEntryBase { public function getParameters() { if ( !isset( $this->params ) ) { $blob = $this->getRawParameters(); - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $params = LogEntryBase::extractParams( $blob ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); if ( $params !== false ) { $this->params = $params; $this->legacy = false; @@ -293,11 +295,14 @@ class DatabaseLogEntry extends LogEntryBase { public function getPerformer() { if ( !$this->performer ) { + $actorId = isset( $this->row->log_actor ) ? (int)$this->row->log_actor : 0; $userId = (int)$this->row->log_user; - if ( $userId !== 0 ) { + if ( $userId !== 0 || $actorId !== 0 ) { // logged-in users if ( isset( $this->row->user_name ) ) { $this->performer = User::newFromRow( $this->row ); + } elseif ( $actorId !== 0 ) { + $this->performer = User::newFromActorId( $actorId ); } else { $this->performer = User::newFromId( $userId ); } @@ -324,7 +329,7 @@ class DatabaseLogEntry extends LogEntryBase { } public function getComment() { - return CommentStore::newKey( 'log_comment' )->getComment( $this->row )->text; + return CommentStore::getStore()->getComment( 'log_comment', $this->row )->text; } public function getDeleted() { @@ -356,8 +361,11 @@ class RCDatabaseLogEntry extends DatabaseLogEntry { public function getPerformer() { if ( !$this->performer ) { + $actorId = isset( $this->row->rc_actor ) ? (int)$this->row->rc_actor : 0; $userId = (int)$this->row->rc_user; - if ( $userId !== 0 ) { + if ( $actorId !== 0 ) { + $this->performer = User::newFromActorId( $actorId ); + } elseif ( $userId !== 0 ) { $this->performer = User::newFromId( $userId ); } else { $userText = $this->row->rc_user_text; @@ -382,9 +390,9 @@ class RCDatabaseLogEntry extends DatabaseLogEntry { } public function getComment() { - return CommentStore::newKey( 'rc_comment' ) + return CommentStore::getStore() // Legacy because the row may have used RecentChange::selectFields() - ->getCommentLegacy( wfGetDB( DB_REPLICA ), $this->row )->text; + ->getCommentLegacy( wfGetDB( DB_REPLICA ), 'rc_comment', $this->row )->text; } public function getDeleted() { @@ -593,6 +601,8 @@ class ManualLogEntry extends LogEntryBase { * @throws MWException */ public function insert( IDatabase $dbw = null ) { + global $wgActorTableSchemaMigrationStage; + $dbw = $dbw ?: wfGetDB( DB_MASTER ); if ( $this->timestamp === null ) { @@ -605,6 +615,31 @@ class ManualLogEntry extends LogEntryBase { $params = $this->getParameters(); $relations = $this->relations; + // Ensure actor relations are set + if ( $wgActorTableSchemaMigrationStage >= MIGRATION_WRITE_BOTH && + empty( $relations['target_author_actor'] ) + ) { + $actorIds = []; + if ( !empty( $relations['target_author_id'] ) ) { + foreach ( $relations['target_author_id'] as $id ) { + $actorIds[] = User::newFromId( $id )->getActorId( $dbw ); + } + } + if ( !empty( $relations['target_author_ip'] ) ) { + foreach ( $relations['target_author_ip'] as $ip ) { + $actorIds[] = User::newFromName( $ip, false )->getActorId( $dbw ); + } + } + if ( $actorIds ) { + $relations['target_author_actor'] = $actorIds; + $params['authorActors'] = $actorIds; + } + } + if ( $wgActorTableSchemaMigrationStage >= MIGRATION_WRITE_NEW ) { + unset( $relations['target_author_id'], $relations['target_author_ip'] ); + unset( $params['authorIds'], $params['authorIPs'] ); + } + // Additional fields for which there's no space in the database table schema $revId = $this->getAssociatedRevId(); if ( $revId ) { @@ -616,8 +651,6 @@ class ManualLogEntry extends LogEntryBase { 'log_type' => $this->getType(), 'log_action' => $this->getSubtype(), 'log_timestamp' => $dbw->timestamp( $this->getTimestamp() ), - 'log_user' => $this->getPerformer()->getId(), - 'log_user_text' => $this->getPerformer()->getName(), 'log_namespace' => $this->getTarget()->getNamespace(), 'log_title' => $this->getTarget()->getDBkey(), 'log_page' => $this->getTarget()->getArticleID(), @@ -626,7 +659,9 @@ class ManualLogEntry extends LogEntryBase { if ( isset( $this->deleted ) ) { $data['log_deleted'] = $this->deleted; } - $data += CommentStore::newKey( 'log_comment' )->insert( $dbw, $comment ); + $data += CommentStore::getStore()->insert( $dbw, 'log_comment', $comment ); + $data += ActorMigration::newMigration() + ->getInsertValues( $dbw, 'log_user', $this->getPerformer() ); $dbw->insert( 'logging', $data, __METHOD__ ); $this->id = $dbw->insertId();