[MediaWiki-commits] [Gerrit] Added limited-overwrite/merge option for importing XML or CSV - change (mediawiki...DataTransfer)
Yaron Koren has uploaded a new change for review. https://gerrit.wikimedia.org/r/61387 Change subject: Added limited-overwrite/merge option for importing XML or CSV .. Added limited-overwrite/merge option for importing XML or CSV Change-Id: If308b926be2d17f0fdb3278f1e54cab41b2bd96d --- M includes/DT_ImportJob.php M includes/DT_PageStructure.php M includes/DT_Utils.php M languages/DT_Messages.php 4 files changed, 102 insertions(+), 7 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/DataTransfer refs/changes/87/61387/1 diff --git a/includes/DT_ImportJob.php b/includes/DT_ImportJob.php index 09fddd3..0210080 100644 --- a/includes/DT_ImportJob.php +++ b/includes/DT_ImportJob.php @@ -50,14 +50,23 @@ $actual_user = $wgUser; $wgUser = User::newFromId( $this-params['user_id'] ); $text = $this-params['text']; - if ( $for_pages_that_exist == 'append' $this-title-exists() ) { - if ( method_exists( 'WikiPage', 'getContent' ) ) { - // MW = 1.21 - $existingText = $wikiPage-getContent()-getNativeData(); - } else { - $existingText = $article-getContent(); + if ( $this-title-exists() ) { + if ( $for_pages_that_exist == 'append' ) { + if ( method_exists( 'WikiPage', 'getContent' ) ) { + // MW = 1.21 + $existingText = $wikiPage-getContent()-getNativeData(); + } else { + $existingText = $article-getContent(); + } + $text = $existingText . \n . $text; + } elseif ( $for_pages_that_exist == 'merge' ) { + $existingPageStructure = DTPageStructure::newFromTitle( $this-title ); + $newPageStructure = new DTPageStructure; + $newPageStructure-parsePageContents( $text ); + $existingPageStructure-mergeInPageStructure( $newPageStructure ); + return $existingPageStructure-toWikitext(); } - $text = $existingText . \n . $text; + // otherwise, $for_pages_that_exist == 'overwrite' } $edit_summary = $this-params['edit_summary']; if ( method_exists( 'WikiPage', 'getContent' ) ) { diff --git a/includes/DT_PageStructure.php b/includes/DT_PageStructure.php index 3f65f4a..6df693a 100644 --- a/includes/DT_PageStructure.php +++ b/includes/DT_PageStructure.php @@ -39,6 +39,23 @@ $this-mFields[$fieldName] = trim( $fieldValue ); } + public function toWikitext() { + if ( $this-mIsTemplate ) { + $wikitext = '{{' . $this-mTemplateName; + foreach ( $this-mFields as $fieldName = $fieldValue ) { + if ( is_numeric( $fieldName ) ) { + $wikitext .= '|' . $fieldValue; + } else { + $wikitext .= \n|$fieldName=$fieldValue; + } + } + $wikitext .= \n}}; + return $wikitext; + } else { + return $this-mFreeText; + } + } + public function toXML( $isSimplified ) { global $wgDataTransferViewXMLParseFields; global $wgDataTransferViewXMLParseFreeText; @@ -261,6 +278,67 @@ } } + /** +* Helper function for mergeInPageStructure(). +*/ + private function getSingleInstanceTemplates() { + $instancesPerTemplate = array(); + foreach ( $this-mComponents as $pageComponent ) { + if ( $pageComponent-mIsTemplate ) { + $templateName = $pageComponent-mTemplateName; + if ( array_key_exists( $templateName, $instancesPerTemplate ) ) { + $instancesPerTemplate[$templateName]++; + } else { + $instancesPerTemplate[$templateName] = 1; + } + } + } + + $singleInstanceTemplates = array(); + foreach ( $instancesPerTemplate as $templateName = $instances ) { + if ( $instances == 1 ) { + $singleInstanceTemplates[] = $templateName;
[MediaWiki-commits] [Gerrit] Added limited-overwrite/merge option for importing XML or CSV - change (mediawiki...DataTransfer)
Yaron Koren has submitted this change and it was merged. Change subject: Added limited-overwrite/merge option for importing XML or CSV .. Added limited-overwrite/merge option for importing XML or CSV Change-Id: If308b926be2d17f0fdb3278f1e54cab41b2bd96d --- M includes/DT_ImportJob.php M includes/DT_PageStructure.php M includes/DT_Utils.php M languages/DT_Messages.php 4 files changed, 102 insertions(+), 7 deletions(-) Approvals: Yaron Koren: Verified; Looks good to me, approved diff --git a/includes/DT_ImportJob.php b/includes/DT_ImportJob.php index 09fddd3..0210080 100644 --- a/includes/DT_ImportJob.php +++ b/includes/DT_ImportJob.php @@ -50,14 +50,23 @@ $actual_user = $wgUser; $wgUser = User::newFromId( $this-params['user_id'] ); $text = $this-params['text']; - if ( $for_pages_that_exist == 'append' $this-title-exists() ) { - if ( method_exists( 'WikiPage', 'getContent' ) ) { - // MW = 1.21 - $existingText = $wikiPage-getContent()-getNativeData(); - } else { - $existingText = $article-getContent(); + if ( $this-title-exists() ) { + if ( $for_pages_that_exist == 'append' ) { + if ( method_exists( 'WikiPage', 'getContent' ) ) { + // MW = 1.21 + $existingText = $wikiPage-getContent()-getNativeData(); + } else { + $existingText = $article-getContent(); + } + $text = $existingText . \n . $text; + } elseif ( $for_pages_that_exist == 'merge' ) { + $existingPageStructure = DTPageStructure::newFromTitle( $this-title ); + $newPageStructure = new DTPageStructure; + $newPageStructure-parsePageContents( $text ); + $existingPageStructure-mergeInPageStructure( $newPageStructure ); + return $existingPageStructure-toWikitext(); } - $text = $existingText . \n . $text; + // otherwise, $for_pages_that_exist == 'overwrite' } $edit_summary = $this-params['edit_summary']; if ( method_exists( 'WikiPage', 'getContent' ) ) { diff --git a/includes/DT_PageStructure.php b/includes/DT_PageStructure.php index 3f65f4a..6df693a 100644 --- a/includes/DT_PageStructure.php +++ b/includes/DT_PageStructure.php @@ -39,6 +39,23 @@ $this-mFields[$fieldName] = trim( $fieldValue ); } + public function toWikitext() { + if ( $this-mIsTemplate ) { + $wikitext = '{{' . $this-mTemplateName; + foreach ( $this-mFields as $fieldName = $fieldValue ) { + if ( is_numeric( $fieldName ) ) { + $wikitext .= '|' . $fieldValue; + } else { + $wikitext .= \n|$fieldName=$fieldValue; + } + } + $wikitext .= \n}}; + return $wikitext; + } else { + return $this-mFreeText; + } + } + public function toXML( $isSimplified ) { global $wgDataTransferViewXMLParseFields; global $wgDataTransferViewXMLParseFreeText; @@ -261,6 +278,67 @@ } } + /** +* Helper function for mergeInPageStructure(). +*/ + private function getSingleInstanceTemplates() { + $instancesPerTemplate = array(); + foreach ( $this-mComponents as $pageComponent ) { + if ( $pageComponent-mIsTemplate ) { + $templateName = $pageComponent-mTemplateName; + if ( array_key_exists( $templateName, $instancesPerTemplate ) ) { + $instancesPerTemplate[$templateName]++; + } else { + $instancesPerTemplate[$templateName] = 1; + } + } + } + + $singleInstanceTemplates = array(); + foreach ( $instancesPerTemplate as $templateName = $instances ) { + if ( $instances == 1 ) { + $singleInstanceTemplates[] = $templateName; + } + } + return