aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgeorggi <bmp2558@gmail.com>2015-12-19 11:06:26 +0200
committerTTO <at.light@live.com.au>2015-12-19 09:50:22 +0000
commitb14d581dab129f00135a0136ef2727ce0f8f9282 (patch)
tree103577b5ef8f1a388dc660c1706bf4b9896ed1a0
parentf5db0b307b45cbd236e4426440653e697ef4cf80 (diff)
downloadmediawikicore-b14d581dab129f00135a0136ef2727ce0f8f9282.tar.gz
mediawikicore-b14d581dab129f00135a0136ef2727ce0f8f9282.zip
Handle missing titles and usernames when importing log items
Bug: T121338 Change-Id: Idf95263e4f22225509da4ee07fcb14383028894b
-rw-r--r--includes/Import.php39
-rw-r--r--maintenance/importDump.php14
2 files changed, 43 insertions, 10 deletions
diff --git a/includes/Import.php b/includes/Import.php
index 519f74a81b3c..ee1cab54ee7d 100644
--- a/includes/Import.php
+++ b/includes/Import.php
@@ -660,14 +660,26 @@ class WikiImporter {
* @return bool|mixed
*/
private function processLogItem( $logInfo ) {
+
$revision = new WikiRevision( $this->config );
- $revision->setID( $logInfo['id'] );
+ if ( isset( $logInfo['id'] ) ) {
+ $revision->setID( $logInfo['id'] );
+ }
$revision->setType( $logInfo['type'] );
$revision->setAction( $logInfo['action'] );
- $revision->setTimestamp( $logInfo['timestamp'] );
- $revision->setParams( $logInfo['params'] );
- $revision->setTitle( Title::newFromText( $logInfo['logtitle'] ) );
+ if ( isset( $logInfo['timestamp'] ) ) {
+ $revision->setTimestamp( $logInfo['timestamp'] );
+ }
+ if ( isset( $logInfo['params'] ) ) {
+ $revision->setParams( $logInfo['params'] );
+ }
+ if ( isset( $logInfo['logtitle'] ) ) {
+ // @todo Using Title for non-local titles is a recipe for disaster.
+ // We should use ForeignTitle here instead.
+ $revision->setTitle( Title::newFromText( $logInfo['logtitle'] ) );
+ }
+
$revision->setNoUpdates( $this->mNoUpdates );
if ( isset( $logInfo['comment'] ) ) {
@@ -677,7 +689,10 @@ class WikiImporter {
if ( isset( $logInfo['contributor']['ip'] ) ) {
$revision->setUserIP( $logInfo['contributor']['ip'] );
}
- if ( isset( $logInfo['contributor']['username'] ) ) {
+
+ if ( !isset( $logInfo['contributor']['username'] ) ) {
+ $revision->setUsername( 'Unknown user' );
+ } else {
$revision->setUserName( $logInfo['contributor']['username'] );
}
@@ -1655,6 +1670,16 @@ class WikiRevision {
function importLogItem() {
$dbw = wfGetDB( DB_MASTER );
+
+ $user = User::newFromName( $this->getUser() );
+ if ( $user ) {
+ $userId = intval( $user->getId() );
+ $userText = $user->getName();
+ } else {
+ $userId = 0;
+ $userText = $this->getUser();
+ }
+
# @todo FIXME: This will not record autoblocks
if ( !$this->getTitle() ) {
wfDebug( __METHOD__ . ": skipping invalid {$this->type}/{$this->action} log time, timestamp " .
@@ -1687,8 +1712,8 @@ class WikiRevision {
'log_type' => $this->type,
'log_action' => $this->action,
'log_timestamp' => $dbw->timestamp( $this->timestamp ),
- 'log_user' => User::idFromName( $this->user_text ),
- # 'log_user_text' => $this->user_text,
+ 'log_user' => $userId,
+ 'log_user_text' => $userText,
'log_namespace' => $this->getTitle()->getNamespace(),
'log_title' => $this->getTitle()->getDBkey(),
'log_comment' => $this->getComment(),
diff --git a/maintenance/importDump.php b/maintenance/importDump.php
index 8cea5a2c5db0..6b7cfb6ac1bf 100644
--- a/maintenance/importDump.php
+++ b/maintenance/importDump.php
@@ -135,16 +135,24 @@ TEXT;
* @return bool
*/
private function skippedNamespace( $obj ) {
+ $title = null;
if ( $obj instanceof Title ) {
- $ns = $obj->getNamespace();
+ $title = $obj;
} elseif ( $obj instanceof Revision ) {
- $ns = $obj->getTitle()->getNamespace();
+ $title = $obj->getTitle();
} elseif ( $obj instanceof WikiRevision ) {
- $ns = $obj->title->getNamespace();
+ $title = $obj->title;
} else {
throw new MWException( "Cannot get namespace of object in " . __METHOD__ );
}
+ if ( is_null( $title ) ) {
+ // Probably a log entry
+ return false;
+ }
+
+ $ns = $title->getNamespace();
+
return is_array( $this->nsFilter ) && !in_array( $ns, $this->nsFilter );
}