[MediaWiki-commits] [Gerrit] Added limited-overwrite/merge option for importing XML or CSV - change (mediawiki...DataTransfer)

2013-04-29 Thread Yaron Koren (Code Review)
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)

2013-04-29 Thread Yaron Koren (Code Review)
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