From: Magnus Manske Date: Wed, 22 Mar 2006 13:17:44 +0000 (+0000) Subject: Special:Export can now return a list of contributors per article, without having to X-Git-Tag: 1.6.0~170 X-Git-Url: http://git.cyclocoop.org/%22%2C%20generer_url_ecrire%28?a=commitdiff_plain;h=c3c7c9db0834fcec05626cf07b80504692d9bbcf;p=lhc%2Fweb%2Fwiklou.git Special:Export can now return a list of contributors per article, without having to dump the entire history. It will not alter or slow exports unless specifically requested. Note that export-0.3.xsd was slightly expanded for this; maybe we should move to 0.4? --- diff --git a/docs/export-0.3.xsd b/docs/export-0.3.xsd index 1e0b7c88f2..aa021fa91a 100644 --- a/docs/export-0.3.xsd +++ b/docs/export-0.3.xsd @@ -101,6 +101,10 @@ + + + + @@ -114,6 +118,15 @@ + + + + + + + + + diff --git a/includes/Export.php b/includes/Export.php index dee2e044c4..1e2ad7f7a5 100644 --- a/includes/Export.php +++ b/includes/Export.php @@ -40,6 +40,10 @@ define( 'MW_EXPORT_STUB', 1 ); * @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 @@ -133,6 +137,30 @@ class WikiExporter { // -------------------- 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 = ""; + $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 .= "" . + "" . + htmlentities( $row->rev_user_text ) . + "" . + "" . + $row->rev_user . + "" . + ""; + } + wfProfileOut( $fname ); + $this->author_list .= ""; + } + function dumpFrom( $cond = '' ) { $fname = 'WikiExporter::dumpFrom'; wfProfileIn( $fname ); @@ -140,10 +168,13 @@ class WikiExporter { $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 ); @@ -179,6 +210,10 @@ class WikiExporter { $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 ); @@ -218,7 +253,7 @@ class WikiExporter { $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(); diff --git a/includes/SpecialExport.php b/includes/SpecialExport.php index fe9a1e343e..acbb836e95 100644 --- a/includes/SpecialExport.php +++ b/includes/SpecialExport.php @@ -44,6 +44,9 @@ function wfSpecialExport( $page = '' ) { # 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(); @@ -53,6 +56,7 @@ function wfSpecialExport( $page = '' ) { $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();