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" );
118 $sensitivity = $wgCapitalLinks ?
'first-letter' :
'case-sensitive';
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";
203 $out =
" <revision>\n";
205 if ( isset( $row->rev_parent_id ) && $row->rev_parent_id ) {
206 $out .=
" " .
Xml::element(
'parentid',
null, strval( $row->rev_parent_id ) ) .
"\n";
212 $out .=
" " .
Xml::element(
'contributor', [
'deleted' =>
'deleted' ] ) .
"\n";
217 if ( isset( $row->rev_minor_edit ) && $row->rev_minor_edit ) {
218 $out .=
" <minor/>\n";
222 } elseif ( $row->rev_comment !=
'' ) {
226 if ( isset( $row->rev_content_model ) && !is_null( $row->rev_content_model ) ) {
227 $content_model = strval( $row->rev_content_model );
236 if ( isset( $row->rev_content_format ) && !is_null( $row->rev_content_format ) ) {
237 $content_format = strval( $row->rev_content_format );
240 $content_format = $content_handler->getDefaultFormat();
243 $out .=
" " .
Xml::element(
'model',
null, strval( $content_model ) ) .
"\n";
244 $out .=
" " .
Xml::element(
'format',
null, strval( $content_format ) ) .
"\n";
249 } elseif ( isset( $row->old_text ) ) {
252 $text = $content_handler->exportTransform( $text, $content_format );
254 [
'xml:space' =>
'preserve',
'bytes' => intval( $row->rev_len ) ],
255 strval( $text ) ) .
"\n";
259 [
'id' => $row->rev_text_id,
'bytes' => intval( $row->rev_len ) ],
263 if ( isset( $row->rev_sha1 )
267 $out .=
" " .
Xml::element(
'sha1',
null, strval( $row->rev_sha1 ) ) .
"\n";
269 $out .=
" <sha1/>\n";
274 Hooks::run(
'XmlDumpWriterWriteRevision', [ &$writer, &
$out, $row, $text ] );
276 $out .=
" </revision>\n";
291 $out =
" <logitem>\n";
297 $out .=
" " .
Xml::element(
'contributor', [
'deleted' =>
'deleted' ] ) .
"\n";
304 } elseif ( $row->log_comment !=
'' ) {
308 $out .=
" " .
Xml::element(
'type',
null, strval( $row->log_type ) ) .
"\n";
309 $out .=
" " .
Xml::element(
'action',
null, strval( $row->log_action ) ) .
"\n";
317 [
'xml:space' =>
'preserve' ],
318 strval( $row->log_params ) ) .
"\n";
321 $out .=
" </logitem>\n";
333 return $indent .
Xml::element(
'timestamp',
null, $ts ) .
"\n";
343 $out = $indent .
"<contributor>\n";
350 $out .= $indent .
"</contributor>\n";
361 if ( $row->page_namespace ==
NS_FILE ) {
363 if ( $img && $img->exists() ) {
365 foreach ( array_reverse( $img->getHistory() )
as $ver ) {
381 if ( $file->isOld() ) {
383 Xml::element(
'archivename',
null, $file->getArchiveName() ) .
"\n";
387 if ( $dumpContents ) {
388 $be = $file->getRepo()->getBackend();
389 # Dump file as base64
390 # Uses only XML-safe characters, so does not need escaping
391 # @todo Too bad this loads the contents into memory (script might swap)
392 $contents =
' <contents encoding="base64">' .
393 chunk_split( base64_encode(
394 $be->getFileContents( [
'src' => $file->getPath() ] ) ) ) .
400 $comment =
Xml::element(
'comment', [
'deleted' =>
'deleted' ] );
404 return " <upload>\n" .
406 $this->
writeContributor( $file->getUser(
'id' ), $file->getUser(
'text' ) ) .
407 " " . $comment .
"\n" .
408 " " .
Xml::element(
'filename',
null, $file->getName() ) .
"\n" .
410 " " .
Xml::element(
'src',
null, $file->getCanonicalUrl() ) .
"\n" .
411 " " .
Xml::element(
'size',
null, $file->getSize() ) .
"\n" .
412 " " .
Xml::element(
'sha1base36',
null, $file->getSha1() ) .
"\n" .
413 " " .
Xml::element(
'rel',
null, $file->getRel() ) .
"\n" .
429 if (
$title->isExternal() ) {
430 return $title->getPrefixedText();
439 if ( $prefix !==
'' ) {
443 return $prefix .
$title->getText();