# http://www.mediawiki.org/ # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # http://www.gnu.org/copyleft/gpl.html /** * * @package MediaWiki * @subpackage SpecialPage */ /** * */ function wfSpecialExport( $page = '' ) { global $wgOut, $wgLang, $wgRequest; if( $wgRequest->getVal( 'action' ) == 'submit') { $page = $wgRequest->getText( 'pages' ); $curonly = $wgRequest->getCheck( 'curonly' ); } else { # Pre-check the 'current version only' box in the UI $curonly = true; } if( $page != '' ) { header( "Content-type: application/xml; charset=utf-8" ); $pages = explode( "\n", $page ); $xml = pages2xml( $pages, $curonly ); echo $xml; wfAbruptExit(); } $wgOut->addWikiText( wfMsg( "exporttext" ) ); $titleObj = Title::makeTitle( NS_SPECIAL, "Export" ); $action = $titleObj->escapeLocalURL(); $wgOut->addHTML( "


" ); } function pages2xml( $pages, $curonly = false ) { global $wgContLanguageCode, $wgInputEncoding, $wgContLang; $xml = "<" . "?xml version=\"1.0\" encoding=\"UTF-8\" ?" . ">\n" . "\n"; foreach( $pages as $page ) { $xml .= page2xml( $page, $curonly ); } $xml .= "\n"; if($wgInputEncoding != "utf-8") $xml = $wgContLang->iconv( $wgInputEncoding, "utf-8", $xml ); return $xml; } function page2xml( $page, $curonly, $full = false ) { global $wgLang; $fname = 'page2xml'; $title = Title::NewFromText( $page ); if( !$title ) return ""; $dbr =& wfGetDB( DB_SLAVE ); $s = $dbr->selectRow( 'cur', array( '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' ), $title->curCond(), $fname ); if( $s !== false ) { $tl = xmlsafe( $title->getPrefixedText() ); $xml = " \n"; $xml .= " $tl\n"; if( $full ) { $xml .= " $s->id\n"; } if( $s->restrictions ) { $xml .= " $s->restrictions\n"; } if( !$curonly ) { $res = $dbr->select( 'old', array( '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', 'old_flags as flags' ), $title->oldCond(), $fname, array( 'ORDER BY' => 'old_timestamp' ) ); while( $s2 = $dbr->fetchObject( $res ) ) { $xml .= revision2xml( $s2, $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 = "" . xmlsafe( $s->user_text ) . ""; if($full) $u .= "$s->user"; } else { $u = "" . xmlsafe( $s->user_text ) . ""; } $xml .= " $u\n"; if( !empty( $s->minor ) ) { $xml .= " \n"; } if($s->comment != "") { $c = xmlsafe( $s->comment ); $xml .= " $c\n"; } $t = xmlsafe( Article::getRevisionText( $s, "" ) ); $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 ); } function xmlsafe( $string ) { # May contain old data which has not been properly normalized. global $wgUseLatin1; if( $wgUseLatin1 ) { $string = preg_replace( '/[\x00-\x08\x0b-\x1f]/', '', $string ); } else { $string = UtfNormal::cleanUp( $string ); } return htmlspecialchars( $string ); } ?>