X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FSpecialExport.php;h=b9f46506f8f0f8478568163a9499c8c561bfe92e;hb=d238b93290c86e2495e3e67d99630d9cdace2471;hp=2c6a2c56596e2802c0023deccf00137160a1b3f8;hpb=14052ee5e5ce0fa7809600f6cc172a39f55b29ad;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/SpecialExport.php b/includes/SpecialExport.php index 2c6a2c5659..b9f46506f8 100644 --- a/includes/SpecialExport.php +++ b/includes/SpecialExport.php @@ -16,13 +16,15 @@ # 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 */ +/** */ +require_once( 'Revision.php' ); + /** * */ @@ -38,16 +40,17 @@ function wfSpecialExport( $page = '' ) { } if( $page != '' ) { + $wgOut->disable(); header( "Content-type: application/xml; charset=utf-8" ); $pages = explode( "\n", $page ); $xml = pages2xml( $pages, $curonly ); echo $xml; - wfAbruptExit(); + return; } $wgOut->addWikiText( wfMsg( "exporttext" ) ); $titleObj = Title::makeTitle( NS_SPECIAL, "Export" ); - $action = $titleObj->escapeLocalURL(); + $action = $titleObj->escapeLocalURL( 'action=submit' ); $wgOut->addHTML( "
@@ -60,6 +63,9 @@ function wfSpecialExport( $page = '' ) { } function pages2xml( $pages, $curonly = false ) { + $fname = 'pages2xml'; + wfProfileIn( $fname ); + global $wgContLanguageCode, $wgInputEncoding, $wgContLang; $xml = "<" . "?xml version=\"1.0\" encoding=\"UTF-8\" ?" . ">\n" . "\n"; @@ -69,73 +75,100 @@ function pages2xml( $pages, $curonly = false ) { $xml .= "\n"; if($wgInputEncoding != "utf-8") $xml = $wgContLang->iconv( $wgInputEncoding, "utf-8", $xml ); + + wfProfileOut( $fname ); return $xml; } function page2xml( $page, $curonly, $full = false ) { global $wgLang; $fname = 'page2xml'; + wfProfileIn( $fname ); $title = Title::NewFromText( $page ); - if( !$title ) return ""; + if( !$title ) { + wfProfileOut( $fname ); + 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 ) { + $s = $dbr->selectRow( 'page', + array( 'page_id', 'page_restrictions' ), + array( 'page_namespace' => $title->getNamespace(), + 'page_title' => $title->getDbkey() ) ); + if( $s ) { $tl = xmlsafe( $title->getPrefixedText() ); $xml = " \n"; $xml .= " $tl\n"; + if( $full ) { - $xml .= " $s->id\n"; + $xml .= " $s->page_id\n"; } - if( $s->restrictions ) { - $xml .= " $s->restrictions\n"; + if( $s->page_restrictions ) { + $xml .= " " . xmlsafe( $s->page_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 ); + if( $curonly ) { + $res = Revision::fetchRevision( $title ); + } else { + $res = Revision::fetchAllRevisions( $title ); + } + if( $res ) { + while( $s = $res->fetchObject() ) { + $rev = new Revision( $s ); + $xml .= revision2xml( $rev, $full, false ); } + $res->free(); } - $xml .= revision2xml( $s, $full, true ); + $xml .= " \n"; + wfProfileOut( $fname ); return $xml; } else { + wfProfileOut( $fname ); return ""; } } -function revision2xml( $s, $full, $cur ) { - $ts = wfTimestamp2ISO8601( $s->timestamp ); +/** + * @return string + * @param Revision $rev + * @param bool $full + * @access private + */ +function revision2xml( $rev, $full ) { + $fname = 'revision2xml'; + wfProfileIn( $fname ); + $xml = " \n"; - if($full && !$cur) - $xml .= " $s->id\n"; + if( $full ) + $xml .= " " . $rev->getId() . "\n"; + + $ts = wfTimestamp2ISO8601( $rev->getTimestamp() ); $xml .= " $ts\n"; - if($s->user) { - $u = "" . xmlsafe( $s->user_text ) . ""; - if($full) - $u .= "$s->user"; + + if( $rev->getUser() ) { + $u = "" . xmlsafe( $rev->getUserText() ) . ""; + if( $full ) + $u .= "" . $rev->getUser() . ""; } else { - $u = "" . xmlsafe( $s->user_text ) . ""; + $u = "" . xmlsafe( $rev->getUserText() ) . ""; } $xml .= " $u\n"; - if( !empty( $s->minor ) ) { + + if( $rev->isMinor() ) { $xml .= " \n"; } - if($s->comment != "") { - $c = xmlsafe( $s->comment ); + if($rev->getComment() != "") { + $c = xmlsafe( $rev->getComment() ); $xml .= " $c\n"; } - $t = xmlsafe( Article::getRevisionText( $s, "" ) ); + + $t = xmlsafe( $rev->getText() ); + $xml .= " $t\n"; $xml .= " \n"; + wfProfileOut( $fname ); return $xml; } @@ -145,14 +178,18 @@ function wfTimestamp2ISO8601( $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 ); + $fname = 'xmlsafe'; + wfProfileIn( $fname ); + + /** + * The page may contain old data which has not been properly normalized. + * Invalid UTF-8 sequences or forbidden control characters will make our + * XML output invalid, so be sure to strip them out. + */ + $string = UtfNormal::cleanUp( $string ); + + $string = htmlspecialchars( $string ); + wfProfileOut( $fname ); + return $string; } - -?> +?> \ No newline at end of file