44 'xmlns' =>
"http://www.mediawiki.org/xml/export-$ver/",
45 'xmlns:xsi' =>
"http://www.w3.org/2001/XMLSchema-instance",
56 'xsi:schemaLocation' =>
"http://www.mediawiki.org/xml/export-$ver/ " .
57 "http://www.mediawiki.org/xml/export-$ver.xsd",
76 return " <siteinfo>\n " .
77 implode(
"\n ", $info ) .
102 return Xml::element(
'generator', [],
"MediaWiki $wgVersion" );
127 $spaces =
"<namespaces>\n";
136 $spaces .=
" </namespaces>";
147 return "</mediawiki>\n";
161 $out .=
' ' .
Xml::element(
'ns', [], strval( $row->page_namespace ) ) .
"\n";
163 if ( $row->page_is_redirect ) {
165 $redirect = $page->getRedirectTarget();
168 $out .=
Xml::element(
'redirect', [
'title' => self::canonicalTitle( $redirect ) ] );
173 if ( $row->page_restrictions !=
'' ) {
175 strval( $row->page_restrictions ) ) .
"\n";
202 $out =
" <revision>\n";
204 if ( isset( $row->rev_parent_id ) && $row->rev_parent_id ) {
205 $out .=
" " .
Xml::element(
'parentid',
null, strval( $row->rev_parent_id ) ) .
"\n";
211 $out .=
" " .
Xml::element(
'contributor', [
'deleted' =>
'deleted' ] ) .
"\n";
216 if ( isset( $row->rev_minor_edit ) && $row->rev_minor_edit ) {
217 $out .=
" <minor/>\n";
223 if ( $comment !=
'' ) {
228 if ( isset( $row->rev_content_model ) && !is_null( $row->rev_content_model ) ) {
229 $content_model = strval( $row->rev_content_model );
238 if ( isset( $row->rev_content_format ) && !is_null( $row->rev_content_format ) ) {
239 $content_format = strval( $row->rev_content_format );
242 $content_format = $content_handler->getDefaultFormat();
245 $out .=
" " .
Xml::element(
'model',
null, strval( $content_model ) ) .
"\n";
246 $out .=
" " .
Xml::element(
'format',
null, strval( $content_format ) ) .
"\n";
251 } elseif ( isset( $row->old_text ) ) {
254 $text = $content_handler->exportTransform( $text, $content_format );
256 [
'xml:space' =>
'preserve',
'bytes' => intval( $row->rev_len ) ],
257 strval( $text ) ) .
"\n";
261 [
'id' => $row->rev_text_id,
'bytes' => intval( $row->rev_len ) ],
265 if ( isset( $row->rev_sha1 )
269 $out .=
" " .
Xml::element(
'sha1',
null, strval( $row->rev_sha1 ) ) .
"\n";
271 $out .=
" <sha1/>\n";
276 Hooks::run(
'XmlDumpWriterWriteRevision', [ &$writer, &
$out, $row, $text ] );
278 $out .=
" </revision>\n";
292 $out =
" <logitem>\n";
298 $out .=
" " .
Xml::element(
'contributor', [
'deleted' =>
'deleted' ] ) .
"\n";
307 if ( $comment !=
'' ) {
312 $out .=
" " .
Xml::element(
'type',
null, strval( $row->log_type ) ) .
"\n";
313 $out .=
" " .
Xml::element(
'action',
null, strval( $row->log_action ) ) .
"\n";
321 [
'xml:space' =>
'preserve' ],
322 strval( $row->log_params ) ) .
"\n";
325 $out .=
" </logitem>\n";
337 return $indent .
Xml::element(
'timestamp',
null, $ts ) .
"\n";
347 $out = $indent .
"<contributor>\n";
354 $out .= $indent .
"</contributor>\n";
365 if ( $row->page_namespace ==
NS_FILE ) {
367 if ( $img && $img->exists() ) {
369 foreach ( array_reverse( $img->getHistory() )
as $ver ) {
385 if ( $file->isOld() ) {
387 Xml::element(
'archivename',
null, $file->getArchiveName() ) .
"\n";
391 if ( $dumpContents ) {
392 $be = $file->getRepo()->getBackend();
393 # Dump file as base64
394 # Uses only XML-safe characters, so does not need escaping
395 # @todo Too bad this loads the contents into memory (script might swap)
396 $contents =
' <contents encoding="base64">' .
397 chunk_split( base64_encode(
398 $be->getFileContents( [
'src' => $file->getPath() ] ) ) ) .
404 $comment =
Xml::element(
'comment', [
'deleted' =>
'deleted' ] );
406 $comment =
Xml::elementClean(
'comment',
null, strval( $file->getDescription() ) );
408 return " <upload>\n" .
410 $this->
writeContributor( $file->getUser(
'id' ), $file->getUser(
'text' ) ) .
411 " " . $comment .
"\n" .
412 " " .
Xml::element(
'filename',
null, $file->getName() ) .
"\n" .
414 " " .
Xml::element(
'src',
null, $file->getCanonicalUrl() ) .
"\n" .
415 " " .
Xml::element(
'size',
null, $file->getSize() ) .
"\n" .
416 " " .
Xml::element(
'sha1base36',
null, $file->getSha1() ) .
"\n" .
417 " " .
Xml::element(
'rel',
null, $file->getRel() ) .
"\n" .
433 if (
$title->isExternal() ) {
434 return $title->getPrefixedText();
443 if ( $prefix !==
'' ) {
447 return $prefix .
$title->getText();