From 1e03e58b598ec7b708291909f6f984fd895fc2df Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 15 Sep 2003 00:01:11 +0000 Subject: [PATCH] Preliminary export of individual pages/page histories packaged in some simple XML: Special:Export. Special:Import should follow... --- includes/SpecialExport.php | 115 +++++++++++++++++++++++++++++++++++++ languages/Language.php | 10 +++- 2 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 includes/SpecialExport.php diff --git a/includes/SpecialExport.php b/includes/SpecialExport.php new file mode 100644 index 0000000000..150ab4fe63 --- /dev/null +++ b/includes/SpecialExport.php @@ -0,0 +1,115 @@ +addWikiText( wfMsg( "exporttext" ) ); + $action = wfLocalUrlE( $wgLang->SpecialPage( "Export" ) ); + $wgOut->addHTML( " +
+ +
+
+ +
+" ); +} + +function pages2xml( $pages, $curonly = false ) { + global $wgLanguageCode, $wgInputEncoding, $wgLang; + $xml = "\n"; + foreach( $pages as $page ) { + $xml .= page2xml( $page, $curonly ); + } + $xml .= "\n"; + if($wgInputEncoding != "utf-8") + $xml = $wgLang->iconv( $wgInputEncoding, "utf-8", $xml ); + return $xml; +} + +function page2xml( $page, $curonly, $full = false ) { + global $wgInputCharset, $wgLang; + $title = Title::NewFromText( $page ); + $t = wfStrencode( $title->getDBKey() ); + $ns = $title->getNamespace(); + $sql = "SELECT cur_id as id,cur_timestamp as timestamp,cur_user as user,cur_user_text as user_text," . + "cur_restrictions as restrictions,cur_comment as comment,cur_text as text FROM cur " . + "WHERE cur_namespace=$ns AND cur_title='$t'"; + $res = wfQuery( $sql ); + if( $s = wfFetchObject( $res ) ) { + $tl = htmlspecialchars( $title->getPrefixedText() ); + $xml = " \n"; + $xml .= " $tl\n"; + if( $full ) { + $xml .= " $s->id\n"; + } + if( $s->restrictions ) { + $xml .= " $s->restrictions\n"; + } + if( !$curonly ) { + $sql = "SELECT old_id as id,old_timestamp as timestamp, old_user as user, old_user_text as user_text," . + "old_comment as comment, old_text as text FROM old " . + "WHERE old_namespace=$ns AND old_title='$t' ORDER BY old_timestamp"; + $res = wfQuery( $sql ); + + while( $s = wfFetchObject( $res ) ) { + $xml .= revision2xml( $s, $full, false ); + } + } + $xml .= revision2xml( $s, $full, true ); + $xml .= " \n"; + return $xml; + } else { + return ""; + } +} + +function revision2xml( $s, $full, $cur ) { + $ts = wfTimestamp2ISO8601( $s->timestamp ); + $xml = " \n"; + if($full && !$cur) + $xml .= " $s->id\n"; + $xml .= " $ts\n"; + if($s->user) { + $u = "" . htmlspecialchars( $s->user_text ) . ""; + if($full) + $u .= "$s->user"; + } else { + $u = "" . htmlspecialchars( $s->user_text ) . ""; + } + $xml .= " $u\n"; + if($s->minor) { + $xml .= " \n"; + } + if($s->comment != "") { + $c = htmlspecialchars( $s->comment ); + $xml .= " $c\n"; + } + $t = htmlspecialchars( $s->text ); + $xml .= " $t\n"; + $xml .= " \n"; + return $xml; +} + +function wfTimestamp2ISO8601( $ts ) { + #2003-08-05T18:30:02Z + return preg_replace( '/^(....)(..)(..)(..)(..)(..)$/', '$1-$2-$3T$4:$5:$6Z', $ts ); +} + +?> diff --git a/languages/Language.php b/languages/Language.php index 751d462a6d..b4db3d3085 100644 --- a/languages/Language.php +++ b/languages/Language.php @@ -323,7 +323,8 @@ this (alternative: like this?).", "Recentchangeslinked" => "", "Movepage" => "", "Booksources" => "External book sources", -"Categories" => "Page categories" +"Categories" => "Page categories", +"Export" => "" ); /* private */ $wgSysopSpecialPagesEn = array( @@ -1210,6 +1211,13 @@ title. Please merge them manually.", "talkpagemoved" => "The corresponding talk page was also moved.", "talkpagenotmoved" => "The corresponding talk page was not moved.", +"export" => "Export pages", +"exporttext" => "You can export the text and editing history of a particular +page or set of pages wrapped in some XML; this can then be imported into another +wiki running MediaWiki softwore, transformed, or just kept for your private +amusement.", +"exportcuronly" => "Include only the current revision, not the full history", + ); #-------------------------------------------------------------------------- -- 2.20.1