From 30b2813aea4582114c6ec6262d6e70e96c139307 Mon Sep 17 00:00:00 2001 From: Magnus Manske Date: Thu, 23 Mar 2006 08:50:31 +0000 Subject: [PATCH] Special:Export contributor list back in (default:off) Set $wgExportAllowListContributors=true to turn it on --- RELEASE-NOTES | 1 + includes/DefaultSettings.php | 1 + includes/Export.php | 39 ++++++++++++++++++++++++++++++++++-- includes/SpecialExport.php | 6 +++++- 4 files changed, 44 insertions(+), 3 deletions(-) diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 7660375706..1585a8b5ba 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -379,6 +379,7 @@ Special Pages: * JavaScript filter for Special:Allmessages * (bug 3047) Don't mention talk pages on Special:Movepage when there isn't one * Show links to user page, talk page and contributions page on Special:Newpages +* Special:Export can now export a list of all contributors to an article (off by default) Misc.: * PHP 4.1 compatibility fix: don't use new_link parameter to mysql_connect diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 79b6f7f109..d83104f736 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -1390,6 +1390,7 @@ $wgImportSources = array(); * disabled on Wikimedia's sites. */ $wgExportAllowHistory = true; +$wgExportAllowListContributors = false ; /** Text matching this regular expression will be recognised as spam 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..15d11d4c4d 100644 --- a/includes/SpecialExport.php +++ b/includes/SpecialExport.php @@ -30,7 +30,7 @@ require_once( 'Export.php' ); * */ function wfSpecialExport( $page = '' ) { - global $wgOut, $wgRequest; + global $wgOut, $wgRequest, $wgExportAllowListContributors; global $wgExportAllowHistory; if( $wgRequest->getVal( 'action' ) == 'submit') { @@ -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 || !$wgExportAllowListContributors ) $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(); -- 2.20.1