<element name="revision" type="mw:RevisionType" />
<element name="upload" type="mw:UploadType" />
</choice>
+
+ <choice minOccurs="0" maxOccurs="1">
+ <element name="contributors" type="mw:ContributorsType"/>
+ </choice>
</sequence>
</complexType>
<element name="text" type="mw:TextType" />
</sequence>
</complexType>
+
+ <!-- Contributors. Note the plural. For list of contributors when not dumping full article history. -->
+ <complexType name="ContributorsType">
+ <sequence>
+ <choice minOccurs="0" maxOccurs="unbounded">
+ <element name="contributor" type="mw:ContributorType"/>
+ </choice>
+ </sequence>
+ </complexType>
<complexType name="TextType">
<simpleContent>
* @subpackage SpecialPage
*/
class WikiExporter {
+
+ var $list_authors = false ; # Return distinct author list (when not returning full history)
+ var $author_list = "" ;
+
/**
* If using MW_EXPORT_STREAM to stream a large amount of data,
* provide a database connection which is not managed by
// -------------------- private implementation below --------------------
+ # Generates the distinct list of authors of an article
+ # Not called by default (depends on $this->list_authors)
+ # Can be set by Special:Export when not exporting whole history
+ function do_list_authors ( $page , $revision , $cond ) {
+ $fname = "do_list_authors" ;
+ wfProfileIn( $fname );
+ $this->author_list = "<contributors>";
+ $sql = "SELECT DISTINCT rev_user_text,rev_user FROM {$page},{$revision} WHERE page_id=rev_page AND " . $cond ;
+ $result = $this->db->query( $sql, $fname );
+ $resultset = $this->db->resultObject( $result );
+ while( $row = $resultset->fetchObject() ) {
+ $this->author_list .= "<contributor>" .
+ "<username>" .
+ htmlentities( $row->rev_user_text ) .
+ "</username>" .
+ "<id>" .
+ $row->rev_user .
+ "</id>" .
+ "</contributor>";
+ }
+ wfProfileOut( $fname );
+ $this->author_list .= "</contributors>";
+ }
+
function dumpFrom( $cond = '' ) {
$fname = 'WikiExporter::dumpFrom';
wfProfileIn( $fname );
$page = $this->db->tableName( 'page' );
$revision = $this->db->tableName( 'revision' );
$text = $this->db->tableName( 'text' );
-
+
if( $this->history == MW_EXPORT_FULL ) {
$join = 'page_id=rev_page';
} elseif( $this->history == MW_EXPORT_CURRENT ) {
+ if ( $this->list_authors && $cond != '' ) { // List authors, if so desired
+ $this->do_list_authors ( $page , $revision , $cond );
+ }
$join = 'page_id=rev_page AND page_latest=rev_id';
} else {
wfProfileOut( $fname );
$result = $this->db->query( $sql, $fname );
$wrapper = $this->db->resultObject( $result );
$this->outputStream( $wrapper );
+
+ if ( $this->list_authors ) {
+ $this->outputStream( $wrapper );
+ }
if( $this->buffer == MW_EXPORT_STREAM ) {
$this->db->bufferResults( $prev );
$this->sink->writeRevision( $row, $output );
}
if( isset( $last ) ) {
- $output = $this->writer->closePage();
+ $output = $this->author_list . $this->writer->closePage();
$this->sink->writeClosePage( $output );
}
$resultset->free();
# Pre-check the 'current version only' box in the UI
$curonly = true;
}
+
+ $list_authors = $wgRequest->getCheck( 'listauthors' );
+ if ( !$curonly ) $list_authors = false ;
if( $page != '' ) {
$wgOut->disable();
$db =& wfGetDB( DB_SLAVE );
$history = $curonly ? MW_EXPORT_CURRENT : MW_EXPORT_FULL;
$exporter = new WikiExporter( $db, $history );
+ $exporter->list_authors = $list_authors ;
$exporter->openStream();
$exporter->pagesByName( $pages );
$exporter->closeStream();